1This is gcc.info, produced by makeinfo version 5.2 from gcc.texi. 2 3Copyright (C) 1988-2014 Free Software Foundation, Inc. 4 5 Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Funding Free Software", the Front-Cover Texts 9being (a) (see below), and with the Back-Cover Texts being (b) (see 10below). A copy of the license is included in the section entitled "GNU 11Free Documentation License". 12 13 (a) The FSF's Front-Cover Text is: 14 15 A GNU Manual 16 17 (b) The FSF's Back-Cover Text is: 18 19 You have freedom to copy and modify this GNU Manual, like GNU software. 20Copies published by the Free Software Foundation raise funds for GNU 21development. 22INFO-DIR-SECTION Software development 23START-INFO-DIR-ENTRY 24* gcc: (gcc). The GNU Compiler Collection. 25* g++: (gcc). The GNU C++ compiler. 26* gcov: (gcc) Gcov. 'gcov'--a test coverage program. 27END-INFO-DIR-ENTRY 28 29 This file documents the use of the GNU compilers. 30 31 Copyright (C) 1988-2014 Free Software Foundation, Inc. 32 33 Permission is granted to copy, distribute and/or modify this document 34under the terms of the GNU Free Documentation License, Version 1.3 or 35any later version published by the Free Software Foundation; with the 36Invariant Sections being "Funding Free Software", the Front-Cover Texts 37being (a) (see below), and with the Back-Cover Texts being (b) (see 38below). A copy of the license is included in the section entitled "GNU 39Free Documentation License". 40 41 (a) The FSF's Front-Cover Text is: 42 43 A GNU Manual 44 45 (b) The FSF's Back-Cover Text is: 46 47 You have freedom to copy and modify this GNU Manual, like GNU software. 48Copies published by the Free Software Foundation raise funds for GNU 49development. 50 51 52File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 53 54Introduction 55************ 56 57This manual documents how to use the GNU compilers, as well as their 58features and incompatibilities, and how to report bugs. It corresponds 59to the compilers (GCC) version 4.9.2. The internals of the GNU 60compilers, including how to port them to new targets and some 61information about how to write front ends for new languages, are 62documented in a separate manual. *Note Introduction: (gccint)Top. 63 64* Menu: 65 66* G++ and GCC:: You can compile C or C++ programs. 67* Standards:: Language standards supported by GCC. 68* Invoking GCC:: Command options supported by 'gcc'. 69* C Implementation:: How GCC implements the ISO C specification. 70* C++ Implementation:: How GCC implements the ISO C++ specification. 71* C Extensions:: GNU extensions to the C language family. 72* C++ Extensions:: GNU extensions to the C++ language. 73* Objective-C:: GNU Objective-C runtime features. 74* Compatibility:: Binary Compatibility 75* Gcov:: 'gcov'--a test coverage program. 76* Trouble:: If you have trouble using GCC. 77* Bugs:: How, why and where to report bugs. 78* Service:: How To Get Help with GCC 79* Contributing:: How to contribute to testing and developing GCC. 80 81* Funding:: How to help assure funding for free software. 82* GNU Project:: The GNU Project and GNU/Linux. 83 84* Copying:: GNU General Public License says 85 how you can copy and share GCC. 86* GNU Free Documentation License:: How you can copy and share this manual. 87* Contributors:: People who have contributed to GCC. 88 89* Option Index:: Index to command line options. 90* Keyword Index:: Index of concepts and symbol names. 91 92 93File: gcc.info, Node: G++ and GCC, Next: Standards, Up: Top 94 951 Programming Languages Supported by GCC 96**************************************** 97 98GCC stands for "GNU Compiler Collection". GCC is an integrated 99distribution of compilers for several major programming languages. 100These languages currently include C, C++, Objective-C, Objective-C++, 101Java, Fortran, Ada, and Go. 102 103 The abbreviation "GCC" has multiple meanings in common use. The 104current official meaning is "GNU Compiler Collection", which refers 105generically to the complete suite of tools. The name historically stood 106for "GNU C Compiler", and this usage is still common when the emphasis 107is on compiling C programs. Finally, the name is also used when 108speaking of the "language-independent" component of GCC: code shared 109among the compilers for all supported languages. 110 111 The language-independent component of GCC includes the majority of the 112optimizers, as well as the "back ends" that generate machine code for 113various processors. 114 115 The part of a compiler that is specific to a particular language is 116called the "front end". In addition to the front ends that are 117integrated components of GCC, there are several other front ends that 118are maintained separately. These support languages such as Pascal, 119Mercury, and COBOL. To use these, they must be built together with GCC 120proper. 121 122 Most of the compilers for languages other than C have their own names. 123The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 124talk about compiling one of those languages, we might refer to that 125compiler by its own name, or as GCC. Either is correct. 126 127 Historically, compilers for many languages, including C++ and Fortran, 128have been implemented as "preprocessors" which emit another high level 129language such as C. None of the compilers included in GCC are 130implemented this way; they all generate machine code directly. This 131sort of preprocessor should not be confused with the "C preprocessor", 132which is an integral feature of the C, C++, Objective-C and 133Objective-C++ languages. 134 135 136File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 137 1382 Language Standards Supported by GCC 139************************************* 140 141For each language compiled by GCC for which there is a standard, GCC 142attempts to follow one or more versions of that standard, possibly with 143some exceptions, and possibly with some extensions. 144 1452.1 C language 146============== 147 148GCC supports three versions of the C standard, although support for the 149most recent version is not yet complete. 150 151 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 152published in 1990. This standard was ratified as an ISO standard 153(ISO/IEC 9899:1990) later in 1990. There were no technical differences 154between these publications, although the sections of the ANSI standard 155were renumbered and became clauses in the ISO standard. This standard, 156in both its forms, is commonly known as "C89", or occasionally as "C90", 157from the dates of ratification. The ANSI standard, but not the ISO 158standard, also came with a Rationale document. To select this standard 159in GCC, use one of the options '-ansi', '-std=c90' or 160'-std=iso9899:1990'; to obtain all the diagnostics required by the 161standard, you should also specify '-pedantic' (or '-pedantic-errors' if 162you want them to be errors rather than warnings). *Note Options 163Controlling C Dialect: C Dialect Options. 164 165 Errors in the 1990 ISO C standard were corrected in two Technical 166Corrigenda published in 1994 and 1996. GCC does not support the 167uncorrected version. 168 169 An amendment to the 1990 standard was published in 1995. This 170amendment added digraphs and '__STDC_VERSION__' to the language, but 171otherwise concerned the library. This amendment is commonly known as 172"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 173select this standard in GCC, use the option '-std=iso9899:199409' (with, 174as for other standard versions, '-pedantic' to receive all required 175diagnostics). 176 177 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1789899:1999, and is commonly known as "C99". GCC has substantially 179complete support for this standard version; see 180<http://gcc.gnu.org/c99status.html> for details. To select this 181standard, use '-std=c99' or '-std=iso9899:1999'. (While in development, 182drafts of this standard version were referred to as "C9X".) 183 184 Errors in the 1999 ISO C standard were corrected in three Technical 185Corrigenda published in 2001, 2004 and 2007. GCC does not support the 186uncorrected version. 187 188 A fourth version of the C standard, known as "C11", was published in 1892011 as ISO/IEC 9899:2011. GCC has substantially complete support for 190this standard, enabled with '-std=c11' or '-std=iso9899:2011'. (While 191in development, drafts of this standard version were referred to as 192"C1X".) 193 194 By default, GCC provides some extensions to the C language that on rare 195occasions conflict with the C standard. *Note Extensions to the C 196Language Family: C Extensions. Use of the '-std' options listed above 197will disable these extensions where they conflict with the C standard 198version selected. You may also select an extended version of the C 199language explicitly with '-std=gnu90' (for C90 with GNU extensions), 200'-std=gnu99' (for C99 with GNU extensions) or '-std=gnu11' (for C11 with 201GNU extensions). The default, if no C language dialect options are 202given, is '-std=gnu90'; this is intended to change to '-std=gnu11' in 203some future release. Some features that are part of the C99 standard 204are accepted as extensions in C90 mode, and some features that are part 205of the C11 standard are accepted as extensions in C90 and C99 modes. 206 207 The ISO C standard defines (in clause 4) two classes of conforming 208implementation. A "conforming hosted implementation" supports the whole 209standard including all the library facilities; a "conforming 210freestanding implementation" is only required to provide certain library 211facilities: those in '<float.h>', '<limits.h>', '<stdarg.h>', and 212'<stddef.h>'; since AMD1, also those in '<iso646.h>'; since C99, also 213those in '<stdbool.h>' and '<stdint.h>'; and since C11, also those in 214'<stdalign.h>' and '<stdnoreturn.h>'. In addition, complex types, added 215in C99, are not required for freestanding implementations. The standard 216also defines two environments for programs, a "freestanding 217environment", required of all implementations and which may not have 218library facilities beyond those required of freestanding 219implementations, where the handling of program startup and termination 220are implementation-defined, and a "hosted environment", which is not 221required, in which all the library facilities are provided and startup 222is through a function 'int main (void)' or 'int main (int, char *[])'. 223An OS kernel would be a freestanding environment; a program using the 224facilities of an operating system would normally be in a hosted 225implementation. 226 227 GCC aims towards being usable as a conforming freestanding 228implementation, or as the compiler for a conforming hosted 229implementation. By default, it will act as the compiler for a hosted 230implementation, defining '__STDC_HOSTED__' as '1' and presuming that 231when the names of ISO C functions are used, they have the semantics 232defined in the standard. To make it act as a conforming freestanding 233implementation for a freestanding environment, use the option 234'-ffreestanding'; it will then define '__STDC_HOSTED__' to '0' and not 235make assumptions about the meanings of function names from the standard 236library, with exceptions noted below. To build an OS kernel, you may 237well still need to make your own arrangements for linking and startup. 238*Note Options Controlling C Dialect: C Dialect Options. 239 240 GCC does not provide the library facilities required only of hosted 241implementations, nor yet all the facilities required by C99 of 242freestanding implementations on all platforms; to use the facilities of 243a hosted environment, you will need to find them elsewhere (for example, 244in the GNU C library). *Note Standard Libraries: Standard Libraries. 245 246 Most of the compiler support routines used by GCC are present in 247'libgcc', but there are a few exceptions. GCC requires the freestanding 248environment provide 'memcpy', 'memmove', 'memset' and 'memcmp'. 249Finally, if '__builtin_trap' is used, and the target does not implement 250the 'trap' pattern, then GCC will emit a call to 'abort'. 251 252 For references to Technical Corrigenda, Rationale documents and 253information concerning the history of C that is available online, see 254<http://gcc.gnu.org/readings.html> 255 2562.2 C++ language 257================ 258 259GCC supports the original ISO C++ standard (1998) and contains 260experimental support for the second ISO C++ standard (2011). 261 262 The original ISO C++ standard was published as the ISO standard 263(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2642003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 265C++03, respectively. GCC implements the majority of C++98 ('export' is 266a notable exception) and most of the changes in C++03. To select this 267standard in GCC, use one of the options '-ansi', '-std=c++98', or 268'-std=c++03'; to obtain all the diagnostics required by the standard, 269you should also specify '-pedantic' (or '-pedantic-errors' if you want 270them to be errors rather than warnings). 271 272 A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011, 273and is referred to as C++11; before its publication it was commonly 274referred to as C++0x. C++11 contains several changes to the C++ 275language, most of which have been implemented in an experimental C++11 276mode in GCC. For information regarding the C++11 features available in 277the experimental C++11 mode, see 278<http://gcc.gnu.org/projects/cxx0x.html>. To select this standard in 279GCC, use the option '-std=c++11'; to obtain all the diagnostics required 280by the standard, you should also specify '-pedantic' (or 281'-pedantic-errors' if you want them to be errors rather than warnings). 282 283 More information about the C++ standards is available on the ISO C++ 284committee's web site at <http://www.open-std.org/jtc1/sc22/wg21/>. 285 286 By default, GCC provides some extensions to the C++ language; *Note 287Options Controlling C++ Dialect: C++ Dialect Options. Use of the '-std' 288option listed above will disable these extensions. You may also select 289an extended version of the C++ language explicitly with '-std=gnu++98' 290(for C++98 with GNU extensions) or '-std=gnu++11' (for C++11 with GNU 291extensions). The default, if no C++ language dialect options are given, 292is '-std=gnu++98'. 293 2942.3 Objective-C and Objective-C++ languages 295=========================================== 296 297GCC supports "traditional" Objective-C (also known as "Objective-C 1.0") 298and contains support for the Objective-C exception and synchronization 299syntax. It has also support for a number of "Objective-C 2.0" language 300extensions, including properties, fast enumeration (only for 301Objective-C), method attributes and the @optional and @required keywords 302in protocols. GCC supports Objective-C++ and features available in 303Objective-C are also available in Objective-C++. 304 305 GCC by default uses the GNU Objective-C runtime library, which is part 306of GCC and is not the same as the Apple/NeXT Objective-C runtime library 307used on Apple systems. There are a number of differences documented in 308this manual. The options '-fgnu-runtime' and '-fnext-runtime' allow you 309to switch between producing output that works with the GNU Objective-C 310runtime library and output that works with the Apple/NeXT Objective-C 311runtime library. 312 313 There is no formal written standard for Objective-C or Objective-C++. 314The authoritative manual on traditional Objective-C (1.0) is 315"Object-Oriented Programming and the Objective-C Language", available at 316a number of web sites: 317 * <http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf> 318 is the original NeXTstep document; 319 * <http://objc.toodarkpark.net> is the same document in another 320 format; 321 * 322 <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> 323 has an updated version but make sure you search for "Object 324 Oriented Programming and the Objective-C Programming Language 1.0", 325 not documentation on the newer "Objective-C 2.0" language 326 327 The Objective-C exception and synchronization syntax (that is, the 328keywords @try, @throw, @catch, @finally and @synchronized) is supported 329by GCC and is enabled with the option '-fobjc-exceptions'. The syntax 330is briefly documented in this manual and in the Objective-C 2.0 manuals 331from Apple. 332 333 The Objective-C 2.0 language extensions and features are automatically 334enabled; they include properties (via the @property, @synthesize and 335@dynamic keywords), fast enumeration (not available in Objective-C++), 336attributes for methods (such as deprecated, noreturn, sentinel, format), 337the unused attribute for method arguments, the @package keyword for 338instance variables and the @optional and @required keywords in 339protocols. You can disable all these Objective-C 2.0 language 340extensions with the option '-fobjc-std=objc1', which causes the compiler 341to recognize the same Objective-C language syntax recognized by GCC 4.0, 342and to produce an error if one of the new features is used. 343 344 GCC has currently no support for non-fragile instance variables. 345 346 The authoritative manual on Objective-C 2.0 is available from Apple: 347 * 348 <http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/> 349 350 For more information concerning the history of Objective-C that is 351available online, see <http://gcc.gnu.org/readings.html> 352 3532.4 Go language 354=============== 355 356As of the GCC 4.7.1 release, GCC supports the Go 1 language standard, 357described at <http://golang.org/doc/go1.html>. 358 3592.5 References for other languages 360================================== 361 362*Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 363conformance and compatibility of the Ada compiler. 364 365 *Note Standards: (gfortran)Standards, for details of standards 366supported by GNU Fortran. 367 368 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 369details of compatibility between 'gcj' and the Java Platform. 370 371 372File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 373 3743 GCC Command Options 375********************* 376 377When you invoke GCC, it normally does preprocessing, compilation, 378assembly and linking. The "overall options" allow you to stop this 379process at an intermediate stage. For example, the '-c' option says not 380to run the linker. Then the output consists of object files output by 381the assembler. 382 383 Other options are passed on to one stage of processing. Some options 384control the preprocessor and others the compiler itself. Yet other 385options control the assembler and linker; most of these are not 386documented here, since you rarely need to use any of them. 387 388 Most of the command-line options that you can use with GCC are useful 389for C programs; when an option is only useful with another language 390(usually C++), the explanation says so explicitly. If the description 391for a particular option does not mention a source language, you can use 392that option with all supported languages. 393 394 *Note Compiling C++ Programs: Invoking G++, for a summary of special 395options for compiling C++ programs. 396 397 The 'gcc' program accepts options and file names as operands. Many 398options have multi-letter names; therefore multiple single-letter 399options may _not_ be grouped: '-dv' is very different from '-d -v'. 400 401 You can mix options and other arguments. For the most part, the order 402you use doesn't matter. Order does matter when you use several options 403of the same kind; for example, if you specify '-L' more than once, the 404directories are searched in the order specified. Also, the placement of 405the '-l' option is significant. 406 407 Many options have long names starting with '-f' or with '-W'--for 408example, '-fmove-loop-invariants', '-Wformat' and so on. Most of these 409have both positive and negative forms; the negative form of '-ffoo' is 410'-fno-foo'. This manual documents only one of these two forms, 411whichever one is not the default. 412 413 *Note Option Index::, for an index to GCC's options. 414 415* Menu: 416 417* Option Summary:: Brief list of all options, without explanations. 418* Overall Options:: Controlling the kind of output: 419 an executable, object files, assembler files, 420 or preprocessed source. 421* Invoking G++:: Compiling C++ programs. 422* C Dialect Options:: Controlling the variant of C language compiled. 423* C++ Dialect Options:: Variations on C++. 424* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 425 and Objective-C++. 426* Language Independent Options:: Controlling how diagnostics should be 427 formatted. 428* Warning Options:: How picky should the compiler be? 429* Debugging Options:: Symbol tables, measurements, and debugging dumps. 430* Optimize Options:: How much optimization? 431* Preprocessor Options:: Controlling header files and macro definitions. 432 Also, getting dependency information for Make. 433* Assembler Options:: Passing options to the assembler. 434* Link Options:: Specifying libraries and so on. 435* Directory Options:: Where to find header files and libraries. 436 Where to find the compiler executable files. 437* Spec Files:: How to pass switches to sub-processes. 438* Target Options:: Running a cross-compiler, or an old version of GCC. 439* Submodel Options:: Specifying minor hardware or convention variations, 440 such as 68010 vs 68020. 441* Code Gen Options:: Specifying conventions for function calls, data layout 442 and register usage. 443* Environment Variables:: Env vars that affect GCC. 444* Precompiled Headers:: Compiling a header once, and using it many times. 445 446 447File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 448 4493.1 Option Summary 450================== 451 452Here is a summary of all the options, grouped by type. Explanations are 453in the following sections. 454 455_Overall Options_ 456 *Note Options Controlling the Kind of Output: Overall Options. 457 -c -S -E -o FILE -no-canonical-prefixes 458 -pipe -pass-exit-codes 459 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 460 --version -wrapper @FILE -fplugin=FILE -fplugin-arg-NAME=ARG 461 -fdump-ada-spec[-slim] -fada-spec-parent=UNIT -fdump-go-spec=FILE 462 463_C Language Options_ 464 *Note Options Controlling C Dialect: C Dialect Options. 465 -ansi -std=STANDARD -fgnu89-inline 466 -aux-info FILENAME -fallow-parameterless-variadic-functions 467 -fno-asm -fno-builtin -fno-builtin-FUNCTION 468 -fhosted -ffreestanding -fopenmp -fopenmp-simd -fms-extensions 469 -fplan9-extensions -trigraphs -traditional -traditional-cpp 470 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 471 -fsigned-bitfields -fsigned-char 472 -funsigned-bitfields -funsigned-char 473 474_C++ Language Options_ 475 *Note Options Controlling C++ Dialect: C++ Dialect Options. 476 -fabi-version=N -fno-access-control -fcheck-new 477 -fconstexpr-depth=N -ffriend-injection 478 -fno-elide-constructors 479 -fno-enforce-eh-specs 480 -ffor-scope -fno-for-scope -fno-gnu-keywords 481 -fno-implicit-templates 482 -fno-implicit-inline-templates 483 -fno-implement-inlines -fms-extensions 484 -fno-nonansi-builtins -fnothrow-opt -fno-operator-names 485 -fno-optional-diags -fpermissive 486 -fno-pretty-templates 487 -frepo -fno-rtti -fstats -ftemplate-backtrace-limit=N 488 -ftemplate-depth=N 489 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 490 -fvisibility-inlines-hidden 491 -fvtable-verify=STD|PREINIT|NONE 492 -fvtv-counts -fvtv-debug 493 -fvisibility-ms-compat 494 -fext-numeric-literals 495 -Wabi -Wconversion-null -Wctor-dtor-privacy 496 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing 497 -Wnoexcept -Wnon-virtual-dtor -Wreorder 498 -Weffc++ -Wstrict-null-sentinel 499 -Wno-non-template-friend -Wold-style-cast 500 -Woverloaded-virtual -Wno-pmf-conversions 501 -Wsign-promo 502 503_Objective-C and Objective-C++ Language Options_ 504 *Note Options Controlling Objective-C and Objective-C++ Dialects: 505 Objective-C and Objective-C++ Dialect Options. 506 -fconstant-string-class=CLASS-NAME 507 -fgnu-runtime -fnext-runtime 508 -fno-nil-receivers 509 -fobjc-abi-version=N 510 -fobjc-call-cxx-cdtors 511 -fobjc-direct-dispatch 512 -fobjc-exceptions 513 -fobjc-gc 514 -fobjc-nilcheck 515 -fobjc-std=objc1 516 -freplace-objc-classes 517 -fzero-link 518 -gen-decls 519 -Wassign-intercept 520 -Wno-protocol -Wselector 521 -Wstrict-selector-match 522 -Wundeclared-selector 523 524_Language Independent Options_ 525 *Note Options to Control Diagnostic Messages Formatting: Language 526 Independent Options. 527 -fmessage-length=N 528 -fdiagnostics-show-location=[once|every-line] 529 -fdiagnostics-color=[auto|never|always] 530 -fno-diagnostics-show-option -fno-diagnostics-show-caret 531 532_Warning Options_ 533 *Note Options to Request or Suppress Warnings: Warning Options. 534 -fsyntax-only -fmax-errors=N -Wpedantic 535 -pedantic-errors 536 -w -Wextra -Wall -Waddress -Waggregate-return 537 -Waggressive-loop-optimizations -Warray-bounds 538 -Wno-attributes -Wno-builtin-macro-redefined 539 -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual 540 -Wchar-subscripts -Wclobbered -Wcomment -Wconditionally-supported 541 -Wconversion -Wcoverage-mismatch -Wdate-time -Wdelete-incomplete -Wno-cpp 542 -Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization 543 -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare 544 -Wno-endif-labels -Werror -Werror=* 545 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 546 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 547 -Wformat-security -Wformat-y2k 548 -Wframe-larger-than=LEN -Wno-free-nonheap-object -Wjump-misses-init 549 -Wignored-qualifiers 550 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 551 -Winit-self -Winline -Wmaybe-uninitialized 552 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 553 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 554 -Wlogical-op -Wlong-long 555 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 556 -Wmissing-include-dirs 557 -Wno-multichar -Wnonnull -Wno-overflow -Wopenmp-simd 558 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 559 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 560 -Wpointer-arith -Wno-pointer-to-int-cast 561 -Wredundant-decls -Wno-return-local-addr 562 -Wreturn-type -Wsequence-point -Wshadow 563 -Wsign-compare -Wsign-conversion -Wfloat-conversion 564 -Wsizeof-pointer-memaccess 565 -Wstack-protector -Wstack-usage=LEN -Wstrict-aliasing 566 -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=N 567 -Wsuggest-attribute=[pure|const|noreturn|format] 568 -Wmissing-format-attribute 569 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 570 -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype-limits -Wundef 571 -Wuninitialized -Wunknown-pragmas -Wno-pragmas 572 -Wunsuffixed-float-constants -Wunused -Wunused-function 573 -Wunused-label -Wunused-local-typedefs -Wunused-parameter 574 -Wno-unused-result -Wunused-value -Wunused-variable 575 -Wunused-but-set-parameter -Wunused-but-set-variable 576 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance 577 -Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-constant 578 579_C and Objective-C-only Warning Options_ 580 -Wbad-function-cast -Wmissing-declarations 581 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 582 -Wold-style-declaration -Wold-style-definition 583 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 584 -Wdeclaration-after-statement -Wpointer-sign 585 586_Debugging Options_ 587 *Note Options for Debugging Your Program or GCC: Debugging Options. 588 -dLETTERS -dumpspecs -dumpmachine -dumpversion 589 -fsanitize=STYLE 590 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 591 -fdisable-ipa-PASS_NAME 592 -fdisable-rtl-PASS_NAME 593 -fdisable-rtl-PASS-NAME=RANGE-LIST 594 -fdisable-tree-PASS_NAME 595 -fdisable-tree-PASS-NAME=RANGE-LIST 596 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 597 -fdump-translation-unit[-N] 598 -fdump-class-hierarchy[-N] 599 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 600 -fdump-passes 601 -fdump-statistics 602 -fdump-tree-all 603 -fdump-tree-original[-N] 604 -fdump-tree-optimized[-N] 605 -fdump-tree-cfg -fdump-tree-alias 606 -fdump-tree-ch 607 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 608 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 609 -fdump-tree-gimple[-raw] 610 -fdump-tree-dom[-N] 611 -fdump-tree-dse[-N] 612 -fdump-tree-phiprop[-N] 613 -fdump-tree-phiopt[-N] 614 -fdump-tree-forwprop[-N] 615 -fdump-tree-copyrename[-N] 616 -fdump-tree-nrv -fdump-tree-vect 617 -fdump-tree-sink 618 -fdump-tree-sra[-N] 619 -fdump-tree-forwprop[-N] 620 -fdump-tree-fre[-N] 621 -fdump-tree-vtable-verify 622 -fdump-tree-vrp[-N] 623 -fdump-tree-storeccp[-N] 624 -fdump-final-insns=FILE 625 -fcompare-debug[=OPTS] -fcompare-debug-second 626 -feliminate-dwarf2-dups -fno-eliminate-unused-debug-types 627 -feliminate-unused-debug-symbols -femit-class-debug-always 628 -fenable-KIND-PASS 629 -fenable-KIND-PASS=RANGE-LIST 630 -fdebug-types-section -fmem-report-wpa 631 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 632 -fopt-info 633 -fopt-info-OPTIONS[=FILE] 634 -frandom-seed=STRING -fsched-verbose=N 635 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 636 -fstack-usage -ftest-coverage -ftime-report -fvar-tracking 637 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 638 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 639 -ggdb -grecord-gcc-switches -gno-record-gcc-switches 640 -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 641 -gvms -gxcoff -gxcoff+ 642 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 643 -fdebug-prefix-map=OLD=NEW 644 -femit-struct-debug-baseonly -femit-struct-debug-reduced 645 -femit-struct-debug-detailed[=SPEC-LIST] 646 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 647 -print-multi-directory -print-multi-lib -print-multi-os-directory 648 -print-prog-name=PROGRAM -print-search-dirs -Q 649 -print-sysroot -print-sysroot-headers-suffix 650 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 651 652_Optimization Options_ 653 *Note Options that Control Optimization: Optimize Options. 654 -faggressive-loop-optimizations -falign-functions[=N] 655 -falign-jumps[=N] 656 -falign-labels[=N] -falign-loops[=N] 657 -fassociative-math -fauto-inc-dec -fbranch-probabilities 658 -fbranch-target-load-optimize -fbranch-target-load-optimize2 659 -fbtr-bb-exclusive -fcaller-saves 660 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack 661 -fcompare-elim -fcprop-registers -fcrossjumping 662 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules 663 -fcx-limited-range 664 -fdata-sections -fdce -fdelayed-branch 665 -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively -fdse 666 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects 667 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 668 -fforward-propagate -ffp-contract=STYLE -ffunction-sections 669 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity 670 -fgcse-sm -fhoist-adjacent-loads -fif-conversion 671 -fif-conversion2 -findirect-inlining 672 -finline-functions -finline-functions-called-once -finline-limit=N 673 -finline-small-functions -fipa-cp -fipa-cp-clone 674 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference 675 -fira-algorithm=ALGORITHM 676 -fira-region=REGION -fira-hoist-pressure 677 -fira-loop-pressure -fno-ira-share-save-slots 678 -fno-ira-share-spill-slots -fira-verbose=N 679 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute 680 -fivopts -fkeep-inline-functions -fkeep-static-consts -flive-range-shrinkage 681 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize 682 -floop-parallelize-all -flto -flto-compression-level 683 -flto-partition=ALG -flto-report -flto-report-wpa -fmerge-all-constants 684 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves 685 -fmove-loop-invariants -fno-branch-count-reg 686 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 687 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 688 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 689 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 690 -fomit-frame-pointer -foptimize-sibling-calls 691 -fpartial-inlining -fpeel-loops -fpredictive-commoning 692 -fprefetch-loop-arrays -fprofile-report 693 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 694 -fprofile-generate=PATH 695 -fprofile-use -fprofile-use=PATH -fprofile-values -fprofile-reorder-functions 696 -freciprocal-math -free -frename-registers -freorder-blocks 697 -freorder-blocks-and-partition -freorder-functions 698 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 699 -frounding-math -fsched2-use-superblocks -fsched-pressure 700 -fsched-spec-load -fsched-spec-load-dangerous 701 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 702 -fsched-group-heuristic -fsched-critical-path-heuristic 703 -fsched-spec-insn-heuristic -fsched-rank-heuristic 704 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 705 -fschedule-insns -fschedule-insns2 -fsection-anchors 706 -fselective-scheduling -fselective-scheduling2 707 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 708 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant 709 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector 710 -fstack-protector-all -fstack-protector-strong -fstrict-aliasing 711 -fstrict-overflow -fthread-jumps -ftracer -ftree-bit-ccp 712 -ftree-builtin-call-dce -ftree-ccp -ftree-ch 713 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop 714 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 715 -ftree-forwprop -ftree-fre -ftree-loop-if-convert 716 -ftree-loop-if-convert-stores -ftree-loop-im 717 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns 718 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 719 -ftree-loop-vectorize 720 -ftree-parallelize-loops=N -ftree-pre -ftree-partial-pre -ftree-pta 721 -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra 722 -ftree-switch-conversion -ftree-tail-merge -ftree-ter 723 -ftree-vectorize -ftree-vrp 724 -funit-at-a-time -funroll-all-loops -funroll-loops 725 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 726 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 727 -fwhole-program -fwpa -fuse-ld=LINKER -fuse-linker-plugin 728 --param NAME=VALUE 729 -O -O0 -O1 -O2 -O3 -Os -Ofast -Og 730 731_Preprocessor Options_ 732 *Note Options Controlling the Preprocessor: Preprocessor Options. 733 -AQUESTION=ANSWER 734 -A-QUESTION[=ANSWER] 735 -C -dD -dI -dM -dN 736 -DMACRO[=DEFN] -E -H 737 -idirafter DIR 738 -include FILE -imacros FILE 739 -iprefix FILE -iwithprefix DIR 740 -iwithprefixbefore DIR -isystem DIR 741 -imultilib DIR -isysroot DIR 742 -M -MM -MF -MG -MP -MQ -MT -nostdinc 743 -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory 744 -remap -trigraphs -undef -UMACRO 745 -Wp,OPTION -Xpreprocessor OPTION -no-integrated-cpp 746 747_Assembler Option_ 748 *Note Passing Options to the Assembler: Assembler Options. 749 -Wa,OPTION -Xassembler OPTION 750 751_Linker Options_ 752 *Note Options for Linking: Link Options. 753 OBJECT-FILE-NAME -lLIBRARY 754 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 755 -s -static -static-libgcc -static-libstdc++ 756 -static-libasan -static-libtsan -static-liblsan -static-libubsan 757 -shared -shared-libgcc -symbolic 758 -T SCRIPT -Wl,OPTION -Xlinker OPTION 759 -u SYMBOL 760 761_Directory Options_ 762 *Note Options for Directory Search: Directory Options. 763 -BPREFIX -IDIR -iplugindir=DIR 764 -iquoteDIR -LDIR -specs=FILE -I- 765 --sysroot=DIR --no-sysroot-suffix 766 767_Machine Dependent Options_ 768 *Note Hardware Models and Configurations: Submodel Options. 769 770 _AArch64 Options_ 771 -mabi=NAME -mbig-endian -mlittle-endian 772 -mgeneral-regs-only 773 -mcmodel=tiny -mcmodel=small -mcmodel=large 774 -mstrict-align 775 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 776 -mtls-dialect=desc -mtls-dialect=traditional 777 -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 778 -march=NAME -mcpu=NAME -mtune=NAME 779 780 _Adapteva Epiphany Options_ 781 -mhalf-reg-file -mprefer-short-insn-regs 782 -mbranch-cost=NUM -mcmove -mnops=NUM -msoft-cmpsf 783 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=NUM 784 -mround-nearest -mlong-calls -mshort-calls -msmall16 785 -mfp-mode=MODE -mvect-double -max-vect-align=NUM 786 -msplit-vecmove-early -m1reg-REG 787 788 _ARC Options_ 789 -mbarrel-shifter 790 -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 791 -mdpfp -mdpfp-compact -mdpfp-fast -mno-dpfp-lrsr 792 -mea -mno-mpy -mmul32x16 -mmul64 793 -mnorm -mspfp -mspfp-compact -mspfp-fast -msimd -msoft-float -mswap 794 -mcrc -mdsp-packa -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -mswape 795 -mtelephony -mxy -misize -mannotate-align -marclinux -marclinux_prof 796 -mepilogue-cfi -mlong-calls -mmedium-calls -msdata 797 -mucb-mcount -mvolatile-cache 798 -malign-call -mauto-modify-reg -mbbit-peephole -mno-brcc 799 -mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi 800 -mexpand-adddi -mindexed-loads -mlra -mlra-priority-none 801 -mlra-priority-compact mlra-priority-noncompact -mno-millicode 802 -mmixed-code -mq-class -mRcq -mRcw -msize-level=LEVEL 803 -mtune=CPU -mmultcost=NUM -munalign-prob-threshold=PROBABILITY 804 805 _ARM Options_ 806 -mapcs-frame -mno-apcs-frame 807 -mabi=NAME 808 -mapcs-stack-check -mno-apcs-stack-check 809 -mapcs-float -mno-apcs-float 810 -mapcs-reentrant -mno-apcs-reentrant 811 -msched-prolog -mno-sched-prolog 812 -mlittle-endian -mbig-endian -mwords-little-endian 813 -mfloat-abi=NAME 814 -mfp16-format=NAME 815 -mthumb-interwork -mno-thumb-interwork 816 -mcpu=NAME -march=NAME -mfpu=NAME 817 -mstructure-size-boundary=N 818 -mabort-on-noreturn 819 -mlong-calls -mno-long-calls 820 -msingle-pic-base -mno-single-pic-base 821 -mpic-register=REG 822 -mnop-fun-dllimport 823 -mpoke-function-name 824 -mthumb -marm 825 -mtpcs-frame -mtpcs-leaf-frame 826 -mcaller-super-interworking -mcallee-super-interworking 827 -mtp=NAME -mtls-dialect=DIALECT 828 -mword-relocations 829 -mfix-cortex-m3-ldrd 830 -munaligned-access 831 -mneon-for-64bits 832 -mslow-flash-data 833 -mrestrict-it 834 835 _AVR Options_ 836 -mmcu=MCU -maccumulate-args -mbranch-cost=COST 837 -mcall-prologues -mint8 -mno-interrupts -mrelax 838 -mstrict-X -mtiny-stack -Waddr-space-convert 839 840 _Blackfin Options_ 841 -mcpu=CPU[-SIREVISION] 842 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 843 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 844 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 845 -mno-id-shared-library -mshared-library-id=N 846 -mleaf-id-shared-library -mno-leaf-id-shared-library 847 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 848 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 849 -micplb 850 851 _C6X Options_ 852 -mbig-endian -mlittle-endian -march=CPU 853 -msim -msdata=SDATA-TYPE 854 855 _CRIS Options_ 856 -mcpu=CPU -march=CPU -mtune=CPU 857 -mmax-stack-frame=N -melinux-stacksize=N 858 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 859 -mstack-align -mdata-align -mconst-align 860 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 861 -melf -maout -melinux -mlinux -sim -sim2 862 -mmul-bug-workaround -mno-mul-bug-workaround 863 864 _CR16 Options_ 865 -mmac 866 -mcr16cplus -mcr16c 867 -msim -mint32 -mbit-ops 868 -mdata-model=MODEL 869 870 _Darwin Options_ 871 -all_load -allowable_client -arch -arch_errors_fatal 872 -arch_only -bind_at_load -bundle -bundle_loader 873 -client_name -compatibility_version -current_version 874 -dead_strip 875 -dependency-file -dylib_file -dylinker_install_name 876 -dynamic -dynamiclib -exported_symbols_list 877 -filelist -flat_namespace -force_cpusubtype_ALL 878 -force_flat_namespace -headerpad_max_install_names 879 -iframework 880 -image_base -init -install_name -keep_private_externs 881 -multi_module -multiply_defined -multiply_defined_unused 882 -noall_load -no_dead_strip_inits_and_terms 883 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 884 -pagezero_size -prebind -prebind_all_twolevel_modules 885 -private_bundle -read_only_relocs -sectalign 886 -sectobjectsymbols -whyload -seg1addr 887 -sectcreate -sectobjectsymbols -sectorder 888 -segaddr -segs_read_only_addr -segs_read_write_addr 889 -seg_addr_table -seg_addr_table_filename -seglinkedit 890 -segprot -segs_read_only_addr -segs_read_write_addr 891 -single_module -static -sub_library -sub_umbrella 892 -twolevel_namespace -umbrella -undefined 893 -unexported_symbols_list -weak_reference_mismatches 894 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 895 -mkernel -mone-byte-bool 896 897 _DEC Alpha Options_ 898 -mno-fp-regs -msoft-float 899 -mieee -mieee-with-inexact -mieee-conformant 900 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 901 -mtrap-precision=MODE -mbuild-constants 902 -mcpu=CPU-TYPE -mtune=CPU-TYPE 903 -mbwx -mmax -mfix -mcix 904 -mfloat-vax -mfloat-ieee 905 -mexplicit-relocs -msmall-data -mlarge-data 906 -msmall-text -mlarge-text 907 -mmemory-latency=TIME 908 909 _FR30 Options_ 910 -msmall-model -mno-lsim 911 912 _FRV Options_ 913 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 914 -mhard-float -msoft-float 915 -malloc-cc -mfixed-cc -mdword -mno-dword 916 -mdouble -mno-double 917 -mmedia -mno-media -mmuladd -mno-muladd 918 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 919 -mlinked-fp -mlong-calls -malign-labels 920 -mlibrary-pic -macc-4 -macc-8 921 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 922 -moptimize-membar -mno-optimize-membar 923 -mscc -mno-scc -mcond-exec -mno-cond-exec 924 -mvliw-branch -mno-vliw-branch 925 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 926 -mno-nested-cond-exec -mtomcat-stats 927 -mTLS -mtls 928 -mcpu=CPU 929 930 _GNU/Linux Options_ 931 -mglibc -muclibc -mbionic -mandroid 932 -tno-android-cc -tno-android-ld 933 934 _H8/300 Options_ 935 -mrelax -mh -ms -mn -mexr -mno-exr -mint32 -malign-300 936 937 _HPPA Options_ 938 -march=ARCHITECTURE-TYPE 939 -mdisable-fpregs -mdisable-indexing 940 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 941 -mfixed-range=REGISTER-RANGE 942 -mjump-in-delay -mlinker-opt -mlong-calls 943 -mlong-load-store -mno-disable-fpregs 944 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 945 -mno-jump-in-delay -mno-long-load-store 946 -mno-portable-runtime -mno-soft-float 947 -mno-space-regs -msoft-float -mpa-risc-1-0 948 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 949 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 950 -munix=UNIX-STD -nolibdld -static -threads 951 952 _i386 and x86-64 Options_ 953 -mtune=CPU-TYPE -march=CPU-TYPE 954 -mtune-ctrl=FEATURE-LIST -mdump-tune-features -mno-default 955 -mfpmath=UNIT 956 -masm=DIALECT -mno-fancy-math-387 957 -mno-fp-ret-in-387 -msoft-float 958 -mno-wide-multiply -mrtd -malign-double 959 -mpreferred-stack-boundary=NUM 960 -mincoming-stack-boundary=NUM 961 -mcld -mcx16 -msahf -mmovbe -mcrc32 962 -mrecip -mrecip=OPT 963 -mvzeroupper -mprefer-avx128 964 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 965 -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha 966 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 967 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt 968 -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mthreads 969 -mno-align-stringops -minline-all-stringops 970 -minline-stringops-dynamically -mstringop-strategy=ALG 971 -mmemcpy-strategy=STRATEGY -mmemset-strategy=STRATEGY 972 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 973 -m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 974 -mregparm=NUM -msseregparm 975 -mveclibabi=TYPE -mvect8-ret-in-mem 976 -mpc32 -mpc64 -mpc80 -mstackrealign 977 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 978 -mcmodel=CODE-MODEL -mabi=NAME -maddress-mode=MODE 979 -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM 980 -msse2avx -mfentry -m8bit-idiv 981 -mavx256-split-unaligned-load -mavx256-split-unaligned-store 982 -mstack-protector-guard=GUARD 983 984 _i386 and x86-64 Windows Options_ 985 -mconsole -mcygwin -mno-cygwin -mdll 986 -mnop-fun-dllimport -mthread 987 -municode -mwin32 -mwindows -fno-set-stack-executable 988 989 _IA-64 Options_ 990 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 991 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 992 -mconstant-gp -mauto-pic -mfused-madd 993 -minline-float-divide-min-latency 994 -minline-float-divide-max-throughput 995 -mno-inline-float-divide 996 -minline-int-divide-min-latency 997 -minline-int-divide-max-throughput 998 -mno-inline-int-divide 999 -minline-sqrt-min-latency -minline-sqrt-max-throughput 1000 -mno-inline-sqrt 1001 -mdwarf2-asm -mearly-stop-bits 1002 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 1003 -mtune=CPU-TYPE -milp32 -mlp64 1004 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 1005 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 1006 -msched-spec-ldc -msched-spec-control-ldc 1007 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 1008 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 1009 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 1010 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 1011 1012 _LM32 Options_ 1013 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 1014 -msign-extend-enabled -muser-enabled 1015 1016 _M32R/D Options_ 1017 -m32r2 -m32rx -m32r 1018 -mdebug 1019 -malign-loops -mno-align-loops 1020 -missue-rate=NUMBER 1021 -mbranch-cost=NUMBER 1022 -mmodel=CODE-SIZE-MODEL-TYPE 1023 -msdata=SDATA-TYPE 1024 -mno-flush-func -mflush-func=NAME 1025 -mno-flush-trap -mflush-trap=NUMBER 1026 -G NUM 1027 1028 _M32C Options_ 1029 -mcpu=CPU -msim -memregs=NUMBER 1030 1031 _M680x0 Options_ 1032 -march=ARCH -mcpu=CPU -mtune=TUNE 1033 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 1034 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 1035 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 1036 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 1037 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 1038 -malign-int -mstrict-align -msep-data -mno-sep-data 1039 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 1040 -mxgot -mno-xgot 1041 1042 _MCore Options_ 1043 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 1044 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 1045 -m4byte-functions -mno-4byte-functions -mcallgraph-data 1046 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 1047 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 1048 1049 _MeP Options_ 1050 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 1051 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 1052 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 1053 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 1054 -mtiny=N 1055 1056 _MicroBlaze Options_ 1057 -msoft-float -mhard-float -msmall-divides -mcpu=CPU 1058 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift 1059 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss 1060 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt 1061 -mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-APP-MODEL 1062 1063 _MIPS Options_ 1064 -EL -EB -march=ARCH -mtune=ARCH 1065 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 1066 -mips64 -mips64r2 1067 -mips16 -mno-mips16 -mflip-mips16 1068 -minterlink-compressed -mno-interlink-compressed 1069 -minterlink-mips16 -mno-interlink-mips16 1070 -mabi=ABI -mabicalls -mno-abicalls 1071 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 1072 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 1073 -mno-float -msingle-float -mdouble-float 1074 -mabs=MODE -mnan=ENCODING 1075 -mdsp -mno-dsp -mdspr2 -mno-dspr2 1076 -mmcu -mmno-mcu 1077 -meva -mno-eva 1078 -mvirt -mno-virt 1079 -mmicromips -mno-micromips 1080 -mfpu=FPU-TYPE 1081 -msmartmips -mno-smartmips 1082 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 1083 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 1084 -mlong64 -mlong32 -msym32 -mno-sym32 1085 -GNUM -mlocal-sdata -mno-local-sdata 1086 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 1087 -membedded-data -mno-embedded-data 1088 -muninit-const-in-rodata -mno-uninit-const-in-rodata 1089 -mcode-readable=SETTING 1090 -msplit-addresses -mno-split-addresses 1091 -mexplicit-relocs -mno-explicit-relocs 1092 -mcheck-zero-division -mno-check-zero-division 1093 -mdivide-traps -mdivide-breaks 1094 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 1095 -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp 1096 -mfix-24k -mno-fix-24k 1097 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 1098 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 1099 -mfix-vr4120 -mno-fix-vr4120 1100 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 1101 -mflush-func=FUNC -mno-flush-func 1102 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 1103 -mfp-exceptions -mno-fp-exceptions 1104 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 1105 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 1106 1107 _MMIX Options_ 1108 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 1109 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 1110 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 1111 -mno-base-addresses -msingle-exit -mno-single-exit 1112 1113 _MN10300 Options_ 1114 -mmult-bug -mno-mult-bug 1115 -mno-am33 -mam33 -mam33-2 -mam34 1116 -mtune=CPU-TYPE 1117 -mreturn-pointer-on-d0 1118 -mno-crt0 -mrelax -mliw -msetlb 1119 1120 _Moxie Options_ 1121 -meb -mel -mno-crt0 1122 1123 _MSP430 Options_ 1124 -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax 1125 -mhwmult= -minrt 1126 1127 _NDS32 Options_ 1128 -mbig-endian -mlittle-endian 1129 -mreduced-regs -mfull-regs 1130 -mcmov -mno-cmov 1131 -mperf-ext -mno-perf-ext 1132 -mv3push -mno-v3push 1133 -m16bit -mno-16bit 1134 -mgp-direct -mno-gp-direct 1135 -misr-vector-size=NUM 1136 -mcache-block-size=NUM 1137 -march=ARCH 1138 -mforce-fp-as-gp -mforbid-fp-as-gp 1139 -mex9 -mctor-dtor -mrelax 1140 1141 _Nios II Options_ 1142 -G NUM -mgpopt -mno-gpopt -mel -meb 1143 -mno-bypass-cache -mbypass-cache 1144 -mno-cache-volatile -mcache-volatile 1145 -mno-fast-sw-div -mfast-sw-div 1146 -mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div 1147 -mcustom-INSN=N -mno-custom-INSN 1148 -mcustom-fpu-cfg=NAME 1149 -mhal -msmallc -msys-crt0=NAME -msys-lib=NAME 1150 1151 _PDP-11 Options_ 1152 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 1153 -mbcopy -mbcopy-builtin -mint32 -mno-int16 1154 -mint16 -mno-int32 -mfloat32 -mno-float64 1155 -mfloat64 -mno-float32 -mabshi -mno-abshi 1156 -mbranch-expensive -mbranch-cheap 1157 -munix-asm -mdec-asm 1158 1159 _picoChip Options_ 1160 -mae=AE_TYPE -mvliw-lookahead=N 1161 -msymbol-as-address -mno-inefficient-warnings 1162 1163 _PowerPC Options_ See RS/6000 and PowerPC Options. 1164 1165 _RL78 Options_ 1166 -msim -mmul=none -mmul=g13 -mmul=rl78 1167 1168 _RS/6000 and PowerPC Options_ 1169 -mcpu=CPU-TYPE 1170 -mtune=CPU-TYPE 1171 -mcmodel=CODE-MODEL 1172 -mpowerpc64 1173 -maltivec -mno-altivec 1174 -mpowerpc-gpopt -mno-powerpc-gpopt 1175 -mpowerpc-gfxopt -mno-powerpc-gfxopt 1176 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 1177 -mfprnd -mno-fprnd 1178 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 1179 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 1180 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 1181 -malign-power -malign-natural 1182 -msoft-float -mhard-float -mmultiple -mno-multiple 1183 -msingle-float -mdouble-float -msimple-fpu 1184 -mstring -mno-string -mupdate -mno-update 1185 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1186 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1187 -mstrict-align -mno-strict-align -mrelocatable 1188 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1189 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1190 -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base 1191 -mprioritize-restricted-insns=PRIORITY 1192 -msched-costly-dep=DEPENDENCE_TYPE 1193 -minsert-sched-nops=SCHEME 1194 -mcall-sysv -mcall-netbsd 1195 -maix-struct-return -msvr4-struct-return 1196 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1197 -mblock-move-inline-limit=NUM 1198 -misel -mno-isel 1199 -misel=yes -misel=no 1200 -mspe -mno-spe 1201 -mspe=yes -mspe=no 1202 -mpaired 1203 -mgen-cell-microcode -mwarn-cell-microcode 1204 -mvrsave -mno-vrsave 1205 -mmulhw -mno-mulhw 1206 -mdlmzb -mno-dlmzb 1207 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1208 -mprototype -mno-prototype 1209 -msim -mmvme -mads -myellowknife -memb -msdata 1210 -msdata=OPT -mvxworks -G NUM -pthread 1211 -mrecip -mrecip=OPT -mno-recip -mrecip-precision 1212 -mno-recip-precision 1213 -mveclibabi=TYPE -mfriz -mno-friz 1214 -mpointers-to-nested-functions -mno-pointers-to-nested-functions 1215 -msave-toc-indirect -mno-save-toc-indirect 1216 -mpower8-fusion -mno-mpower8-fusion -mpower8-vector -mno-power8-vector 1217 -mcrypto -mno-crypto -mdirect-move -mno-direct-move 1218 -mquad-memory -mno-quad-memory 1219 -mquad-memory-atomic -mno-quad-memory-atomic 1220 -mcompat-align-parm -mno-compat-align-parm 1221 1222 _RX Options_ 1223 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1224 -mcpu= 1225 -mbig-endian-data -mlittle-endian-data 1226 -msmall-data 1227 -msim -mno-sim 1228 -mas100-syntax -mno-as100-syntax 1229 -mrelax 1230 -mmax-constant-size= 1231 -mint-register= 1232 -mpid 1233 -mno-warn-multiple-fast-interrupts 1234 -msave-acc-in-interrupts 1235 1236 _S/390 and zSeries Options_ 1237 -mtune=CPU-TYPE -march=CPU-TYPE 1238 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1239 -mlong-double-64 -mlong-double-128 1240 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1241 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1242 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1243 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1244 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1245 -mhotpatch[=HALFWORDS] -mno-hotpatch 1246 1247 _Score Options_ 1248 -meb -mel 1249 -mnhwloop 1250 -muls 1251 -mmac 1252 -mscore5 -mscore5u -mscore7 -mscore7d 1253 1254 _SH Options_ 1255 -m1 -m2 -m2e 1256 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1257 -m3 -m3e 1258 -m4-nofpu -m4-single-only -m4-single -m4 1259 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1260 -m5-64media -m5-64media-nofpu 1261 -m5-32media -m5-32media-nofpu 1262 -m5-compact -m5-compact-nofpu 1263 -mb -ml -mdalign -mrelax 1264 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1265 -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate -mpadstruct 1266 -mspace -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1267 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1268 -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1269 -maccumulate-outgoing-args -minvalid-symbols 1270 -matomic-model=ATOMIC-MODEL 1271 -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch 1272 -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra 1273 -mpretend-cmove -mtas 1274 1275 _Solaris 2 Options_ 1276 -mclear-hwcap -mno-clear-hwcap -mimpure-text -mno-impure-text 1277 -pthreads -pthread 1278 1279 _SPARC Options_ 1280 -mcpu=CPU-TYPE 1281 -mtune=CPU-TYPE 1282 -mcmodel=CODE-MODEL 1283 -mmemory-model=MEM-MODEL 1284 -m32 -m64 -mapp-regs -mno-app-regs 1285 -mfaster-structs -mno-faster-structs -mflat -mno-flat 1286 -mfpu -mno-fpu -mhard-float -msoft-float 1287 -mhard-quad-float -msoft-quad-float 1288 -mstack-bias -mno-stack-bias 1289 -munaligned-doubles -mno-unaligned-doubles 1290 -muser-mode -mno-user-mode 1291 -mv8plus -mno-v8plus -mvis -mno-vis 1292 -mvis2 -mno-vis2 -mvis3 -mno-vis3 1293 -mcbcond -mno-cbcond 1294 -mfmaf -mno-fmaf -mpopc -mno-popc 1295 -mfix-at697f -mfix-ut699 1296 1297 _SPU Options_ 1298 -mwarn-reloc -merror-reloc 1299 -msafe-dma -munsafe-dma 1300 -mbranch-hints 1301 -msmall-mem -mlarge-mem -mstdmain 1302 -mfixed-range=REGISTER-RANGE 1303 -mea32 -mea64 1304 -maddress-space-conversion -mno-address-space-conversion 1305 -mcache-size=CACHE-SIZE 1306 -matomic-updates -mno-atomic-updates 1307 1308 _System V Options_ 1309 -Qy -Qn -YP,PATHS -Ym,DIR 1310 1311 _TILE-Gx Options_ 1312 -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian 1313 -mcmodel=CODE-MODEL 1314 1315 _TILEPro Options_ 1316 -mcpu=CPU -m32 1317 1318 _V850 Options_ 1319 -mlong-calls -mno-long-calls -mep -mno-ep 1320 -mprolog-function -mno-prolog-function -mspace 1321 -mtda=N -msda=N -mzda=N 1322 -mapp-regs -mno-app-regs 1323 -mdisable-callt -mno-disable-callt 1324 -mv850e2v3 -mv850e2 -mv850e1 -mv850es 1325 -mv850e -mv850 -mv850e3v5 1326 -mloop 1327 -mrelax 1328 -mlong-jumps 1329 -msoft-float 1330 -mhard-float 1331 -mgcc-abi 1332 -mrh850-abi 1333 -mbig-switch 1334 1335 _VAX Options_ 1336 -mg -mgnu -munix 1337 1338 _VMS Options_ 1339 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 1340 -mpointer-size=SIZE 1341 1342 _VxWorks Options_ 1343 -mrtp -non-static -Bstatic -Bdynamic 1344 -Xbind-lazy -Xbind-now 1345 1346 _x86-64 Options_ See i386 and x86-64 Options. 1347 1348 _Xstormy16 Options_ 1349 -msim 1350 1351 _Xtensa Options_ 1352 -mconst16 -mno-const16 1353 -mfused-madd -mno-fused-madd 1354 -mforce-no-pic 1355 -mserialize-volatile -mno-serialize-volatile 1356 -mtext-section-literals -mno-text-section-literals 1357 -mtarget-align -mno-target-align 1358 -mlongcalls -mno-longcalls 1359 1360 _zSeries Options_ See S/390 and zSeries Options. 1361 1362_Code Generation Options_ 1363 *Note Options for Code Generation Conventions: Code Gen Options. 1364 -fcall-saved-REG -fcall-used-REG 1365 -ffixed-REG -fexceptions 1366 -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables 1367 -fasynchronous-unwind-tables 1368 -fno-gnu-unique 1369 -finhibit-size-directive -finstrument-functions 1370 -finstrument-functions-exclude-function-list=SYM,SYM,... 1371 -finstrument-functions-exclude-file-list=FILE,FILE,... 1372 -fno-common -fno-ident 1373 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1374 -fno-jump-tables 1375 -frecord-gcc-switches 1376 -freg-struct-return -fshort-enums 1377 -fshort-double -fshort-wchar 1378 -fverbose-asm -fpack-struct[=N] -fstack-check 1379 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1380 -fno-stack-limit -fsplit-stack 1381 -fleading-underscore -ftls-model=MODEL 1382 -fstack-reuse=REUSE_LEVEL 1383 -ftrapv -fwrapv -fbounds-check 1384 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls 1385 1386 1387File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1388 13893.2 Options Controlling the Kind of Output 1390========================================== 1391 1392Compilation can involve up to four stages: preprocessing, compilation 1393proper, assembly and linking, always in that order. GCC is capable of 1394preprocessing and compiling several files either into several assembler 1395input files, or into one assembler input file; then each assembler input 1396file produces an object file, and linking combines all the object files 1397(those newly compiled, and those specified as input) into an executable 1398file. 1399 1400 For any given input file, the file name suffix determines what kind of 1401compilation is done: 1402 1403'FILE.c' 1404 C source code that must be preprocessed. 1405 1406'FILE.i' 1407 C source code that should not be preprocessed. 1408 1409'FILE.ii' 1410 C++ source code that should not be preprocessed. 1411 1412'FILE.m' 1413 Objective-C source code. Note that you must link with the 1414 'libobjc' library to make an Objective-C program work. 1415 1416'FILE.mi' 1417 Objective-C source code that should not be preprocessed. 1418 1419'FILE.mm' 1420'FILE.M' 1421 Objective-C++ source code. Note that you must link with the 1422 'libobjc' library to make an Objective-C++ program work. Note that 1423 '.M' refers to a literal capital M. 1424 1425'FILE.mii' 1426 Objective-C++ source code that should not be preprocessed. 1427 1428'FILE.h' 1429 C, C++, Objective-C or Objective-C++ header file to be turned into 1430 a precompiled header (default), or C, C++ header file to be turned 1431 into an Ada spec (via the '-fdump-ada-spec' switch). 1432 1433'FILE.cc' 1434'FILE.cp' 1435'FILE.cxx' 1436'FILE.cpp' 1437'FILE.CPP' 1438'FILE.c++' 1439'FILE.C' 1440 C++ source code that must be preprocessed. Note that in '.cxx', 1441 the last two letters must both be literally 'x'. Likewise, '.C' 1442 refers to a literal capital C. 1443 1444'FILE.mm' 1445'FILE.M' 1446 Objective-C++ source code that must be preprocessed. 1447 1448'FILE.mii' 1449 Objective-C++ source code that should not be preprocessed. 1450 1451'FILE.hh' 1452'FILE.H' 1453'FILE.hp' 1454'FILE.hxx' 1455'FILE.hpp' 1456'FILE.HPP' 1457'FILE.h++' 1458'FILE.tcc' 1459 C++ header file to be turned into a precompiled header or Ada spec. 1460 1461'FILE.f' 1462'FILE.for' 1463'FILE.ftn' 1464 Fixed form Fortran source code that should not be preprocessed. 1465 1466'FILE.F' 1467'FILE.FOR' 1468'FILE.fpp' 1469'FILE.FPP' 1470'FILE.FTN' 1471 Fixed form Fortran source code that must be preprocessed (with the 1472 traditional preprocessor). 1473 1474'FILE.f90' 1475'FILE.f95' 1476'FILE.f03' 1477'FILE.f08' 1478 Free form Fortran source code that should not be preprocessed. 1479 1480'FILE.F90' 1481'FILE.F95' 1482'FILE.F03' 1483'FILE.F08' 1484 Free form Fortran source code that must be preprocessed (with the 1485 traditional preprocessor). 1486 1487'FILE.go' 1488 Go source code. 1489 1490'FILE.ads' 1491 Ada source code file that contains a library unit declaration (a 1492 declaration of a package, subprogram, or generic, or a generic 1493 instantiation), or a library unit renaming declaration (a package, 1494 generic, or subprogram renaming declaration). Such files are also 1495 called "specs". 1496 1497'FILE.adb' 1498 Ada source code file containing a library unit body (a subprogram 1499 or package body). Such files are also called "bodies". 1500 1501'FILE.s' 1502 Assembler code. 1503 1504'FILE.S' 1505'FILE.sx' 1506 Assembler code that must be preprocessed. 1507 1508'OTHER' 1509 An object file to be fed straight into linking. Any file name with 1510 no recognized suffix is treated this way. 1511 1512 You can specify the input language explicitly with the '-x' option: 1513 1514'-x LANGUAGE' 1515 Specify explicitly the LANGUAGE for the following input files 1516 (rather than letting the compiler choose a default based on the 1517 file name suffix). This option applies to all following input 1518 files until the next '-x' option. Possible values for LANGUAGE 1519 are: 1520 c c-header cpp-output 1521 c++ c++-header c++-cpp-output 1522 objective-c objective-c-header objective-c-cpp-output 1523 objective-c++ objective-c++-header objective-c++-cpp-output 1524 assembler assembler-with-cpp 1525 ada 1526 f77 f77-cpp-input f95 f95-cpp-input 1527 go 1528 java 1529 1530'-x none' 1531 Turn off any specification of a language, so that subsequent files 1532 are handled according to their file name suffixes (as they are if 1533 '-x' has not been used at all). 1534 1535'-pass-exit-codes' 1536 Normally the 'gcc' program exits with the code of 1 if any phase of 1537 the compiler returns a non-success return code. If you specify 1538 '-pass-exit-codes', the 'gcc' program instead returns with the 1539 numerically highest error produced by any phase returning an error 1540 indication. The C, C++, and Fortran front ends return 4 if an 1541 internal compiler error is encountered. 1542 1543 If you only want some of the stages of compilation, you can use '-x' 1544(or filename suffixes) to tell 'gcc' where to start, and one of the 1545options '-c', '-S', or '-E' to say where 'gcc' is to stop. Note that 1546some combinations (for example, '-x cpp-output -E') instruct 'gcc' to do 1547nothing at all. 1548 1549'-c' 1550 Compile or assemble the source files, but do not link. The linking 1551 stage simply is not done. The ultimate output is in the form of an 1552 object file for each source file. 1553 1554 By default, the object file name for a source file is made by 1555 replacing the suffix '.c', '.i', '.s', etc., with '.o'. 1556 1557 Unrecognized input files, not requiring compilation or assembly, 1558 are ignored. 1559 1560'-S' 1561 Stop after the stage of compilation proper; do not assemble. The 1562 output is in the form of an assembler code file for each 1563 non-assembler input file specified. 1564 1565 By default, the assembler file name for a source file is made by 1566 replacing the suffix '.c', '.i', etc., with '.s'. 1567 1568 Input files that don't require compilation are ignored. 1569 1570'-E' 1571 Stop after the preprocessing stage; do not run the compiler proper. 1572 The output is in the form of preprocessed source code, which is 1573 sent to the standard output. 1574 1575 Input files that don't require preprocessing are ignored. 1576 1577'-o FILE' 1578 Place output in file FILE. This applies to whatever sort of output 1579 is being produced, whether it be an executable file, an object 1580 file, an assembler file or preprocessed C code. 1581 1582 If '-o' is not specified, the default is to put an executable file 1583 in 'a.out', the object file for 'SOURCE.SUFFIX' in 'SOURCE.o', its 1584 assembler file in 'SOURCE.s', a precompiled header file in 1585 'SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1586 output. 1587 1588'-v' 1589 Print (on standard error output) the commands executed to run the 1590 stages of compilation. Also print the version number of the 1591 compiler driver program and of the preprocessor and the compiler 1592 proper. 1593 1594'-###' 1595 Like '-v' except the commands are not executed and arguments are 1596 quoted unless they contain only alphanumeric characters or './-_'. 1597 This is useful for shell scripts to capture the driver-generated 1598 command lines. 1599 1600'-pipe' 1601 Use pipes rather than temporary files for communication between the 1602 various stages of compilation. This fails to work on some systems 1603 where the assembler is unable to read from a pipe; but the GNU 1604 assembler has no trouble. 1605 1606'--help' 1607 Print (on the standard output) a description of the command-line 1608 options understood by 'gcc'. If the '-v' option is also specified 1609 then '--help' is also passed on to the various processes invoked by 1610 'gcc', so that they can display the command-line options they 1611 accept. If the '-Wextra' option has also been specified (prior to 1612 the '--help' option), then command-line options that have no 1613 documentation associated with them are also displayed. 1614 1615'--target-help' 1616 Print (on the standard output) a description of target-specific 1617 command-line options for each tool. For some targets extra 1618 target-specific information may also be printed. 1619 1620'--help={CLASS|[^]QUALIFIER}[,...]' 1621 Print (on the standard output) a description of the command-line 1622 options understood by the compiler that fit into all specified 1623 classes and qualifiers. These are the supported classes: 1624 1625 'optimizers' 1626 Display all of the optimization options supported by the 1627 compiler. 1628 1629 'warnings' 1630 Display all of the options controlling warning messages 1631 produced by the compiler. 1632 1633 'target' 1634 Display target-specific options. Unlike the '--target-help' 1635 option however, target-specific options of the linker and 1636 assembler are not displayed. This is because those tools do 1637 not currently support the extended '--help=' syntax. 1638 1639 'params' 1640 Display the values recognized by the '--param' option. 1641 1642 LANGUAGE 1643 Display the options supported for LANGUAGE, where LANGUAGE is 1644 the name of one of the languages supported in this version of 1645 GCC. 1646 1647 'common' 1648 Display the options that are common to all languages. 1649 1650 These are the supported qualifiers: 1651 1652 'undocumented' 1653 Display only those options that are undocumented. 1654 1655 'joined' 1656 Display options taking an argument that appears after an equal 1657 sign in the same continuous piece of text, such as: 1658 '--help=target'. 1659 1660 'separate' 1661 Display options taking an argument that appears as a separate 1662 word following the original option, such as: '-o output-file'. 1663 1664 Thus for example to display all the undocumented target-specific 1665 switches supported by the compiler, use: 1666 1667 --help=target,undocumented 1668 1669 The sense of a qualifier can be inverted by prefixing it with the 1670 '^' character, so for example to display all binary warning options 1671 (i.e., ones that are either on or off and that do not take an 1672 argument) that have a description, use: 1673 1674 --help=warnings,^joined,^undocumented 1675 1676 The argument to '--help=' should not consist solely of inverted 1677 qualifiers. 1678 1679 Combining several classes is possible, although this usually 1680 restricts the output so much that there is nothing to display. One 1681 case where it does work, however, is when one of the classes is 1682 TARGET. For example, to display all the target-specific 1683 optimization options, use: 1684 1685 --help=target,optimizers 1686 1687 The '--help=' option can be repeated on the command line. Each 1688 successive use displays its requested class of options, skipping 1689 those that have already been displayed. 1690 1691 If the '-Q' option appears on the command line before the '--help=' 1692 option, then the descriptive text displayed by '--help=' is 1693 changed. Instead of describing the displayed options, an 1694 indication is given as to whether the option is enabled, disabled 1695 or set to a specific value (assuming that the compiler knows this 1696 at the point where the '--help=' option is used). 1697 1698 Here is a truncated example from the ARM port of 'gcc': 1699 1700 % gcc -Q -mabi=2 --help=target -c 1701 The following options are target specific: 1702 -mabi= 2 1703 -mabort-on-noreturn [disabled] 1704 -mapcs [disabled] 1705 1706 The output is sensitive to the effects of previous command-line 1707 options, so for example it is possible to find out which 1708 optimizations are enabled at '-O2' by using: 1709 1710 -Q -O2 --help=optimizers 1711 1712 Alternatively you can discover which binary optimizations are 1713 enabled by '-O3' by using: 1714 1715 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1716 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1717 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1718 1719'-no-canonical-prefixes' 1720 Do not expand any symbolic links, resolve references to '/../' or 1721 '/./', or make the path absolute when generating a relative prefix. 1722 1723'--version' 1724 Display the version number and copyrights of the invoked GCC. 1725 1726'-wrapper' 1727 Invoke all subcommands under a wrapper program. The name of the 1728 wrapper program and its parameters are passed as a comma separated 1729 list. 1730 1731 gcc -c t.c -wrapper gdb,--args 1732 1733 This invokes all subprograms of 'gcc' under 'gdb --args', thus the 1734 invocation of 'cc1' is 'gdb --args cc1 ...'. 1735 1736'-fplugin=NAME.so' 1737 Load the plugin code in file NAME.so, assumed to be a shared object 1738 to be dlopen'd by the compiler. The base name of the shared object 1739 file is used to identify the plugin for the purposes of argument 1740 parsing (See '-fplugin-arg-NAME-KEY=VALUE' below). Each plugin 1741 should define the callback functions specified in the Plugins API. 1742 1743'-fplugin-arg-NAME-KEY=VALUE' 1744 Define an argument called KEY with a value of VALUE for the plugin 1745 called NAME. 1746 1747'-fdump-ada-spec[-slim]' 1748 For C and C++ source and include files, generate corresponding Ada 1749 specs. *Note (gnat_ugn)Generating Ada Bindings for C and C++ 1750 headers::, which provides detailed documentation on this feature. 1751 1752'-fada-spec-parent=UNIT' 1753 In conjunction with '-fdump-ada-spec[-slim]' above, generate Ada 1754 specs as child units of parent UNIT. 1755 1756'-fdump-go-spec=FILE' 1757 For input files in any language, generate corresponding Go 1758 declarations in FILE. This generates Go 'const', 'type', 'var', 1759 and 'func' declarations which may be a useful way to start writing 1760 a Go interface to code written in some other language. 1761 1762'@FILE' 1763 Read command-line options from FILE. The options read are inserted 1764 in place of the original @FILE option. If FILE does not exist, or 1765 cannot be read, then the option will be treated literally, and not 1766 removed. 1767 1768 Options in FILE are separated by whitespace. A whitespace 1769 character may be included in an option by surrounding the entire 1770 option in either single or double quotes. Any character (including 1771 a backslash) may be included by prefixing the character to be 1772 included with a backslash. The FILE may itself contain additional 1773 @FILE options; any such options will be processed recursively. 1774 1775 1776File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1777 17783.3 Compiling C++ Programs 1779========================== 1780 1781C++ source files conventionally use one of the suffixes '.C', '.cc', 1782'.cpp', '.CPP', '.c++', '.cp', or '.cxx'; C++ header files often use 1783'.hh', '.hpp', '.H', or (for shared template code) '.tcc'; and 1784preprocessed C++ files use the suffix '.ii'. GCC recognizes files with 1785these names and compiles them as C++ programs even if you call the 1786compiler the same way as for compiling C programs (usually with the name 1787'gcc'). 1788 1789 However, the use of 'gcc' does not add the C++ library. 'g++' is a 1790program that calls GCC and automatically specifies linking against the 1791C++ library. It treats '.c', '.h' and '.i' files as C++ source files 1792instead of C source files unless '-x' is used. This program is also 1793useful when precompiling a C header file with a '.h' extension for use 1794in C++ compilations. On many systems, 'g++' is also installed with the 1795name 'c++'. 1796 1797 When you compile C++ programs, you may specify many of the same 1798command-line options that you use for compiling programs in any 1799language; or command-line options meaningful for C and related 1800languages; or options that are meaningful only for C++ programs. *Note 1801Options Controlling C Dialect: C Dialect Options, for explanations of 1802options for languages related to C. *Note Options Controlling C++ 1803Dialect: C++ Dialect Options, for explanations of options that are 1804meaningful only for C++ programs. 1805 1806 1807File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1808 18093.4 Options Controlling C Dialect 1810================================= 1811 1812The following options control the dialect of C (or languages derived 1813from C, such as C++, Objective-C and Objective-C++) that the compiler 1814accepts: 1815 1816'-ansi' 1817 In C mode, this is equivalent to '-std=c90'. In C++ mode, it is 1818 equivalent to '-std=c++98'. 1819 1820 This turns off certain features of GCC that are incompatible with 1821 ISO C90 (when compiling C code), or of standard C++ (when compiling 1822 C++ code), such as the 'asm' and 'typeof' keywords, and predefined 1823 macros such as 'unix' and 'vax' that identify the type of system 1824 you are using. It also enables the undesirable and rarely used ISO 1825 trigraph feature. For the C compiler, it disables recognition of 1826 C++ style '//' comments as well as the 'inline' keyword. 1827 1828 The alternate keywords '__asm__', '__extension__', '__inline__' and 1829 '__typeof__' continue to work despite '-ansi'. You would not want 1830 to use them in an ISO C program, of course, but it is useful to put 1831 them in header files that might be included in compilations done 1832 with '-ansi'. Alternate predefined macros such as '__unix__' and 1833 '__vax__' are also available, with or without '-ansi'. 1834 1835 The '-ansi' option does not cause non-ISO programs to be rejected 1836 gratuitously. For that, '-Wpedantic' is required in addition to 1837 '-ansi'. *Note Warning Options::. 1838 1839 The macro '__STRICT_ANSI__' is predefined when the '-ansi' option 1840 is used. Some header files may notice this macro and refrain from 1841 declaring certain functions or defining certain macros that the ISO 1842 standard doesn't call for; this is to avoid interfering with any 1843 programs that might use these names for other things. 1844 1845 Functions that are normally built in but do not have semantics 1846 defined by ISO C (such as 'alloca' and 'ffs') are not built-in 1847 functions when '-ansi' is used. *Note Other built-in functions 1848 provided by GCC: Other Builtins, for details of the functions 1849 affected. 1850 1851'-std=' 1852 Determine the language standard. *Note Language Standards 1853 Supported by GCC: Standards, for details of these standard 1854 versions. This option is currently only supported when compiling C 1855 or C++. 1856 1857 The compiler can accept several base standards, such as 'c90' or 1858 'c++98', and GNU dialects of those standards, such as 'gnu90' or 1859 'gnu++98'. When a base standard is specified, the compiler accepts 1860 all programs following that standard plus those using GNU 1861 extensions that do not contradict it. For example, '-std=c90' 1862 turns off certain features of GCC that are incompatible with ISO 1863 C90, such as the 'asm' and 'typeof' keywords, but not other GNU 1864 extensions that do not have a meaning in ISO C90, such as omitting 1865 the middle term of a '?:' expression. On the other hand, when a 1866 GNU dialect of a standard is specified, all features supported by 1867 the compiler are enabled, even when those features change the 1868 meaning of the base standard. As a result, some strict-conforming 1869 programs may be rejected. The particular standard is used by 1870 '-Wpedantic' to identify which features are GNU extensions given 1871 that version of the standard. For example '-std=gnu90 -Wpedantic' 1872 warns about C++ style '//' comments, while '-std=gnu99 -Wpedantic' 1873 does not. 1874 1875 A value for this option must be provided; possible values are 1876 1877 'c90' 1878 'c89' 1879 'iso9899:1990' 1880 Support all ISO C90 programs (certain GNU extensions that 1881 conflict with ISO C90 are disabled). Same as '-ansi' for C 1882 code. 1883 1884 'iso9899:199409' 1885 ISO C90 as modified in amendment 1. 1886 1887 'c99' 1888 'c9x' 1889 'iso9899:1999' 1890 'iso9899:199x' 1891 ISO C99. This standard is substantially completely supported, 1892 modulo bugs, extended identifiers (supported except for corner 1893 cases when '-fextended-identifiers' is used) and 1894 floating-point issues (mainly but not entirely relating to 1895 optional C99 features from Annexes F and G). See <http://gcc.gnu.org/c99status.html> 1896 for more information. The names 'c9x' and 'iso9899:199x' are 1897 deprecated. 1898 1899 'c11' 1900 'c1x' 1901 'iso9899:2011' 1902 ISO C11, the 2011 revision of the ISO C standard. This 1903 standard is substantially completely supported, modulo bugs, 1904 extended identifiers (supported except for corner cases when 1905 '-fextended-identifiers' is used), floating-point issues 1906 (mainly but not entirely relating to optional C11 features 1907 from Annexes F and G) and the optional Annexes K 1908 (Bounds-checking interfaces) and L (Analyzability). The name 1909 'c1x' is deprecated. 1910 1911 'gnu90' 1912 'gnu89' 1913 GNU dialect of ISO C90 (including some C99 features). This is 1914 the default for C code. 1915 1916 'gnu99' 1917 'gnu9x' 1918 GNU dialect of ISO C99. The name 'gnu9x' is deprecated. 1919 1920 'gnu11' 1921 'gnu1x' 1922 GNU dialect of ISO C11. This is intended to become the 1923 default in a future release of GCC. The name 'gnu1x' is 1924 deprecated. 1925 1926 'c++98' 1927 'c++03' 1928 The 1998 ISO C++ standard plus the 2003 technical corrigendum 1929 and some additional defect reports. Same as '-ansi' for C++ 1930 code. 1931 1932 'gnu++98' 1933 'gnu++03' 1934 GNU dialect of '-std=c++98'. This is the default for C++ 1935 code. 1936 1937 'c++11' 1938 'c++0x' 1939 The 2011 ISO C++ standard plus amendments. The name 'c++0x' 1940 is deprecated. 1941 1942 'gnu++11' 1943 'gnu++0x' 1944 GNU dialect of '-std=c++11'. The name 'gnu++0x' is 1945 deprecated. 1946 1947 'c++1y' 1948 The next revision of the ISO C++ standard, tentatively planned 1949 for 2014. Support is highly experimental, and will almost 1950 certainly change in incompatible ways in future releases. 1951 1952 'gnu++1y' 1953 GNU dialect of '-std=c++1y'. Support is highly experimental, 1954 and will almost certainly change in incompatible ways in 1955 future releases. 1956 1957'-fgnu89-inline' 1958 The option '-fgnu89-inline' tells GCC to use the traditional GNU 1959 semantics for 'inline' functions when in C99 mode. *Note An Inline 1960 Function is As Fast As a Macro: Inline. This option is accepted 1961 and ignored by GCC versions 4.1.3 up to but not including 4.3. In 1962 GCC versions 4.3 and later it changes the behavior of GCC in C99 1963 mode. Using this option is roughly equivalent to adding the 1964 'gnu_inline' function attribute to all inline functions (*note 1965 Function Attributes::). 1966 1967 The option '-fno-gnu89-inline' explicitly tells GCC to use the C99 1968 semantics for 'inline' when in C99 or gnu99 mode (i.e., it 1969 specifies the default behavior). This option was first supported 1970 in GCC 4.3. This option is not supported in '-std=c90' or 1971 '-std=gnu90' mode. 1972 1973 The preprocessor macros '__GNUC_GNU_INLINE__' and 1974 '__GNUC_STDC_INLINE__' may be used to check which semantics are in 1975 effect for 'inline' functions. *Note (cpp)Common Predefined 1976 Macros::. 1977 1978'-aux-info FILENAME' 1979 Output to the given filename prototyped declarations for all 1980 functions declared and/or defined in a translation unit, including 1981 those in header files. This option is silently ignored in any 1982 language other than C. 1983 1984 Besides declarations, the file indicates, in comments, the origin 1985 of each declaration (source file and line), whether the declaration 1986 was implicit, prototyped or unprototyped ('I', 'N' for new or 'O' 1987 for old, respectively, in the first character after the line number 1988 and the colon), and whether it came from a declaration or a 1989 definition ('C' or 'F', respectively, in the following character). 1990 In the case of function definitions, a K&R-style list of arguments 1991 followed by their declarations is also provided, inside comments, 1992 after the declaration. 1993 1994'-fallow-parameterless-variadic-functions' 1995 Accept variadic functions without named parameters. 1996 1997 Although it is possible to define such a function, this is not very 1998 useful as it is not possible to read the arguments. This is only 1999 supported for C as this construct is allowed by C++. 2000 2001'-fno-asm' 2002 Do not recognize 'asm', 'inline' or 'typeof' as a keyword, so that 2003 code can use these words as identifiers. You can use the keywords 2004 '__asm__', '__inline__' and '__typeof__' instead. '-ansi' implies 2005 '-fno-asm'. 2006 2007 In C++, this switch only affects the 'typeof' keyword, since 'asm' 2008 and 'inline' are standard keywords. You may want to use the 2009 '-fno-gnu-keywords' flag instead, which has the same effect. In 2010 C99 mode ('-std=c99' or '-std=gnu99'), this switch only affects the 2011 'asm' and 'typeof' keywords, since 'inline' is a standard keyword 2012 in ISO C99. 2013 2014'-fno-builtin' 2015'-fno-builtin-FUNCTION' 2016 Don't recognize built-in functions that do not begin with 2017 '__builtin_' as prefix. *Note Other built-in functions provided by 2018 GCC: Other Builtins, for details of the functions affected, 2019 including those which are not built-in functions when '-ansi' or 2020 '-std' options for strict ISO C conformance are used because they 2021 do not have an ISO standard meaning. 2022 2023 GCC normally generates special code to handle certain built-in 2024 functions more efficiently; for instance, calls to 'alloca' may 2025 become single instructions which adjust the stack directly, and 2026 calls to 'memcpy' may become inline copy loops. The resulting code 2027 is often both smaller and faster, but since the function calls no 2028 longer appear as such, you cannot set a breakpoint on those calls, 2029 nor can you change the behavior of the functions by linking with a 2030 different library. In addition, when a function is recognized as a 2031 built-in function, GCC may use information about that function to 2032 warn about problems with calls to that function, or to generate 2033 more efficient code, even if the resulting code still contains 2034 calls to that function. For example, warnings are given with 2035 '-Wformat' for bad calls to 'printf' when 'printf' is built in and 2036 'strlen' is known not to modify global memory. 2037 2038 With the '-fno-builtin-FUNCTION' option only the built-in function 2039 FUNCTION is disabled. FUNCTION must not begin with '__builtin_'. 2040 If a function is named that is not built-in in this version of GCC, 2041 this option is ignored. There is no corresponding 2042 '-fbuiltin-FUNCTION' option; if you wish to enable built-in 2043 functions selectively when using '-fno-builtin' or 2044 '-ffreestanding', you may define macros such as: 2045 2046 #define abs(n) __builtin_abs ((n)) 2047 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 2048 2049'-fhosted' 2050 2051 Assert that compilation targets a hosted environment. This implies 2052 '-fbuiltin'. A hosted environment is one in which the entire 2053 standard library is available, and in which 'main' has a return 2054 type of 'int'. Examples are nearly everything except a kernel. 2055 This is equivalent to '-fno-freestanding'. 2056 2057'-ffreestanding' 2058 2059 Assert that compilation targets a freestanding environment. This 2060 implies '-fno-builtin'. A freestanding environment is one in which 2061 the standard library may not exist, and program startup may not 2062 necessarily be at 'main'. The most obvious example is an OS 2063 kernel. This is equivalent to '-fno-hosted'. 2064 2065 *Note Language Standards Supported by GCC: Standards, for details 2066 of freestanding and hosted environments. 2067 2068'-fopenmp' 2069 Enable handling of OpenMP directives '#pragma omp' in C/C++ and 2070 '!$omp' in Fortran. When '-fopenmp' is specified, the compiler 2071 generates parallel code according to the OpenMP Application Program 2072 Interface v4.0 <http://www.openmp.org/>. This option implies 2073 '-pthread', and thus is only supported on targets that have support 2074 for '-pthread'. '-fopenmp' implies '-fopenmp-simd'. 2075 2076'-fopenmp-simd' 2077 Enable handling of OpenMP's SIMD directives with '#pragma omp' in 2078 C/C++ and '!$omp' in Fortran. Other OpenMP directives are ignored. 2079 2080'-fcilkplus' 2081 Enable the usage of Cilk Plus language extension features for 2082 C/C++. When the option '-fcilkplus' is specified, enable the usage 2083 of the Cilk Plus Language extension features for C/C++. The 2084 present implementation follows ABI version 1.2. This is an 2085 experimental feature that is only partially complete, and whose 2086 interface may change in future versions of GCC as the official 2087 specification changes. Currently, all features but '_Cilk_for' 2088 have been implemented. 2089 2090'-fgnu-tm' 2091 When the option '-fgnu-tm' is specified, the compiler generates 2092 code for the Linux variant of Intel's current Transactional Memory 2093 ABI specification document (Revision 1.1, May 6 2009). This is an 2094 experimental feature whose interface may change in future versions 2095 of GCC, as the official specification changes. Please note that 2096 not all architectures are supported for this feature. 2097 2098 For more information on GCC's support for transactional memory, 2099 *Note The GNU Transactional Memory Library: (libitm)Enabling 2100 libitm. 2101 2102 Note that the transactional memory feature is not supported with 2103 non-call exceptions ('-fnon-call-exceptions'). 2104 2105'-fms-extensions' 2106 Accept some non-standard constructs used in Microsoft header files. 2107 2108 In C++ code, this allows member names in structures to be similar 2109 to previous types declarations. 2110 2111 typedef int UOW; 2112 struct ABC { 2113 UOW UOW; 2114 }; 2115 2116 Some cases of unnamed fields in structures and unions are only 2117 accepted with this option. *Note Unnamed struct/union fields 2118 within structs/unions: Unnamed Fields, for details. 2119 2120 Note that this option is off for all targets but i?86 and x86_64 2121 targets using ms-abi. 2122'-fplan9-extensions' 2123 Accept some non-standard constructs used in Plan 9 code. 2124 2125 This enables '-fms-extensions', permits passing pointers to 2126 structures with anonymous fields to functions that expect pointers 2127 to elements of the type of the field, and permits referring to 2128 anonymous fields declared using a typedef. *Note Unnamed 2129 struct/union fields within structs/unions: Unnamed Fields, for 2130 details. This is only supported for C, not C++. 2131 2132'-trigraphs' 2133 Support ISO C trigraphs. The '-ansi' option (and '-std' options 2134 for strict ISO C conformance) implies '-trigraphs'. 2135 2136'-traditional' 2137'-traditional-cpp' 2138 Formerly, these options caused GCC to attempt to emulate a 2139 pre-standard C compiler. They are now only supported with the '-E' 2140 switch. The preprocessor continues to support a pre-standard mode. 2141 See the GNU CPP manual for details. 2142 2143'-fcond-mismatch' 2144 Allow conditional expressions with mismatched types in the second 2145 and third arguments. The value of such an expression is void. 2146 This option is not supported for C++. 2147 2148'-flax-vector-conversions' 2149 Allow implicit conversions between vectors with differing numbers 2150 of elements and/or incompatible element types. This option should 2151 not be used for new code. 2152 2153'-funsigned-char' 2154 Let the type 'char' be unsigned, like 'unsigned char'. 2155 2156 Each kind of machine has a default for what 'char' should be. It 2157 is either like 'unsigned char' by default or like 'signed char' by 2158 default. 2159 2160 Ideally, a portable program should always use 'signed char' or 2161 'unsigned char' when it depends on the signedness of an object. 2162 But many programs have been written to use plain 'char' and expect 2163 it to be signed, or expect it to be unsigned, depending on the 2164 machines they were written for. This option, and its inverse, let 2165 you make such a program work with the opposite default. 2166 2167 The type 'char' is always a distinct type from each of 'signed 2168 char' or 'unsigned char', even though its behavior is always just 2169 like one of those two. 2170 2171'-fsigned-char' 2172 Let the type 'char' be signed, like 'signed char'. 2173 2174 Note that this is equivalent to '-fno-unsigned-char', which is the 2175 negative form of '-funsigned-char'. Likewise, the option 2176 '-fno-signed-char' is equivalent to '-funsigned-char'. 2177 2178'-fsigned-bitfields' 2179'-funsigned-bitfields' 2180'-fno-signed-bitfields' 2181'-fno-unsigned-bitfields' 2182 These options control whether a bit-field is signed or unsigned, 2183 when the declaration does not use either 'signed' or 'unsigned'. 2184 By default, such a bit-field is signed, because this is consistent: 2185 the basic integer types such as 'int' are signed types. 2186 2187 2188File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 2189 21903.5 Options Controlling C++ Dialect 2191=================================== 2192 2193This section describes the command-line options that are only meaningful 2194for C++ programs. You can also use most of the GNU compiler options 2195regardless of what language your program is in. For example, you might 2196compile a file 'firstClass.C' like this: 2197 2198 g++ -g -frepo -O -c firstClass.C 2199 2200In this example, only '-frepo' is an option meant only for C++ programs; 2201you can use the other options with any language supported by GCC. 2202 2203 Here is a list of options that are _only_ for compiling C++ programs: 2204 2205'-fabi-version=N' 2206 Use version N of the C++ ABI. The default is version 2. 2207 2208 Version 0 refers to the version conforming most closely to the C++ 2209 ABI specification. Therefore, the ABI obtained using version 0 2210 will change in different versions of G++ as ABI bugs are fixed. 2211 2212 Version 1 is the version of the C++ ABI that first appeared in G++ 2213 3.2. 2214 2215 Version 2 is the version of the C++ ABI that first appeared in G++ 2216 3.4. 2217 2218 Version 3 corrects an error in mangling a constant address as a 2219 template argument. 2220 2221 Version 4, which first appeared in G++ 4.5, implements a standard 2222 mangling for vector types. 2223 2224 Version 5, which first appeared in G++ 4.6, corrects the mangling 2225 of attribute const/volatile on function pointer types, decltype of 2226 a plain decl, and use of a function parameter in the declaration of 2227 another parameter. 2228 2229 Version 6, which first appeared in G++ 4.7, corrects the promotion 2230 behavior of C++11 scoped enums and the mangling of template 2231 argument packs, const/static_cast, prefix ++ and -, and a class 2232 scope function used as a template argument. 2233 2234 See also '-Wabi'. 2235 2236'-fno-access-control' 2237 Turn off all access checking. This switch is mainly useful for 2238 working around bugs in the access control code. 2239 2240'-fcheck-new' 2241 Check that the pointer returned by 'operator new' is non-null 2242 before attempting to modify the storage allocated. This check is 2243 normally unnecessary because the C++ standard specifies that 2244 'operator new' only returns '0' if it is declared 'throw()', in 2245 which case the compiler always checks the return value even without 2246 this option. In all other cases, when 'operator new' has a 2247 non-empty exception specification, memory exhaustion is signalled 2248 by throwing 'std::bad_alloc'. See also 'new (nothrow)'. 2249 2250'-fconstexpr-depth=N' 2251 Set the maximum nested evaluation depth for C++11 constexpr 2252 functions to N. A limit is needed to detect endless recursion 2253 during constant expression evaluation. The minimum specified by 2254 the standard is 512. 2255 2256'-fdeduce-init-list' 2257 Enable deduction of a template type parameter as 2258 'std::initializer_list' from a brace-enclosed initializer list, 2259 i.e. 2260 2261 template <class T> auto forward(T t) -> decltype (realfn (t)) 2262 { 2263 return realfn (t); 2264 } 2265 2266 void f() 2267 { 2268 forward({1,2}); // call forward<std::initializer_list<int>> 2269 } 2270 2271 This deduction was implemented as a possible extension to the 2272 originally proposed semantics for the C++11 standard, but was not 2273 part of the final standard, so it is disabled by default. This 2274 option is deprecated, and may be removed in a future version of 2275 G++. 2276 2277'-ffriend-injection' 2278 Inject friend functions into the enclosing namespace, so that they 2279 are visible outside the scope of the class in which they are 2280 declared. Friend functions were documented to work this way in the 2281 old Annotated C++ Reference Manual, and versions of G++ before 4.1 2282 always worked that way. However, in ISO C++ a friend function that 2283 is not declared in an enclosing scope can only be found using 2284 argument dependent lookup. This option causes friends to be 2285 injected as they were in earlier releases. 2286 2287 This option is for compatibility, and may be removed in a future 2288 release of G++. 2289 2290'-fno-elide-constructors' 2291 The C++ standard allows an implementation to omit creating a 2292 temporary that is only used to initialize another object of the 2293 same type. Specifying this option disables that optimization, and 2294 forces G++ to call the copy constructor in all cases. 2295 2296'-fno-enforce-eh-specs' 2297 Don't generate code to check for violation of exception 2298 specifications at run time. This option violates the C++ standard, 2299 but may be useful for reducing code size in production builds, much 2300 like defining 'NDEBUG'. This does not give user code permission to 2301 throw exceptions in violation of the exception specifications; the 2302 compiler still optimizes based on the specifications, so throwing 2303 an unexpected exception results in undefined behavior at run time. 2304 2305'-fextern-tls-init' 2306'-fno-extern-tls-init' 2307 The C++11 and OpenMP standards allow 'thread_local' and 2308 'threadprivate' variables to have dynamic (runtime) initialization. 2309 To support this, any use of such a variable goes through a wrapper 2310 function that performs any necessary initialization. When the use 2311 and definition of the variable are in the same translation unit, 2312 this overhead can be optimized away, but when the use is in a 2313 different translation unit there is significant overhead even if 2314 the variable doesn't actually need dynamic initialization. If the 2315 programmer can be sure that no use of the variable in a 2316 non-defining TU needs to trigger dynamic initialization (either 2317 because the variable is statically initialized, or a use of the 2318 variable in the defining TU will be executed before any uses in 2319 another TU), they can avoid this overhead with the 2320 '-fno-extern-tls-init' option. 2321 2322 On targets that support symbol aliases, the default is 2323 '-fextern-tls-init'. On targets that do not support symbol 2324 aliases, the default is '-fno-extern-tls-init'. 2325 2326'-ffor-scope' 2327'-fno-for-scope' 2328 If '-ffor-scope' is specified, the scope of variables declared in a 2329 for-init-statement is limited to the 'for' loop itself, as 2330 specified by the C++ standard. If '-fno-for-scope' is specified, 2331 the scope of variables declared in a for-init-statement extends to 2332 the end of the enclosing scope, as was the case in old versions of 2333 G++, and other (traditional) implementations of C++. 2334 2335 If neither flag is given, the default is to follow the standard, 2336 but to allow and give a warning for old-style code that would 2337 otherwise be invalid, or have different behavior. 2338 2339'-fno-gnu-keywords' 2340 Do not recognize 'typeof' as a keyword, so that code can use this 2341 word as an identifier. You can use the keyword '__typeof__' 2342 instead. '-ansi' implies '-fno-gnu-keywords'. 2343 2344'-fno-implicit-templates' 2345 Never emit code for non-inline templates that are instantiated 2346 implicitly (i.e. by use); only emit code for explicit 2347 instantiations. *Note Template Instantiation::, for more 2348 information. 2349 2350'-fno-implicit-inline-templates' 2351 Don't emit code for implicit instantiations of inline templates, 2352 either. The default is to handle inlines differently so that 2353 compiles with and without optimization need the same set of 2354 explicit instantiations. 2355 2356'-fno-implement-inlines' 2357 To save space, do not emit out-of-line copies of inline functions 2358 controlled by '#pragma implementation'. This causes linker errors 2359 if these functions are not inlined everywhere they are called. 2360 2361'-fms-extensions' 2362 Disable Wpedantic warnings about constructs used in MFC, such as 2363 implicit int and getting a pointer to member function via 2364 non-standard syntax. 2365 2366'-fno-nonansi-builtins' 2367 Disable built-in declarations of functions that are not mandated by 2368 ANSI/ISO C. These include 'ffs', 'alloca', '_exit', 'index', 2369 'bzero', 'conjf', and other related functions. 2370 2371'-fnothrow-opt' 2372 Treat a 'throw()' exception specification as if it were a 2373 'noexcept' specification to reduce or eliminate the text size 2374 overhead relative to a function with no exception specification. 2375 If the function has local variables of types with non-trivial 2376 destructors, the exception specification actually makes the 2377 function smaller because the EH cleanups for those variables can be 2378 optimized away. The semantic effect is that an exception thrown 2379 out of a function with such an exception specification results in a 2380 call to 'terminate' rather than 'unexpected'. 2381 2382'-fno-operator-names' 2383 Do not treat the operator name keywords 'and', 'bitand', 'bitor', 2384 'compl', 'not', 'or' and 'xor' as synonyms as keywords. 2385 2386'-fno-optional-diags' 2387 Disable diagnostics that the standard says a compiler does not need 2388 to issue. Currently, the only such diagnostic issued by G++ is the 2389 one for a name having multiple meanings within a class. 2390 2391'-fpermissive' 2392 Downgrade some diagnostics about nonconformant code from errors to 2393 warnings. Thus, using '-fpermissive' allows some nonconforming 2394 code to compile. 2395 2396'-fno-pretty-templates' 2397 When an error message refers to a specialization of a function 2398 template, the compiler normally prints the signature of the 2399 template followed by the template arguments and any typedefs or 2400 typenames in the signature (e.g. 'void f(T) [with T = int]' rather 2401 than 'void f(int)') so that it's clear which template is involved. 2402 When an error message refers to a specialization of a class 2403 template, the compiler omits any template arguments that match the 2404 default template arguments for that template. If either of these 2405 behaviors make it harder to understand the error message rather 2406 than easier, you can use '-fno-pretty-templates' to disable them. 2407 2408'-frepo' 2409 Enable automatic template instantiation at link time. This option 2410 also implies '-fno-implicit-templates'. *Note Template 2411 Instantiation::, for more information. 2412 2413'-fno-rtti' 2414 Disable generation of information about every class with virtual 2415 functions for use by the C++ run-time type identification features 2416 ('dynamic_cast' and 'typeid'). If you don't use those parts of the 2417 language, you can save some space by using this flag. Note that 2418 exception handling uses the same information, but G++ generates it 2419 as needed. The 'dynamic_cast' operator can still be used for casts 2420 that do not require run-time type information, i.e. casts to 'void 2421 *' or to unambiguous base classes. 2422 2423'-fstats' 2424 Emit statistics about front-end processing at the end of the 2425 compilation. This information is generally only useful to the G++ 2426 development team. 2427 2428'-fstrict-enums' 2429 Allow the compiler to optimize using the assumption that a value of 2430 enumerated type can only be one of the values of the enumeration 2431 (as defined in the C++ standard; basically, a value that can be 2432 represented in the minimum number of bits needed to represent all 2433 the enumerators). This assumption may not be valid if the program 2434 uses a cast to convert an arbitrary integer value to the enumerated 2435 type. 2436 2437'-ftemplate-backtrace-limit=N' 2438 Set the maximum number of template instantiation notes for a single 2439 warning or error to N. The default value is 10. 2440 2441'-ftemplate-depth=N' 2442 Set the maximum instantiation depth for template classes to N. A 2443 limit on the template instantiation depth is needed to detect 2444 endless recursions during template class instantiation. ANSI/ISO 2445 C++ conforming programs must not rely on a maximum depth greater 2446 than 17 (changed to 1024 in C++11). The default value is 900, as 2447 the compiler can run out of stack space before hitting 1024 in some 2448 situations. 2449 2450'-fno-threadsafe-statics' 2451 Do not emit the extra code to use the routines specified in the C++ 2452 ABI for thread-safe initialization of local statics. You can use 2453 this option to reduce code size slightly in code that doesn't need 2454 to be thread-safe. 2455 2456'-fuse-cxa-atexit' 2457 Register destructors for objects with static storage duration with 2458 the '__cxa_atexit' function rather than the 'atexit' function. 2459 This option is required for fully standards-compliant handling of 2460 static destructors, but only works if your C library supports 2461 '__cxa_atexit'. 2462 2463'-fno-use-cxa-get-exception-ptr' 2464 Don't use the '__cxa_get_exception_ptr' runtime routine. This 2465 causes 'std::uncaught_exception' to be incorrect, but is necessary 2466 if the runtime routine is not available. 2467 2468'-fvisibility-inlines-hidden' 2469 This switch declares that the user does not attempt to compare 2470 pointers to inline functions or methods where the addresses of the 2471 two functions are taken in different shared objects. 2472 2473 The effect of this is that GCC may, effectively, mark inline 2474 methods with '__attribute__ ((visibility ("hidden")))' so that they 2475 do not appear in the export table of a DSO and do not require a PLT 2476 indirection when used within the DSO. Enabling this option can 2477 have a dramatic effect on load and link times of a DSO as it 2478 massively reduces the size of the dynamic export table when the 2479 library makes heavy use of templates. 2480 2481 The behavior of this switch is not quite the same as marking the 2482 methods as hidden directly, because it does not affect static 2483 variables local to the function or cause the compiler to deduce 2484 that the function is defined in only one shared object. 2485 2486 You may mark a method as having a visibility explicitly to negate 2487 the effect of the switch for that method. For example, if you do 2488 want to compare pointers to a particular inline method, you might 2489 mark it as having default visibility. Marking the enclosing class 2490 with explicit visibility has no effect. 2491 2492 Explicitly instantiated inline methods are unaffected by this 2493 option as their linkage might otherwise cross a shared library 2494 boundary. *Note Template Instantiation::. 2495 2496'-fvisibility-ms-compat' 2497 This flag attempts to use visibility settings to make GCC's C++ 2498 linkage model compatible with that of Microsoft Visual Studio. 2499 2500 The flag makes these changes to GCC's linkage model: 2501 2502 1. It sets the default visibility to 'hidden', like 2503 '-fvisibility=hidden'. 2504 2505 2. Types, but not their members, are not hidden by default. 2506 2507 3. The One Definition Rule is relaxed for types without explicit 2508 visibility specifications that are defined in more than one 2509 shared object: those declarations are permitted if they are 2510 permitted when this option is not used. 2511 2512 In new code it is better to use '-fvisibility=hidden' and export 2513 those classes that are intended to be externally visible. 2514 Unfortunately it is possible for code to rely, perhaps 2515 accidentally, on the Visual Studio behavior. 2516 2517 Among the consequences of these changes are that static data 2518 members of the same type with the same name but defined in 2519 different shared objects are different, so changing one does not 2520 change the other; and that pointers to function members defined in 2521 different shared objects may not compare equal. When this flag is 2522 given, it is a violation of the ODR to define types with the same 2523 name differently. 2524 2525'-fvtable-verify=STD|PREINIT|NONE' 2526 Turn on (or off, if using '-fvtable-verify=none') the security 2527 feature that verifies at runtime, for every virtual call that is 2528 made, that the vtable pointer through which the call is made is 2529 valid for the type of the object, and has not been corrupted or 2530 overwritten. If an invalid vtable pointer is detected (at 2531 runtime), an error is reported and execution of the program is 2532 immediately halted. 2533 2534 This option causes runtime data structures to be built, at program 2535 start up, for verifying the vtable pointers. The options 'std' and 2536 'preinit' control the timing of when these data structures are 2537 built. In both cases the data structures are built before 2538 execution reaches 'main'. The '-fvtable-verify=std' causes these 2539 data structure to be built after the shared libraries have been 2540 loaded and initialized. '-fvtable-verify=preinit' causes them to 2541 be built before the shared libraries have been loaded and 2542 initialized. 2543 2544 If this option appears multiple times in the compiler line, with 2545 different values specified, 'none' will take highest priority over 2546 both 'std' and 'preinit'; 'preinit' will take priority over 'std'. 2547 2548'-fvtv-debug' 2549 Causes debug versions of the runtime functions for the vtable 2550 verification feature to be called. This assumes the 2551 '-fvtable-verify=std' or '-fvtable-verify=preinit' has been used. 2552 This flag will also cause the compiler to keep track of which 2553 vtable pointers it found for each class, and record that 2554 information in the file "vtv_set_ptr_data.log", in the dump file 2555 directory on the user's machine. 2556 2557 Note: This feature APPENDS data to the log file. If you want a 2558 fresh log file, be sure to delete any existing one. 2559 2560'-fvtv-counts' 2561 This is a debugging flag. When used in conjunction with 2562 '-fvtable-verify=std' or '-fvtable-verify=preinit', this causes the 2563 compiler to keep track of the total number of virtual calls it 2564 encountered and the number of verifications it inserted. It also 2565 counts the number of calls to certain runtime library functions 2566 that it inserts. This information, for each compilation unit, is 2567 written to a file named "vtv_count_data.log", in the dump_file 2568 directory on the user's machine. It also counts the size of the 2569 vtable pointer sets for each class, and writes this information to 2570 "vtv_class_set_sizes.log" in the same directory. 2571 2572 Note: This feature APPENDS data to the log files. To get a fresh 2573 log files, be sure to delete any existing ones. 2574 2575'-fno-weak' 2576 Do not use weak symbol support, even if it is provided by the 2577 linker. By default, G++ uses weak symbols if they are available. 2578 This option exists only for testing, and should not be used by 2579 end-users; it results in inferior code and has no benefits. This 2580 option may be removed in a future release of G++. 2581 2582'-nostdinc++' 2583 Do not search for header files in the standard directories specific 2584 to C++, but do still search the other standard directories. (This 2585 option is used when building the C++ library.) 2586 2587 In addition, these optimization, warning, and code generation options 2588have meanings only for C++ programs: 2589 2590'-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2591 Warn when G++ generates code that is probably not compatible with 2592 the vendor-neutral C++ ABI. Although an effort has been made to 2593 warn about all such cases, there are probably some cases that are 2594 not warned about, even though G++ is generating incompatible code. 2595 There may also be cases where warnings are emitted even though the 2596 code that is generated is compatible. 2597 2598 You should rewrite your code to avoid these warnings if you are 2599 concerned about the fact that code generated by G++ may not be 2600 binary compatible with code generated by other compilers. 2601 2602 The known incompatibilities in '-fabi-version=2' (the default) 2603 include: 2604 2605 * A template with a non-type template parameter of reference 2606 type is mangled incorrectly: 2607 extern int N; 2608 template <int &> struct S {}; 2609 void n (S<N>) {2} 2610 2611 This is fixed in '-fabi-version=3'. 2612 2613 * SIMD vector types declared using '__attribute ((vector_size))' 2614 are mangled in a non-standard way that does not allow for 2615 overloading of functions taking vectors of different sizes. 2616 2617 The mangling is changed in '-fabi-version=4'. 2618 2619 The known incompatibilities in '-fabi-version=1' include: 2620 2621 * Incorrect handling of tail-padding for bit-fields. G++ may 2622 attempt to pack data into the same byte as a base class. For 2623 example: 2624 2625 struct A { virtual void f(); int f1 : 1; }; 2626 struct B : public A { int f2 : 1; }; 2627 2628 In this case, G++ places 'B::f2' into the same byte as 2629 'A::f1'; other compilers do not. You can avoid this problem 2630 by explicitly padding 'A' so that its size is a multiple of 2631 the byte size on your platform; that causes G++ and other 2632 compilers to lay out 'B' identically. 2633 2634 * Incorrect handling of tail-padding for virtual bases. G++ 2635 does not use tail padding when laying out virtual bases. For 2636 example: 2637 2638 struct A { virtual void f(); char c1; }; 2639 struct B { B(); char c2; }; 2640 struct C : public A, public virtual B {}; 2641 2642 In this case, G++ does not place 'B' into the tail-padding for 2643 'A'; other compilers do. You can avoid this problem by 2644 explicitly padding 'A' so that its size is a multiple of its 2645 alignment (ignoring virtual base classes); that causes G++ and 2646 other compilers to lay out 'C' identically. 2647 2648 * Incorrect handling of bit-fields with declared widths greater 2649 than that of their underlying types, when the bit-fields 2650 appear in a union. For example: 2651 2652 union U { int i : 4096; }; 2653 2654 Assuming that an 'int' does not have 4096 bits, G++ makes the 2655 union too small by the number of bits in an 'int'. 2656 2657 * Empty classes can be placed at incorrect offsets. For 2658 example: 2659 2660 struct A {}; 2661 2662 struct B { 2663 A a; 2664 virtual void f (); 2665 }; 2666 2667 struct C : public B, public A {}; 2668 2669 G++ places the 'A' base class of 'C' at a nonzero offset; it 2670 should be placed at offset zero. G++ mistakenly believes that 2671 the 'A' data member of 'B' is already at offset zero. 2672 2673 * Names of template functions whose types involve 'typename' or 2674 template template parameters can be mangled incorrectly. 2675 2676 template <typename Q> 2677 void f(typename Q::X) {} 2678 2679 template <template <typename> class Q> 2680 void f(typename Q<int>::X) {} 2681 2682 Instantiations of these templates may be mangled incorrectly. 2683 2684 It also warns about psABI-related changes. The known psABI changes 2685 at this point include: 2686 2687 * For SysV/x86-64, unions with 'long double' members are passed 2688 in memory as specified in psABI. For example: 2689 2690 union U { 2691 long double ld; 2692 int i; 2693 }; 2694 2695 'union U' is always passed in memory. 2696 2697'-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2698 Warn when a class seems unusable because all the constructors or 2699 destructors in that class are private, and it has neither friends 2700 nor public static member functions. Also warn if there are no 2701 non-private methods, and there's at least one private member 2702 function that isn't a constructor or destructor. 2703 2704'-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)' 2705 Warn when 'delete' is used to destroy an instance of a class that 2706 has virtual functions and non-virtual destructor. It is unsafe to 2707 delete an instance of a derived class through a pointer to a base 2708 class if the base class does not have a virtual destructor. This 2709 warning is enabled by '-Wall'. 2710 2711'-Wliteral-suffix (C++ and Objective-C++ only)' 2712 Warn when a string or character literal is followed by a ud-suffix 2713 which does not begin with an underscore. As a conforming 2714 extension, GCC treats such suffixes as separate preprocessing 2715 tokens in order to maintain backwards compatibility with code that 2716 uses formatting macros from '<inttypes.h>'. For example: 2717 2718 #define __STDC_FORMAT_MACROS 2719 #include <inttypes.h> 2720 #include <stdio.h> 2721 2722 int main() { 2723 int64_t i64 = 123; 2724 printf("My int64: %"PRId64"\n", i64); 2725 } 2726 2727 In this case, 'PRId64' is treated as a separate preprocessing 2728 token. 2729 2730 This warning is enabled by default. 2731 2732'-Wnarrowing (C++ and Objective-C++ only)' 2733 Warn when a narrowing conversion prohibited by C++11 occurs within 2734 '{ }', e.g. 2735 2736 int i = { 2.2 }; // error: narrowing from double to int 2737 2738 This flag is included in '-Wall' and '-Wc++11-compat'. 2739 2740 With '-std=c++11', '-Wno-narrowing' suppresses the diagnostic 2741 required by the standard. Note that this does not affect the 2742 meaning of well-formed code; narrowing conversions are still 2743 considered ill-formed in SFINAE context. 2744 2745'-Wnoexcept (C++ and Objective-C++ only)' 2746 Warn when a noexcept-expression evaluates to false because of a 2747 call to a function that does not have a non-throwing exception 2748 specification (i.e. 'throw()' or 'noexcept') but is known by the 2749 compiler to never throw an exception. 2750 2751'-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2752 Warn when a class has virtual functions and an accessible 2753 non-virtual destructor itself or in an accessible polymorphic base 2754 class, in which case it is possible but unsafe to delete an 2755 instance of a derived class through a pointer to the class itself 2756 or base class. This warning is automatically enabled if '-Weffc++' 2757 is specified. 2758 2759'-Wreorder (C++ and Objective-C++ only)' 2760 Warn when the order of member initializers given in the code does 2761 not match the order in which they must be executed. For instance: 2762 2763 struct A { 2764 int i; 2765 int j; 2766 A(): j (0), i (1) { } 2767 }; 2768 2769 The compiler rearranges the member initializers for 'i' and 'j' to 2770 match the declaration order of the members, emitting a warning to 2771 that effect. This warning is enabled by '-Wall'. 2772 2773'-fext-numeric-literals (C++ and Objective-C++ only)' 2774 Accept imaginary, fixed-point, or machine-defined literal number 2775 suffixes as GNU extensions. When this option is turned off these 2776 suffixes are treated as C++11 user-defined literal numeric 2777 suffixes. This is on by default for all pre-C++11 dialects and all 2778 GNU dialects: '-std=c++98', '-std=gnu++98', '-std=gnu++11', 2779 '-std=gnu++1y'. This option is off by default for ISO C++11 2780 onwards ('-std=c++11', ...). 2781 2782 The following '-W...' options are not affected by '-Wall'. 2783 2784'-Weffc++ (C++ and Objective-C++ only)' 2785 Warn about violations of the following style guidelines from Scott 2786 Meyers' 'Effective C++' series of books: 2787 2788 * Define a copy constructor and an assignment operator for 2789 classes with dynamically-allocated memory. 2790 2791 * Prefer initialization to assignment in constructors. 2792 2793 * Have 'operator=' return a reference to '*this'. 2794 2795 * Don't try to return a reference when you must return an 2796 object. 2797 2798 * Distinguish between prefix and postfix forms of increment and 2799 decrement operators. 2800 2801 * Never overload '&&', '||', or ','. 2802 2803 This option also enables '-Wnon-virtual-dtor', which is also one of 2804 the effective C++ recommendations. However, the check is extended 2805 to warn about the lack of virtual destructor in accessible 2806 non-polymorphic bases classes too. 2807 2808 When selecting this option, be aware that the standard library 2809 headers do not obey all of these guidelines; use 'grep -v' to 2810 filter out those warnings. 2811 2812'-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2813 Warn about the use of an uncasted 'NULL' as sentinel. When 2814 compiling only with GCC this is a valid sentinel, as 'NULL' is 2815 defined to '__null'. Although it is a null pointer constant rather 2816 than a null pointer, it is guaranteed to be of the same size as a 2817 pointer. But this use is not portable across different compilers. 2818 2819'-Wno-non-template-friend (C++ and Objective-C++ only)' 2820 Disable warnings when non-templatized friend functions are declared 2821 within a template. Since the advent of explicit template 2822 specification support in G++, if the name of the friend is an 2823 unqualified-id (i.e., 'friend foo(int)'), the C++ language 2824 specification demands that the friend declare or define an 2825 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2826 implemented explicit specification, unqualified-ids could be 2827 interpreted as a particular specialization of a templatized 2828 function. Because this non-conforming behavior is no longer the 2829 default behavior for G++, '-Wnon-template-friend' allows the 2830 compiler to check existing code for potential trouble spots and is 2831 on by default. This new compiler behavior can be turned off with 2832 '-Wno-non-template-friend', which keeps the conformant compiler 2833 code but disables the helpful warning. 2834 2835'-Wold-style-cast (C++ and Objective-C++ only)' 2836 Warn if an old-style (C-style) cast to a non-void type is used 2837 within a C++ program. The new-style casts ('dynamic_cast', 2838 'static_cast', 'reinterpret_cast', and 'const_cast') are less 2839 vulnerable to unintended effects and much easier to search for. 2840 2841'-Woverloaded-virtual (C++ and Objective-C++ only)' 2842 Warn when a function declaration hides virtual functions from a 2843 base class. For example, in: 2844 2845 struct A { 2846 virtual void f(); 2847 }; 2848 2849 struct B: public A { 2850 void f(int); 2851 }; 2852 2853 the 'A' class version of 'f' is hidden in 'B', and code like: 2854 2855 B* b; 2856 b->f(); 2857 2858 fails to compile. 2859 2860'-Wno-pmf-conversions (C++ and Objective-C++ only)' 2861 Disable the diagnostic for converting a bound pointer to member 2862 function to a plain pointer. 2863 2864'-Wsign-promo (C++ and Objective-C++ only)' 2865 Warn when overload resolution chooses a promotion from unsigned or 2866 enumerated type to a signed type, over a conversion to an unsigned 2867 type of the same size. Previous versions of G++ tried to preserve 2868 unsignedness, but the standard mandates the current behavior. 2869 2870 2871File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2872 28733.6 Options Controlling Objective-C and Objective-C++ Dialects 2874============================================================== 2875 2876(NOTE: This manual does not describe the Objective-C and Objective-C++ 2877languages themselves. *Note Language Standards Supported by GCC: 2878Standards, for references.) 2879 2880 This section describes the command-line options that are only 2881meaningful for Objective-C and Objective-C++ programs. You can also use 2882most of the language-independent GNU compiler options. For example, you 2883might compile a file 'some_class.m' like this: 2884 2885 gcc -g -fgnu-runtime -O -c some_class.m 2886 2887In this example, '-fgnu-runtime' is an option meant only for Objective-C 2888and Objective-C++ programs; you can use the other options with any 2889language supported by GCC. 2890 2891 Note that since Objective-C is an extension of the C language, 2892Objective-C compilations may also use options specific to the C 2893front-end (e.g., '-Wtraditional'). Similarly, Objective-C++ 2894compilations may use C++-specific options (e.g., '-Wabi'). 2895 2896 Here is a list of options that are _only_ for compiling Objective-C and 2897Objective-C++ programs: 2898 2899'-fconstant-string-class=CLASS-NAME' 2900 Use CLASS-NAME as the name of the class to instantiate for each 2901 literal string specified with the syntax '@"..."'. The default 2902 class name is 'NXConstantString' if the GNU runtime is being used, 2903 and 'NSConstantString' if the NeXT runtime is being used (see 2904 below). The '-fconstant-cfstrings' option, if also present, 2905 overrides the '-fconstant-string-class' setting and cause '@"..."' 2906 literals to be laid out as constant CoreFoundation strings. 2907 2908'-fgnu-runtime' 2909 Generate object code compatible with the standard GNU Objective-C 2910 runtime. This is the default for most types of systems. 2911 2912'-fnext-runtime' 2913 Generate output compatible with the NeXT runtime. This is the 2914 default for NeXT-based systems, including Darwin and Mac OS X. The 2915 macro '__NEXT_RUNTIME__' is predefined if (and only if) this option 2916 is used. 2917 2918'-fno-nil-receivers' 2919 Assume that all Objective-C message dispatches ('[receiver 2920 message:arg]') in this translation unit ensure that the receiver is 2921 not 'nil'. This allows for more efficient entry points in the 2922 runtime to be used. This option is only available in conjunction 2923 with the NeXT runtime and ABI version 0 or 1. 2924 2925'-fobjc-abi-version=N' 2926 Use version N of the Objective-C ABI for the selected runtime. 2927 This option is currently supported only for the NeXT runtime. In 2928 that case, Version 0 is the traditional (32-bit) ABI without 2929 support for properties and other Objective-C 2.0 additions. 2930 Version 1 is the traditional (32-bit) ABI with support for 2931 properties and other Objective-C 2.0 additions. Version 2 is the 2932 modern (64-bit) ABI. If nothing is specified, the default is 2933 Version 0 on 32-bit target machines, and Version 2 on 64-bit target 2934 machines. 2935 2936'-fobjc-call-cxx-cdtors' 2937 For each Objective-C class, check if any of its instance variables 2938 is a C++ object with a non-trivial default constructor. If so, 2939 synthesize a special '- (id) .cxx_construct' instance method which 2940 runs non-trivial default constructors on any such instance 2941 variables, in order, and then return 'self'. Similarly, check if 2942 any instance variable is a C++ object with a non-trivial 2943 destructor, and if so, synthesize a special '- (void) 2944 .cxx_destruct' method which runs all such default destructors, in 2945 reverse order. 2946 2947 The '- (id) .cxx_construct' and '- (void) .cxx_destruct' methods 2948 thusly generated only operate on instance variables declared in the 2949 current Objective-C class, and not those inherited from 2950 superclasses. It is the responsibility of the Objective-C runtime 2951 to invoke all such methods in an object's inheritance hierarchy. 2952 The '- (id) .cxx_construct' methods are invoked by the runtime 2953 immediately after a new object instance is allocated; the '- (void) 2954 .cxx_destruct' methods are invoked immediately before the runtime 2955 deallocates an object instance. 2956 2957 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2958 later has support for invoking the '- (id) .cxx_construct' and '- 2959 (void) .cxx_destruct' methods. 2960 2961'-fobjc-direct-dispatch' 2962 Allow fast jumps to the message dispatcher. On Darwin this is 2963 accomplished via the comm page. 2964 2965'-fobjc-exceptions' 2966 Enable syntactic support for structured exception handling in 2967 Objective-C, similar to what is offered by C++ and Java. This 2968 option is required to use the Objective-C keywords '@try', 2969 '@throw', '@catch', '@finally' and '@synchronized'. This option is 2970 available with both the GNU runtime and the NeXT runtime (but not 2971 available in conjunction with the NeXT runtime on Mac OS X 10.2 and 2972 earlier). 2973 2974'-fobjc-gc' 2975 Enable garbage collection (GC) in Objective-C and Objective-C++ 2976 programs. This option is only available with the NeXT runtime; the 2977 GNU runtime has a different garbage collection implementation that 2978 does not require special compiler flags. 2979 2980'-fobjc-nilcheck' 2981 For the NeXT runtime with version 2 of the ABI, check for a nil 2982 receiver in method invocations before doing the actual method call. 2983 This is the default and can be disabled using '-fno-objc-nilcheck'. 2984 Class methods and super calls are never checked for nil in this way 2985 no matter what this flag is set to. Currently this flag does 2986 nothing when the GNU runtime, or an older version of the NeXT 2987 runtime ABI, is used. 2988 2989'-fobjc-std=objc1' 2990 Conform to the language syntax of Objective-C 1.0, the language 2991 recognized by GCC 4.0. This only affects the Objective-C additions 2992 to the C/C++ language; it does not affect conformance to C/C++ 2993 standards, which is controlled by the separate C/C++ dialect option 2994 flags. When this option is used with the Objective-C or 2995 Objective-C++ compiler, any Objective-C syntax that is not 2996 recognized by GCC 4.0 is rejected. This is useful if you need to 2997 make sure that your Objective-C code can be compiled with older 2998 versions of GCC. 2999 3000'-freplace-objc-classes' 3001 Emit a special marker instructing 'ld(1)' not to statically link in 3002 the resulting object file, and allow 'dyld(1)' to load it in at run 3003 time instead. This is used in conjunction with the 3004 Fix-and-Continue debugging mode, where the object file in question 3005 may be recompiled and dynamically reloaded in the course of program 3006 execution, without the need to restart the program itself. 3007 Currently, Fix-and-Continue functionality is only available in 3008 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 3009 3010'-fzero-link' 3011 When compiling for the NeXT runtime, the compiler ordinarily 3012 replaces calls to 'objc_getClass("...")' (when the name of the 3013 class is known at compile time) with static class references that 3014 get initialized at load time, which improves run-time performance. 3015 Specifying the '-fzero-link' flag suppresses this behavior and 3016 causes calls to 'objc_getClass("...")' to be retained. This is 3017 useful in Zero-Link debugging mode, since it allows for individual 3018 class implementations to be modified during program execution. The 3019 GNU runtime currently always retains calls to 3020 'objc_get_class("...")' regardless of command-line options. 3021 3022'-gen-decls' 3023 Dump interface declarations for all classes seen in the source file 3024 to a file named 'SOURCENAME.decl'. 3025 3026'-Wassign-intercept (Objective-C and Objective-C++ only)' 3027 Warn whenever an Objective-C assignment is being intercepted by the 3028 garbage collector. 3029 3030'-Wno-protocol (Objective-C and Objective-C++ only)' 3031 If a class is declared to implement a protocol, a warning is issued 3032 for every method in the protocol that is not implemented by the 3033 class. The default behavior is to issue a warning for every method 3034 not explicitly implemented in the class, even if a method 3035 implementation is inherited from the superclass. If you use the 3036 '-Wno-protocol' option, then methods inherited from the superclass 3037 are considered to be implemented, and no warning is issued for 3038 them. 3039 3040'-Wselector (Objective-C and Objective-C++ only)' 3041 Warn if multiple methods of different types for the same selector 3042 are found during compilation. The check is performed on the list 3043 of methods in the final stage of compilation. Additionally, a 3044 check is performed for each selector appearing in a 3045 '@selector(...)' expression, and a corresponding method for that 3046 selector has been found during compilation. Because these checks 3047 scan the method table only at the end of compilation, these 3048 warnings are not produced if the final stage of compilation is not 3049 reached, for example because an error is found during compilation, 3050 or because the '-fsyntax-only' option is being used. 3051 3052'-Wstrict-selector-match (Objective-C and Objective-C++ only)' 3053 Warn if multiple methods with differing argument and/or return 3054 types are found for a given selector when attempting to send a 3055 message using this selector to a receiver of type 'id' or 'Class'. 3056 When this flag is off (which is the default behavior), the compiler 3057 omits such warnings if any differences found are confined to types 3058 that share the same size and alignment. 3059 3060'-Wundeclared-selector (Objective-C and Objective-C++ only)' 3061 Warn if a '@selector(...)' expression referring to an undeclared 3062 selector is found. A selector is considered undeclared if no 3063 method with that name has been declared before the '@selector(...)' 3064 expression, either explicitly in an '@interface' or '@protocol' 3065 declaration, or implicitly in an '@implementation' section. This 3066 option always performs its checks as soon as a '@selector(...)' 3067 expression is found, while '-Wselector' only performs its checks in 3068 the final stage of compilation. This also enforces the coding 3069 style convention that methods and selectors must be declared before 3070 being used. 3071 3072'-print-objc-runtime-info' 3073 Generate C header describing the largest structure that is passed 3074 by value, if any. 3075 3076 3077File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 3078 30793.7 Options to Control Diagnostic Messages Formatting 3080===================================================== 3081 3082Traditionally, diagnostic messages have been formatted irrespective of 3083the output device's aspect (e.g. its width, ...). You can use the 3084options described below to control the formatting algorithm for 3085diagnostic messages, e.g. how many characters per line, how often source 3086location information should be reported. Note that some language front 3087ends may not honor these options. 3088 3089'-fmessage-length=N' 3090 Try to format error messages so that they fit on lines of about N 3091 characters. The default is 72 characters for 'g++' and 0 for the 3092 rest of the front ends supported by GCC. If N is zero, then no 3093 line-wrapping is done; each error message appears on a single line. 3094 3095'-fdiagnostics-show-location=once' 3096 Only meaningful in line-wrapping mode. Instructs the diagnostic 3097 messages reporter to emit source location information _once_; that 3098 is, in case the message is too long to fit on a single physical 3099 line and has to be wrapped, the source location won't be emitted 3100 (as prefix) again, over and over, in subsequent continuation lines. 3101 This is the default behavior. 3102 3103'-fdiagnostics-show-location=every-line' 3104 Only meaningful in line-wrapping mode. Instructs the diagnostic 3105 messages reporter to emit the same source location information (as 3106 prefix) for physical lines that result from the process of breaking 3107 a message which is too long to fit on a single line. 3108 3109'-fdiagnostics-color[=WHEN]' 3110'-fno-diagnostics-color' 3111 Use color in diagnostics. WHEN is 'never', 'always', or 'auto'. 3112 The default is 'never' if 'GCC_COLORS' environment variable isn't 3113 present in the environment, and 'auto' otherwise. 'auto' means to 3114 use color only when the standard error is a terminal. The forms 3115 '-fdiagnostics-color' and '-fno-diagnostics-color' are aliases for 3116 '-fdiagnostics-color=always' and '-fdiagnostics-color=never', 3117 respectively. 3118 3119 The colors are defined by the environment variable 'GCC_COLORS'. 3120 Its value is a colon-separated list of capabilities and Select 3121 Graphic Rendition (SGR) substrings. SGR commands are interpreted 3122 by the terminal or terminal emulator. (See the section in the 3123 documentation of your text terminal for permitted values and their 3124 meanings as character attributes.) These substring values are 3125 integers in decimal representation and can be concatenated with 3126 semicolons. Common values to concatenate include '1' for bold, '4' 3127 for underline, '5' for blink, '7' for inverse, '39' for default 3128 foreground color, '30' to '37' for foreground colors, '90' to '97' 3129 for 16-color mode foreground colors, '38;5;0' to '38;5;255' for 3130 88-color and 256-color modes foreground colors, '49' for default 3131 background color, '40' to '47' for background colors, '100' to 3132 '107' for 16-color mode background colors, and '48;5;0' to 3133 '48;5;255' for 88-color and 256-color modes background colors. 3134 3135 The default 'GCC_COLORS' is 3136 'error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' 3137 where '01;31' is bold red, '01;35' is bold magenta, '01;36' is bold 3138 cyan, '01;32' is bold green and '01' is bold. Setting 'GCC_COLORS' 3139 to the empty string disables colors. Supported capabilities are as 3140 follows. 3141 3142 'error=' 3143 SGR substring for error: markers. 3144 3145 'warning=' 3146 SGR substring for warning: markers. 3147 3148 'note=' 3149 SGR substring for note: markers. 3150 3151 'caret=' 3152 SGR substring for caret line. 3153 3154 'locus=' 3155 SGR substring for location information, 'file:line' or 3156 'file:line:column' etc. 3157 3158 'quote=' 3159 SGR substring for information printed within quotes. 3160 3161'-fno-diagnostics-show-option' 3162 By default, each diagnostic emitted includes text indicating the 3163 command-line option that directly controls the diagnostic (if such 3164 an option is known to the diagnostic machinery). Specifying the 3165 '-fno-diagnostics-show-option' flag suppresses that behavior. 3166 3167'-fno-diagnostics-show-caret' 3168 By default, each diagnostic emitted includes the original source 3169 line and a caret '^' indicating the column. This option suppresses 3170 this information. 3171 3172 3173File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 3174 31753.8 Options to Request or Suppress Warnings 3176=========================================== 3177 3178Warnings are diagnostic messages that report constructions that are not 3179inherently erroneous but that are risky or suggest there may have been 3180an error. 3181 3182 The following language-independent options do not enable specific 3183warnings but control the kinds of diagnostics produced by GCC. 3184 3185'-fsyntax-only' 3186 Check the code for syntax errors, but don't do anything beyond 3187 that. 3188 3189'-fmax-errors=N' 3190 Limits the maximum number of error messages to N, at which point 3191 GCC bails out rather than attempting to continue processing the 3192 source code. If N is 0 (the default), there is no limit on the 3193 number of error messages produced. If '-Wfatal-errors' is also 3194 specified, then '-Wfatal-errors' takes precedence over this option. 3195 3196'-w' 3197 Inhibit all warning messages. 3198 3199'-Werror' 3200 Make all warnings into errors. 3201 3202'-Werror=' 3203 Make the specified warning into an error. The specifier for a 3204 warning is appended; for example '-Werror=switch' turns the 3205 warnings controlled by '-Wswitch' into errors. This switch takes a 3206 negative form, to be used to negate '-Werror' for specific 3207 warnings; for example '-Wno-error=switch' makes '-Wswitch' warnings 3208 not be errors, even when '-Werror' is in effect. 3209 3210 The warning message for each controllable warning includes the 3211 option that controls the warning. That option can then be used 3212 with '-Werror=' and '-Wno-error=' as described above. (Printing of 3213 the option in the warning message can be disabled using the 3214 '-fno-diagnostics-show-option' flag.) 3215 3216 Note that specifying '-Werror='FOO automatically implies '-W'FOO. 3217 However, '-Wno-error='FOO does not imply anything. 3218 3219'-Wfatal-errors' 3220 This option causes the compiler to abort compilation on the first 3221 error occurred rather than trying to keep going and printing 3222 further error messages. 3223 3224 You can request many specific warnings with options beginning with 3225'-W', for example '-Wimplicit' to request warnings on implicit 3226declarations. Each of these specific warning options also has a 3227negative form beginning '-Wno-' to turn off warnings; for example, 3228'-Wno-implicit'. This manual lists only one of the two forms, whichever 3229is not the default. For further language-specific options also refer to 3230*note C++ Dialect Options:: and *note Objective-C and Objective-C++ 3231Dialect Options::. 3232 3233 When an unrecognized warning option is requested (e.g., 3234'-Wunknown-warning'), GCC emits a diagnostic stating that the option is 3235not recognized. However, if the '-Wno-' form is used, the behavior is 3236slightly different: no diagnostic is produced for '-Wno-unknown-warning' 3237unless other diagnostics are being produced. This allows the use of new 3238'-Wno-' options with old compilers, but if something goes wrong, the 3239compiler warns that an unrecognized option is present. 3240 3241'-Wpedantic' 3242'-pedantic' 3243 Issue all the warnings demanded by strict ISO C and ISO C++; reject 3244 all programs that use forbidden extensions, and some other programs 3245 that do not follow ISO C and ISO C++. For ISO C, follows the 3246 version of the ISO C standard specified by any '-std' option used. 3247 3248 Valid ISO C and ISO C++ programs should compile properly with or 3249 without this option (though a rare few require '-ansi' or a '-std' 3250 option specifying the required version of ISO C). However, without 3251 this option, certain GNU extensions and traditional C and C++ 3252 features are supported as well. With this option, they are 3253 rejected. 3254 3255 '-Wpedantic' does not cause warning messages for use of the 3256 alternate keywords whose names begin and end with '__'. Pedantic 3257 warnings are also disabled in the expression that follows 3258 '__extension__'. However, only system header files should use 3259 these escape routes; application programs should avoid them. *Note 3260 Alternate Keywords::. 3261 3262 Some users try to use '-Wpedantic' to check programs for strict ISO 3263 C conformance. They soon find that it does not do quite what they 3264 want: it finds some non-ISO practices, but not all--only those for 3265 which ISO C _requires_ a diagnostic, and some others for which 3266 diagnostics have been added. 3267 3268 A feature to report any failure to conform to ISO C might be useful 3269 in some instances, but would require considerable additional work 3270 and would be quite different from '-Wpedantic'. We don't have 3271 plans to support such a feature in the near future. 3272 3273 Where the standard specified with '-std' represents a GNU extended 3274 dialect of C, such as 'gnu90' or 'gnu99', there is a corresponding 3275 "base standard", the version of ISO C on which the GNU extended 3276 dialect is based. Warnings from '-Wpedantic' are given where they 3277 are required by the base standard. (It does not make sense for 3278 such warnings to be given only for features not in the specified 3279 GNU C dialect, since by definition the GNU dialects of C include 3280 all features the compiler supports with the given option, and there 3281 would be nothing to warn about.) 3282 3283'-pedantic-errors' 3284 Like '-Wpedantic', except that errors are produced rather than 3285 warnings. 3286 3287'-Wall' 3288 This enables all the warnings about constructions that some users 3289 consider questionable, and that are easy to avoid (or modify to 3290 prevent the warning), even in conjunction with macros. This also 3291 enables some language-specific warnings described in *note C++ 3292 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 3293 Options::. 3294 3295 '-Wall' turns on the following warning flags: 3296 3297 -Waddress 3298 -Warray-bounds (only with -O2) 3299 -Wc++11-compat 3300 -Wchar-subscripts 3301 -Wenum-compare (in C/ObjC; this is on by default in C++) 3302 -Wimplicit-int (C and Objective-C only) 3303 -Wimplicit-function-declaration (C and Objective-C only) 3304 -Wcomment 3305 -Wformat 3306 -Wmain (only for C/ObjC and unless -ffreestanding) 3307 -Wmaybe-uninitialized 3308 -Wmissing-braces (only for C/ObjC) 3309 -Wnonnull 3310 -Wopenmp-simd 3311 -Wparentheses 3312 -Wpointer-sign 3313 -Wreorder 3314 -Wreturn-type 3315 -Wsequence-point 3316 -Wsign-compare (only in C++) 3317 -Wstrict-aliasing 3318 -Wstrict-overflow=1 3319 -Wswitch 3320 -Wtrigraphs 3321 -Wuninitialized 3322 -Wunknown-pragmas 3323 -Wunused-function 3324 -Wunused-label 3325 -Wunused-value 3326 -Wunused-variable 3327 -Wvolatile-register-var 3328 3329 3330 Note that some warning flags are not implied by '-Wall'. Some of 3331 them warn about constructions that users generally do not consider 3332 questionable, but which occasionally you might wish to check for; 3333 others warn about constructions that are necessary or hard to avoid 3334 in some cases, and there is no simple way to modify the code to 3335 suppress the warning. Some of them are enabled by '-Wextra' but 3336 many of them must be enabled individually. 3337 3338'-Wextra' 3339 This enables some extra warning flags that are not enabled by 3340 '-Wall'. (This option used to be called '-W'. The older name is 3341 still supported, but the newer name is more descriptive.) 3342 3343 -Wclobbered 3344 -Wempty-body 3345 -Wignored-qualifiers 3346 -Wmissing-field-initializers 3347 -Wmissing-parameter-type (C only) 3348 -Wold-style-declaration (C only) 3349 -Woverride-init 3350 -Wsign-compare 3351 -Wtype-limits 3352 -Wuninitialized 3353 -Wunused-parameter (only with -Wunused or -Wall) 3354 -Wunused-but-set-parameter (only with -Wunused or -Wall) 3355 3356 3357 The option '-Wextra' also prints warning messages for the following 3358 cases: 3359 3360 * A pointer is compared against integer zero with '<', '<=', 3361 '>', or '>='. 3362 3363 * (C++ only) An enumerator and a non-enumerator both appear in a 3364 conditional expression. 3365 3366 * (C++ only) Ambiguous virtual bases. 3367 3368 * (C++ only) Subscripting an array that has been declared 3369 'register'. 3370 3371 * (C++ only) Taking the address of a variable that has been 3372 declared 'register'. 3373 3374 * (C++ only) A base class is not initialized in a derived 3375 class's copy constructor. 3376 3377'-Wchar-subscripts' 3378 Warn if an array subscript has type 'char'. This is a common cause 3379 of error, as programmers often forget that this type is signed on 3380 some machines. This warning is enabled by '-Wall'. 3381 3382'-Wcomment' 3383 Warn whenever a comment-start sequence '/*' appears in a '/*' 3384 comment, or whenever a Backslash-Newline appears in a '//' comment. 3385 This warning is enabled by '-Wall'. 3386 3387'-Wno-coverage-mismatch' 3388 Warn if feedback profiles do not match when using the 3389 '-fprofile-use' option. If a source file is changed between 3390 compiling with '-fprofile-gen' and with '-fprofile-use', the files 3391 with the profile feedback can fail to match the source file and GCC 3392 cannot use the profile feedback information. By default, this 3393 warning is enabled and is treated as an error. 3394 '-Wno-coverage-mismatch' can be used to disable the warning or 3395 '-Wno-error=coverage-mismatch' can be used to disable the error. 3396 Disabling the error for this warning can result in poorly optimized 3397 code and is useful only in the case of very minor changes such as 3398 bug fixes to an existing code-base. Completely disabling the 3399 warning is not recommended. 3400 3401'-Wno-cpp' 3402 (C, Objective-C, C++, Objective-C++ and Fortran only) 3403 3404 Suppress warning messages emitted by '#warning' directives. 3405 3406'-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)' 3407 Give a warning when a value of type 'float' is implicitly promoted 3408 to 'double'. CPUs with a 32-bit "single-precision" floating-point 3409 unit implement 'float' in hardware, but emulate 'double' in 3410 software. On such a machine, doing computations using 'double' 3411 values is much more expensive because of the overhead required for 3412 software emulation. 3413 3414 It is easy to accidentally do computations with 'double' because 3415 floating-point literals are implicitly of type 'double'. For 3416 example, in: 3417 float area(float radius) 3418 { 3419 return 3.14159 * radius * radius; 3420 } 3421 the compiler performs the entire computation with 'double' because 3422 the floating-point literal is a 'double'. 3423 3424'-Wformat' 3425'-Wformat=N' 3426 Check calls to 'printf' and 'scanf', etc., to make sure that the 3427 arguments supplied have types appropriate to the format string 3428 specified, and that the conversions specified in the format string 3429 make sense. This includes standard functions, and others specified 3430 by format attributes (*note Function Attributes::), in the 3431 'printf', 'scanf', 'strftime' and 'strfmon' (an X/Open extension, 3432 not in the C standard) families (or other target-specific 3433 families). Which functions are checked without format attributes 3434 having been specified depends on the standard version selected, and 3435 such checks of functions without the attribute specified are 3436 disabled by '-ffreestanding' or '-fno-builtin'. 3437 3438 The formats are checked against the format features supported by 3439 GNU libc version 2.2. These include all ISO C90 and C99 features, 3440 as well as features from the Single Unix Specification and some BSD 3441 and GNU extensions. Other library implementations may not support 3442 all these features; GCC does not support warning about features 3443 that go beyond a particular library's limitations. However, if 3444 '-Wpedantic' is used with '-Wformat', warnings are given about 3445 format features not in the selected standard version (but not for 3446 'strfmon' formats, since those are not in any version of the C 3447 standard). *Note Options Controlling C Dialect: C Dialect Options. 3448 3449 '-Wformat=1' 3450 '-Wformat' 3451 Option '-Wformat' is equivalent to '-Wformat=1', and 3452 '-Wno-format' is equivalent to '-Wformat=0'. Since '-Wformat' 3453 also checks for null format arguments for several functions, 3454 '-Wformat' also implies '-Wnonnull'. Some aspects of this 3455 level of format checking can be disabled by the options: 3456 '-Wno-format-contains-nul', '-Wno-format-extra-args', and 3457 '-Wno-format-zero-length'. '-Wformat' is enabled by '-Wall'. 3458 3459 '-Wno-format-contains-nul' 3460 If '-Wformat' is specified, do not warn about format strings 3461 that contain NUL bytes. 3462 3463 '-Wno-format-extra-args' 3464 If '-Wformat' is specified, do not warn about excess arguments 3465 to a 'printf' or 'scanf' format function. The C standard 3466 specifies that such arguments are ignored. 3467 3468 Where the unused arguments lie between used arguments that are 3469 specified with '$' operand number specifications, normally 3470 warnings are still given, since the implementation could not 3471 know what type to pass to 'va_arg' to skip the unused 3472 arguments. However, in the case of 'scanf' formats, this 3473 option suppresses the warning if the unused arguments are all 3474 pointers, since the Single Unix Specification says that such 3475 unused arguments are allowed. 3476 3477 '-Wno-format-zero-length' 3478 If '-Wformat' is specified, do not warn about zero-length 3479 formats. The C standard specifies that zero-length formats 3480 are allowed. 3481 3482 '-Wformat=2' 3483 Enable '-Wformat' plus additional format checks. Currently 3484 equivalent to '-Wformat -Wformat-nonliteral -Wformat-security 3485 -Wformat-y2k'. 3486 3487 '-Wformat-nonliteral' 3488 If '-Wformat' is specified, also warn if the format string is 3489 not a string literal and so cannot be checked, unless the 3490 format function takes its format arguments as a 'va_list'. 3491 3492 '-Wformat-security' 3493 If '-Wformat' is specified, also warn about uses of format 3494 functions that represent possible security problems. At 3495 present, this warns about calls to 'printf' and 'scanf' 3496 functions where the format string is not a string literal and 3497 there are no format arguments, as in 'printf (foo);'. This 3498 may be a security hole if the format string came from 3499 untrusted input and contains '%n'. (This is currently a 3500 subset of what '-Wformat-nonliteral' warns about, but in 3501 future warnings may be added to '-Wformat-security' that are 3502 not included in '-Wformat-nonliteral'.) 3503 3504 '-Wformat-y2k' 3505 If '-Wformat' is specified, also warn about 'strftime' formats 3506 that may yield only a two-digit year. 3507 3508'-Wnonnull' 3509 Warn about passing a null pointer for arguments marked as requiring 3510 a non-null value by the 'nonnull' function attribute. 3511 3512 '-Wnonnull' is included in '-Wall' and '-Wformat'. It can be 3513 disabled with the '-Wno-nonnull' option. 3514 3515'-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3516 Warn about uninitialized variables that are initialized with 3517 themselves. Note this option can only be used with the 3518 '-Wuninitialized' option. 3519 3520 For example, GCC warns about 'i' being uninitialized in the 3521 following snippet only when '-Winit-self' has been specified: 3522 int f() 3523 { 3524 int i = i; 3525 return i; 3526 } 3527 3528 This warning is enabled by '-Wall' in C++. 3529 3530'-Wimplicit-int (C and Objective-C only)' 3531 Warn when a declaration does not specify a type. This warning is 3532 enabled by '-Wall'. 3533 3534'-Wimplicit-function-declaration (C and Objective-C only)' 3535 Give a warning whenever a function is used before being declared. 3536 In C99 mode ('-std=c99' or '-std=gnu99'), this warning is enabled 3537 by default and it is made into an error by '-pedantic-errors'. 3538 This warning is also enabled by '-Wall'. 3539 3540'-Wimplicit (C and Objective-C only)' 3541 Same as '-Wimplicit-int' and '-Wimplicit-function-declaration'. 3542 This warning is enabled by '-Wall'. 3543 3544'-Wignored-qualifiers (C and C++ only)' 3545 Warn if the return type of a function has a type qualifier such as 3546 'const'. For ISO C such a type qualifier has no effect, since the 3547 value returned by a function is not an lvalue. For C++, the 3548 warning is only emitted for scalar types or 'void'. ISO C 3549 prohibits qualified 'void' return types on function definitions, so 3550 such return types always receive a warning even without this 3551 option. 3552 3553 This warning is also enabled by '-Wextra'. 3554 3555'-Wmain' 3556 Warn if the type of 'main' is suspicious. 'main' should be a 3557 function with external linkage, returning int, taking either zero 3558 arguments, two, or three arguments of appropriate types. This 3559 warning is enabled by default in C++ and is enabled by either 3560 '-Wall' or '-Wpedantic'. 3561 3562'-Wmissing-braces' 3563 Warn if an aggregate or union initializer is not fully bracketed. 3564 In the following example, the initializer for 'a' is not fully 3565 bracketed, but that for 'b' is fully bracketed. This warning is 3566 enabled by '-Wall' in C. 3567 3568 int a[2][2] = { 0, 1, 2, 3 }; 3569 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3570 3571 This warning is enabled by '-Wall'. 3572 3573'-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3574 Warn if a user-supplied include directory does not exist. 3575 3576'-Wparentheses' 3577 Warn if parentheses are omitted in certain contexts, such as when 3578 there is an assignment in a context where a truth value is 3579 expected, or when operators are nested whose precedence people 3580 often get confused about. 3581 3582 Also warn if a comparison like 'x<=y<=z' appears; this is 3583 equivalent to '(x<=y ? 1 : 0) <= z', which is a different 3584 interpretation from that of ordinary mathematical notation. 3585 3586 Also warn about constructions where there may be confusion to which 3587 'if' statement an 'else' branch belongs. Here is an example of 3588 such a case: 3589 3590 { 3591 if (a) 3592 if (b) 3593 foo (); 3594 else 3595 bar (); 3596 } 3597 3598 In C/C++, every 'else' branch belongs to the innermost possible 3599 'if' statement, which in this example is 'if (b)'. This is often 3600 not what the programmer expected, as illustrated in the above 3601 example by indentation the programmer chose. When there is the 3602 potential for this confusion, GCC issues a warning when this flag 3603 is specified. To eliminate the warning, add explicit braces around 3604 the innermost 'if' statement so there is no way the 'else' can 3605 belong to the enclosing 'if'. The resulting code looks like this: 3606 3607 { 3608 if (a) 3609 { 3610 if (b) 3611 foo (); 3612 else 3613 bar (); 3614 } 3615 } 3616 3617 Also warn for dangerous uses of the GNU extension to '?:' with 3618 omitted middle operand. When the condition in the '?': operator is 3619 a boolean expression, the omitted value is always 1. Often 3620 programmers expect it to be a value computed inside the conditional 3621 expression instead. 3622 3623 This warning is enabled by '-Wall'. 3624 3625'-Wsequence-point' 3626 Warn about code that may have undefined semantics because of 3627 violations of sequence point rules in the C and C++ standards. 3628 3629 The C and C++ standards define the order in which expressions in a 3630 C/C++ program are evaluated in terms of "sequence points", which 3631 represent a partial ordering between the execution of parts of the 3632 program: those executed before the sequence point, and those 3633 executed after it. These occur after the evaluation of a full 3634 expression (one which is not part of a larger expression), after 3635 the evaluation of the first operand of a '&&', '||', '? :' or ',' 3636 (comma) operator, before a function is called (but after the 3637 evaluation of its arguments and the expression denoting the called 3638 function), and in certain other places. Other than as expressed by 3639 the sequence point rules, the order of evaluation of subexpressions 3640 of an expression is not specified. All these rules describe only a 3641 partial order rather than a total order, since, for example, if two 3642 functions are called within one expression with no sequence point 3643 between them, the order in which the functions are called is not 3644 specified. However, the standards committee have ruled that 3645 function calls do not overlap. 3646 3647 It is not specified when between sequence points modifications to 3648 the values of objects take effect. Programs whose behavior depends 3649 on this have undefined behavior; the C and C++ standards specify 3650 that "Between the previous and next sequence point an object shall 3651 have its stored value modified at most once by the evaluation of an 3652 expression. Furthermore, the prior value shall be read only to 3653 determine the value to be stored.". If a program breaks these 3654 rules, the results on any particular implementation are entirely 3655 unpredictable. 3656 3657 Examples of code with undefined behavior are 'a = a++;', 'a[n] = 3658 b[n++]' and 'a[i++] = i;'. Some more complicated cases are not 3659 diagnosed by this option, and it may give an occasional false 3660 positive result, but in general it has been found fairly effective 3661 at detecting this sort of problem in programs. 3662 3663 The standard is worded confusingly, therefore there is some debate 3664 over the precise meaning of the sequence point rules in subtle 3665 cases. Links to discussions of the problem, including proposed 3666 formal definitions, may be found on the GCC readings page, at 3667 <http://gcc.gnu.org/readings.html>. 3668 3669 This warning is enabled by '-Wall' for C and C++. 3670 3671'-Wno-return-local-addr' 3672 Do not warn about returning a pointer (or in C++, a reference) to a 3673 variable that goes out of scope after the function returns. 3674 3675'-Wreturn-type' 3676 Warn whenever a function is defined with a return type that 3677 defaults to 'int'. Also warn about any 'return' statement with no 3678 return value in a function whose return type is not 'void' (falling 3679 off the end of the function body is considered returning without a 3680 value), and about a 'return' statement with an expression in a 3681 function whose return type is 'void'. 3682 3683 For C++, a function without return type always produces a 3684 diagnostic message, even when '-Wno-return-type' is specified. The 3685 only exceptions are 'main' and functions defined in system headers. 3686 3687 This warning is enabled by '-Wall'. 3688 3689'-Wswitch' 3690 Warn whenever a 'switch' statement has an index of enumerated type 3691 and lacks a 'case' for one or more of the named codes of that 3692 enumeration. (The presence of a 'default' label prevents this 3693 warning.) 'case' labels outside the enumeration range also provoke 3694 warnings when this option is used (even if there is a 'default' 3695 label). This warning is enabled by '-Wall'. 3696 3697'-Wswitch-default' 3698 Warn whenever a 'switch' statement does not have a 'default' case. 3699 3700'-Wswitch-enum' 3701 Warn whenever a 'switch' statement has an index of enumerated type 3702 and lacks a 'case' for one or more of the named codes of that 3703 enumeration. 'case' labels outside the enumeration range also 3704 provoke warnings when this option is used. The only difference 3705 between '-Wswitch' and this option is that this option gives a 3706 warning about an omitted enumeration code even if there is a 3707 'default' label. 3708 3709'-Wsync-nand (C and C++ only)' 3710 Warn when '__sync_fetch_and_nand' and '__sync_nand_and_fetch' 3711 built-in functions are used. These functions changed semantics in 3712 GCC 4.4. 3713 3714'-Wtrigraphs' 3715 Warn if any trigraphs are encountered that might change the meaning 3716 of the program (trigraphs within comments are not warned about). 3717 This warning is enabled by '-Wall'. 3718 3719'-Wunused-but-set-parameter' 3720 Warn whenever a function parameter is assigned to, but otherwise 3721 unused (aside from its declaration). 3722 3723 To suppress this warning use the 'unused' attribute (*note Variable 3724 Attributes::). 3725 3726 This warning is also enabled by '-Wunused' together with '-Wextra'. 3727 3728'-Wunused-but-set-variable' 3729 Warn whenever a local variable is assigned to, but otherwise unused 3730 (aside from its declaration). This warning is enabled by '-Wall'. 3731 3732 To suppress this warning use the 'unused' attribute (*note Variable 3733 Attributes::). 3734 3735 This warning is also enabled by '-Wunused', which is enabled by 3736 '-Wall'. 3737 3738'-Wunused-function' 3739 Warn whenever a static function is declared but not defined or a 3740 non-inline static function is unused. This warning is enabled by 3741 '-Wall'. 3742 3743'-Wunused-label' 3744 Warn whenever a label is declared but not used. This warning is 3745 enabled by '-Wall'. 3746 3747 To suppress this warning use the 'unused' attribute (*note Variable 3748 Attributes::). 3749 3750'-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)' 3751 Warn when a typedef locally defined in a function is not used. 3752 This warning is enabled by '-Wall'. 3753 3754'-Wunused-parameter' 3755 Warn whenever a function parameter is unused aside from its 3756 declaration. 3757 3758 To suppress this warning use the 'unused' attribute (*note Variable 3759 Attributes::). 3760 3761'-Wno-unused-result' 3762 Do not warn if a caller of a function marked with attribute 3763 'warn_unused_result' (*note Function Attributes::) does not use its 3764 return value. The default is '-Wunused-result'. 3765 3766'-Wunused-variable' 3767 Warn whenever a local variable or non-constant static variable is 3768 unused aside from its declaration. This warning is enabled by 3769 '-Wall'. 3770 3771 To suppress this warning use the 'unused' attribute (*note Variable 3772 Attributes::). 3773 3774'-Wunused-value' 3775 Warn whenever a statement computes a result that is explicitly not 3776 used. To suppress this warning cast the unused expression to 3777 'void'. This includes an expression-statement or the left-hand 3778 side of a comma expression that contains no side effects. For 3779 example, an expression such as 'x[i,j]' causes a warning, while 3780 'x[(void)i,j]' does not. 3781 3782 This warning is enabled by '-Wall'. 3783 3784'-Wunused' 3785 All the above '-Wunused' options combined. 3786 3787 In order to get a warning about an unused function parameter, you 3788 must either specify '-Wextra -Wunused' (note that '-Wall' implies 3789 '-Wunused'), or separately specify '-Wunused-parameter'. 3790 3791'-Wuninitialized' 3792 Warn if an automatic variable is used without first being 3793 initialized or if a variable may be clobbered by a 'setjmp' call. 3794 In C++, warn if a non-static reference or non-static 'const' member 3795 appears in a class without constructors. 3796 3797 If you want to warn about code that uses the uninitialized value of 3798 the variable in its own initializer, use the '-Winit-self' option. 3799 3800 These warnings occur for individual uninitialized or clobbered 3801 elements of structure, union or array variables as well as for 3802 variables that are uninitialized or clobbered as a whole. They do 3803 not occur for variables or elements declared 'volatile'. Because 3804 these warnings depend on optimization, the exact variables or 3805 elements for which there are warnings depends on the precise 3806 optimization options and version of GCC used. 3807 3808 Note that there may be no warning about a variable that is used 3809 only to compute a value that itself is never used, because such 3810 computations may be deleted by data flow analysis before the 3811 warnings are printed. 3812 3813'-Wmaybe-uninitialized' 3814 For an automatic variable, if there exists a path from the function 3815 entry to a use of the variable that is initialized, but there exist 3816 some other paths for which the variable is not initialized, the 3817 compiler emits a warning if it cannot prove the uninitialized paths 3818 are not executed at run time. These warnings are made optional 3819 because GCC is not smart enough to see all the reasons why the code 3820 might be correct in spite of appearing to have an error. Here is 3821 one example of how this can happen: 3822 3823 { 3824 int x; 3825 switch (y) 3826 { 3827 case 1: x = 1; 3828 break; 3829 case 2: x = 4; 3830 break; 3831 case 3: x = 5; 3832 } 3833 foo (x); 3834 } 3835 3836 If the value of 'y' is always 1, 2 or 3, then 'x' is always 3837 initialized, but GCC doesn't know this. To suppress the warning, 3838 you need to provide a default case with assert(0) or similar code. 3839 3840 This option also warns when a non-volatile automatic variable might 3841 be changed by a call to 'longjmp'. These warnings as well are 3842 possible only in optimizing compilation. 3843 3844 The compiler sees only the calls to 'setjmp'. It cannot know where 3845 'longjmp' will be called; in fact, a signal handler could call it 3846 at any point in the code. As a result, you may get a warning even 3847 when there is in fact no problem because 'longjmp' cannot in fact 3848 be called at the place that would cause a problem. 3849 3850 Some spurious warnings can be avoided if you declare all the 3851 functions you use that never return as 'noreturn'. *Note Function 3852 Attributes::. 3853 3854 This warning is enabled by '-Wall' or '-Wextra'. 3855 3856'-Wunknown-pragmas' 3857 Warn when a '#pragma' directive is encountered that is not 3858 understood by GCC. If this command-line option is used, warnings 3859 are even issued for unknown pragmas in system header files. This 3860 is not the case if the warnings are only enabled by the '-Wall' 3861 command-line option. 3862 3863'-Wno-pragmas' 3864 Do not warn about misuses of pragmas, such as incorrect parameters, 3865 invalid syntax, or conflicts between pragmas. See also 3866 '-Wunknown-pragmas'. 3867 3868'-Wstrict-aliasing' 3869 This option is only active when '-fstrict-aliasing' is active. It 3870 warns about code that might break the strict aliasing rules that 3871 the compiler is using for optimization. The warning does not catch 3872 all cases, but does attempt to catch the more common pitfalls. It 3873 is included in '-Wall'. It is equivalent to '-Wstrict-aliasing=3' 3874 3875'-Wstrict-aliasing=n' 3876 This option is only active when '-fstrict-aliasing' is active. It 3877 warns about code that might break the strict aliasing rules that 3878 the compiler is using for optimization. Higher levels correspond 3879 to higher accuracy (fewer false positives). Higher levels also 3880 correspond to more effort, similar to the way '-O' works. 3881 '-Wstrict-aliasing' is equivalent to '-Wstrict-aliasing=3'. 3882 3883 Level 1: Most aggressive, quick, least accurate. Possibly useful 3884 when higher levels do not warn but '-fstrict-aliasing' still breaks 3885 the code, as it has very few false negatives. However, it has many 3886 false positives. Warns for all pointer conversions between 3887 possibly incompatible types, even if never dereferenced. Runs in 3888 the front end only. 3889 3890 Level 2: Aggressive, quick, not too precise. May still have many 3891 false positives (not as many as level 1 though), and few false 3892 negatives (but possibly more than level 1). Unlike level 1, it 3893 only warns when an address is taken. Warns about incomplete types. 3894 Runs in the front end only. 3895 3896 Level 3 (default for '-Wstrict-aliasing'): Should have very few 3897 false positives and few false negatives. Slightly slower than 3898 levels 1 or 2 when optimization is enabled. Takes care of the 3899 common pun+dereference pattern in the front end: 3900 '*(int*)&some_float'. If optimization is enabled, it also runs in 3901 the back end, where it deals with multiple statement cases using 3902 flow-sensitive points-to information. Only warns when the 3903 converted pointer is dereferenced. Does not warn about incomplete 3904 types. 3905 3906'-Wstrict-overflow' 3907'-Wstrict-overflow=N' 3908 This option is only active when '-fstrict-overflow' is active. It 3909 warns about cases where the compiler optimizes based on the 3910 assumption that signed overflow does not occur. Note that it does 3911 not warn about all cases where the code might overflow: it only 3912 warns about cases where the compiler implements some optimization. 3913 Thus this warning depends on the optimization level. 3914 3915 An optimization that assumes that signed overflow does not occur is 3916 perfectly safe if the values of the variables involved are such 3917 that overflow never does, in fact, occur. Therefore this warning 3918 can easily give a false positive: a warning about code that is not 3919 actually a problem. To help focus on important issues, several 3920 warning levels are defined. No warnings are issued for the use of 3921 undefined signed overflow when estimating how many iterations a 3922 loop requires, in particular when determining whether a loop will 3923 be executed at all. 3924 3925 '-Wstrict-overflow=1' 3926 Warn about cases that are both questionable and easy to avoid. 3927 For example, with '-fstrict-overflow', the compiler simplifies 3928 'x + 1 > x' to '1'. This level of '-Wstrict-overflow' is 3929 enabled by '-Wall'; higher levels are not, and must be 3930 explicitly requested. 3931 3932 '-Wstrict-overflow=2' 3933 Also warn about other cases where a comparison is simplified 3934 to a constant. For example: 'abs (x) >= 0'. This can only be 3935 simplified when '-fstrict-overflow' is in effect, because 'abs 3936 (INT_MIN)' overflows to 'INT_MIN', which is less than zero. 3937 '-Wstrict-overflow' (with no level) is the same as 3938 '-Wstrict-overflow=2'. 3939 3940 '-Wstrict-overflow=3' 3941 Also warn about other cases where a comparison is simplified. 3942 For example: 'x + 1 > 1' is simplified to 'x > 0'. 3943 3944 '-Wstrict-overflow=4' 3945 Also warn about other simplifications not covered by the above 3946 cases. For example: '(x * 10) / 5' is simplified to 'x * 2'. 3947 3948 '-Wstrict-overflow=5' 3949 Also warn about cases where the compiler reduces the magnitude 3950 of a constant involved in a comparison. For example: 'x + 2 > 3951 y' is simplified to 'x + 1 >= y'. This is reported only at 3952 the highest warning level because this simplification applies 3953 to many comparisons, so this warning level gives a very large 3954 number of false positives. 3955 3956'-Wsuggest-attribute=[pure|const|noreturn|format]' 3957 Warn for cases where adding an attribute may be beneficial. The 3958 attributes currently supported are listed below. 3959 3960 '-Wsuggest-attribute=pure' 3961 '-Wsuggest-attribute=const' 3962 '-Wsuggest-attribute=noreturn' 3963 3964 Warn about functions that might be candidates for attributes 3965 'pure', 'const' or 'noreturn'. The compiler only warns for 3966 functions visible in other compilation units or (in the case 3967 of 'pure' and 'const') if it cannot prove that the function 3968 returns normally. A function returns normally if it doesn't 3969 contain an infinite loop or return abnormally by throwing, 3970 calling 'abort()' or trapping. This analysis requires option 3971 '-fipa-pure-const', which is enabled by default at '-O' and 3972 higher. Higher optimization levels improve the accuracy of 3973 the analysis. 3974 3975 '-Wsuggest-attribute=format' 3976 '-Wmissing-format-attribute' 3977 3978 Warn about function pointers that might be candidates for 3979 'format' attributes. Note these are only possible candidates, 3980 not absolute ones. GCC guesses that function pointers with 3981 'format' attributes that are used in assignment, 3982 initialization, parameter passing or return statements should 3983 have a corresponding 'format' attribute in the resulting type. 3984 I.e. the left-hand side of the assignment or initialization, 3985 the type of the parameter variable, or the return type of the 3986 containing function respectively should also have a 'format' 3987 attribute to avoid the warning. 3988 3989 GCC also warns about function definitions that might be 3990 candidates for 'format' attributes. Again, these are only 3991 possible candidates. GCC guesses that 'format' attributes 3992 might be appropriate for any function that calls a function 3993 like 'vprintf' or 'vscanf', but this might not always be the 3994 case, and some functions for which 'format' attributes are 3995 appropriate may not be detected. 3996 3997'-Warray-bounds' 3998 This option is only active when '-ftree-vrp' is active (default for 3999 '-O2' and above). It warns about subscripts to arrays that are 4000 always out of bounds. This warning is enabled by '-Wall'. 4001 4002'-Wno-div-by-zero' 4003 Do not warn about compile-time integer division by zero. 4004 Floating-point division by zero is not warned about, as it can be a 4005 legitimate way of obtaining infinities and NaNs. 4006 4007'-Wsystem-headers' 4008 Print warning messages for constructs found in system header files. 4009 Warnings from system headers are normally suppressed, on the 4010 assumption that they usually do not indicate real problems and 4011 would only make the compiler output harder to read. Using this 4012 command-line option tells GCC to emit warnings from system headers 4013 as if they occurred in user code. However, note that using '-Wall' 4014 in conjunction with this option does _not_ warn about unknown 4015 pragmas in system headers--for that, '-Wunknown-pragmas' must also 4016 be used. 4017 4018'-Wtrampolines' 4019 Warn about trampolines generated for pointers to nested functions. 4020 4021 A trampoline is a small piece of data or code that is created at 4022 run time on the stack when the address of a nested function is 4023 taken, and is used to call the nested function indirectly. For 4024 some targets, it is made up of data only and thus requires no 4025 special treatment. But, for most targets, it is made up of code 4026 and thus requires the stack to be made executable in order for the 4027 program to work properly. 4028 4029'-Wfloat-equal' 4030 Warn if floating-point values are used in equality comparisons. 4031 4032 The idea behind this is that sometimes it is convenient (for the 4033 programmer) to consider floating-point values as approximations to 4034 infinitely precise real numbers. If you are doing this, then you 4035 need to compute (by analyzing the code, or in some other way) the 4036 maximum or likely maximum error that the computation introduces, 4037 and allow for it when performing comparisons (and when producing 4038 output, but that's a different problem). In particular, instead of 4039 testing for equality, you should check to see whether the two 4040 values have ranges that overlap; and this is done with the 4041 relational operators, so equality comparisons are probably 4042 mistaken. 4043 4044'-Wtraditional (C and Objective-C only)' 4045 Warn about certain constructs that behave differently in 4046 traditional and ISO C. Also warn about ISO C constructs that have 4047 no traditional C equivalent, and/or problematic constructs that 4048 should be avoided. 4049 4050 * Macro parameters that appear within string literals in the 4051 macro body. In traditional C macro replacement takes place 4052 within string literals, but in ISO C it does not. 4053 4054 * In traditional C, some preprocessor directives did not exist. 4055 Traditional preprocessors only considered a line to be a 4056 directive if the '#' appeared in column 1 on the line. 4057 Therefore '-Wtraditional' warns about directives that 4058 traditional C understands but ignores because the '#' does not 4059 appear as the first character on the line. It also suggests 4060 you hide directives like '#pragma' not understood by 4061 traditional C by indenting them. Some traditional 4062 implementations do not recognize '#elif', so this option 4063 suggests avoiding it altogether. 4064 4065 * A function-like macro that appears without arguments. 4066 4067 * The unary plus operator. 4068 4069 * The 'U' integer constant suffix, or the 'F' or 'L' 4070 floating-point constant suffixes. (Traditional C does support 4071 the 'L' suffix on integer constants.) Note, these suffixes 4072 appear in macros defined in the system headers of most modern 4073 systems, e.g. the '_MIN'/'_MAX' macros in '<limits.h>'. Use 4074 of these macros in user code might normally lead to spurious 4075 warnings, however GCC's integrated preprocessor has enough 4076 context to avoid warning in these cases. 4077 4078 * A function declared external in one block and then used after 4079 the end of the block. 4080 4081 * A 'switch' statement has an operand of type 'long'. 4082 4083 * A non-'static' function declaration follows a 'static' one. 4084 This construct is not accepted by some traditional C 4085 compilers. 4086 4087 * The ISO type of an integer constant has a different width or 4088 signedness from its traditional type. This warning is only 4089 issued if the base of the constant is ten. I.e. hexadecimal 4090 or octal values, which typically represent bit patterns, are 4091 not warned about. 4092 4093 * Usage of ISO string concatenation is detected. 4094 4095 * Initialization of automatic aggregates. 4096 4097 * Identifier conflicts with labels. Traditional C lacks a 4098 separate namespace for labels. 4099 4100 * Initialization of unions. If the initializer is zero, the 4101 warning is omitted. This is done under the assumption that 4102 the zero initializer in user code appears conditioned on e.g. 4103 '__STDC__' to avoid missing initializer warnings and relies on 4104 default initialization to zero in the traditional C case. 4105 4106 * Conversions by prototypes between fixed/floating-point values 4107 and vice versa. The absence of these prototypes when 4108 compiling with traditional C causes serious problems. This is 4109 a subset of the possible conversion warnings; for the full set 4110 use '-Wtraditional-conversion'. 4111 4112 * Use of ISO C style function definitions. This warning 4113 intentionally is _not_ issued for prototype declarations or 4114 variadic functions because these ISO C features appear in your 4115 code when using libiberty's traditional C compatibility 4116 macros, 'PARAMS' and 'VPARAMS'. This warning is also bypassed 4117 for nested functions because that feature is already a GCC 4118 extension and thus not relevant to traditional C 4119 compatibility. 4120 4121'-Wtraditional-conversion (C and Objective-C only)' 4122 Warn if a prototype causes a type conversion that is different from 4123 what would happen to the same argument in the absence of a 4124 prototype. This includes conversions of fixed point to floating 4125 and vice versa, and conversions changing the width or signedness of 4126 a fixed-point argument except when the same as the default 4127 promotion. 4128 4129'-Wdeclaration-after-statement (C and Objective-C only)' 4130 Warn when a declaration is found after a statement in a block. 4131 This construct, known from C++, was introduced with ISO C99 and is 4132 by default allowed in GCC. It is not supported by ISO C90 and was 4133 not supported by GCC versions before GCC 3.0. *Note Mixed 4134 Declarations::. 4135 4136'-Wundef' 4137 Warn if an undefined identifier is evaluated in an '#if' directive. 4138 4139'-Wno-endif-labels' 4140 Do not warn whenever an '#else' or an '#endif' are followed by 4141 text. 4142 4143'-Wshadow' 4144 Warn whenever a local variable or type declaration shadows another 4145 variable, parameter, type, or class member (in C++), or whenever a 4146 built-in function is shadowed. Note that in C++, the compiler 4147 warns if a local variable shadows an explicit typedef, but not if 4148 it shadows a struct/class/enum. 4149 4150'-Wlarger-than=LEN' 4151 Warn whenever an object of larger than LEN bytes is defined. 4152 4153'-Wframe-larger-than=LEN' 4154 Warn if the size of a function frame is larger than LEN bytes. The 4155 computation done to determine the stack frame size is approximate 4156 and not conservative. The actual requirements may be somewhat 4157 greater than LEN even if you do not get a warning. In addition, 4158 any space allocated via 'alloca', variable-length arrays, or 4159 related constructs is not included by the compiler when determining 4160 whether or not to issue a warning. 4161 4162'-Wno-free-nonheap-object' 4163 Do not warn when attempting to free an object that was not 4164 allocated on the heap. 4165 4166'-Wstack-usage=LEN' 4167 Warn if the stack usage of a function might be larger than LEN 4168 bytes. The computation done to determine the stack usage is 4169 conservative. Any space allocated via 'alloca', variable-length 4170 arrays, or related constructs is included by the compiler when 4171 determining whether or not to issue a warning. 4172 4173 The message is in keeping with the output of '-fstack-usage'. 4174 4175 * If the stack usage is fully static but exceeds the specified 4176 amount, it's: 4177 4178 warning: stack usage is 1120 bytes 4179 * If the stack usage is (partly) dynamic but bounded, it's: 4180 4181 warning: stack usage might be 1648 bytes 4182 * If the stack usage is (partly) dynamic and not bounded, it's: 4183 4184 warning: stack usage might be unbounded 4185 4186'-Wunsafe-loop-optimizations' 4187 Warn if the loop cannot be optimized because the compiler cannot 4188 assume anything on the bounds of the loop indices. With 4189 '-funsafe-loop-optimizations' warn if the compiler makes such 4190 assumptions. 4191 4192'-Wno-pedantic-ms-format (MinGW targets only)' 4193 When used in combination with '-Wformat' and '-pedantic' without 4194 GNU extensions, this option disables the warnings about non-ISO 4195 'printf' / 'scanf' format width specifiers 'I32', 'I64', and 'I' 4196 used on Windows targets, which depend on the MS runtime. 4197 4198'-Wpointer-arith' 4199 Warn about anything that depends on the "size of" a function type 4200 or of 'void'. GNU C assigns these types a size of 1, for 4201 convenience in calculations with 'void *' pointers and pointers to 4202 functions. In C++, warn also when an arithmetic operation involves 4203 'NULL'. This warning is also enabled by '-Wpedantic'. 4204 4205'-Wtype-limits' 4206 Warn if a comparison is always true or always false due to the 4207 limited range of the data type, but do not warn for constant 4208 expressions. For example, warn if an unsigned variable is compared 4209 against zero with '<' or '>='. This warning is also enabled by 4210 '-Wextra'. 4211 4212'-Wbad-function-cast (C and Objective-C only)' 4213 Warn whenever a function call is cast to a non-matching type. For 4214 example, warn if 'int malloc()' is cast to 'anything *'. 4215 4216'-Wc++-compat (C and Objective-C only)' 4217 Warn about ISO C constructs that are outside of the common subset 4218 of ISO C and ISO C++, e.g. request for implicit conversion from 4219 'void *' to a pointer to non-'void' type. 4220 4221'-Wc++11-compat (C++ and Objective-C++ only)' 4222 Warn about C++ constructs whose meaning differs between ISO C++ 4223 1998 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are 4224 keywords in ISO C++ 2011. This warning turns on '-Wnarrowing' and 4225 is enabled by '-Wall'. 4226 4227'-Wcast-qual' 4228 Warn whenever a pointer is cast so as to remove a type qualifier 4229 from the target type. For example, warn if a 'const char *' is 4230 cast to an ordinary 'char *'. 4231 4232 Also warn when making a cast that introduces a type qualifier in an 4233 unsafe way. For example, casting 'char **' to 'const char **' is 4234 unsafe, as in this example: 4235 4236 /* p is char ** value. */ 4237 const char **q = (const char **) p; 4238 /* Assignment of readonly string to const char * is OK. */ 4239 *q = "string"; 4240 /* Now char** pointer points to read-only memory. */ 4241 **p = 'b'; 4242 4243'-Wcast-align' 4244 Warn whenever a pointer is cast such that the required alignment of 4245 the target is increased. For example, warn if a 'char *' is cast 4246 to an 'int *' on machines where integers can only be accessed at 4247 two- or four-byte boundaries. 4248 4249'-Wwrite-strings' 4250 When compiling C, give string constants the type 'const 4251 char[LENGTH]' so that copying the address of one into a non-'const' 4252 'char *' pointer produces a warning. These warnings help you find 4253 at compile time code that can try to write into a string constant, 4254 but only if you have been very careful about using 'const' in 4255 declarations and prototypes. Otherwise, it is just a nuisance. 4256 This is why we did not make '-Wall' request these warnings. 4257 4258 When compiling C++, warn about the deprecated conversion from 4259 string literals to 'char *'. This warning is enabled by default 4260 for C++ programs. 4261 4262'-Wclobbered' 4263 Warn for variables that might be changed by 'longjmp' or 'vfork'. 4264 This warning is also enabled by '-Wextra'. 4265 4266'-Wconditionally-supported (C++ and Objective-C++ only)' 4267 Warn for conditionally-supported (C++11 [intro.defs]) constructs. 4268 4269'-Wconversion' 4270 Warn for implicit conversions that may alter a value. This 4271 includes conversions between real and integer, like 'abs (x)' when 4272 'x' is 'double'; conversions between signed and unsigned, like 4273 'unsigned ui = -1'; and conversions to smaller types, like 'sqrtf 4274 (M_PI)'. Do not warn for explicit casts like 'abs ((int) x)' and 4275 'ui = (unsigned) -1', or if the value is not changed by the 4276 conversion like in 'abs (2.0)'. Warnings about conversions between 4277 signed and unsigned integers can be disabled by using 4278 '-Wno-sign-conversion'. 4279 4280 For C++, also warn for confusing overload resolution for 4281 user-defined conversions; and conversions that never use a type 4282 conversion operator: conversions to 'void', the same type, a base 4283 class or a reference to them. Warnings about conversions between 4284 signed and unsigned integers are disabled by default in C++ unless 4285 '-Wsign-conversion' is explicitly enabled. 4286 4287'-Wno-conversion-null (C++ and Objective-C++ only)' 4288 Do not warn for conversions between 'NULL' and non-pointer types. 4289 '-Wconversion-null' is enabled by default. 4290 4291'-Wzero-as-null-pointer-constant (C++ and Objective-C++ only)' 4292 Warn when a literal '0' is used as null pointer constant. This can 4293 be useful to facilitate the conversion to 'nullptr' in C++11. 4294 4295'-Wdate-time' 4296 Warn when macros '__TIME__', '__DATE__' or '__TIMESTAMP__' are 4297 encountered as they might prevent bit-wise-identical reproducible 4298 compilations. 4299 4300'-Wdelete-incomplete (C++ and Objective-C++ only)' 4301 Warn when deleting a pointer to incomplete type, which may cause 4302 undefined behavior at runtime. This warning is enabled by default. 4303 4304'-Wuseless-cast (C++ and Objective-C++ only)' 4305 Warn when an expression is casted to its own type. 4306 4307'-Wempty-body' 4308 Warn if an empty body occurs in an 'if', 'else' or 'do while' 4309 statement. This warning is also enabled by '-Wextra'. 4310 4311'-Wenum-compare' 4312 Warn about a comparison between values of different enumerated 4313 types. In C++ enumeral mismatches in conditional expressions are 4314 also diagnosed and the warning is enabled by default. In C this 4315 warning is enabled by '-Wall'. 4316 4317'-Wjump-misses-init (C, Objective-C only)' 4318 Warn if a 'goto' statement or a 'switch' statement jumps forward 4319 across the initialization of a variable, or jumps backward to a 4320 label after the variable has been initialized. This only warns 4321 about variables that are initialized when they are declared. This 4322 warning is only supported for C and Objective-C; in C++ this sort 4323 of branch is an error in any case. 4324 4325 '-Wjump-misses-init' is included in '-Wc++-compat'. It can be 4326 disabled with the '-Wno-jump-misses-init' option. 4327 4328'-Wsign-compare' 4329 Warn when a comparison between signed and unsigned values could 4330 produce an incorrect result when the signed value is converted to 4331 unsigned. This warning is also enabled by '-Wextra'; to get the 4332 other warnings of '-Wextra' without this warning, use '-Wextra 4333 -Wno-sign-compare'. 4334 4335'-Wsign-conversion' 4336 Warn for implicit conversions that may change the sign of an 4337 integer value, like assigning a signed integer expression to an 4338 unsigned integer variable. An explicit cast silences the warning. 4339 In C, this option is enabled also by '-Wconversion'. 4340 4341'-Wfloat-conversion' 4342 Warn for implicit conversions that reduce the precision of a real 4343 value. This includes conversions from real to integer, and from 4344 higher precision real to lower precision real values. This option 4345 is also enabled by '-Wconversion'. 4346 4347'-Wsizeof-pointer-memaccess' 4348 Warn for suspicious length parameters to certain string and memory 4349 built-in functions if the argument uses 'sizeof'. This warning 4350 warns e.g. about 'memset (ptr, 0, sizeof (ptr));' if 'ptr' is not 4351 an array, but a pointer, and suggests a possible fix, or about 4352 'memcpy (&foo, ptr, sizeof (&foo));'. This warning is enabled by 4353 '-Wall'. 4354 4355'-Waddress' 4356 Warn about suspicious uses of memory addresses. These include 4357 using the address of a function in a conditional expression, such 4358 as 'void func(void); if (func)', and comparisons against the memory 4359 address of a string literal, such as 'if (x == "abc")'. Such uses 4360 typically indicate a programmer error: the address of a function 4361 always evaluates to true, so their use in a conditional usually 4362 indicate that the programmer forgot the parentheses in a function 4363 call; and comparisons against string literals result in unspecified 4364 behavior and are not portable in C, so they usually indicate that 4365 the programmer intended to use 'strcmp'. This warning is enabled 4366 by '-Wall'. 4367 4368'-Wlogical-op' 4369 Warn about suspicious uses of logical operators in expressions. 4370 This includes using logical operators in contexts where a bit-wise 4371 operator is likely to be expected. 4372 4373'-Waggregate-return' 4374 Warn if any functions that return structures or unions are defined 4375 or called. (In languages where you can return an array, this also 4376 elicits a warning.) 4377 4378'-Wno-aggressive-loop-optimizations' 4379 Warn if in a loop with constant number of iterations the compiler 4380 detects undefined behavior in some statement during one or more of 4381 the iterations. 4382 4383'-Wno-attributes' 4384 Do not warn if an unexpected '__attribute__' is used, such as 4385 unrecognized attributes, function attributes applied to variables, 4386 etc. This does not stop errors for incorrect use of supported 4387 attributes. 4388 4389'-Wno-builtin-macro-redefined' 4390 Do not warn if certain built-in macros are redefined. This 4391 suppresses warnings for redefinition of '__TIMESTAMP__', 4392 '__TIME__', '__DATE__', '__FILE__', and '__BASE_FILE__'. 4393 4394'-Wstrict-prototypes (C and Objective-C only)' 4395 Warn if a function is declared or defined without specifying the 4396 argument types. (An old-style function definition is permitted 4397 without a warning if preceded by a declaration that specifies the 4398 argument types.) 4399 4400'-Wold-style-declaration (C and Objective-C only)' 4401 Warn for obsolescent usages, according to the C Standard, in a 4402 declaration. For example, warn if storage-class specifiers like 4403 'static' are not the first things in a declaration. This warning 4404 is also enabled by '-Wextra'. 4405 4406'-Wold-style-definition (C and Objective-C only)' 4407 Warn if an old-style function definition is used. A warning is 4408 given even if there is a previous prototype. 4409 4410'-Wmissing-parameter-type (C and Objective-C only)' 4411 A function parameter is declared without a type specifier in 4412 K&R-style functions: 4413 4414 void foo(bar) { } 4415 4416 This warning is also enabled by '-Wextra'. 4417 4418'-Wmissing-prototypes (C and Objective-C only)' 4419 Warn if a global function is defined without a previous prototype 4420 declaration. This warning is issued even if the definition itself 4421 provides a prototype. Use this option to detect global functions 4422 that do not have a matching prototype declaration in a header file. 4423 This option is not valid for C++ because all function declarations 4424 provide prototypes and a non-matching declaration will declare an 4425 overload rather than conflict with an earlier declaration. Use 4426 '-Wmissing-declarations' to detect missing declarations in C++. 4427 4428'-Wmissing-declarations' 4429 Warn if a global function is defined without a previous 4430 declaration. Do so even if the definition itself provides a 4431 prototype. Use this option to detect global functions that are not 4432 declared in header files. In C, no warnings are issued for 4433 functions with previous non-prototype declarations; use 4434 '-Wmissing-prototype' to detect missing prototypes. In C++, no 4435 warnings are issued for function templates, or for inline 4436 functions, or for functions in anonymous namespaces. 4437 4438'-Wmissing-field-initializers' 4439 Warn if a structure's initializer has some fields missing. For 4440 example, the following code causes such a warning, because 'x.h' is 4441 implicitly zero: 4442 4443 struct s { int f, g, h; }; 4444 struct s x = { 3, 4 }; 4445 4446 This option does not warn about designated initializers, so the 4447 following modification does not trigger a warning: 4448 4449 struct s { int f, g, h; }; 4450 struct s x = { .f = 3, .g = 4 }; 4451 4452 This warning is included in '-Wextra'. To get other '-Wextra' 4453 warnings without this one, use '-Wextra 4454 -Wno-missing-field-initializers'. 4455 4456'-Wno-multichar' 4457 Do not warn if a multicharacter constant (''FOOF'') is used. 4458 Usually they indicate a typo in the user's code, as they have 4459 implementation-defined values, and should not be used in portable 4460 code. 4461 4462'-Wnormalized=<none|id|nfc|nfkc>' 4463 In ISO C and ISO C++, two identifiers are different if they are 4464 different sequences of characters. However, sometimes when 4465 characters outside the basic ASCII character set are used, you can 4466 have two different character sequences that look the same. To 4467 avoid confusion, the ISO 10646 standard sets out some 4468 "normalization rules" which when applied ensure that two sequences 4469 that look the same are turned into the same sequence. GCC can warn 4470 you if you are using identifiers that have not been normalized; 4471 this option controls that warning. 4472 4473 There are four levels of warning supported by GCC. The default is 4474 '-Wnormalized=nfc', which warns about any identifier that is not in 4475 the ISO 10646 "C" normalized form, "NFC". NFC is the recommended 4476 form for most uses. 4477 4478 Unfortunately, there are some characters allowed in identifiers by 4479 ISO C and ISO C++ that, when turned into NFC, are not allowed in 4480 identifiers. That is, there's no way to use these symbols in 4481 portable ISO C or C++ and have all your identifiers in NFC. 4482 '-Wnormalized=id' suppresses the warning for these characters. It 4483 is hoped that future versions of the standards involved will 4484 correct this, which is why this option is not the default. 4485 4486 You can switch the warning off for all characters by writing 4487 '-Wnormalized=none'. You should only do this if you are using some 4488 other normalization scheme (like "D"), because otherwise you can 4489 easily create bugs that are literally impossible to see. 4490 4491 Some characters in ISO 10646 have distinct meanings but look 4492 identical in some fonts or display methodologies, especially once 4493 formatting has been applied. For instance '\u207F', "SUPERSCRIPT 4494 LATIN SMALL LETTER N", displays just like a regular 'n' that has 4495 been placed in a superscript. ISO 10646 defines the "NFKC" 4496 normalization scheme to convert all these into a standard form as 4497 well, and GCC warns if your code is not in NFKC if you use 4498 '-Wnormalized=nfkc'. This warning is comparable to warning about 4499 every identifier that contains the letter O because it might be 4500 confused with the digit 0, and so is not the default, but may be 4501 useful as a local coding convention if the programming environment 4502 cannot be fixed to display these characters distinctly. 4503 4504'-Wno-deprecated' 4505 Do not warn about usage of deprecated features. *Note Deprecated 4506 Features::. 4507 4508'-Wno-deprecated-declarations' 4509 Do not warn about uses of functions (*note Function Attributes::), 4510 variables (*note Variable Attributes::), and types (*note Type 4511 Attributes::) marked as deprecated by using the 'deprecated' 4512 attribute. 4513 4514'-Wno-overflow' 4515 Do not warn about compile-time overflow in constant expressions. 4516 4517'-Wopenmp-simd' 4518 Warn if the vectorizer cost model overrides the OpenMP or the Cilk 4519 Plus simd directive set by user. The '-fsimd-cost-model=unlimited' 4520 can be used to relax the cost model. 4521 4522'-Woverride-init (C and Objective-C only)' 4523 Warn if an initialized field without side effects is overridden 4524 when using designated initializers (*note Designated Initializers: 4525 Designated Inits.). 4526 4527 This warning is included in '-Wextra'. To get other '-Wextra' 4528 warnings without this one, use '-Wextra -Wno-override-init'. 4529 4530'-Wpacked' 4531 Warn if a structure is given the packed attribute, but the packed 4532 attribute has no effect on the layout or size of the structure. 4533 Such structures may be mis-aligned for little benefit. For 4534 instance, in this code, the variable 'f.x' in 'struct bar' is 4535 misaligned even though 'struct bar' does not itself have the packed 4536 attribute: 4537 4538 struct foo { 4539 int x; 4540 char a, b, c, d; 4541 } __attribute__((packed)); 4542 struct bar { 4543 char z; 4544 struct foo f; 4545 }; 4546 4547'-Wpacked-bitfield-compat' 4548 The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' attribute on 4549 bit-fields of type 'char'. This has been fixed in GCC 4.4 but the 4550 change can lead to differences in the structure layout. GCC 4551 informs you when the offset of such a field has changed in GCC 4.4. 4552 For example there is no longer a 4-bit padding between field 'a' 4553 and 'b' in this structure: 4554 4555 struct foo 4556 { 4557 char a:4; 4558 char b:8; 4559 } __attribute__ ((packed)); 4560 4561 This warning is enabled by default. Use 4562 '-Wno-packed-bitfield-compat' to disable this warning. 4563 4564'-Wpadded' 4565 Warn if padding is included in a structure, either to align an 4566 element of the structure or to align the whole structure. 4567 Sometimes when this happens it is possible to rearrange the fields 4568 of the structure to reduce the padding and so make the structure 4569 smaller. 4570 4571'-Wredundant-decls' 4572 Warn if anything is declared more than once in the same scope, even 4573 in cases where multiple declaration is valid and changes nothing. 4574 4575'-Wnested-externs (C and Objective-C only)' 4576 Warn if an 'extern' declaration is encountered within a function. 4577 4578'-Wno-inherited-variadic-ctor' 4579 Suppress warnings about use of C++11 inheriting constructors when 4580 the base class inherited from has a C variadic constructor; the 4581 warning is on by default because the ellipsis is not inherited. 4582 4583'-Winline' 4584 Warn if a function that is declared as inline cannot be inlined. 4585 Even with this option, the compiler does not warn about failures to 4586 inline functions declared in system headers. 4587 4588 The compiler uses a variety of heuristics to determine whether or 4589 not to inline a function. For example, the compiler takes into 4590 account the size of the function being inlined and the amount of 4591 inlining that has already been done in the current function. 4592 Therefore, seemingly insignificant changes in the source program 4593 can cause the warnings produced by '-Winline' to appear or 4594 disappear. 4595 4596'-Wno-invalid-offsetof (C++ and Objective-C++ only)' 4597 Suppress warnings from applying the 'offsetof' macro to a non-POD 4598 type. According to the 1998 ISO C++ standard, applying 'offsetof' 4599 to a non-POD type is undefined. In existing C++ implementations, 4600 however, 'offsetof' typically gives meaningful results even when 4601 applied to certain kinds of non-POD types (such as a simple 4602 'struct' that fails to be a POD type only by virtue of having a 4603 constructor). This flag is for users who are aware that they are 4604 writing nonportable code and who have deliberately chosen to ignore 4605 the warning about it. 4606 4607 The restrictions on 'offsetof' may be relaxed in a future version 4608 of the C++ standard. 4609 4610'-Wno-int-to-pointer-cast' 4611 Suppress warnings from casts to pointer type of an integer of a 4612 different size. In C++, casting to a pointer type of smaller size 4613 is an error. 'Wint-to-pointer-cast' is enabled by default. 4614 4615'-Wno-pointer-to-int-cast (C and Objective-C only)' 4616 Suppress warnings from casts from a pointer to an integer type of a 4617 different size. 4618 4619'-Winvalid-pch' 4620 Warn if a precompiled header (*note Precompiled Headers::) is found 4621 in the search path but can't be used. 4622 4623'-Wlong-long' 4624 Warn if 'long long' type is used. This is enabled by either 4625 '-Wpedantic' or '-Wtraditional' in ISO C90 and C++98 modes. To 4626 inhibit the warning messages, use '-Wno-long-long'. 4627 4628'-Wvariadic-macros' 4629 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4630 GNU alternate syntax when in pedantic ISO C99 mode. This is 4631 default. To inhibit the warning messages, use 4632 '-Wno-variadic-macros'. 4633 4634'-Wvarargs' 4635 Warn upon questionable usage of the macros used to handle variable 4636 arguments like 'va_start'. This is default. To inhibit the 4637 warning messages, use '-Wno-varargs'. 4638 4639'-Wvector-operation-performance' 4640 Warn if vector operation is not implemented via SIMD capabilities 4641 of the architecture. Mainly useful for the performance tuning. 4642 Vector operation can be implemented 'piecewise', which means that 4643 the scalar operation is performed on every vector element; 'in 4644 parallel', which means that the vector operation is implemented 4645 using scalars of wider type, which normally is more performance 4646 efficient; and 'as a single scalar', which means that vector fits 4647 into a scalar type. 4648 4649'-Wno-virtual-move-assign' 4650 Suppress warnings about inheriting from a virtual base with a 4651 non-trivial C++11 move assignment operator. This is dangerous 4652 because if the virtual base is reachable along more than one path, 4653 it will be moved multiple times, which can mean both objects end up 4654 in the moved-from state. If the move assignment operator is 4655 written to avoid moving from a moved-from object, this warning can 4656 be disabled. 4657 4658'-Wvla' 4659 Warn if variable length array is used in the code. '-Wno-vla' 4660 prevents the '-Wpedantic' warning of the variable length array. 4661 4662'-Wvolatile-register-var' 4663 Warn if a register variable is declared volatile. The volatile 4664 modifier does not inhibit all optimizations that may eliminate 4665 reads and/or writes to register variables. This warning is enabled 4666 by '-Wall'. 4667 4668'-Wdisabled-optimization' 4669 Warn if a requested optimization pass is disabled. This warning 4670 does not generally indicate that there is anything wrong with your 4671 code; it merely indicates that GCC's optimizers are unable to 4672 handle the code effectively. Often, the problem is that your code 4673 is too big or too complex; GCC refuses to optimize programs when 4674 the optimization itself is likely to take inordinate amounts of 4675 time. 4676 4677'-Wpointer-sign (C and Objective-C only)' 4678 Warn for pointer argument passing or assignment with different 4679 signedness. This option is only supported for C and Objective-C. 4680 It is implied by '-Wall' and by '-Wpedantic', which can be disabled 4681 with '-Wno-pointer-sign'. 4682 4683'-Wstack-protector' 4684 This option is only active when '-fstack-protector' is active. It 4685 warns about functions that are not protected against stack 4686 smashing. 4687 4688'-Woverlength-strings' 4689 Warn about string constants that are longer than the "minimum 4690 maximum" length specified in the C standard. Modern compilers 4691 generally allow string constants that are much longer than the 4692 standard's minimum limit, but very portable programs should avoid 4693 using longer strings. 4694 4695 The limit applies _after_ string constant concatenation, and does 4696 not count the trailing NUL. In C90, the limit was 509 characters; 4697 in C99, it was raised to 4095. C++98 does not specify a normative 4698 minimum maximum, so we do not diagnose overlength strings in C++. 4699 4700 This option is implied by '-Wpedantic', and can be disabled with 4701 '-Wno-overlength-strings'. 4702 4703'-Wunsuffixed-float-constants (C and Objective-C only)' 4704 4705 Issue a warning for any floating constant that does not have a 4706 suffix. When used together with '-Wsystem-headers' it warns about 4707 such constants in system header files. This can be useful when 4708 preparing code to use with the 'FLOAT_CONST_DECIMAL64' pragma from 4709 the decimal floating-point extension to C99. 4710 4711 4712File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4713 47143.9 Options for Debugging Your Program or GCC 4715============================================= 4716 4717GCC has various special options that are used for debugging either your 4718program or GCC: 4719 4720'-g' 4721 Produce debugging information in the operating system's native 4722 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4723 debugging information. 4724 4725 On most systems that use stabs format, '-g' enables use of extra 4726 debugging information that only GDB can use; this extra information 4727 makes debugging work better in GDB but probably makes other 4728 debuggers crash or refuse to read the program. If you want to 4729 control for certain whether to generate the extra information, use 4730 '-gstabs+', '-gstabs', '-gxcoff+', '-gxcoff', or '-gvms' (see 4731 below). 4732 4733 GCC allows you to use '-g' with '-O'. The shortcuts taken by 4734 optimized code may occasionally produce surprising results: some 4735 variables you declared may not exist at all; flow of control may 4736 briefly move where you did not expect it; some statements may not 4737 be executed because they compute constant results or their values 4738 are already at hand; some statements may execute in different 4739 places because they have been moved out of loops. 4740 4741 Nevertheless it proves possible to debug optimized output. This 4742 makes it reasonable to use the optimizer for programs that might 4743 have bugs. 4744 4745 The following options are useful when GCC is generated with the 4746 capability for more than one debugging format. 4747 4748'-gsplit-dwarf' 4749 Separate as much dwarf debugging information as possible into a 4750 separate output file with the extension .dwo. This option allows 4751 the build system to avoid linking files with debug information. To 4752 be useful, this option requires a debugger capable of reading .dwo 4753 files. 4754 4755'-ggdb' 4756 Produce debugging information for use by GDB. This means to use 4757 the most expressive format available (DWARF 2, stabs, or the native 4758 format if neither of those are supported), including GDB extensions 4759 if at all possible. 4760 4761'-gpubnames' 4762 Generate dwarf .debug_pubnames and .debug_pubtypes sections. 4763 4764'-ggnu-pubnames' 4765 Generate .debug_pubnames and .debug_pubtypes sections in a format 4766 suitable for conversion into a GDB index. This option is only 4767 useful with a linker that can produce GDB index version 7. 4768 4769'-gstabs' 4770 Produce debugging information in stabs format (if that is 4771 supported), without GDB extensions. This is the format used by DBX 4772 on most BSD systems. On MIPS, Alpha and System V Release 4 systems 4773 this option produces stabs debugging output that is not understood 4774 by DBX or SDB. On System V Release 4 systems this option requires 4775 the GNU assembler. 4776 4777'-feliminate-unused-debug-symbols' 4778 Produce debugging information in stabs format (if that is 4779 supported), for only symbols that are actually used. 4780 4781'-femit-class-debug-always' 4782 Instead of emitting debugging information for a C++ class in only 4783 one object file, emit it in all object files using the class. This 4784 option should be used only with debuggers that are unable to handle 4785 the way GCC normally emits debugging information for classes 4786 because using this option increases the size of debugging 4787 information by as much as a factor of two. 4788 4789'-fdebug-types-section' 4790 When using DWARF Version 4 or higher, type DIEs can be put into 4791 their own '.debug_types' section instead of making them part of the 4792 '.debug_info' section. It is more efficient to put them in a 4793 separate comdat sections since the linker can then remove 4794 duplicates. But not all DWARF consumers support '.debug_types' 4795 sections yet and on some objects '.debug_types' produces larger 4796 instead of smaller debugging information. 4797 4798'-gstabs+' 4799 Produce debugging information in stabs format (if that is 4800 supported), using GNU extensions understood only by the GNU 4801 debugger (GDB). The use of these extensions is likely to make 4802 other debuggers crash or refuse to read the program. 4803 4804'-gcoff' 4805 Produce debugging information in COFF format (if that is 4806 supported). This is the format used by SDB on most System V 4807 systems prior to System V Release 4. 4808 4809'-gxcoff' 4810 Produce debugging information in XCOFF format (if that is 4811 supported). This is the format used by the DBX debugger on IBM 4812 RS/6000 systems. 4813 4814'-gxcoff+' 4815 Produce debugging information in XCOFF format (if that is 4816 supported), using GNU extensions understood only by the GNU 4817 debugger (GDB). The use of these extensions is likely to make 4818 other debuggers crash or refuse to read the program, and may cause 4819 assemblers other than the GNU assembler (GAS) to fail with an 4820 error. 4821 4822'-gdwarf-VERSION' 4823 Produce debugging information in DWARF format (if that is 4824 supported). The value of VERSION may be either 2, 3 or 4; the 4825 default version for most targets is 4. 4826 4827 Note that with DWARF Version 2, some ports require and always use 4828 some non-conflicting DWARF 3 extensions in the unwind tables. 4829 4830 Version 4 may require GDB 7.0 and '-fvar-tracking-assignments' for 4831 maximum benefit. 4832 4833'-grecord-gcc-switches' 4834 This switch causes the command-line options used to invoke the 4835 compiler that may affect code generation to be appended to the 4836 DW_AT_producer attribute in DWARF debugging information. The 4837 options are concatenated with spaces separating them from each 4838 other and from the compiler version. See also 4839 '-frecord-gcc-switches' for another way of storing compiler options 4840 into the object file. This is the default. 4841 4842'-gno-record-gcc-switches' 4843 Disallow appending command-line options to the DW_AT_producer 4844 attribute in DWARF debugging information. 4845 4846'-gstrict-dwarf' 4847 Disallow using extensions of later DWARF standard version than 4848 selected with '-gdwarf-VERSION'. On most targets using 4849 non-conflicting DWARF extensions from later standard versions is 4850 allowed. 4851 4852'-gno-strict-dwarf' 4853 Allow using extensions of later DWARF standard version than 4854 selected with '-gdwarf-VERSION'. 4855 4856'-gvms' 4857 Produce debugging information in Alpha/VMS debug format (if that is 4858 supported). This is the format used by DEBUG on Alpha/VMS systems. 4859 4860'-gLEVEL' 4861'-ggdbLEVEL' 4862'-gstabsLEVEL' 4863'-gcoffLEVEL' 4864'-gxcoffLEVEL' 4865'-gvmsLEVEL' 4866 Request debugging information and also use LEVEL to specify how 4867 much information. The default level is 2. 4868 4869 Level 0 produces no debug information at all. Thus, '-g0' negates 4870 '-g'. 4871 4872 Level 1 produces minimal information, enough for making backtraces 4873 in parts of the program that you don't plan to debug. This 4874 includes descriptions of functions and external variables, and line 4875 number tables, but no information about local variables. 4876 4877 Level 3 includes extra information, such as all the macro 4878 definitions present in the program. Some debuggers support macro 4879 expansion when you use '-g3'. 4880 4881 '-gdwarf-2' does not accept a concatenated debug level, because GCC 4882 used to support an option '-gdwarf' that meant to generate debug 4883 information in version 1 of the DWARF format (which is very 4884 different from version 2), and it would have been too confusing. 4885 That debug format is long obsolete, but the option cannot be 4886 changed now. Instead use an additional '-gLEVEL' option to change 4887 the debug level for DWARF. 4888 4889'-gtoggle' 4890 Turn off generation of debug info, if leaving out this option 4891 generates it, or turn it on at level 2 otherwise. The position of 4892 this argument in the command line does not matter; it takes effect 4893 after all other options are processed, and it does so only once, no 4894 matter how many times it is given. This is mainly intended to be 4895 used with '-fcompare-debug'. 4896 4897'-fsanitize=address' 4898 Enable AddressSanitizer, a fast memory error detector. Memory 4899 access instructions will be instrumented to detect out-of-bounds 4900 and use-after-free bugs. See 4901 <http://code.google.com/p/address-sanitizer/> for more details. 4902 The run-time behavior can be influenced using the 'ASAN_OPTIONS' 4903 environment variable; see 4904 <https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags> 4905 for a list of supported options. 4906 4907'-fsanitize=kernel-address' 4908 Enable AddressSanitizer for Linux kernel. See 4909 <http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel> 4910 for more details. 4911 4912'-fsanitize=thread' 4913 Enable ThreadSanitizer, a fast data race detector. Memory access 4914 instructions will be instrumented to detect data race bugs. See 4915 <http://code.google.com/p/thread-sanitizer/> for more details. The 4916 run-time behavior can be influenced using the 'TSAN_OPTIONS' 4917 environment variable; see 4918 <https://code.google.com/p/thread-sanitizer/wiki/Flags> for a list 4919 of supported options. 4920 4921'-fsanitize=leak' 4922 Enable LeakSanitizer, a memory leak detector. This option only 4923 matters for linking of executables and if neither 4924 '-fsanitize=address' nor '-fsanitize=thread' is used. In that case 4925 it will link the executable against a library that overrides 4926 'malloc' and other allocator functions. See 4927 <https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer> 4928 for more details. The run-time behavior can be influenced using 4929 the 'LSAN_OPTIONS' environment variable. 4930 4931'-fsanitize=undefined' 4932 Enable UndefinedBehaviorSanitizer, a fast undefined behavior 4933 detector. Various computations will be instrumented to detect 4934 undefined behavior at runtime. Current suboptions are: 4935 4936 '-fsanitize=shift' 4937 4938 This option enables checking that the result of a shift 4939 operation is not undefined. Note that what exactly is 4940 considered undefined differs slightly between C and C++, as 4941 well as between ISO C90 and C99, etc. 4942 4943 '-fsanitize=integer-divide-by-zero' 4944 4945 Detect integer division by zero as well as 'INT_MIN / -1' 4946 division. 4947 4948 '-fsanitize=unreachable' 4949 4950 With this option, the compiler will turn the 4951 '__builtin_unreachable' call into a diagnostics message call 4952 instead. When reaching the '__builtin_unreachable' call, the 4953 behavior is undefined. 4954 4955 '-fsanitize=vla-bound' 4956 4957 This option instructs the compiler to check that the size of a 4958 variable length array is positive. This option does not have 4959 any effect in '-std=c++1y' mode, as the standard requires the 4960 exception be thrown instead. 4961 4962 '-fsanitize=null' 4963 4964 This option enables pointer checking. Particularly, the 4965 application built with this option turned on will issue an 4966 error message when it tries to dereference a NULL pointer, or 4967 if a reference (possibly an rvalue reference) is bound to a 4968 NULL pointer. 4969 4970 '-fsanitize=return' 4971 4972 This option enables return statement checking. Programs built 4973 with this option turned on will issue an error message when 4974 the end of a non-void function is reached without actually 4975 returning a value. This option works in C++ only. 4976 4977 '-fsanitize=signed-integer-overflow' 4978 4979 This option enables signed integer overflow checking. We 4980 check that the result of '+', '*', and both unary and binary 4981 '-' does not overflow in the signed arithmetics. Note, 4982 integer promotion rules must be taken into account. That is, 4983 the following is not an overflow: 4984 signed char a = SCHAR_MAX; 4985 a++; 4986 4987 While '-ftrapv' causes traps for signed overflows to be emitted, 4988 '-fsanitize=undefined' gives a diagnostic message. This currently 4989 works only for the C family of languages. 4990 4991'-fdump-final-insns[=FILE]' 4992 Dump the final internal representation (RTL) to FILE. If the 4993 optional argument is omitted (or if FILE is '.'), the name of the 4994 dump file is determined by appending '.gkd' to the compilation 4995 output file name. 4996 4997'-fcompare-debug[=OPTS]' 4998 If no error occurs during compilation, run the compiler a second 4999 time, adding OPTS and '-fcompare-debug-second' to the arguments 5000 passed to the second compilation. Dump the final internal 5001 representation in both compilations, and print an error if they 5002 differ. 5003 5004 If the equal sign is omitted, the default '-gtoggle' is used. 5005 5006 The environment variable 'GCC_COMPARE_DEBUG', if defined, non-empty 5007 and nonzero, implicitly enables '-fcompare-debug'. If 5008 'GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 5009 then it is used for OPTS, otherwise the default '-gtoggle' is used. 5010 5011 '-fcompare-debug=', with the equal sign but without OPTS, is 5012 equivalent to '-fno-compare-debug', which disables the dumping of 5013 the final representation and the second compilation, preventing 5014 even 'GCC_COMPARE_DEBUG' from taking effect. 5015 5016 To verify full coverage during '-fcompare-debug' testing, set 5017 'GCC_COMPARE_DEBUG' to say '-fcompare-debug-not-overridden', which 5018 GCC rejects as an invalid option in any actual compilation (rather 5019 than preprocessing, assembly or linking). To get just a warning, 5020 setting 'GCC_COMPARE_DEBUG' to '-w%n-fcompare-debug not overridden' 5021 will do. 5022 5023'-fcompare-debug-second' 5024 This option is implicitly passed to the compiler for the second 5025 compilation requested by '-fcompare-debug', along with options to 5026 silence warnings, and omitting other options that would cause 5027 side-effect compiler outputs to files or to the standard output. 5028 Dump files and preserved temporary files are renamed so as to 5029 contain the '.gk' additional extension during the second 5030 compilation, to avoid overwriting those generated by the first. 5031 5032 When this option is passed to the compiler driver, it causes the 5033 _first_ compilation to be skipped, which makes it useful for little 5034 other than debugging the compiler proper. 5035 5036'-feliminate-dwarf2-dups' 5037 Compress DWARF 2 debugging information by eliminating duplicated 5038 information about each symbol. This option only makes sense when 5039 generating DWARF 2 debugging information with '-gdwarf-2'. 5040 5041'-femit-struct-debug-baseonly' 5042 Emit debug information for struct-like types only when the base 5043 name of the compilation source file matches the base name of file 5044 in which the struct is defined. 5045 5046 This option substantially reduces the size of debugging 5047 information, but at significant potential loss in type information 5048 to the debugger. See '-femit-struct-debug-reduced' for a less 5049 aggressive option. See '-femit-struct-debug-detailed' for more 5050 detailed control. 5051 5052 This option works only with DWARF 2. 5053 5054'-femit-struct-debug-reduced' 5055 Emit debug information for struct-like types only when the base 5056 name of the compilation source file matches the base name of file 5057 in which the type is defined, unless the struct is a template or 5058 defined in a system header. 5059 5060 This option significantly reduces the size of debugging 5061 information, with some potential loss in type information to the 5062 debugger. See '-femit-struct-debug-baseonly' for a more aggressive 5063 option. See '-femit-struct-debug-detailed' for more detailed 5064 control. 5065 5066 This option works only with DWARF 2. 5067 5068'-femit-struct-debug-detailed[=SPEC-LIST]' 5069 Specify the struct-like types for which the compiler generates 5070 debug information. The intent is to reduce duplicate struct debug 5071 information between different object files within the same program. 5072 5073 This option is a detailed version of '-femit-struct-debug-reduced' 5074 and '-femit-struct-debug-baseonly', which serves for most needs. 5075 5076 A specification has the syntax 5077 ['dir:'|'ind:']['ord:'|'gen:']('any'|'sys'|'base'|'none') 5078 5079 The optional first word limits the specification to structs that 5080 are used directly ('dir:') or used indirectly ('ind:'). A struct 5081 type is used directly when it is the type of a variable, member. 5082 Indirect uses arise through pointers to structs. That is, when use 5083 of an incomplete struct is valid, the use is indirect. An example 5084 is 'struct one direct; struct two * indirect;'. 5085 5086 The optional second word limits the specification to ordinary 5087 structs ('ord:') or generic structs ('gen:'). Generic structs are 5088 a bit complicated to explain. For C++, these are non-explicit 5089 specializations of template classes, or non-template classes within 5090 the above. Other programming languages have generics, but 5091 '-femit-struct-debug-detailed' does not yet implement them. 5092 5093 The third word specifies the source files for those structs for 5094 which the compiler should emit debug information. The values 5095 'none' and 'any' have the normal meaning. The value 'base' means 5096 that the base of name of the file in which the type declaration 5097 appears must match the base of the name of the main compilation 5098 file. In practice, this means that when compiling 'foo.c', debug 5099 information is generated for types declared in that file and 5100 'foo.h', but not other header files. The value 'sys' means those 5101 types satisfying 'base' or declared in system or compiler headers. 5102 5103 You may need to experiment to determine the best settings for your 5104 application. 5105 5106 The default is '-femit-struct-debug-detailed=all'. 5107 5108 This option works only with DWARF 2. 5109 5110'-fno-merge-debug-strings' 5111 Direct the linker to not merge together strings in the debugging 5112 information that are identical in different object files. Merging 5113 is not supported by all assemblers or linkers. Merging decreases 5114 the size of the debug information in the output file at the cost of 5115 increasing link processing time. Merging is enabled by default. 5116 5117'-fdebug-prefix-map=OLD=NEW' 5118 When compiling files in directory 'OLD', record debugging 5119 information describing them as in 'NEW' instead. 5120 5121'-fno-dwarf2-cfi-asm' 5122 Emit DWARF 2 unwind info as compiler generated '.eh_frame' section 5123 instead of using GAS '.cfi_*' directives. 5124 5125'-p' 5126 Generate extra code to write profile information suitable for the 5127 analysis program 'prof'. You must use this option when compiling 5128 the source files you want data about, and you must also use it when 5129 linking. 5130 5131'-pg' 5132 Generate extra code to write profile information suitable for the 5133 analysis program 'gprof'. You must use this option when compiling 5134 the source files you want data about, and you must also use it when 5135 linking. 5136 5137'-Q' 5138 Makes the compiler print out each function name as it is compiled, 5139 and print some statistics about each pass when it finishes. 5140 5141'-ftime-report' 5142 Makes the compiler print some statistics about the time consumed by 5143 each pass when it finishes. 5144 5145'-fmem-report' 5146 Makes the compiler print some statistics about permanent memory 5147 allocation when it finishes. 5148 5149'-fmem-report-wpa' 5150 Makes the compiler print some statistics about permanent memory 5151 allocation for the WPA phase only. 5152 5153'-fpre-ipa-mem-report' 5154'-fpost-ipa-mem-report' 5155 Makes the compiler print some statistics about permanent memory 5156 allocation before or after interprocedural optimization. 5157 5158'-fprofile-report' 5159 Makes the compiler print some statistics about consistency of the 5160 (estimated) profile and effect of individual passes. 5161 5162'-fstack-usage' 5163 Makes the compiler output stack usage information for the program, 5164 on a per-function basis. The filename for the dump is made by 5165 appending '.su' to the AUXNAME. AUXNAME is generated from the name 5166 of the output file, if explicitly specified and it is not an 5167 executable, otherwise it is the basename of the source file. An 5168 entry is made up of three fields: 5169 5170 * The name of the function. 5171 * A number of bytes. 5172 * One or more qualifiers: 'static', 'dynamic', 'bounded'. 5173 5174 The qualifier 'static' means that the function manipulates the 5175 stack statically: a fixed number of bytes are allocated for the 5176 frame on function entry and released on function exit; no stack 5177 adjustments are otherwise made in the function. The second field 5178 is this fixed number of bytes. 5179 5180 The qualifier 'dynamic' means that the function manipulates the 5181 stack dynamically: in addition to the static allocation described 5182 above, stack adjustments are made in the body of the function, for 5183 example to push/pop arguments around function calls. If the 5184 qualifier 'bounded' is also present, the amount of these 5185 adjustments is bounded at compile time and the second field is an 5186 upper bound of the total amount of stack used by the function. If 5187 it is not present, the amount of these adjustments is not bounded 5188 at compile time and the second field only represents the bounded 5189 part. 5190 5191'-fprofile-arcs' 5192 Add code so that program flow "arcs" are instrumented. During 5193 execution the program records how many times each branch and call 5194 is executed and how many times it is taken or returns. When the 5195 compiled program exits it saves this data to a file called 5196 'AUXNAME.gcda' for each source file. The data may be used for 5197 profile-directed optimizations ('-fbranch-probabilities'), or for 5198 test coverage analysis ('-ftest-coverage'). Each object file's 5199 AUXNAME is generated from the name of the output file, if 5200 explicitly specified and it is not the final executable, otherwise 5201 it is the basename of the source file. In both cases any suffix is 5202 removed (e.g. 'foo.gcda' for input file 'dir/foo.c', or 5203 'dir/foo.gcda' for output file specified as '-o dir/foo.o'). *Note 5204 Cross-profiling::. 5205 5206'--coverage' 5207 5208 This option is used to compile and link code instrumented for 5209 coverage analysis. The option is a synonym for '-fprofile-arcs' 5210 '-ftest-coverage' (when compiling) and '-lgcov' (when linking). 5211 See the documentation for those options for more details. 5212 5213 * Compile the source files with '-fprofile-arcs' plus 5214 optimization and code generation options. For test coverage 5215 analysis, use the additional '-ftest-coverage' option. You do 5216 not need to profile every source file in a program. 5217 5218 * Link your object files with '-lgcov' or '-fprofile-arcs' (the 5219 latter implies the former). 5220 5221 * Run the program on a representative workload to generate the 5222 arc profile information. This may be repeated any number of 5223 times. You can run concurrent instances of your program, and 5224 provided that the file system supports locking, the data files 5225 will be correctly updated. Also 'fork' calls are detected and 5226 correctly handled (double counting will not happen). 5227 5228 * For profile-directed optimizations, compile the source files 5229 again with the same optimization and code generation options 5230 plus '-fbranch-probabilities' (*note Options that Control 5231 Optimization: Optimize Options.). 5232 5233 * For test coverage analysis, use 'gcov' to produce human 5234 readable information from the '.gcno' and '.gcda' files. 5235 Refer to the 'gcov' documentation for further information. 5236 5237 With '-fprofile-arcs', for each function of your program GCC 5238 creates a program flow graph, then finds a spanning tree for the 5239 graph. Only arcs that are not on the spanning tree have to be 5240 instrumented: the compiler adds code to count the number of times 5241 that these arcs are executed. When an arc is the only exit or only 5242 entrance to a block, the instrumentation code can be added to the 5243 block; otherwise, a new basic block must be created to hold the 5244 instrumentation code. 5245 5246'-ftest-coverage' 5247 Produce a notes file that the 'gcov' code-coverage utility (*note 5248 'gcov'--a Test Coverage Program: Gcov.) can use to show program 5249 coverage. Each source file's note file is called 'AUXNAME.gcno'. 5250 Refer to the '-fprofile-arcs' option above for a description of 5251 AUXNAME and instructions on how to generate test coverage data. 5252 Coverage data matches the source files more closely if you do not 5253 optimize. 5254 5255'-fdbg-cnt-list' 5256 Print the name and the counter upper bound for all debug counters. 5257 5258'-fdbg-cnt=COUNTER-VALUE-LIST' 5259 Set the internal debug counter upper bound. COUNTER-VALUE-LIST is 5260 a comma-separated list of NAME:VALUE pairs which sets the upper 5261 bound of each debug counter NAME to VALUE. All debug counters have 5262 the initial upper bound of 'UINT_MAX'; thus 'dbg_cnt()' returns 5263 true always unless the upper bound is set by this option. For 5264 example, with '-fdbg-cnt=dce:10,tail_call:0', 'dbg_cnt(dce)' 5265 returns true only for first 10 invocations. 5266 5267'-fenable-KIND-PASS' 5268'-fdisable-KIND-PASS=RANGE-LIST' 5269 5270 This is a set of options that are used to explicitly disable/enable 5271 optimization passes. These options are intended for use for 5272 debugging GCC. Compiler users should use regular options for 5273 enabling/disabling passes instead. 5274 5275 '-fdisable-ipa-PASS' 5276 Disable IPA pass PASS. PASS is the pass name. If the same 5277 pass is statically invoked in the compiler multiple times, the 5278 pass name should be appended with a sequential number starting 5279 from 1. 5280 5281 '-fdisable-rtl-PASS' 5282 '-fdisable-rtl-PASS=RANGE-LIST' 5283 Disable RTL pass PASS. PASS is the pass name. If the same 5284 pass is statically invoked in the compiler multiple times, the 5285 pass name should be appended with a sequential number starting 5286 from 1. RANGE-LIST is a comma-separated list of function 5287 ranges or assembler names. Each range is a number pair 5288 separated by a colon. The range is inclusive in both ends. 5289 If the range is trivial, the number pair can be simplified as 5290 a single number. If the function's call graph node's UID 5291 falls within one of the specified ranges, the PASS is disabled 5292 for that function. The UID is shown in the function header of 5293 a dump file, and the pass names can be dumped by using option 5294 '-fdump-passes'. 5295 5296 '-fdisable-tree-PASS' 5297 '-fdisable-tree-PASS=RANGE-LIST' 5298 Disable tree pass PASS. See '-fdisable-rtl' for the 5299 description of option arguments. 5300 5301 '-fenable-ipa-PASS' 5302 Enable IPA pass PASS. PASS is the pass name. If the same 5303 pass is statically invoked in the compiler multiple times, the 5304 pass name should be appended with a sequential number starting 5305 from 1. 5306 5307 '-fenable-rtl-PASS' 5308 '-fenable-rtl-PASS=RANGE-LIST' 5309 Enable RTL pass PASS. See '-fdisable-rtl' for option argument 5310 description and examples. 5311 5312 '-fenable-tree-PASS' 5313 '-fenable-tree-PASS=RANGE-LIST' 5314 Enable tree pass PASS. See '-fdisable-rtl' for the 5315 description of option arguments. 5316 5317 Here are some examples showing uses of these options. 5318 5319 5320 # disable ccp1 for all functions 5321 -fdisable-tree-ccp1 5322 # disable complete unroll for function whose cgraph node uid is 1 5323 -fenable-tree-cunroll=1 5324 # disable gcse2 for functions at the following ranges [1,1], 5325 # [300,400], and [400,1000] 5326 # disable gcse2 for functions foo and foo2 5327 -fdisable-rtl-gcse2=foo,foo2 5328 # disable early inlining 5329 -fdisable-tree-einline 5330 # disable ipa inlining 5331 -fdisable-ipa-inline 5332 # enable tree full unroll 5333 -fenable-tree-unroll 5334 5335 5336'-dLETTERS' 5337'-fdump-rtl-PASS' 5338'-fdump-rtl-PASS=FILENAME' 5339 Says to make debugging dumps during compilation at times specified 5340 by LETTERS. This is used for debugging the RTL-based passes of the 5341 compiler. The file names for most of the dumps are made by 5342 appending a pass number and a word to the DUMPNAME, and the files 5343 are created in the directory of the output file. In case of 5344 '=FILENAME' option, the dump is output on the given file instead of 5345 the pass numbered dump files. Note that the pass number is 5346 computed statically as passes get registered into the pass manager. 5347 Thus the numbering is not related to the dynamic order of execution 5348 of passes. In particular, a pass installed by a plugin could have 5349 a number over 200 even if it executed quite early. DUMPNAME is 5350 generated from the name of the output file, if explicitly specified 5351 and it is not an executable, otherwise it is the basename of the 5352 source file. These switches may have different effects when '-E' 5353 is used for preprocessing. 5354 5355 Debug dumps can be enabled with a '-fdump-rtl' switch or some '-d' 5356 option LETTERS. Here are the possible letters for use in PASS and 5357 LETTERS, and their meanings: 5358 5359 '-fdump-rtl-alignments' 5360 Dump after branch alignments have been computed. 5361 5362 '-fdump-rtl-asmcons' 5363 Dump after fixing rtl statements that have unsatisfied in/out 5364 constraints. 5365 5366 '-fdump-rtl-auto_inc_dec' 5367 Dump after auto-inc-dec discovery. This pass is only run on 5368 architectures that have auto inc or auto dec instructions. 5369 5370 '-fdump-rtl-barriers' 5371 Dump after cleaning up the barrier instructions. 5372 5373 '-fdump-rtl-bbpart' 5374 Dump after partitioning hot and cold basic blocks. 5375 5376 '-fdump-rtl-bbro' 5377 Dump after block reordering. 5378 5379 '-fdump-rtl-btl1' 5380 '-fdump-rtl-btl2' 5381 '-fdump-rtl-btl1' and '-fdump-rtl-btl2' enable dumping after 5382 the two branch target load optimization passes. 5383 5384 '-fdump-rtl-bypass' 5385 Dump after jump bypassing and control flow optimizations. 5386 5387 '-fdump-rtl-combine' 5388 Dump after the RTL instruction combination pass. 5389 5390 '-fdump-rtl-compgotos' 5391 Dump after duplicating the computed gotos. 5392 5393 '-fdump-rtl-ce1' 5394 '-fdump-rtl-ce2' 5395 '-fdump-rtl-ce3' 5396 '-fdump-rtl-ce1', '-fdump-rtl-ce2', and '-fdump-rtl-ce3' 5397 enable dumping after the three if conversion passes. 5398 5399 '-fdump-rtl-cprop_hardreg' 5400 Dump after hard register copy propagation. 5401 5402 '-fdump-rtl-csa' 5403 Dump after combining stack adjustments. 5404 5405 '-fdump-rtl-cse1' 5406 '-fdump-rtl-cse2' 5407 '-fdump-rtl-cse1' and '-fdump-rtl-cse2' enable dumping after 5408 the two common subexpression elimination passes. 5409 5410 '-fdump-rtl-dce' 5411 Dump after the standalone dead code elimination passes. 5412 5413 '-fdump-rtl-dbr' 5414 Dump after delayed branch scheduling. 5415 5416 '-fdump-rtl-dce1' 5417 '-fdump-rtl-dce2' 5418 '-fdump-rtl-dce1' and '-fdump-rtl-dce2' enable dumping after 5419 the two dead store elimination passes. 5420 5421 '-fdump-rtl-eh' 5422 Dump after finalization of EH handling code. 5423 5424 '-fdump-rtl-eh_ranges' 5425 Dump after conversion of EH handling range regions. 5426 5427 '-fdump-rtl-expand' 5428 Dump after RTL generation. 5429 5430 '-fdump-rtl-fwprop1' 5431 '-fdump-rtl-fwprop2' 5432 '-fdump-rtl-fwprop1' and '-fdump-rtl-fwprop2' enable dumping 5433 after the two forward propagation passes. 5434 5435 '-fdump-rtl-gcse1' 5436 '-fdump-rtl-gcse2' 5437 '-fdump-rtl-gcse1' and '-fdump-rtl-gcse2' enable dumping after 5438 global common subexpression elimination. 5439 5440 '-fdump-rtl-init-regs' 5441 Dump after the initialization of the registers. 5442 5443 '-fdump-rtl-initvals' 5444 Dump after the computation of the initial value sets. 5445 5446 '-fdump-rtl-into_cfglayout' 5447 Dump after converting to cfglayout mode. 5448 5449 '-fdump-rtl-ira' 5450 Dump after iterated register allocation. 5451 5452 '-fdump-rtl-jump' 5453 Dump after the second jump optimization. 5454 5455 '-fdump-rtl-loop2' 5456 '-fdump-rtl-loop2' enables dumping after the rtl loop 5457 optimization passes. 5458 5459 '-fdump-rtl-mach' 5460 Dump after performing the machine dependent reorganization 5461 pass, if that pass exists. 5462 5463 '-fdump-rtl-mode_sw' 5464 Dump after removing redundant mode switches. 5465 5466 '-fdump-rtl-rnreg' 5467 Dump after register renumbering. 5468 5469 '-fdump-rtl-outof_cfglayout' 5470 Dump after converting from cfglayout mode. 5471 5472 '-fdump-rtl-peephole2' 5473 Dump after the peephole pass. 5474 5475 '-fdump-rtl-postreload' 5476 Dump after post-reload optimizations. 5477 5478 '-fdump-rtl-pro_and_epilogue' 5479 Dump after generating the function prologues and epilogues. 5480 5481 '-fdump-rtl-sched1' 5482 '-fdump-rtl-sched2' 5483 '-fdump-rtl-sched1' and '-fdump-rtl-sched2' enable dumping 5484 after the basic block scheduling passes. 5485 5486 '-fdump-rtl-ree' 5487 Dump after sign/zero extension elimination. 5488 5489 '-fdump-rtl-seqabstr' 5490 Dump after common sequence discovery. 5491 5492 '-fdump-rtl-shorten' 5493 Dump after shortening branches. 5494 5495 '-fdump-rtl-sibling' 5496 Dump after sibling call optimizations. 5497 5498 '-fdump-rtl-split1' 5499 '-fdump-rtl-split2' 5500 '-fdump-rtl-split3' 5501 '-fdump-rtl-split4' 5502 '-fdump-rtl-split5' 5503 '-fdump-rtl-split1', '-fdump-rtl-split2', '-fdump-rtl-split3', 5504 '-fdump-rtl-split4' and '-fdump-rtl-split5' enable dumping 5505 after five rounds of instruction splitting. 5506 5507 '-fdump-rtl-sms' 5508 Dump after modulo scheduling. This pass is only run on some 5509 architectures. 5510 5511 '-fdump-rtl-stack' 5512 Dump after conversion from GCC's "flat register file" 5513 registers to the x87's stack-like registers. This pass is 5514 only run on x86 variants. 5515 5516 '-fdump-rtl-subreg1' 5517 '-fdump-rtl-subreg2' 5518 '-fdump-rtl-subreg1' and '-fdump-rtl-subreg2' enable dumping 5519 after the two subreg expansion passes. 5520 5521 '-fdump-rtl-unshare' 5522 Dump after all rtl has been unshared. 5523 5524 '-fdump-rtl-vartrack' 5525 Dump after variable tracking. 5526 5527 '-fdump-rtl-vregs' 5528 Dump after converting virtual registers to hard registers. 5529 5530 '-fdump-rtl-web' 5531 Dump after live range splitting. 5532 5533 '-fdump-rtl-regclass' 5534 '-fdump-rtl-subregs_of_mode_init' 5535 '-fdump-rtl-subregs_of_mode_finish' 5536 '-fdump-rtl-dfinit' 5537 '-fdump-rtl-dfinish' 5538 These dumps are defined but always produce empty files. 5539 5540 '-da' 5541 '-fdump-rtl-all' 5542 Produce all the dumps listed above. 5543 5544 '-dA' 5545 Annotate the assembler output with miscellaneous debugging 5546 information. 5547 5548 '-dD' 5549 Dump all macro definitions, at the end of preprocessing, in 5550 addition to normal output. 5551 5552 '-dH' 5553 Produce a core dump whenever an error occurs. 5554 5555 '-dp' 5556 Annotate the assembler output with a comment indicating which 5557 pattern and alternative is used. The length of each 5558 instruction is also printed. 5559 5560 '-dP' 5561 Dump the RTL in the assembler output as a comment before each 5562 instruction. Also turns on '-dp' annotation. 5563 5564 '-dx' 5565 Just generate RTL for a function instead of compiling it. 5566 Usually used with '-fdump-rtl-expand'. 5567 5568'-fdump-noaddr' 5569 When doing debugging dumps, suppress address output. This makes it 5570 more feasible to use diff on debugging dumps for compiler 5571 invocations with different compiler binaries and/or different text 5572 / bss / data / heap / stack / dso start locations. 5573 5574'-fdump-unnumbered' 5575 When doing debugging dumps, suppress instruction numbers and 5576 address output. This makes it more feasible to use diff on 5577 debugging dumps for compiler invocations with different options, in 5578 particular with and without '-g'. 5579 5580'-fdump-unnumbered-links' 5581 When doing debugging dumps (see '-d' option above), suppress 5582 instruction numbers for the links to the previous and next 5583 instructions in a sequence. 5584 5585'-fdump-translation-unit (C++ only)' 5586'-fdump-translation-unit-OPTIONS (C++ only)' 5587 Dump a representation of the tree structure for the entire 5588 translation unit to a file. The file name is made by appending 5589 '.tu' to the source file name, and the file is created in the same 5590 directory as the output file. If the '-OPTIONS' form is used, 5591 OPTIONS controls the details of the dump as described for the 5592 '-fdump-tree' options. 5593 5594'-fdump-class-hierarchy (C++ only)' 5595'-fdump-class-hierarchy-OPTIONS (C++ only)' 5596 Dump a representation of each class's hierarchy and virtual 5597 function table layout to a file. The file name is made by 5598 appending '.class' to the source file name, and the file is created 5599 in the same directory as the output file. If the '-OPTIONS' form 5600 is used, OPTIONS controls the details of the dump as described for 5601 the '-fdump-tree' options. 5602 5603'-fdump-ipa-SWITCH' 5604 Control the dumping at various stages of inter-procedural analysis 5605 language tree to a file. The file name is generated by appending a 5606 switch specific suffix to the source file name, and the file is 5607 created in the same directory as the output file. The following 5608 dumps are possible: 5609 5610 'all' 5611 Enables all inter-procedural analysis dumps. 5612 5613 'cgraph' 5614 Dumps information about call-graph optimization, unused 5615 function removal, and inlining decisions. 5616 5617 'inline' 5618 Dump after function inlining. 5619 5620'-fdump-passes' 5621 Dump the list of optimization passes that are turned on and off by 5622 the current command-line options. 5623 5624'-fdump-statistics-OPTION' 5625 Enable and control dumping of pass statistics in a separate file. 5626 The file name is generated by appending a suffix ending in 5627 '.statistics' to the source file name, and the file is created in 5628 the same directory as the output file. If the '-OPTION' form is 5629 used, '-stats' causes counters to be summed over the whole 5630 compilation unit while '-details' dumps every event as the passes 5631 generate them. The default with no option is to sum counters for 5632 each function compiled. 5633 5634'-fdump-tree-SWITCH' 5635'-fdump-tree-SWITCH-OPTIONS' 5636'-fdump-tree-SWITCH-OPTIONS=FILENAME' 5637 Control the dumping at various stages of processing the 5638 intermediate language tree to a file. The file name is generated 5639 by appending a switch-specific suffix to the source file name, and 5640 the file is created in the same directory as the output file. In 5641 case of '=FILENAME' option, the dump is output on the given file 5642 instead of the auto named dump files. If the '-OPTIONS' form is 5643 used, OPTIONS is a list of '-' separated options which control the 5644 details of the dump. Not all options are applicable to all dumps; 5645 those that are not meaningful are ignored. The following options 5646 are available 5647 5648 'address' 5649 Print the address of each node. Usually this is not 5650 meaningful as it changes according to the environment and 5651 source file. Its primary use is for tying up a dump file with 5652 a debug environment. 5653 'asmname' 5654 If 'DECL_ASSEMBLER_NAME' has been set for a given decl, use 5655 that in the dump instead of 'DECL_NAME'. Its primary use is 5656 ease of use working backward from mangled names in the 5657 assembly file. 5658 'slim' 5659 When dumping front-end intermediate representations, inhibit 5660 dumping of members of a scope or body of a function merely 5661 because that scope has been reached. Only dump such items 5662 when they are directly reachable by some other path. 5663 5664 When dumping pretty-printed trees, this option inhibits 5665 dumping the bodies of control structures. 5666 5667 When dumping RTL, print the RTL in slim (condensed) form 5668 instead of the default LISP-like representation. 5669 'raw' 5670 Print a raw representation of the tree. By default, trees are 5671 pretty-printed into a C-like representation. 5672 'details' 5673 Enable more detailed dumps (not honored by every dump option). 5674 Also include information from the optimization passes. 5675 'stats' 5676 Enable dumping various statistics about the pass (not honored 5677 by every dump option). 5678 'blocks' 5679 Enable showing basic block boundaries (disabled in raw dumps). 5680 'graph' 5681 For each of the other indicated dump files 5682 ('-fdump-rtl-PASS'), dump a representation of the control flow 5683 graph suitable for viewing with GraphViz to 5684 'FILE.PASSID.PASS.dot'. Each function in the file is 5685 pretty-printed as a subgraph, so that GraphViz can render them 5686 all in a single plot. 5687 5688 This option currently only works for RTL dumps, and the RTL is 5689 always dumped in slim form. 5690 'vops' 5691 Enable showing virtual operands for every statement. 5692 'lineno' 5693 Enable showing line numbers for statements. 5694 'uid' 5695 Enable showing the unique ID ('DECL_UID') for each variable. 5696 'verbose' 5697 Enable showing the tree dump for each statement. 5698 'eh' 5699 Enable showing the EH region number holding each statement. 5700 'scev' 5701 Enable showing scalar evolution analysis details. 5702 'optimized' 5703 Enable showing optimization information (only available in 5704 certain passes). 5705 'missed' 5706 Enable showing missed optimization information (only available 5707 in certain passes). 5708 'notes' 5709 Enable other detailed optimization information (only available 5710 in certain passes). 5711 '=FILENAME' 5712 Instead of an auto named dump file, output into the given file 5713 name. The file names 'stdout' and 'stderr' are treated 5714 specially and are considered already open standard streams. 5715 For example, 5716 5717 gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump 5718 -fdump-tree-pre=stderr file.c 5719 5720 outputs vectorizer dump into 'foo.dump', while the PRE dump is 5721 output on to 'stderr'. If two conflicting dump filenames are 5722 given for the same pass, then the latter option overrides the 5723 earlier one. 5724 5725 'all' 5726 Turn on all options, except 'raw', 'slim', 'verbose' and 5727 'lineno'. 5728 5729 'optall' 5730 Turn on all optimization options, i.e., 'optimized', 'missed', 5731 and 'note'. 5732 5733 The following tree dumps are possible: 5734 5735 'original' 5736 Dump before any tree based optimization, to 'FILE.original'. 5737 5738 'optimized' 5739 Dump after all tree based optimization, to 'FILE.optimized'. 5740 5741 'gimple' 5742 Dump each function before and after the gimplification pass to 5743 a file. The file name is made by appending '.gimple' to the 5744 source file name. 5745 5746 'cfg' 5747 Dump the control flow graph of each function to a file. The 5748 file name is made by appending '.cfg' to the source file name. 5749 5750 'ch' 5751 Dump each function after copying loop headers. The file name 5752 is made by appending '.ch' to the source file name. 5753 5754 'ssa' 5755 Dump SSA related information to a file. The file name is made 5756 by appending '.ssa' to the source file name. 5757 5758 'alias' 5759 Dump aliasing information for each function. The file name is 5760 made by appending '.alias' to the source file name. 5761 5762 'ccp' 5763 Dump each function after CCP. The file name is made by 5764 appending '.ccp' to the source file name. 5765 5766 'storeccp' 5767 Dump each function after STORE-CCP. The file name is made by 5768 appending '.storeccp' to the source file name. 5769 5770 'pre' 5771 Dump trees after partial redundancy elimination. The file 5772 name is made by appending '.pre' to the source file name. 5773 5774 'fre' 5775 Dump trees after full redundancy elimination. The file name 5776 is made by appending '.fre' to the source file name. 5777 5778 'copyprop' 5779 Dump trees after copy propagation. The file name is made by 5780 appending '.copyprop' to the source file name. 5781 5782 'store_copyprop' 5783 Dump trees after store copy-propagation. The file name is 5784 made by appending '.store_copyprop' to the source file name. 5785 5786 'dce' 5787 Dump each function after dead code elimination. The file name 5788 is made by appending '.dce' to the source file name. 5789 5790 'sra' 5791 Dump each function after performing scalar replacement of 5792 aggregates. The file name is made by appending '.sra' to the 5793 source file name. 5794 5795 'sink' 5796 Dump each function after performing code sinking. The file 5797 name is made by appending '.sink' to the source file name. 5798 5799 'dom' 5800 Dump each function after applying dominator tree 5801 optimizations. The file name is made by appending '.dom' to 5802 the source file name. 5803 5804 'dse' 5805 Dump each function after applying dead store elimination. The 5806 file name is made by appending '.dse' to the source file name. 5807 5808 'phiopt' 5809 Dump each function after optimizing PHI nodes into 5810 straightline code. The file name is made by appending 5811 '.phiopt' to the source file name. 5812 5813 'forwprop' 5814 Dump each function after forward propagating single use 5815 variables. The file name is made by appending '.forwprop' to 5816 the source file name. 5817 5818 'copyrename' 5819 Dump each function after applying the copy rename 5820 optimization. The file name is made by appending 5821 '.copyrename' to the source file name. 5822 5823 'nrv' 5824 Dump each function after applying the named return value 5825 optimization on generic trees. The file name is made by 5826 appending '.nrv' to the source file name. 5827 5828 'vect' 5829 Dump each function after applying vectorization of loops. The 5830 file name is made by appending '.vect' to the source file 5831 name. 5832 5833 'slp' 5834 Dump each function after applying vectorization of basic 5835 blocks. The file name is made by appending '.slp' to the 5836 source file name. 5837 5838 'vrp' 5839 Dump each function after Value Range Propagation (VRP). The 5840 file name is made by appending '.vrp' to the source file name. 5841 5842 'all' 5843 Enable all the available tree dumps with the flags provided in 5844 this option. 5845 5846'-fopt-info' 5847'-fopt-info-OPTIONS' 5848'-fopt-info-OPTIONS=FILENAME' 5849 Controls optimization dumps from various optimization passes. If 5850 the '-OPTIONS' form is used, OPTIONS is a list of '-' separated 5851 options to select the dump details and optimizations. If OPTIONS 5852 is not specified, it defaults to 'optimized' for details and 5853 'optall' for optimization groups. If the FILENAME is not 5854 specified, it defaults to 'stderr'. Note that the output FILENAME 5855 will be overwritten in case of multiple translation units. If a 5856 combined output from multiple translation units is desired, 5857 'stderr' should be used instead. 5858 5859 The options can be divided into two groups, 1) options describing 5860 the verbosity of the dump, and 2) options describing which 5861 optimizations should be included. The options from both the groups 5862 can be freely mixed as they are non-overlapping. However, in case 5863 of any conflicts, the latter options override the earlier options 5864 on the command line. Though multiple -fopt-info options are 5865 accepted, only one of them can have '=filename'. If other 5866 filenames are provided then all but the first one are ignored. 5867 5868 The dump verbosity has the following options 5869 5870 'optimized' 5871 Print information when an optimization is successfully 5872 applied. It is up to a pass to decide which information is 5873 relevant. For example, the vectorizer passes print the source 5874 location of loops which got successfully vectorized. 5875 'missed' 5876 Print information about missed optimizations. Individual 5877 passes control which information to include in the output. 5878 For example, 5879 5880 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 5881 5882 will print information about missed optimization opportunities 5883 from vectorization passes on stderr. 5884 'note' 5885 Print verbose information about optimizations, such as certain 5886 transformations, more detailed messages about decisions etc. 5887 'all' 5888 Print detailed optimization information. This includes 5889 OPTIMIZED, MISSED, and NOTE. 5890 5891 The second set of options describes a group of optimizations and 5892 may include one or more of the following. 5893 5894 'ipa' 5895 Enable dumps from all interprocedural optimizations. 5896 'loop' 5897 Enable dumps from all loop optimizations. 5898 'inline' 5899 Enable dumps from all inlining optimizations. 5900 'vec' 5901 Enable dumps from all vectorization optimizations. 5902 'optall' 5903 Enable dumps from all optimizations. This is a superset of 5904 the optimization groups listed above. 5905 5906 For example, 5907 gcc -O3 -fopt-info-missed=missed.all 5908 5909 outputs missed optimization report from all the passes into 5910 'missed.all'. 5911 5912 As another example, 5913 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 5914 5915 will output information about missed optimizations as well as 5916 optimized locations from all the inlining passes into 'inline.txt'. 5917 5918 If the FILENAME is provided, then the dumps from all the applicable 5919 optimizations are concatenated into the 'filename'. Otherwise the 5920 dump is output onto 'stderr'. If OPTIONS is omitted, it defaults 5921 to 'all-optall', which means dump all available optimization info 5922 from all the passes. In the following example, all optimization 5923 info is output on to 'stderr'. 5924 5925 gcc -O3 -fopt-info 5926 5927 Note that '-fopt-info-vec-missed' behaves the same as 5928 '-fopt-info-missed-vec'. 5929 5930 As another example, consider 5931 5932 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 5933 5934 Here the two output filenames 'vec.miss' and 'loop.opt' are in 5935 conflict since only one output file is allowed. In this case, only 5936 the first option takes effect and the subsequent options are 5937 ignored. Thus only the 'vec.miss' is produced which contains dumps 5938 from the vectorizer about missed opportunities. 5939 5940'-frandom-seed=STRING' 5941 This option provides a seed that GCC uses in place of random 5942 numbers in generating certain symbol names that have to be 5943 different in every compiled file. It is also used to place unique 5944 stamps in coverage data files and the object files that produce 5945 them. You can use the '-frandom-seed' option to produce 5946 reproducibly identical object files. 5947 5948 The STRING should be different for every file you compile. 5949 5950'-fsched-verbose=N' 5951 On targets that use instruction scheduling, this option controls 5952 the amount of debugging output the scheduler prints. This 5953 information is written to standard error, unless 5954 '-fdump-rtl-sched1' or '-fdump-rtl-sched2' is specified, in which 5955 case it is output to the usual dump listing file, '.sched1' or 5956 '.sched2' respectively. However for N greater than nine, the 5957 output is always printed to standard error. 5958 5959 For N greater than zero, '-fsched-verbose' outputs the same 5960 information as '-fdump-rtl-sched1' and '-fdump-rtl-sched2'. For N 5961 greater than one, it also output basic block probabilities, 5962 detailed ready list information and unit/insn info. For N greater 5963 than two, it includes RTL at abort point, control-flow and regions 5964 info. And for N over four, '-fsched-verbose' also includes 5965 dependence info. 5966 5967'-save-temps' 5968'-save-temps=cwd' 5969 Store the usual "temporary" intermediate files permanently; place 5970 them in the current directory and name them based on the source 5971 file. Thus, compiling 'foo.c' with '-c -save-temps' produces files 5972 'foo.i' and 'foo.s', as well as 'foo.o'. This creates a 5973 preprocessed 'foo.i' output file even though the compiler now 5974 normally uses an integrated preprocessor. 5975 5976 When used in combination with the '-x' command-line option, 5977 '-save-temps' is sensible enough to avoid over writing an input 5978 source file with the same extension as an intermediate file. The 5979 corresponding intermediate file may be obtained by renaming the 5980 source file before using '-save-temps'. 5981 5982 If you invoke GCC in parallel, compiling several different source 5983 files that share a common base name in different subdirectories or 5984 the same source file compiled for multiple output destinations, it 5985 is likely that the different parallel compilers will interfere with 5986 each other, and overwrite the temporary files. For instance: 5987 5988 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5989 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5990 5991 may result in 'foo.i' and 'foo.o' being written to simultaneously 5992 by both compilers. 5993 5994'-save-temps=obj' 5995 Store the usual "temporary" intermediate files permanently. If the 5996 '-o' option is used, the temporary files are based on the object 5997 file. If the '-o' option is not used, the '-save-temps=obj' switch 5998 behaves like '-save-temps'. 5999 6000 For example: 6001 6002 gcc -save-temps=obj -c foo.c 6003 gcc -save-temps=obj -c bar.c -o dir/xbar.o 6004 gcc -save-temps=obj foobar.c -o dir2/yfoobar 6005 6006 creates 'foo.i', 'foo.s', 'dir/xbar.i', 'dir/xbar.s', 6007 'dir2/yfoobar.i', 'dir2/yfoobar.s', and 'dir2/yfoobar.o'. 6008 6009'-time[=FILE]' 6010 Report the CPU time taken by each subprocess in the compilation 6011 sequence. For C source files, this is the compiler proper and 6012 assembler (plus the linker if linking is done). 6013 6014 Without the specification of an output file, the output looks like 6015 this: 6016 6017 # cc1 0.12 0.01 6018 # as 0.00 0.01 6019 6020 The first number on each line is the "user time", that is time 6021 spent executing the program itself. The second number is "system 6022 time", time spent executing operating system routines on behalf of 6023 the program. Both numbers are in seconds. 6024 6025 With the specification of an output file, the output is appended to 6026 the named file, and it looks like this: 6027 6028 0.12 0.01 cc1 OPTIONS 6029 0.00 0.01 as OPTIONS 6030 6031 The "user time" and the "system time" are moved before the program 6032 name, and the options passed to the program are displayed, so that 6033 one can later tell what file was being compiled, and with which 6034 options. 6035 6036'-fvar-tracking' 6037 Run variable tracking pass. It computes where variables are stored 6038 at each position in code. Better debugging information is then 6039 generated (if the debugging information format supports this 6040 information). 6041 6042 It is enabled by default when compiling with optimization ('-Os', 6043 '-O', '-O2', ...), debugging information ('-g') and the debug info 6044 format supports it. 6045 6046'-fvar-tracking-assignments' 6047 Annotate assignments to user variables early in the compilation and 6048 attempt to carry the annotations over throughout the compilation 6049 all the way to the end, in an attempt to improve debug information 6050 while optimizing. Use of '-gdwarf-4' is recommended along with it. 6051 6052 It can be enabled even if var-tracking is disabled, in which case 6053 annotations are created and maintained, but discarded at the end. 6054 6055'-fvar-tracking-assignments-toggle' 6056 Toggle '-fvar-tracking-assignments', in the same way that 6057 '-gtoggle' toggles '-g'. 6058 6059'-print-file-name=LIBRARY' 6060 Print the full absolute name of the library file LIBRARY that would 6061 be used when linking--and don't do anything else. With this 6062 option, GCC does not compile or link anything; it just prints the 6063 file name. 6064 6065'-print-multi-directory' 6066 Print the directory name corresponding to the multilib selected by 6067 any other switches present in the command line. This directory is 6068 supposed to exist in 'GCC_EXEC_PREFIX'. 6069 6070'-print-multi-lib' 6071 Print the mapping from multilib directory names to compiler 6072 switches that enable them. The directory name is separated from 6073 the switches by ';', and each switch starts with an '@' instead of 6074 the '-', without spaces between multiple switches. This is 6075 supposed to ease shell processing. 6076 6077'-print-multi-os-directory' 6078 Print the path to OS libraries for the selected multilib, relative 6079 to some 'lib' subdirectory. If OS libraries are present in the 6080 'lib' subdirectory and no multilibs are used, this is usually just 6081 '.', if OS libraries are present in 'libSUFFIX' sibling directories 6082 this prints e.g. '../lib64', '../lib' or '../lib32', or if OS 6083 libraries are present in 'lib/SUBDIR' subdirectories it prints e.g. 6084 'amd64', 'sparcv9' or 'ev6'. 6085 6086'-print-multiarch' 6087 Print the path to OS libraries for the selected multiarch, relative 6088 to some 'lib' subdirectory. 6089 6090'-print-prog-name=PROGRAM' 6091 Like '-print-file-name', but searches for a program such as 'cpp'. 6092 6093'-print-libgcc-file-name' 6094 Same as '-print-file-name=libgcc.a'. 6095 6096 This is useful when you use '-nostdlib' or '-nodefaultlibs' but you 6097 do want to link with 'libgcc.a'. You can do: 6098 6099 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 6100 6101'-print-search-dirs' 6102 Print the name of the configured installation directory and a list 6103 of program and library directories 'gcc' searches--and don't do 6104 anything else. 6105 6106 This is useful when 'gcc' prints the error message 'installation 6107 problem, cannot exec cpp0: No such file or directory'. To resolve 6108 this you either need to put 'cpp0' and the other compiler 6109 components where 'gcc' expects to find them, or you can set the 6110 environment variable 'GCC_EXEC_PREFIX' to the directory where you 6111 installed them. Don't forget the trailing '/'. *Note Environment 6112 Variables::. 6113 6114'-print-sysroot' 6115 Print the target sysroot directory that is used during compilation. 6116 This is the target sysroot specified either at configure time or 6117 using the '--sysroot' option, possibly with an extra suffix that 6118 depends on compilation options. If no target sysroot is specified, 6119 the option prints nothing. 6120 6121'-print-sysroot-headers-suffix' 6122 Print the suffix added to the target sysroot when searching for 6123 headers, or give an error if the compiler is not configured with 6124 such a suffix--and don't do anything else. 6125 6126'-dumpmachine' 6127 Print the compiler's target machine (for example, 6128 'i686-pc-linux-gnu')--and don't do anything else. 6129 6130'-dumpversion' 6131 Print the compiler version (for example, '3.0')--and don't do 6132 anything else. 6133 6134'-dumpspecs' 6135 Print the compiler's built-in specs--and don't do anything else. 6136 (This is used when GCC itself is being built.) *Note Spec Files::. 6137 6138'-fno-eliminate-unused-debug-types' 6139 Normally, when producing DWARF 2 output, GCC avoids producing debug 6140 symbol output for types that are nowhere used in the source file 6141 being compiled. Sometimes it is useful to have GCC emit debugging 6142 information for all types declared in a compilation unit, 6143 regardless of whether or not they are actually used in that 6144 compilation unit, for example if, in the debugger, you want to cast 6145 a value to a type that is not actually used in your program (but is 6146 declared). More often, however, this results in a significant 6147 amount of wasted space. 6148 6149 6150File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 6151 61523.10 Options That Control Optimization 6153====================================== 6154 6155These options control various sorts of optimizations. 6156 6157 Without any optimization option, the compiler's goal is to reduce the 6158cost of compilation and to make debugging produce the expected results. 6159Statements are independent: if you stop the program with a breakpoint 6160between statements, you can then assign a new value to any variable or 6161change the program counter to any other statement in the function and 6162get exactly the results you expect from the source code. 6163 6164 Turning on optimization flags makes the compiler attempt to improve the 6165performance and/or code size at the expense of compilation time and 6166possibly the ability to debug the program. 6167 6168 The compiler performs optimization based on the knowledge it has of the 6169program. Compiling multiple files at once to a single output file mode 6170allows the compiler to use information gained from all of the files when 6171compiling each of them. 6172 6173 Not all optimizations are controlled directly by a flag. Only 6174optimizations that have a flag are listed in this section. 6175 6176 Most optimizations are only enabled if an '-O' level is set on the 6177command line. Otherwise they are disabled, even if individual 6178optimization flags are specified. 6179 6180 Depending on the target and how GCC was configured, a slightly 6181different set of optimizations may be enabled at each '-O' level than 6182those listed here. You can invoke GCC with '-Q --help=optimizers' to 6183find out the exact set of optimizations that are enabled at each level. 6184*Note Overall Options::, for examples. 6185 6186'-O' 6187'-O1' 6188 Optimize. Optimizing compilation takes somewhat more time, and a 6189 lot more memory for a large function. 6190 6191 With '-O', the compiler tries to reduce code size and execution 6192 time, without performing any optimizations that take a great deal 6193 of compilation time. 6194 6195 '-O' turns on the following optimization flags: 6196 -fauto-inc-dec 6197 -fcompare-elim 6198 -fcprop-registers 6199 -fdce 6200 -fdefer-pop 6201 -fdelayed-branch 6202 -fdse 6203 -fguess-branch-probability 6204 -fif-conversion2 6205 -fif-conversion 6206 -fipa-pure-const 6207 -fipa-profile 6208 -fipa-reference 6209 -fmerge-constants 6210 -fsplit-wide-types 6211 -ftree-bit-ccp 6212 -ftree-builtin-call-dce 6213 -ftree-ccp 6214 -ftree-ch 6215 -ftree-copyrename 6216 -ftree-dce 6217 -ftree-dominator-opts 6218 -ftree-dse 6219 -ftree-forwprop 6220 -ftree-fre 6221 -ftree-phiprop 6222 -ftree-slsr 6223 -ftree-sra 6224 -ftree-pta 6225 -ftree-ter 6226 -funit-at-a-time 6227 6228 '-O' also turns on '-fomit-frame-pointer' on machines where doing 6229 so does not interfere with debugging. 6230 6231'-O2' 6232 Optimize even more. GCC performs nearly all supported 6233 optimizations that do not involve a space-speed tradeoff. As 6234 compared to '-O', this option increases both compilation time and 6235 the performance of the generated code. 6236 6237 '-O2' turns on all optimization flags specified by '-O'. It also 6238 turns on the following optimization flags: 6239 -fthread-jumps 6240 -falign-functions -falign-jumps 6241 -falign-loops -falign-labels 6242 -fcaller-saves 6243 -fcrossjumping 6244 -fcse-follow-jumps -fcse-skip-blocks 6245 -fdelete-null-pointer-checks 6246 -fdevirtualize -fdevirtualize-speculatively 6247 -fexpensive-optimizations 6248 -fgcse -fgcse-lm 6249 -fhoist-adjacent-loads 6250 -finline-small-functions 6251 -findirect-inlining 6252 -fipa-sra 6253 -fisolate-erroneous-paths-dereference 6254 -foptimize-sibling-calls 6255 -fpartial-inlining 6256 -fpeephole2 6257 -freorder-blocks -freorder-functions 6258 -frerun-cse-after-loop 6259 -fsched-interblock -fsched-spec 6260 -fschedule-insns -fschedule-insns2 6261 -fstrict-aliasing -fstrict-overflow 6262 -ftree-switch-conversion -ftree-tail-merge 6263 -ftree-pre 6264 -ftree-vrp 6265 6266 Please note the warning under '-fgcse' about invoking '-O2' on 6267 programs that use computed gotos. 6268 6269'-O3' 6270 Optimize yet more. '-O3' turns on all optimizations specified by 6271 '-O2' and also turns on the '-finline-functions', 6272 '-funswitch-loops', '-fpredictive-commoning', 6273 '-fgcse-after-reload', '-ftree-loop-vectorize', 6274 '-ftree-slp-vectorize', '-fvect-cost-model', '-ftree-partial-pre' 6275 and '-fipa-cp-clone' options. 6276 6277'-O0' 6278 Reduce compilation time and make debugging produce the expected 6279 results. This is the default. 6280 6281'-Os' 6282 Optimize for size. '-Os' enables all '-O2' optimizations that do 6283 not typically increase code size. It also performs further 6284 optimizations designed to reduce code size. 6285 6286 '-Os' disables the following optimization flags: 6287 -falign-functions -falign-jumps -falign-loops 6288 -falign-labels -freorder-blocks -freorder-blocks-and-partition 6289 -fprefetch-loop-arrays 6290 6291'-Ofast' 6292 Disregard strict standards compliance. '-Ofast' enables all '-O3' 6293 optimizations. It also enables optimizations that are not valid 6294 for all standard-compliant programs. It turns on '-ffast-math' and 6295 the Fortran-specific '-fno-protect-parens' and '-fstack-arrays'. 6296 6297'-Og' 6298 Optimize debugging experience. '-Og' enables optimizations that do 6299 not interfere with debugging. It should be the optimization level 6300 of choice for the standard edit-compile-debug cycle, offering a 6301 reasonable level of optimization while maintaining fast compilation 6302 and a good debugging experience. 6303 6304 If you use multiple '-O' options, with or without level numbers, 6305 the last such option is the one that is effective. 6306 6307 Options of the form '-fFLAG' specify machine-independent flags. Most 6308flags have both positive and negative forms; the negative form of 6309'-ffoo' is '-fno-foo'. In the table below, only one of the forms is 6310listed--the one you typically use. You can figure out the other form by 6311either removing 'no-' or adding it. 6312 6313 The following options control specific optimizations. They are either 6314activated by '-O' options or are related to ones that are. You can use 6315the following flags in the rare cases when "fine-tuning" of 6316optimizations to be performed is desired. 6317 6318'-fno-defer-pop' 6319 Always pop the arguments to each function call as soon as that 6320 function returns. For machines that must pop arguments after a 6321 function call, the compiler normally lets arguments accumulate on 6322 the stack for several function calls and pops them all at once. 6323 6324 Disabled at levels '-O', '-O2', '-O3', '-Os'. 6325 6326'-fforward-propagate' 6327 Perform a forward propagation pass on RTL. The pass tries to 6328 combine two instructions and checks if the result can be 6329 simplified. If loop unrolling is active, two passes are performed 6330 and the second is scheduled after loop unrolling. 6331 6332 This option is enabled by default at optimization levels '-O', 6333 '-O2', '-O3', '-Os'. 6334 6335'-ffp-contract=STYLE' 6336 '-ffp-contract=off' disables floating-point expression contraction. 6337 '-ffp-contract=fast' enables floating-point expression contraction 6338 such as forming of fused multiply-add operations if the target has 6339 native support for them. '-ffp-contract=on' enables floating-point 6340 expression contraction if allowed by the language standard. This 6341 is currently not implemented and treated equal to 6342 '-ffp-contract=off'. 6343 6344 The default is '-ffp-contract=fast'. 6345 6346'-fomit-frame-pointer' 6347 Don't keep the frame pointer in a register for functions that don't 6348 need one. This avoids the instructions to save, set up and restore 6349 frame pointers; it also makes an extra register available in many 6350 functions. *It also makes debugging impossible on some machines.* 6351 6352 On some machines, such as the VAX, this flag has no effect, because 6353 the standard calling sequence automatically handles the frame 6354 pointer and nothing is saved by pretending it doesn't exist. The 6355 machine-description macro 'FRAME_POINTER_REQUIRED' controls whether 6356 a target machine supports this flag. *Note Register Usage: 6357 (gccint)Registers. 6358 6359 Starting with GCC version 4.6, the default setting (when not 6360 optimizing for size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 6361 targets has been changed to '-fomit-frame-pointer'. The default 6362 can be reverted to '-fno-omit-frame-pointer' by configuring GCC 6363 with the '--enable-frame-pointer' configure option. 6364 6365 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6366 6367'-foptimize-sibling-calls' 6368 Optimize sibling and tail recursive calls. 6369 6370 Enabled at levels '-O2', '-O3', '-Os'. 6371 6372'-fno-inline' 6373 Do not expand any functions inline apart from those marked with the 6374 'always_inline' attribute. This is the default when not 6375 optimizing. 6376 6377 Single functions can be exempted from inlining by marking them with 6378 the 'noinline' attribute. 6379 6380'-finline-small-functions' 6381 Integrate functions into their callers when their body is smaller 6382 than expected function call code (so overall size of program gets 6383 smaller). The compiler heuristically decides which functions are 6384 simple enough to be worth integrating in this way. This inlining 6385 applies to all functions, even those not declared inline. 6386 6387 Enabled at level '-O2'. 6388 6389'-findirect-inlining' 6390 Inline also indirect calls that are discovered to be known at 6391 compile time thanks to previous inlining. This option has any 6392 effect only when inlining itself is turned on by the 6393 '-finline-functions' or '-finline-small-functions' options. 6394 6395 Enabled at level '-O2'. 6396 6397'-finline-functions' 6398 Consider all functions for inlining, even if they are not declared 6399 inline. The compiler heuristically decides which functions are 6400 worth integrating in this way. 6401 6402 If all calls to a given function are integrated, and the function 6403 is declared 'static', then the function is normally not output as 6404 assembler code in its own right. 6405 6406 Enabled at level '-O3'. 6407 6408'-finline-functions-called-once' 6409 Consider all 'static' functions called once for inlining into their 6410 caller even if they are not marked 'inline'. If a call to a given 6411 function is integrated, then the function is not output as 6412 assembler code in its own right. 6413 6414 Enabled at levels '-O1', '-O2', '-O3' and '-Os'. 6415 6416'-fearly-inlining' 6417 Inline functions marked by 'always_inline' and functions whose body 6418 seems smaller than the function call overhead early before doing 6419 '-fprofile-generate' instrumentation and real inlining pass. Doing 6420 so makes profiling significantly cheaper and usually inlining 6421 faster on programs having large chains of nested wrapper functions. 6422 6423 Enabled by default. 6424 6425'-fipa-sra' 6426 Perform interprocedural scalar replacement of aggregates, removal 6427 of unused parameters and replacement of parameters passed by 6428 reference by parameters passed by value. 6429 6430 Enabled at levels '-O2', '-O3' and '-Os'. 6431 6432'-finline-limit=N' 6433 By default, GCC limits the size of functions that can be inlined. 6434 This flag allows coarse control of this limit. N is the size of 6435 functions that can be inlined in number of pseudo instructions. 6436 6437 Inlining is actually controlled by a number of parameters, which 6438 may be specified individually by using '--param NAME=VALUE'. The 6439 '-finline-limit=N' option sets some of these parameters as follows: 6440 6441 'max-inline-insns-single' 6442 is set to N/2. 6443 'max-inline-insns-auto' 6444 is set to N/2. 6445 6446 See below for a documentation of the individual parameters 6447 controlling inlining and for the defaults of these parameters. 6448 6449 _Note:_ there may be no value to '-finline-limit' that results in 6450 default behavior. 6451 6452 _Note:_ pseudo instruction represents, in this particular context, 6453 an abstract measurement of function's size. In no way does it 6454 represent a count of assembly instructions and as such its exact 6455 meaning might change from one release to an another. 6456 6457'-fno-keep-inline-dllexport' 6458 This is a more fine-grained version of '-fkeep-inline-functions', 6459 which applies only to functions that are declared using the 6460 'dllexport' attribute or declspec (*Note Declaring Attributes of 6461 Functions: Function Attributes.) 6462 6463'-fkeep-inline-functions' 6464 In C, emit 'static' functions that are declared 'inline' into the 6465 object file, even if the function has been inlined into all of its 6466 callers. This switch does not affect functions using the 'extern 6467 inline' extension in GNU C90. In C++, emit any and all inline 6468 functions into the object file. 6469 6470'-fkeep-static-consts' 6471 Emit variables declared 'static const' when optimization isn't 6472 turned on, even if the variables aren't referenced. 6473 6474 GCC enables this option by default. If you want to force the 6475 compiler to check if a variable is referenced, regardless of 6476 whether or not optimization is turned on, use the 6477 '-fno-keep-static-consts' option. 6478 6479'-fmerge-constants' 6480 Attempt to merge identical constants (string constants and 6481 floating-point constants) across compilation units. 6482 6483 This option is the default for optimized compilation if the 6484 assembler and linker support it. Use '-fno-merge-constants' to 6485 inhibit this behavior. 6486 6487 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6488 6489'-fmerge-all-constants' 6490 Attempt to merge identical constants and identical variables. 6491 6492 This option implies '-fmerge-constants'. In addition to 6493 '-fmerge-constants' this considers e.g. even constant initialized 6494 arrays or initialized constant variables with integral or 6495 floating-point types. Languages like C or C++ require each 6496 variable, including multiple instances of the same variable in 6497 recursive calls, to have distinct locations, so using this option 6498 results in non-conforming behavior. 6499 6500'-fmodulo-sched' 6501 Perform swing modulo scheduling immediately before the first 6502 scheduling pass. This pass looks at innermost loops and reorders 6503 their instructions by overlapping different iterations. 6504 6505'-fmodulo-sched-allow-regmoves' 6506 Perform more aggressive SMS-based modulo scheduling with register 6507 moves allowed. By setting this flag certain anti-dependences edges 6508 are deleted, which triggers the generation of reg-moves based on 6509 the life-range analysis. This option is effective only with 6510 '-fmodulo-sched' enabled. 6511 6512'-fno-branch-count-reg' 6513 Do not use "decrement and branch" instructions on a count register, 6514 but instead generate a sequence of instructions that decrement a 6515 register, compare it against zero, then branch based upon the 6516 result. This option is only meaningful on architectures that 6517 support such instructions, which include x86, PowerPC, IA-64 and 6518 S/390. 6519 6520 The default is '-fbranch-count-reg'. 6521 6522'-fno-function-cse' 6523 Do not put function addresses in registers; make each instruction 6524 that calls a constant function contain the function's address 6525 explicitly. 6526 6527 This option results in less efficient code, but some strange hacks 6528 that alter the assembler output may be confused by the 6529 optimizations performed when this option is not used. 6530 6531 The default is '-ffunction-cse' 6532 6533'-fno-zero-initialized-in-bss' 6534 If the target supports a BSS section, GCC by default puts variables 6535 that are initialized to zero into BSS. This can save space in the 6536 resulting code. 6537 6538 This option turns off this behavior because some programs 6539 explicitly rely on variables going to the data section--e.g., so 6540 that the resulting executable can find the beginning of that 6541 section and/or make assumptions based on that. 6542 6543 The default is '-fzero-initialized-in-bss'. 6544 6545'-fthread-jumps' 6546 Perform optimizations that check to see if a jump branches to a 6547 location where another comparison subsumed by the first is found. 6548 If so, the first branch is redirected to either the destination of 6549 the second branch or a point immediately following it, depending on 6550 whether the condition is known to be true or false. 6551 6552 Enabled at levels '-O2', '-O3', '-Os'. 6553 6554'-fsplit-wide-types' 6555 When using a type that occupies multiple registers, such as 'long 6556 long' on a 32-bit system, split the registers apart and allocate 6557 them independently. This normally generates better code for those 6558 types, but may make debugging more difficult. 6559 6560 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6561 6562'-fcse-follow-jumps' 6563 In common subexpression elimination (CSE), scan through jump 6564 instructions when the target of the jump is not reached by any 6565 other path. For example, when CSE encounters an 'if' statement 6566 with an 'else' clause, CSE follows the jump when the condition 6567 tested is false. 6568 6569 Enabled at levels '-O2', '-O3', '-Os'. 6570 6571'-fcse-skip-blocks' 6572 This is similar to '-fcse-follow-jumps', but causes CSE to follow 6573 jumps that conditionally skip over blocks. When CSE encounters a 6574 simple 'if' statement with no else clause, '-fcse-skip-blocks' 6575 causes CSE to follow the jump around the body of the 'if'. 6576 6577 Enabled at levels '-O2', '-O3', '-Os'. 6578 6579'-frerun-cse-after-loop' 6580 Re-run common subexpression elimination after loop optimizations 6581 are performed. 6582 6583 Enabled at levels '-O2', '-O3', '-Os'. 6584 6585'-fgcse' 6586 Perform a global common subexpression elimination pass. This pass 6587 also performs global constant and copy propagation. 6588 6589 _Note:_ When compiling a program using computed gotos, a GCC 6590 extension, you may get better run-time performance if you disable 6591 the global common subexpression elimination pass by adding 6592 '-fno-gcse' to the command line. 6593 6594 Enabled at levels '-O2', '-O3', '-Os'. 6595 6596'-fgcse-lm' 6597 When '-fgcse-lm' is enabled, global common subexpression 6598 elimination attempts to move loads that are only killed by stores 6599 into themselves. This allows a loop containing a load/store 6600 sequence to be changed to a load outside the loop, and a copy/store 6601 within the loop. 6602 6603 Enabled by default when '-fgcse' is enabled. 6604 6605'-fgcse-sm' 6606 When '-fgcse-sm' is enabled, a store motion pass is run after 6607 global common subexpression elimination. This pass attempts to 6608 move stores out of loops. When used in conjunction with 6609 '-fgcse-lm', loops containing a load/store sequence can be changed 6610 to a load before the loop and a store after the loop. 6611 6612 Not enabled at any optimization level. 6613 6614'-fgcse-las' 6615 When '-fgcse-las' is enabled, the global common subexpression 6616 elimination pass eliminates redundant loads that come after stores 6617 to the same memory location (both partial and full redundancies). 6618 6619 Not enabled at any optimization level. 6620 6621'-fgcse-after-reload' 6622 When '-fgcse-after-reload' is enabled, a redundant load elimination 6623 pass is performed after reload. The purpose of this pass is to 6624 clean up redundant spilling. 6625 6626'-faggressive-loop-optimizations' 6627 This option tells the loop optimizer to use language constraints to 6628 derive bounds for the number of iterations of a loop. This assumes 6629 that loop code does not invoke undefined behavior by for example 6630 causing signed integer overflows or out-of-bound array accesses. 6631 The bounds for the number of iterations of a loop are used to guide 6632 loop unrolling and peeling and loop exit test optimizations. This 6633 option is enabled by default. 6634 6635'-funsafe-loop-optimizations' 6636 This option tells the loop optimizer to assume that loop indices do 6637 not overflow, and that loops with nontrivial exit condition are not 6638 infinite. This enables a wider range of loop optimizations even if 6639 the loop optimizer itself cannot prove that these assumptions are 6640 valid. If you use '-Wunsafe-loop-optimizations', the compiler 6641 warns you if it finds this kind of loop. 6642 6643'-fcrossjumping' 6644 Perform cross-jumping transformation. This transformation unifies 6645 equivalent code and saves code size. The resulting code may or may 6646 not perform better than without cross-jumping. 6647 6648 Enabled at levels '-O2', '-O3', '-Os'. 6649 6650'-fauto-inc-dec' 6651 Combine increments or decrements of addresses with memory accesses. 6652 This pass is always skipped on architectures that do not have 6653 instructions to support this. Enabled by default at '-O' and 6654 higher on architectures that support this. 6655 6656'-fdce' 6657 Perform dead code elimination (DCE) on RTL. Enabled by default at 6658 '-O' and higher. 6659 6660'-fdse' 6661 Perform dead store elimination (DSE) on RTL. Enabled by default at 6662 '-O' and higher. 6663 6664'-fif-conversion' 6665 Attempt to transform conditional jumps into branch-less 6666 equivalents. This includes use of conditional moves, min, max, set 6667 flags and abs instructions, and some tricks doable by standard 6668 arithmetics. The use of conditional execution on chips where it is 6669 available is controlled by 'if-conversion2'. 6670 6671 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6672 6673'-fif-conversion2' 6674 Use conditional execution (where available) to transform 6675 conditional jumps into branch-less equivalents. 6676 6677 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6678 6679'-fdeclone-ctor-dtor' 6680 The C++ ABI requires multiple entry points for constructors and 6681 destructors: one for a base subobject, one for a complete object, 6682 and one for a virtual destructor that calls operator delete 6683 afterwards. For a hierarchy with virtual bases, the base and 6684 complete variants are clones, which means two copies of the 6685 function. With this option, the base and complete variants are 6686 changed to be thunks that call a common implementation. 6687 6688 Enabled by '-Os'. 6689 6690'-fdelete-null-pointer-checks' 6691 Assume that programs cannot safely dereference null pointers, and 6692 that no code or data element resides there. This enables simple 6693 constant folding optimizations at all optimization levels. In 6694 addition, other optimization passes in GCC use this flag to control 6695 global dataflow analyses that eliminate useless checks for null 6696 pointers; these assume that if a pointer is checked after it has 6697 already been dereferenced, it cannot be null. 6698 6699 Note however that in some environments this assumption is not true. 6700 Use '-fno-delete-null-pointer-checks' to disable this optimization 6701 for programs that depend on that behavior. 6702 6703 Some targets, especially embedded ones, disable this option at all 6704 levels. Otherwise it is enabled at all levels: '-O0', '-O1', 6705 '-O2', '-O3', '-Os'. Passes that use the information are enabled 6706 independently at different optimization levels. 6707 6708'-fdevirtualize' 6709 Attempt to convert calls to virtual functions to direct calls. 6710 This is done both within a procedure and interprocedurally as part 6711 of indirect inlining ('-findirect-inlining') and interprocedural 6712 constant propagation ('-fipa-cp'). Enabled at levels '-O2', '-O3', 6713 '-Os'. 6714 6715'-fdevirtualize-speculatively' 6716 Attempt to convert calls to virtual functions to speculative direct 6717 calls. Based on the analysis of the type inheritance graph, 6718 determine for a given call the set of likely targets. If the set 6719 is small, preferably of size 1, change the call into an conditional 6720 deciding on direct and indirect call. The speculative calls enable 6721 more optimizations, such as inlining. When they seem useless after 6722 further optimization, they are converted back into original form. 6723 6724'-fexpensive-optimizations' 6725 Perform a number of minor optimizations that are relatively 6726 expensive. 6727 6728 Enabled at levels '-O2', '-O3', '-Os'. 6729 6730'-free' 6731 Attempt to remove redundant extension instructions. This is 6732 especially helpful for the x86-64 architecture, which implicitly 6733 zero-extends in 64-bit registers after writing to their lower 6734 32-bit half. 6735 6736 Enabled for Alpha, AArch64 and x86 at levels '-O2', '-O3', '-Os'. 6737 6738'-flive-range-shrinkage' 6739 Attempt to decrease register pressure through register live range 6740 shrinkage. This is helpful for fast processors with small or 6741 moderate size register sets. 6742 6743'-fira-algorithm=ALGORITHM' 6744 Use the specified coloring algorithm for the integrated register 6745 allocator. The ALGORITHM argument can be 'priority', which 6746 specifies Chow's priority coloring, or 'CB', which specifies 6747 Chaitin-Briggs coloring. Chaitin-Briggs coloring is not 6748 implemented for all architectures, but for those targets that do 6749 support it, it is the default because it generates better code. 6750 6751'-fira-region=REGION' 6752 Use specified regions for the integrated register allocator. The 6753 REGION argument should be one of the following: 6754 6755 'all' 6756 Use all loops as register allocation regions. This can give 6757 the best results for machines with a small and/or irregular 6758 register set. 6759 6760 'mixed' 6761 Use all loops except for loops with small register pressure as 6762 the regions. This value usually gives the best results in 6763 most cases and for most architectures, and is enabled by 6764 default when compiling with optimization for speed ('-O', 6765 '-O2', ...). 6766 6767 'one' 6768 Use all functions as a single region. This typically results 6769 in the smallest code size, and is enabled by default for '-Os' 6770 or '-O0'. 6771 6772'-fira-hoist-pressure' 6773 Use IRA to evaluate register pressure in the code hoisting pass for 6774 decisions to hoist expressions. This option usually results in 6775 smaller code, but it can slow the compiler down. 6776 6777 This option is enabled at level '-Os' for all targets. 6778 6779'-fira-loop-pressure' 6780 Use IRA to evaluate register pressure in loops for decisions to 6781 move loop invariants. This option usually results in generation of 6782 faster and smaller code on machines with large register files (>= 6783 32 registers), but it can slow the compiler down. 6784 6785 This option is enabled at level '-O3' for some targets. 6786 6787'-fno-ira-share-save-slots' 6788 Disable sharing of stack slots used for saving call-used hard 6789 registers living through a call. Each hard register gets a 6790 separate stack slot, and as a result function stack frames are 6791 larger. 6792 6793'-fno-ira-share-spill-slots' 6794 Disable sharing of stack slots allocated for pseudo-registers. 6795 Each pseudo-register that does not get a hard register gets a 6796 separate stack slot, and as a result function stack frames are 6797 larger. 6798 6799'-fira-verbose=N' 6800 Control the verbosity of the dump file for the integrated register 6801 allocator. The default value is 5. If the value N is greater or 6802 equal to 10, the dump output is sent to stderr using the same 6803 format as N minus 10. 6804 6805'-fdelayed-branch' 6806 If supported for the target machine, attempt to reorder 6807 instructions to exploit instruction slots available after delayed 6808 branch instructions. 6809 6810 Enabled at levels '-O', '-O2', '-O3', '-Os'. 6811 6812'-fschedule-insns' 6813 If supported for the target machine, attempt to reorder 6814 instructions to eliminate execution stalls due to required data 6815 being unavailable. This helps machines that have slow floating 6816 point or memory load instructions by allowing other instructions to 6817 be issued until the result of the load or floating-point 6818 instruction is required. 6819 6820 Enabled at levels '-O2', '-O3'. 6821 6822'-fschedule-insns2' 6823 Similar to '-fschedule-insns', but requests an additional pass of 6824 instruction scheduling after register allocation has been done. 6825 This is especially useful on machines with a relatively small 6826 number of registers and where memory load instructions take more 6827 than one cycle. 6828 6829 Enabled at levels '-O2', '-O3', '-Os'. 6830 6831'-fno-sched-interblock' 6832 Don't schedule instructions across basic blocks. This is normally 6833 enabled by default when scheduling before register allocation, i.e. 6834 with '-fschedule-insns' or at '-O2' or higher. 6835 6836'-fno-sched-spec' 6837 Don't allow speculative motion of non-load instructions. This is 6838 normally enabled by default when scheduling before register 6839 allocation, i.e. with '-fschedule-insns' or at '-O2' or higher. 6840 6841'-fsched-pressure' 6842 Enable register pressure sensitive insn scheduling before register 6843 allocation. This only makes sense when scheduling before register 6844 allocation is enabled, i.e. with '-fschedule-insns' or at '-O2' or 6845 higher. Usage of this option can improve the generated code and 6846 decrease its size by preventing register pressure increase above 6847 the number of available hard registers and subsequent spills in 6848 register allocation. 6849 6850'-fsched-spec-load' 6851 Allow speculative motion of some load instructions. This only 6852 makes sense when scheduling before register allocation, i.e. with 6853 '-fschedule-insns' or at '-O2' or higher. 6854 6855'-fsched-spec-load-dangerous' 6856 Allow speculative motion of more load instructions. This only 6857 makes sense when scheduling before register allocation, i.e. with 6858 '-fschedule-insns' or at '-O2' or higher. 6859 6860'-fsched-stalled-insns' 6861'-fsched-stalled-insns=N' 6862 Define how many insns (if any) can be moved prematurely from the 6863 queue of stalled insns into the ready list during the second 6864 scheduling pass. '-fno-sched-stalled-insns' means that no insns 6865 are moved prematurely, '-fsched-stalled-insns=0' means there is no 6866 limit on how many queued insns can be moved prematurely. 6867 '-fsched-stalled-insns' without a value is equivalent to 6868 '-fsched-stalled-insns=1'. 6869 6870'-fsched-stalled-insns-dep' 6871'-fsched-stalled-insns-dep=N' 6872 Define how many insn groups (cycles) are examined for a dependency 6873 on a stalled insn that is a candidate for premature removal from 6874 the queue of stalled insns. This has an effect only during the 6875 second scheduling pass, and only if '-fsched-stalled-insns' is 6876 used. '-fno-sched-stalled-insns-dep' is equivalent to 6877 '-fsched-stalled-insns-dep=0'. '-fsched-stalled-insns-dep' without 6878 a value is equivalent to '-fsched-stalled-insns-dep=1'. 6879 6880'-fsched2-use-superblocks' 6881 When scheduling after register allocation, use superblock 6882 scheduling. This allows motion across basic block boundaries, 6883 resulting in faster schedules. This option is experimental, as not 6884 all machine descriptions used by GCC model the CPU closely enough 6885 to avoid unreliable results from the algorithm. 6886 6887 This only makes sense when scheduling after register allocation, 6888 i.e. with '-fschedule-insns2' or at '-O2' or higher. 6889 6890'-fsched-group-heuristic' 6891 Enable the group heuristic in the scheduler. This heuristic favors 6892 the instruction that belongs to a schedule group. This is enabled 6893 by default when scheduling is enabled, i.e. with '-fschedule-insns' 6894 or '-fschedule-insns2' or at '-O2' or higher. 6895 6896'-fsched-critical-path-heuristic' 6897 Enable the critical-path heuristic in the scheduler. This 6898 heuristic favors instructions on the critical path. This is 6899 enabled by default when scheduling is enabled, i.e. with 6900 '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or higher. 6901 6902'-fsched-spec-insn-heuristic' 6903 Enable the speculative instruction heuristic in the scheduler. 6904 This heuristic favors speculative instructions with greater 6905 dependency weakness. This is enabled by default when scheduling is 6906 enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at 6907 '-O2' or higher. 6908 6909'-fsched-rank-heuristic' 6910 Enable the rank heuristic in the scheduler. This heuristic favors 6911 the instruction belonging to a basic block with greater size or 6912 frequency. This is enabled by default when scheduling is enabled, 6913 i.e. with '-fschedule-insns' or '-fschedule-insns2' or at '-O2' or 6914 higher. 6915 6916'-fsched-last-insn-heuristic' 6917 Enable the last-instruction heuristic in the scheduler. This 6918 heuristic favors the instruction that is less dependent on the last 6919 instruction scheduled. This is enabled by default when scheduling 6920 is enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or 6921 at '-O2' or higher. 6922 6923'-fsched-dep-count-heuristic' 6924 Enable the dependent-count heuristic in the scheduler. This 6925 heuristic favors the instruction that has more instructions 6926 depending on it. This is enabled by default when scheduling is 6927 enabled, i.e. with '-fschedule-insns' or '-fschedule-insns2' or at 6928 '-O2' or higher. 6929 6930'-freschedule-modulo-scheduled-loops' 6931 Modulo scheduling is performed before traditional scheduling. If a 6932 loop is modulo scheduled, later scheduling passes may change its 6933 schedule. Use this option to control that behavior. 6934 6935'-fselective-scheduling' 6936 Schedule instructions using selective scheduling algorithm. 6937 Selective scheduling runs instead of the first scheduler pass. 6938 6939'-fselective-scheduling2' 6940 Schedule instructions using selective scheduling algorithm. 6941 Selective scheduling runs instead of the second scheduler pass. 6942 6943'-fsel-sched-pipelining' 6944 Enable software pipelining of innermost loops during selective 6945 scheduling. This option has no effect unless one of 6946 '-fselective-scheduling' or '-fselective-scheduling2' is turned on. 6947 6948'-fsel-sched-pipelining-outer-loops' 6949 When pipelining loops during selective scheduling, also pipeline 6950 outer loops. This option has no effect unless 6951 '-fsel-sched-pipelining' is turned on. 6952 6953'-fshrink-wrap' 6954 Emit function prologues only before parts of the function that need 6955 it, rather than at the top of the function. This flag is enabled 6956 by default at '-O' and higher. 6957 6958'-fcaller-saves' 6959 Enable allocation of values to registers that are clobbered by 6960 function calls, by emitting extra instructions to save and restore 6961 the registers around such calls. Such allocation is done only when 6962 it seems to result in better code. 6963 6964 This option is always enabled by default on certain machines, 6965 usually those which have no call-preserved registers to use 6966 instead. 6967 6968 Enabled at levels '-O2', '-O3', '-Os'. 6969 6970'-fcombine-stack-adjustments' 6971 Tracks stack adjustments (pushes and pops) and stack memory 6972 references and then tries to find ways to combine them. 6973 6974 Enabled by default at '-O1' and higher. 6975 6976'-fconserve-stack' 6977 Attempt to minimize stack usage. The compiler attempts to use less 6978 stack space, even if that makes the program slower. This option 6979 implies setting the 'large-stack-frame' parameter to 100 and the 6980 'large-stack-frame-growth' parameter to 400. 6981 6982'-ftree-reassoc' 6983 Perform reassociation on trees. This flag is enabled by default at 6984 '-O' and higher. 6985 6986'-ftree-pre' 6987 Perform partial redundancy elimination (PRE) on trees. This flag 6988 is enabled by default at '-O2' and '-O3'. 6989 6990'-ftree-partial-pre' 6991 Make partial redundancy elimination (PRE) more aggressive. This 6992 flag is enabled by default at '-O3'. 6993 6994'-ftree-forwprop' 6995 Perform forward propagation on trees. This flag is enabled by 6996 default at '-O' and higher. 6997 6998'-ftree-fre' 6999 Perform full redundancy elimination (FRE) on trees. The difference 7000 between FRE and PRE is that FRE only considers expressions that are 7001 computed on all paths leading to the redundant computation. This 7002 analysis is faster than PRE, though it exposes fewer redundancies. 7003 This flag is enabled by default at '-O' and higher. 7004 7005'-ftree-phiprop' 7006 Perform hoisting of loads from conditional pointers on trees. This 7007 pass is enabled by default at '-O' and higher. 7008 7009'-fhoist-adjacent-loads' 7010 Speculatively hoist loads from both branches of an if-then-else if 7011 the loads are from adjacent locations in the same structure and the 7012 target architecture has a conditional move instruction. This flag 7013 is enabled by default at '-O2' and higher. 7014 7015'-ftree-copy-prop' 7016 Perform copy propagation on trees. This pass eliminates 7017 unnecessary copy operations. This flag is enabled by default at 7018 '-O' and higher. 7019 7020'-fipa-pure-const' 7021 Discover which functions are pure or constant. Enabled by default 7022 at '-O' and higher. 7023 7024'-fipa-reference' 7025 Discover which static variables do not escape the compilation unit. 7026 Enabled by default at '-O' and higher. 7027 7028'-fipa-pta' 7029 Perform interprocedural pointer analysis and interprocedural 7030 modification and reference analysis. This option can cause 7031 excessive memory and compile-time usage on large compilation units. 7032 It is not enabled by default at any optimization level. 7033 7034'-fipa-profile' 7035 Perform interprocedural profile propagation. The functions called 7036 only from cold functions are marked as cold. Also functions 7037 executed once (such as 'cold', 'noreturn', static constructors or 7038 destructors) are identified. Cold functions and loop less parts of 7039 functions executed once are then optimized for size. Enabled by 7040 default at '-O' and higher. 7041 7042'-fipa-cp' 7043 Perform interprocedural constant propagation. This optimization 7044 analyzes the program to determine when values passed to functions 7045 are constants and then optimizes accordingly. This optimization 7046 can substantially increase performance if the application has 7047 constants passed to functions. This flag is enabled by default at 7048 '-O2', '-Os' and '-O3'. 7049 7050'-fipa-cp-clone' 7051 Perform function cloning to make interprocedural constant 7052 propagation stronger. When enabled, interprocedural constant 7053 propagation performs function cloning when externally visible 7054 function can be called with constant arguments. Because this 7055 optimization can create multiple copies of functions, it may 7056 significantly increase code size (see '--param 7057 ipcp-unit-growth=VALUE'). This flag is enabled by default at 7058 '-O3'. 7059 7060'-fisolate-erroneous-paths-dereference' 7061 Detect paths which trigger erroneous or undefined behaviour due to 7062 dereferencing a NULL pointer. Isolate those paths from the main 7063 control flow and turn the statement with erroneous or undefined 7064 behaviour into a trap. 7065 7066'-fisolate-erroneous-paths-attribute' 7067 Detect paths which trigger erroneous or undefined behaviour due a 7068 NULL value being used in a way which is forbidden by a 7069 'returns_nonnull' or 'nonnull' attribute. Isolate those paths from 7070 the main control flow and turn the statement with erroneous or 7071 undefined behaviour into a trap. This is not currently enabled, 7072 but may be enabled by '-O2' in the future. 7073 7074'-ftree-sink' 7075 Perform forward store motion on trees. This flag is enabled by 7076 default at '-O' and higher. 7077 7078'-ftree-bit-ccp' 7079 Perform sparse conditional bit constant propagation on trees and 7080 propagate pointer alignment information. This pass only operates 7081 on local scalar variables and is enabled by default at '-O' and 7082 higher. It requires that '-ftree-ccp' is enabled. 7083 7084'-ftree-ccp' 7085 Perform sparse conditional constant propagation (CCP) on trees. 7086 This pass only operates on local scalar variables and is enabled by 7087 default at '-O' and higher. 7088 7089'-ftree-switch-conversion' 7090 Perform conversion of simple initializations in a switch to 7091 initializations from a scalar array. This flag is enabled by 7092 default at '-O2' and higher. 7093 7094'-ftree-tail-merge' 7095 Look for identical code sequences. When found, replace one with a 7096 jump to the other. This optimization is known as tail merging or 7097 cross jumping. This flag is enabled by default at '-O2' and 7098 higher. The compilation time in this pass can be limited using 7099 'max-tail-merge-comparisons' parameter and 7100 'max-tail-merge-iterations' parameter. 7101 7102'-ftree-dce' 7103 Perform dead code elimination (DCE) on trees. This flag is enabled 7104 by default at '-O' and higher. 7105 7106'-ftree-builtin-call-dce' 7107 Perform conditional dead code elimination (DCE) for calls to 7108 built-in functions that may set 'errno' but are otherwise 7109 side-effect free. This flag is enabled by default at '-O2' and 7110 higher if '-Os' is not also specified. 7111 7112'-ftree-dominator-opts' 7113 Perform a variety of simple scalar cleanups (constant/copy 7114 propagation, redundancy elimination, range propagation and 7115 expression simplification) based on a dominator tree traversal. 7116 This also performs jump threading (to reduce jumps to jumps). This 7117 flag is enabled by default at '-O' and higher. 7118 7119'-ftree-dse' 7120 Perform dead store elimination (DSE) on trees. A dead store is a 7121 store into a memory location that is later overwritten by another 7122 store without any intervening loads. In this case the earlier 7123 store can be deleted. This flag is enabled by default at '-O' and 7124 higher. 7125 7126'-ftree-ch' 7127 Perform loop header copying on trees. This is beneficial since it 7128 increases effectiveness of code motion optimizations. It also 7129 saves one jump. This flag is enabled by default at '-O' and 7130 higher. It is not enabled for '-Os', since it usually increases 7131 code size. 7132 7133'-ftree-loop-optimize' 7134 Perform loop optimizations on trees. This flag is enabled by 7135 default at '-O' and higher. 7136 7137'-ftree-loop-linear' 7138 Perform loop interchange transformations on tree. Same as 7139 '-floop-interchange'. To use this code transformation, GCC has to 7140 be configured with '--with-ppl' and '--with-cloog' to enable the 7141 Graphite loop transformation infrastructure. 7142 7143'-floop-interchange' 7144 Perform loop interchange transformations on loops. Interchanging 7145 two nested loops switches the inner and outer loops. For example, 7146 given a loop like: 7147 DO J = 1, M 7148 DO I = 1, N 7149 A(J, I) = A(J, I) * C 7150 ENDDO 7151 ENDDO 7152 loop interchange transforms the loop as if it were written: 7153 DO I = 1, N 7154 DO J = 1, M 7155 A(J, I) = A(J, I) * C 7156 ENDDO 7157 ENDDO 7158 which can be beneficial when 'N' is larger than the caches, because 7159 in Fortran, the elements of an array are stored in memory 7160 contiguously by column, and the original loop iterates over rows, 7161 potentially creating at each access a cache miss. This 7162 optimization applies to all the languages supported by GCC and is 7163 not limited to Fortran. To use this code transformation, GCC has 7164 to be configured with '--with-ppl' and '--with-cloog' to enable the 7165 Graphite loop transformation infrastructure. 7166 7167'-floop-strip-mine' 7168 Perform loop strip mining transformations on loops. Strip mining 7169 splits a loop into two nested loops. The outer loop has strides 7170 equal to the strip size and the inner loop has strides of the 7171 original loop within a strip. The strip length can be changed 7172 using the 'loop-block-tile-size' parameter. For example, given a 7173 loop like: 7174 DO I = 1, N 7175 A(I) = A(I) + C 7176 ENDDO 7177 loop strip mining transforms the loop as if it were written: 7178 DO II = 1, N, 51 7179 DO I = II, min (II + 50, N) 7180 A(I) = A(I) + C 7181 ENDDO 7182 ENDDO 7183 This optimization applies to all the languages supported by GCC and 7184 is not limited to Fortran. To use this code transformation, GCC 7185 has to be configured with '--with-ppl' and '--with-cloog' to enable 7186 the Graphite loop transformation infrastructure. 7187 7188'-floop-block' 7189 Perform loop blocking transformations on loops. Blocking strip 7190 mines each loop in the loop nest such that the memory accesses of 7191 the element loops fit inside caches. The strip length can be 7192 changed using the 'loop-block-tile-size' parameter. For example, 7193 given a loop like: 7194 DO I = 1, N 7195 DO J = 1, M 7196 A(J, I) = B(I) + C(J) 7197 ENDDO 7198 ENDDO 7199 loop blocking transforms the loop as if it were written: 7200 DO II = 1, N, 51 7201 DO JJ = 1, M, 51 7202 DO I = II, min (II + 50, N) 7203 DO J = JJ, min (JJ + 50, M) 7204 A(J, I) = B(I) + C(J) 7205 ENDDO 7206 ENDDO 7207 ENDDO 7208 ENDDO 7209 which can be beneficial when 'M' is larger than the caches, because 7210 the innermost loop iterates over a smaller amount of data which can 7211 be kept in the caches. This optimization applies to all the 7212 languages supported by GCC and is not limited to Fortran. To use 7213 this code transformation, GCC has to be configured with 7214 '--with-ppl' and '--with-cloog' to enable the Graphite loop 7215 transformation infrastructure. 7216 7217'-fgraphite-identity' 7218 Enable the identity transformation for graphite. For every SCoP we 7219 generate the polyhedral representation and transform it back to 7220 gimple. Using '-fgraphite-identity' we can check the costs or 7221 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 7222 minimal optimizations are also performed by the code generator 7223 CLooG, like index splitting and dead code elimination in loops. 7224 7225'-floop-nest-optimize' 7226 Enable the ISL based loop nest optimizer. This is a generic loop 7227 nest optimizer based on the Pluto optimization algorithms. It 7228 calculates a loop structure optimized for data-locality and 7229 parallelism. This option is experimental. 7230 7231'-floop-parallelize-all' 7232 Use the Graphite data dependence analysis to identify loops that 7233 can be parallelized. Parallelize all the loops that can be 7234 analyzed to not contain loop carried dependences without checking 7235 that it is profitable to parallelize the loops. 7236 7237'-fcheck-data-deps' 7238 Compare the results of several data dependence analyzers. This 7239 option is used for debugging the data dependence analyzers. 7240 7241'-ftree-loop-if-convert' 7242 Attempt to transform conditional jumps in the innermost loops to 7243 branch-less equivalents. The intent is to remove control-flow from 7244 the innermost loops in order to improve the ability of the 7245 vectorization pass to handle these loops. This is enabled by 7246 default if vectorization is enabled. 7247 7248'-ftree-loop-if-convert-stores' 7249 Attempt to also if-convert conditional jumps containing memory 7250 writes. This transformation can be unsafe for multi-threaded 7251 programs as it transforms conditional memory writes into 7252 unconditional memory writes. For example, 7253 for (i = 0; i < N; i++) 7254 if (cond) 7255 A[i] = expr; 7256 is transformed to 7257 for (i = 0; i < N; i++) 7258 A[i] = cond ? expr : A[i]; 7259 potentially producing data races. 7260 7261'-ftree-loop-distribution' 7262 Perform loop distribution. This flag can improve cache performance 7263 on big loop bodies and allow further loop optimizations, like 7264 parallelization or vectorization, to take place. For example, the 7265 loop 7266 DO I = 1, N 7267 A(I) = B(I) + C 7268 D(I) = E(I) * F 7269 ENDDO 7270 is transformed to 7271 DO I = 1, N 7272 A(I) = B(I) + C 7273 ENDDO 7274 DO I = 1, N 7275 D(I) = E(I) * F 7276 ENDDO 7277 7278'-ftree-loop-distribute-patterns' 7279 Perform loop distribution of patterns that can be code generated 7280 with calls to a library. This flag is enabled by default at '-O3'. 7281 7282 This pass distributes the initialization loops and generates a call 7283 to memset zero. For example, the loop 7284 DO I = 1, N 7285 A(I) = 0 7286 B(I) = A(I) + I 7287 ENDDO 7288 is transformed to 7289 DO I = 1, N 7290 A(I) = 0 7291 ENDDO 7292 DO I = 1, N 7293 B(I) = A(I) + I 7294 ENDDO 7295 and the initialization loop is transformed into a call to memset 7296 zero. 7297 7298'-ftree-loop-im' 7299 Perform loop invariant motion on trees. This pass moves only 7300 invariants that are hard to handle at RTL level (function calls, 7301 operations that expand to nontrivial sequences of insns). With 7302 '-funswitch-loops' it also moves operands of conditions that are 7303 invariant out of the loop, so that we can use just trivial 7304 invariantness analysis in loop unswitching. The pass also includes 7305 store motion. 7306 7307'-ftree-loop-ivcanon' 7308 Create a canonical counter for number of iterations in loops for 7309 which determining number of iterations requires complicated 7310 analysis. Later optimizations then may determine the number 7311 easily. Useful especially in connection with unrolling. 7312 7313'-fivopts' 7314 Perform induction variable optimizations (strength reduction, 7315 induction variable merging and induction variable elimination) on 7316 trees. 7317 7318'-ftree-parallelize-loops=n' 7319 Parallelize loops, i.e., split their iteration space to run in n 7320 threads. This is only possible for loops whose iterations are 7321 independent and can be arbitrarily reordered. The optimization is 7322 only profitable on multiprocessor machines, for loops that are 7323 CPU-intensive, rather than constrained e.g. by memory bandwidth. 7324 This option implies '-pthread', and thus is only supported on 7325 targets that have support for '-pthread'. 7326 7327'-ftree-pta' 7328 Perform function-local points-to analysis on trees. This flag is 7329 enabled by default at '-O' and higher. 7330 7331'-ftree-sra' 7332 Perform scalar replacement of aggregates. This pass replaces 7333 structure references with scalars to prevent committing structures 7334 to memory too early. This flag is enabled by default at '-O' and 7335 higher. 7336 7337'-ftree-copyrename' 7338 Perform copy renaming on trees. This pass attempts to rename 7339 compiler temporaries to other variables at copy locations, usually 7340 resulting in variable names which more closely resemble the 7341 original variables. This flag is enabled by default at '-O' and 7342 higher. 7343 7344'-ftree-coalesce-inlined-vars' 7345 Tell the copyrename pass (see '-ftree-copyrename') to attempt to 7346 combine small user-defined variables too, but only if they were 7347 inlined from other functions. It is a more limited form of 7348 '-ftree-coalesce-vars'. This may harm debug information of such 7349 inlined variables, but it will keep variables of the inlined-into 7350 function apart from each other, such that they are more likely to 7351 contain the expected values in a debugging session. This was the 7352 default in GCC versions older than 4.7. 7353 7354'-ftree-coalesce-vars' 7355 Tell the copyrename pass (see '-ftree-copyrename') to attempt to 7356 combine small user-defined variables too, instead of just compiler 7357 temporaries. This may severely limit the ability to debug an 7358 optimized program compiled with '-fno-var-tracking-assignments'. 7359 In the negated form, this flag prevents SSA coalescing of user 7360 variables, including inlined ones. This option is enabled by 7361 default. 7362 7363'-ftree-ter' 7364 Perform temporary expression replacement during the SSA->normal 7365 phase. Single use/single def temporaries are replaced at their use 7366 location with their defining expression. This results in 7367 non-GIMPLE code, but gives the expanders much more complex trees to 7368 work on resulting in better RTL generation. This is enabled by 7369 default at '-O' and higher. 7370 7371'-ftree-slsr' 7372 Perform straight-line strength reduction on trees. This recognizes 7373 related expressions involving multiplications and replaces them by 7374 less expensive calculations when possible. This is enabled by 7375 default at '-O' and higher. 7376 7377'-ftree-vectorize' 7378 Perform vectorization on trees. This flag enables 7379 '-ftree-loop-vectorize' and '-ftree-slp-vectorize' if not 7380 explicitly specified. 7381 7382'-ftree-loop-vectorize' 7383 Perform loop vectorization on trees. This flag is enabled by 7384 default at '-O3' and when '-ftree-vectorize' is enabled. 7385 7386'-ftree-slp-vectorize' 7387 Perform basic block vectorization on trees. This flag is enabled 7388 by default at '-O3' and when '-ftree-vectorize' is enabled. 7389 7390'-fvect-cost-model=MODEL' 7391 Alter the cost model used for vectorization. The MODEL argument 7392 should be one of 'unlimited', 'dynamic' or 'cheap'. With the 7393 'unlimited' model the vectorized code-path is assumed to be 7394 profitable while with the 'dynamic' model a runtime check will 7395 guard the vectorized code-path to enable it only for iteration 7396 counts that will likely execute faster than when executing the 7397 original scalar loop. The 'cheap' model will disable vectorization 7398 of loops where doing so would be cost prohibitive for example due 7399 to required runtime checks for data dependence or alignment but 7400 otherwise is equal to the 'dynamic' model. The default cost model 7401 depends on other optimization flags and is either 'dynamic' or 7402 'cheap'. 7403 7404'-fsimd-cost-model=MODEL' 7405 Alter the cost model used for vectorization of loops marked with 7406 the OpenMP or Cilk Plus simd directive. The MODEL argument should 7407 be one of 'unlimited', 'dynamic', 'cheap'. All values of MODEL 7408 have the same meaning as described in '-fvect-cost-model' and by 7409 default a cost model defined with '-fvect-cost-model' is used. 7410 7411'-ftree-vrp' 7412 Perform Value Range Propagation on trees. This is similar to the 7413 constant propagation pass, but instead of values, ranges of values 7414 are propagated. This allows the optimizers to remove unnecessary 7415 range checks like array bound checks and null pointer checks. This 7416 is enabled by default at '-O2' and higher. Null pointer check 7417 elimination is only done if '-fdelete-null-pointer-checks' is 7418 enabled. 7419 7420'-ftracer' 7421 Perform tail duplication to enlarge superblock size. This 7422 transformation simplifies the control flow of the function allowing 7423 other optimizations to do a better job. 7424 7425'-funroll-loops' 7426 Unroll loops whose number of iterations can be determined at 7427 compile time or upon entry to the loop. '-funroll-loops' implies 7428 '-frerun-cse-after-loop'. This option makes code larger, and may 7429 or may not make it run faster. 7430 7431'-funroll-all-loops' 7432 Unroll all loops, even if their number of iterations is uncertain 7433 when the loop is entered. This usually makes programs run more 7434 slowly. '-funroll-all-loops' implies the same options as 7435 '-funroll-loops', 7436 7437'-fsplit-ivs-in-unroller' 7438 Enables expression of values of induction variables in later 7439 iterations of the unrolled loop using the value in the first 7440 iteration. This breaks long dependency chains, thus improving 7441 efficiency of the scheduling passes. 7442 7443 A combination of '-fweb' and CSE is often sufficient to obtain the 7444 same effect. However, that is not reliable in cases where the loop 7445 body is more complicated than a single basic block. It also does 7446 not work at all on some architectures due to restrictions in the 7447 CSE pass. 7448 7449 This optimization is enabled by default. 7450 7451'-fvariable-expansion-in-unroller' 7452 With this option, the compiler creates multiple copies of some 7453 local variables when unrolling a loop, which can result in superior 7454 code. 7455 7456'-fpartial-inlining' 7457 Inline parts of functions. This option has any effect only when 7458 inlining itself is turned on by the '-finline-functions' or 7459 '-finline-small-functions' options. 7460 7461 Enabled at level '-O2'. 7462 7463'-fpredictive-commoning' 7464 Perform predictive commoning optimization, i.e., reusing 7465 computations (especially memory loads and stores) performed in 7466 previous iterations of loops. 7467 7468 This option is enabled at level '-O3'. 7469 7470'-fprefetch-loop-arrays' 7471 If supported by the target machine, generate instructions to 7472 prefetch memory to improve the performance of loops that access 7473 large arrays. 7474 7475 This option may generate better or worse code; results are highly 7476 dependent on the structure of loops within the source code. 7477 7478 Disabled at level '-Os'. 7479 7480'-fno-peephole' 7481'-fno-peephole2' 7482 Disable any machine-specific peephole optimizations. The 7483 difference between '-fno-peephole' and '-fno-peephole2' is in how 7484 they are implemented in the compiler; some targets use one, some 7485 use the other, a few use both. 7486 7487 '-fpeephole' is enabled by default. '-fpeephole2' enabled at 7488 levels '-O2', '-O3', '-Os'. 7489 7490'-fno-guess-branch-probability' 7491 Do not guess branch probabilities using heuristics. 7492 7493 GCC uses heuristics to guess branch probabilities if they are not 7494 provided by profiling feedback ('-fprofile-arcs'). These 7495 heuristics are based on the control flow graph. If some branch 7496 probabilities are specified by '__builtin_expect', then the 7497 heuristics are used to guess branch probabilities for the rest of 7498 the control flow graph, taking the '__builtin_expect' info into 7499 account. The interactions between the heuristics and 7500 '__builtin_expect' can be complex, and in some cases, it may be 7501 useful to disable the heuristics so that the effects of 7502 '__builtin_expect' are easier to understand. 7503 7504 The default is '-fguess-branch-probability' at levels '-O', '-O2', 7505 '-O3', '-Os'. 7506 7507'-freorder-blocks' 7508 Reorder basic blocks in the compiled function in order to reduce 7509 number of taken branches and improve code locality. 7510 7511 Enabled at levels '-O2', '-O3'. 7512 7513'-freorder-blocks-and-partition' 7514 In addition to reordering basic blocks in the compiled function, in 7515 order to reduce number of taken branches, partitions hot and cold 7516 basic blocks into separate sections of the assembly and .o files, 7517 to improve paging and cache locality performance. 7518 7519 This optimization is automatically turned off in the presence of 7520 exception handling, for linkonce sections, for functions with a 7521 user-defined section attribute and on any architecture that does 7522 not support named sections. 7523 7524 Enabled for x86 at levels '-O2', '-O3'. 7525 7526'-freorder-functions' 7527 Reorder functions in the object file in order to improve code 7528 locality. This is implemented by using special subsections 7529 '.text.hot' for most frequently executed functions and 7530 '.text.unlikely' for unlikely executed functions. Reordering is 7531 done by the linker so object file format must support named 7532 sections and linker must place them in a reasonable way. 7533 7534 Also profile feedback must be available to make this option 7535 effective. See '-fprofile-arcs' for details. 7536 7537 Enabled at levels '-O2', '-O3', '-Os'. 7538 7539'-fstrict-aliasing' 7540 Allow the compiler to assume the strictest aliasing rules 7541 applicable to the language being compiled. For C (and C++), this 7542 activates optimizations based on the type of expressions. In 7543 particular, an object of one type is assumed never to reside at the 7544 same address as an object of a different type, unless the types are 7545 almost the same. For example, an 'unsigned int' can alias an 7546 'int', but not a 'void*' or a 'double'. A character type may alias 7547 any other type. 7548 7549 Pay special attention to code like this: 7550 union a_union { 7551 int i; 7552 double d; 7553 }; 7554 7555 int f() { 7556 union a_union t; 7557 t.d = 3.0; 7558 return t.i; 7559 } 7560 The practice of reading from a different union member than the one 7561 most recently written to (called "type-punning") is common. Even 7562 with '-fstrict-aliasing', type-punning is allowed, provided the 7563 memory is accessed through the union type. So, the code above 7564 works as expected. *Note Structures unions enumerations and 7565 bit-fields implementation::. However, this code might not: 7566 int f() { 7567 union a_union t; 7568 int* ip; 7569 t.d = 3.0; 7570 ip = &t.i; 7571 return *ip; 7572 } 7573 7574 Similarly, access by taking the address, casting the resulting 7575 pointer and dereferencing the result has undefined behavior, even 7576 if the cast uses a union type, e.g.: 7577 int f() { 7578 double d = 3.0; 7579 return ((union a_union *) &d)->i; 7580 } 7581 7582 The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3', 7583 '-Os'. 7584 7585'-fstrict-overflow' 7586 Allow the compiler to assume strict signed overflow rules, 7587 depending on the language being compiled. For C (and C++) this 7588 means that overflow when doing arithmetic with signed numbers is 7589 undefined, which means that the compiler may assume that it does 7590 not happen. This permits various optimizations. For example, the 7591 compiler assumes that an expression like 'i + 10 > i' is always 7592 true for signed 'i'. This assumption is only valid if signed 7593 overflow is undefined, as the expression is false if 'i + 10' 7594 overflows when using twos complement arithmetic. When this option 7595 is in effect any attempt to determine whether an operation on 7596 signed numbers overflows must be written carefully to not actually 7597 involve overflow. 7598 7599 This option also allows the compiler to assume strict pointer 7600 semantics: given a pointer to an object, if adding an offset to 7601 that pointer does not produce a pointer to the same object, the 7602 addition is undefined. This permits the compiler to conclude that 7603 'p + u > p' is always true for a pointer 'p' and unsigned integer 7604 'u'. This assumption is only valid because pointer wraparound is 7605 undefined, as the expression is false if 'p + u' overflows using 7606 twos complement arithmetic. 7607 7608 See also the '-fwrapv' option. Using '-fwrapv' means that integer 7609 signed overflow is fully defined: it wraps. When '-fwrapv' is 7610 used, there is no difference between '-fstrict-overflow' and 7611 '-fno-strict-overflow' for integers. With '-fwrapv' certain types 7612 of overflow are permitted. For example, if the compiler gets an 7613 overflow when doing arithmetic on constants, the overflowed value 7614 can still be used with '-fwrapv', but not otherwise. 7615 7616 The '-fstrict-overflow' option is enabled at levels '-O2', '-O3', 7617 '-Os'. 7618 7619'-falign-functions' 7620'-falign-functions=N' 7621 Align the start of functions to the next power-of-two greater than 7622 N, skipping up to N bytes. For instance, '-falign-functions=32' 7623 aligns functions to the next 32-byte boundary, but 7624 '-falign-functions=24' aligns to the next 32-byte boundary only if 7625 this can be done by skipping 23 bytes or less. 7626 7627 '-fno-align-functions' and '-falign-functions=1' are equivalent and 7628 mean that functions are not aligned. 7629 7630 Some assemblers only support this flag when N is a power of two; in 7631 that case, it is rounded up. 7632 7633 If N is not specified or is zero, use a machine-dependent default. 7634 7635 Enabled at levels '-O2', '-O3'. 7636 7637'-falign-labels' 7638'-falign-labels=N' 7639 Align all branch targets to a power-of-two boundary, skipping up to 7640 N bytes like '-falign-functions'. This option can easily make code 7641 slower, because it must insert dummy operations for when the branch 7642 target is reached in the usual flow of the code. 7643 7644 '-fno-align-labels' and '-falign-labels=1' are equivalent and mean 7645 that labels are not aligned. 7646 7647 If '-falign-loops' or '-falign-jumps' are applicable and are 7648 greater than this value, then their values are used instead. 7649 7650 If N is not specified or is zero, use a machine-dependent default 7651 which is very likely to be '1', meaning no alignment. 7652 7653 Enabled at levels '-O2', '-O3'. 7654 7655'-falign-loops' 7656'-falign-loops=N' 7657 Align loops to a power-of-two boundary, skipping up to N bytes like 7658 '-falign-functions'. If the loops are executed many times, this 7659 makes up for any execution of the dummy operations. 7660 7661 '-fno-align-loops' and '-falign-loops=1' are equivalent and mean 7662 that loops are not aligned. 7663 7664 If N is not specified or is zero, use a machine-dependent default. 7665 7666 Enabled at levels '-O2', '-O3'. 7667 7668'-falign-jumps' 7669'-falign-jumps=N' 7670 Align branch targets to a power-of-two boundary, for branch targets 7671 where the targets can only be reached by jumping, skipping up to N 7672 bytes like '-falign-functions'. In this case, no dummy operations 7673 need be executed. 7674 7675 '-fno-align-jumps' and '-falign-jumps=1' are equivalent and mean 7676 that loops are not aligned. 7677 7678 If N is not specified or is zero, use a machine-dependent default. 7679 7680 Enabled at levels '-O2', '-O3'. 7681 7682'-funit-at-a-time' 7683 This option is left for compatibility reasons. '-funit-at-a-time' 7684 has no effect, while '-fno-unit-at-a-time' implies 7685 '-fno-toplevel-reorder' and '-fno-section-anchors'. 7686 7687 Enabled by default. 7688 7689'-fno-toplevel-reorder' 7690 Do not reorder top-level functions, variables, and 'asm' 7691 statements. Output them in the same order that they appear in the 7692 input file. When this option is used, unreferenced static 7693 variables are not removed. This option is intended to support 7694 existing code that relies on a particular ordering. For new code, 7695 it is better to use attributes when possible. 7696 7697 Enabled at level '-O0'. When disabled explicitly, it also implies 7698 '-fno-section-anchors', which is otherwise enabled at '-O0' on some 7699 targets. 7700 7701'-fweb' 7702 Constructs webs as commonly used for register allocation purposes 7703 and assign each web individual pseudo register. This allows the 7704 register allocation pass to operate on pseudos directly, but also 7705 strengthens several other optimization passes, such as CSE, loop 7706 optimizer and trivial dead code remover. It can, however, make 7707 debugging impossible, since variables no longer stay in a "home 7708 register". 7709 7710 Enabled by default with '-funroll-loops'. 7711 7712'-fwhole-program' 7713 Assume that the current compilation unit represents the whole 7714 program being compiled. All public functions and variables with 7715 the exception of 'main' and those merged by attribute 7716 'externally_visible' become static functions and in effect are 7717 optimized more aggressively by interprocedural optimizers. 7718 7719 This option should not be used in combination with '-flto'. 7720 Instead relying on a linker plugin should provide safer and more 7721 precise information. 7722 7723'-flto[=N]' 7724 This option runs the standard link-time optimizer. When invoked 7725 with source code, it generates GIMPLE (one of GCC's internal 7726 representations) and writes it to special ELF sections in the 7727 object file. When the object files are linked together, all the 7728 function bodies are read from these ELF sections and instantiated 7729 as if they had been part of the same translation unit. 7730 7731 To use the link-time optimizer, '-flto' and optimization options 7732 should be specified at compile time and during the final link. For 7733 example: 7734 7735 gcc -c -O2 -flto foo.c 7736 gcc -c -O2 -flto bar.c 7737 gcc -o myprog -flto -O2 foo.o bar.o 7738 7739 The first two invocations to GCC save a bytecode representation of 7740 GIMPLE into special ELF sections inside 'foo.o' and 'bar.o'. The 7741 final invocation reads the GIMPLE bytecode from 'foo.o' and 7742 'bar.o', merges the two files into a single internal image, and 7743 compiles the result as usual. Since both 'foo.o' and 'bar.o' are 7744 merged into a single image, this causes all the interprocedural 7745 analyses and optimizations in GCC to work across the two files as 7746 if they were a single one. This means, for example, that the 7747 inliner is able to inline functions in 'bar.o' into functions in 7748 'foo.o' and vice-versa. 7749 7750 Another (simpler) way to enable link-time optimization is: 7751 7752 gcc -o myprog -flto -O2 foo.c bar.c 7753 7754 The above generates bytecode for 'foo.c' and 'bar.c', merges them 7755 together into a single GIMPLE representation and optimizes them as 7756 usual to produce 'myprog'. 7757 7758 The only important thing to keep in mind is that to enable 7759 link-time optimizations you need to use the GCC driver to perform 7760 the link-step. GCC then automatically performs link-time 7761 optimization if any of the objects involved were compiled with the 7762 '-flto'. You generally should specify the optimization options to 7763 be used for link-time optimization though GCC will try to be clever 7764 at guessing an optimization level to use from the options used at 7765 compile-time if you fail to specify one at link-time. You can 7766 always override the automatic decision to do link-time optimization 7767 at link-time by passing '-fno-lto' to the link command. 7768 7769 To make whole program optimization effective, it is necessary to 7770 make certain whole program assumptions. The compiler needs to know 7771 what functions and variables can be accessed by libraries and 7772 runtime outside of the link-time optimized unit. When supported by 7773 the linker, the linker plugin (see '-fuse-linker-plugin') passes 7774 information to the compiler about used and externally visible 7775 symbols. When the linker plugin is not available, 7776 '-fwhole-program' should be used to allow the compiler to make 7777 these assumptions, which leads to more aggressive optimization 7778 decisions. 7779 7780 When '-fuse-linker-plugin' is not enabled then, when a file is 7781 compiled with '-flto', the generated object file is larger than a 7782 regular object file because it contains GIMPLE bytecodes and the 7783 usual final code (see '-ffat-lto-objects'. This means that object 7784 files with LTO information can be linked as normal object files; if 7785 '-fno-lto' is passed to the linker, no interprocedural 7786 optimizations are applied. Note that when '-fno-fat-lto-objects' 7787 is enabled the compile-stage is faster but you cannot perform a 7788 regular, non-LTO link on them. 7789 7790 Additionally, the optimization flags used to compile individual 7791 files are not necessarily related to those used at link time. For 7792 instance, 7793 7794 gcc -c -O0 -ffat-lto-objects -flto foo.c 7795 gcc -c -O0 -ffat-lto-objects -flto bar.c 7796 gcc -o myprog -O3 foo.o bar.o 7797 7798 This produces individual object files with unoptimized assembler 7799 code, but the resulting binary 'myprog' is optimized at '-O3'. If, 7800 instead, the final binary is generated with '-fno-lto', then 7801 'myprog' is not optimized. 7802 7803 When producing the final binary, GCC only applies link-time 7804 optimizations to those files that contain bytecode. Therefore, you 7805 can mix and match object files and libraries with GIMPLE bytecodes 7806 and final object code. GCC automatically selects which files to 7807 optimize in LTO mode and which files to link without further 7808 processing. 7809 7810 There are some code generation flags preserved by GCC when 7811 generating bytecodes, as they need to be used during the final link 7812 stage. Generally options specified at link-time override those 7813 specified at compile-time. 7814 7815 If you do not specify an optimization level option '-O' at 7816 link-time then GCC will compute one based on the optimization 7817 levels used when compiling the object files. The highest 7818 optimization level will win here. 7819 7820 Currently, the following options and their setting are take from 7821 the first object file that explicitely specified it: '-fPIC', 7822 '-fpic', '-fpie', '-fcommon', '-fexceptions', 7823 '-fnon-call-exceptions', '-fgnu-tm' and all the '-m' target flags. 7824 7825 Certain ABI changing flags are required to match in all 7826 compilation-units and trying to override this at link-time with a 7827 conflicting value is ignored. This includes options such as 7828 '-freg-struct-return' and '-fpcc-struct-return'. 7829 7830 Other options such as '-ffp-contract', '-fno-strict-overflow', 7831 '-fwrapv', '-fno-trapv' or '-fno-strict-aliasing' are passed 7832 through to the link stage and merged conservatively for conflicting 7833 translation units. Specifically '-fno-strict-overflow', '-fwrapv' 7834 and '-fno-trapv' take precedence and for example 7835 '-ffp-contract=off' takes precedence over '-ffp-contract=fast'. 7836 You can override them at linke-time. 7837 7838 It is recommended that you compile all the files participating in 7839 the same link with the same options and also specify those options 7840 at link time. 7841 7842 If LTO encounters objects with C linkage declared with incompatible 7843 types in separate translation units to be linked together 7844 (undefined behavior according to ISO C99 6.2.7), a non-fatal 7845 diagnostic may be issued. The behavior is still undefined at run 7846 time. Similar diagnostics may be raised for other languages. 7847 7848 Another feature of LTO is that it is possible to apply 7849 interprocedural optimizations on files written in different 7850 languages: 7851 7852 gcc -c -flto foo.c 7853 g++ -c -flto bar.cc 7854 gfortran -c -flto baz.f90 7855 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 7856 7857 Notice that the final link is done with 'g++' to get the C++ 7858 runtime libraries and '-lgfortran' is added to get the Fortran 7859 runtime libraries. In general, when mixing languages in LTO mode, 7860 you should use the same link command options as when mixing 7861 languages in a regular (non-LTO) compilation. 7862 7863 If object files containing GIMPLE bytecode are stored in a library 7864 archive, say 'libfoo.a', it is possible to extract and use them in 7865 an LTO link if you are using a linker with plugin support. To 7866 create static libraries suitable for LTO, use 'gcc-ar' and 7867 'gcc-ranlib' instead of 'ar' and 'ranlib'; to show the symbols of 7868 object files with GIMPLE bytecode, use 'gcc-nm'. Those commands 7869 require that 'ar', 'ranlib' and 'nm' have been compiled with plugin 7870 support. At link time, use the the flag '-fuse-linker-plugin' to 7871 ensure that the library participates in the LTO optimization 7872 process: 7873 7874 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 7875 7876 With the linker plugin enabled, the linker extracts the needed 7877 GIMPLE files from 'libfoo.a' and passes them on to the running GCC 7878 to make them part of the aggregated GIMPLE image to be optimized. 7879 7880 If you are not using a linker with plugin support and/or do not 7881 enable the linker plugin, then the objects inside 'libfoo.a' are 7882 extracted and linked as usual, but they do not participate in the 7883 LTO optimization process. In order to make a static library 7884 suitable for both LTO optimization and usual linkage, compile its 7885 object files with '-flto' '-ffat-lto-objects'. 7886 7887 Link-time optimizations do not require the presence of the whole 7888 program to operate. If the program does not require any symbols to 7889 be exported, it is possible to combine '-flto' and 7890 '-fwhole-program' to allow the interprocedural optimizers to use 7891 more aggressive assumptions which may lead to improved optimization 7892 opportunities. Use of '-fwhole-program' is not needed when linker 7893 plugin is active (see '-fuse-linker-plugin'). 7894 7895 The current implementation of LTO makes no attempt to generate 7896 bytecode that is portable between different types of hosts. The 7897 bytecode files are versioned and there is a strict version check, 7898 so bytecode files generated in one version of GCC will not work 7899 with an older or newer version of GCC. 7900 7901 Link-time optimization does not work well with generation of 7902 debugging information. Combining '-flto' with '-g' is currently 7903 experimental and expected to produce unexpected results. 7904 7905 If you specify the optional N, the optimization and code generation 7906 done at link time is executed in parallel using N parallel jobs by 7907 utilizing an installed 'make' program. The environment variable 7908 'MAKE' may be used to override the program used. The default value 7909 for N is 1. 7910 7911 You can also specify '-flto=jobserver' to use GNU make's job server 7912 mode to determine the number of parallel jobs. This is useful when 7913 the Makefile calling GCC is already executing in parallel. You 7914 must prepend a '+' to the command recipe in the parent Makefile for 7915 this to work. This option likely only works if 'MAKE' is GNU make. 7916 7917'-flto-partition=ALG' 7918 Specify the partitioning algorithm used by the link-time optimizer. 7919 The value is either '1to1' to specify a partitioning mirroring the 7920 original source files or 'balanced' to specify partitioning into 7921 equally sized chunks (whenever possible) or 'max' to create new 7922 partition for every symbol where possible. Specifying 'none' as an 7923 algorithm disables partitioning and streaming completely. The 7924 default value is 'balanced'. While '1to1' can be used as an 7925 workaround for various code ordering issues, the 'max' partitioning 7926 is intended for internal testing only. 7927 7928'-flto-compression-level=N' 7929 This option specifies the level of compression used for 7930 intermediate language written to LTO object files, and is only 7931 meaningful in conjunction with LTO mode ('-flto'). Valid values 7932 are 0 (no compression) to 9 (maximum compression). Values outside 7933 this range are clamped to either 0 or 9. If the option is not 7934 given, a default balanced compression setting is used. 7935 7936'-flto-report' 7937 Prints a report with internal details on the workings of the 7938 link-time optimizer. The contents of this report vary from version 7939 to version. It is meant to be useful to GCC developers when 7940 processing object files in LTO mode (via '-flto'). 7941 7942 Disabled by default. 7943 7944'-flto-report-wpa' 7945 Like '-flto-report', but only print for the WPA phase of Link Time 7946 Optimization. 7947 7948'-fuse-linker-plugin' 7949 Enables the use of a linker plugin during link-time optimization. 7950 This option relies on plugin support in the linker, which is 7951 available in gold or in GNU ld 2.21 or newer. 7952 7953 This option enables the extraction of object files with GIMPLE 7954 bytecode out of library archives. This improves the quality of 7955 optimization by exposing more code to the link-time optimizer. 7956 This information specifies what symbols can be accessed externally 7957 (by non-LTO object or during dynamic linking). Resulting code 7958 quality improvements on binaries (and shared libraries that use 7959 hidden visibility) are similar to '-fwhole-program'. See '-flto' 7960 for a description of the effect of this flag and how to use it. 7961 7962 This option is enabled by default when LTO support in GCC is 7963 enabled and GCC was configured for use with a linker supporting 7964 plugins (GNU ld 2.21 or newer or gold). 7965 7966'-ffat-lto-objects' 7967 Fat LTO objects are object files that contain both the intermediate 7968 language and the object code. This makes them usable for both LTO 7969 linking and normal linking. This option is effective only when 7970 compiling with '-flto' and is ignored at link time. 7971 7972 '-fno-fat-lto-objects' improves compilation time over plain LTO, 7973 but requires the complete toolchain to be aware of LTO. It requires 7974 a linker with linker plugin support for basic functionality. 7975 Additionally, 'nm', 'ar' and 'ranlib' need to support linker 7976 plugins to allow a full-featured build environment (capable of 7977 building static libraries etc). GCC provides the 'gcc-ar', 7978 'gcc-nm', 'gcc-ranlib' wrappers to pass the right options to these 7979 tools. With non fat LTO makefiles need to be modified to use them. 7980 7981 The default is '-fno-fat-lto-objects' on targets with linker plugin 7982 support. 7983 7984'-fcompare-elim' 7985 After register allocation and post-register allocation instruction 7986 splitting, identify arithmetic instructions that compute processor 7987 flags similar to a comparison operation based on that arithmetic. 7988 If possible, eliminate the explicit comparison operation. 7989 7990 This pass only applies to certain targets that cannot explicitly 7991 represent the comparison operation before register allocation is 7992 complete. 7993 7994 Enabled at levels '-O', '-O2', '-O3', '-Os'. 7995 7996'-fuse-ld=bfd' 7997 Use the 'bfd' linker instead of the default linker. 7998 7999'-fuse-ld=gold' 8000 Use the 'gold' linker instead of the default linker. 8001 8002'-fcprop-registers' 8003 After register allocation and post-register allocation instruction 8004 splitting, perform a copy-propagation pass to try to reduce 8005 scheduling dependencies and occasionally eliminate the copy. 8006 8007 Enabled at levels '-O', '-O2', '-O3', '-Os'. 8008 8009'-fprofile-correction' 8010 Profiles collected using an instrumented binary for multi-threaded 8011 programs may be inconsistent due to missed counter updates. When 8012 this option is specified, GCC uses heuristics to correct or smooth 8013 out such inconsistencies. By default, GCC emits an error message 8014 when an inconsistent profile is detected. 8015 8016'-fprofile-dir=PATH' 8017 8018 Set the directory to search for the profile data files in to PATH. 8019 This option affects only the profile data generated by 8020 '-fprofile-generate', '-ftest-coverage', '-fprofile-arcs' and used 8021 by '-fprofile-use' and '-fbranch-probabilities' and its related 8022 options. Both absolute and relative paths can be used. By 8023 default, GCC uses the current directory as PATH, thus the profile 8024 data file appears in the same directory as the object file. 8025 8026'-fprofile-generate' 8027'-fprofile-generate=PATH' 8028 8029 Enable options usually used for instrumenting application to 8030 produce profile useful for later recompilation with profile 8031 feedback based optimization. You must use '-fprofile-generate' 8032 both when compiling and when linking your program. 8033 8034 The following options are enabled: '-fprofile-arcs', 8035 '-fprofile-values', '-fvpt'. 8036 8037 If PATH is specified, GCC looks at the PATH to find the profile 8038 feedback data files. See '-fprofile-dir'. 8039 8040'-fprofile-use' 8041'-fprofile-use=PATH' 8042 Enable profile feedback directed optimizations, and optimizations 8043 generally profitable only with profile feedback available. 8044 8045 The following options are enabled: '-fbranch-probabilities', 8046 '-fvpt', '-funroll-loops', '-fpeel-loops', '-ftracer', 8047 '-ftree-vectorize', 'ftree-loop-distribute-patterns' 8048 8049 By default, GCC emits an error message if the feedback profiles do 8050 not match the source code. This error can be turned into a warning 8051 by using '-Wcoverage-mismatch'. Note this may result in poorly 8052 optimized code. 8053 8054 If PATH is specified, GCC looks at the PATH to find the profile 8055 feedback data files. See '-fprofile-dir'. 8056 8057 The following options control compiler behavior regarding 8058floating-point arithmetic. These options trade off between speed and 8059correctness. All must be specifically enabled. 8060 8061'-ffloat-store' 8062 Do not store floating-point variables in registers, and inhibit 8063 other options that might change whether a floating-point value is 8064 taken from a register or memory. 8065 8066 This option prevents undesirable excess precision on machines such 8067 as the 68000 where the floating registers (of the 68881) keep more 8068 precision than a 'double' is supposed to have. Similarly for the 8069 x86 architecture. For most programs, the excess precision does 8070 only good, but a few programs rely on the precise definition of 8071 IEEE floating point. Use '-ffloat-store' for such programs, after 8072 modifying them to store all pertinent intermediate computations 8073 into variables. 8074 8075'-fexcess-precision=STYLE' 8076 This option allows further control over excess precision on 8077 machines where floating-point registers have more precision than 8078 the IEEE 'float' and 'double' types and the processor does not 8079 support operations rounding to those types. By default, 8080 '-fexcess-precision=fast' is in effect; this means that operations 8081 are carried out in the precision of the registers and that it is 8082 unpredictable when rounding to the types specified in the source 8083 code takes place. When compiling C, if 8084 '-fexcess-precision=standard' is specified then excess precision 8085 follows the rules specified in ISO C99; in particular, both casts 8086 and assignments cause values to be rounded to their semantic types 8087 (whereas '-ffloat-store' only affects assignments). This option is 8088 enabled by default for C if a strict conformance option such as 8089 '-std=c99' is used. 8090 8091 '-fexcess-precision=standard' is not implemented for languages 8092 other than C, and has no effect if '-funsafe-math-optimizations' or 8093 '-ffast-math' is specified. On the x86, it also has no effect if 8094 '-mfpmath=sse' or '-mfpmath=sse+387' is specified; in the former 8095 case, IEEE semantics apply without excess precision, and in the 8096 latter, rounding is unpredictable. 8097 8098'-ffast-math' 8099 Sets '-fno-math-errno', '-funsafe-math-optimizations', 8100 '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans' 8101 and '-fcx-limited-range'. 8102 8103 This option causes the preprocessor macro '__FAST_MATH__' to be 8104 defined. 8105 8106 This option is not turned on by any '-O' option besides '-Ofast' 8107 since it can result in incorrect output for programs that depend on 8108 an exact implementation of IEEE or ISO rules/specifications for 8109 math functions. It may, however, yield faster code for programs 8110 that do not require the guarantees of these specifications. 8111 8112'-fno-math-errno' 8113 Do not set 'errno' after calling math functions that are executed 8114 with a single instruction, e.g., 'sqrt'. A program that relies on 8115 IEEE exceptions for math error handling may want to use this flag 8116 for speed while maintaining IEEE arithmetic compatibility. 8117 8118 This option is not turned on by any '-O' option since it can result 8119 in incorrect output for programs that depend on an exact 8120 implementation of IEEE or ISO rules/specifications for math 8121 functions. It may, however, yield faster code for programs that do 8122 not require the guarantees of these specifications. 8123 8124 The default is '-fmath-errno'. 8125 8126 On Darwin systems, the math library never sets 'errno'. There is 8127 therefore no reason for the compiler to consider the possibility 8128 that it might, and '-fno-math-errno' is the default. 8129 8130'-funsafe-math-optimizations' 8131 8132 Allow optimizations for floating-point arithmetic that (a) assume 8133 that arguments and results are valid and (b) may violate IEEE or 8134 ANSI standards. When used at link-time, it may include libraries 8135 or startup files that change the default FPU control word or other 8136 similar optimizations. 8137 8138 This option is not turned on by any '-O' option since it can result 8139 in incorrect output for programs that depend on an exact 8140 implementation of IEEE or ISO rules/specifications for math 8141 functions. It may, however, yield faster code for programs that do 8142 not require the guarantees of these specifications. Enables 8143 '-fno-signed-zeros', '-fno-trapping-math', '-fassociative-math' and 8144 '-freciprocal-math'. 8145 8146 The default is '-fno-unsafe-math-optimizations'. 8147 8148'-fassociative-math' 8149 8150 Allow re-association of operands in series of floating-point 8151 operations. This violates the ISO C and C++ language standard by 8152 possibly changing computation result. NOTE: re-ordering may change 8153 the sign of zero as well as ignore NaNs and inhibit or create 8154 underflow or overflow (and thus cannot be used on code that relies 8155 on rounding behavior like '(x + 2**52) - 2**52'. May also reorder 8156 floating-point comparisons and thus may not be used when ordered 8157 comparisons are required. This option requires that both 8158 '-fno-signed-zeros' and '-fno-trapping-math' be in effect. 8159 Moreover, it doesn't make much sense with '-frounding-math'. For 8160 Fortran the option is automatically enabled when both 8161 '-fno-signed-zeros' and '-fno-trapping-math' are in effect. 8162 8163 The default is '-fno-associative-math'. 8164 8165'-freciprocal-math' 8166 8167 Allow the reciprocal of a value to be used instead of dividing by 8168 the value if this enables optimizations. For example 'x / y' can 8169 be replaced with 'x * (1/y)', which is useful if '(1/y)' is subject 8170 to common subexpression elimination. Note that this loses 8171 precision and increases the number of flops operating on the value. 8172 8173 The default is '-fno-reciprocal-math'. 8174 8175'-ffinite-math-only' 8176 Allow optimizations for floating-point arithmetic that assume that 8177 arguments and results are not NaNs or +-Infs. 8178 8179 This option is not turned on by any '-O' option since it can result 8180 in incorrect output for programs that depend on an exact 8181 implementation of IEEE or ISO rules/specifications for math 8182 functions. It may, however, yield faster code for programs that do 8183 not require the guarantees of these specifications. 8184 8185 The default is '-fno-finite-math-only'. 8186 8187'-fno-signed-zeros' 8188 Allow optimizations for floating-point arithmetic that ignore the 8189 signedness of zero. IEEE arithmetic specifies the behavior of 8190 distinct +0.0 and -0.0 values, which then prohibits simplification 8191 of expressions such as x+0.0 or 0.0*x (even with 8192 '-ffinite-math-only'). This option implies that the sign of a zero 8193 result isn't significant. 8194 8195 The default is '-fsigned-zeros'. 8196 8197'-fno-trapping-math' 8198 Compile code assuming that floating-point operations cannot 8199 generate user-visible traps. These traps include division by zero, 8200 overflow, underflow, inexact result and invalid operation. This 8201 option requires that '-fno-signaling-nans' be in effect. Setting 8202 this option may allow faster code if one relies on "non-stop" IEEE 8203 arithmetic, for example. 8204 8205 This option should never be turned on by any '-O' option since it 8206 can result in incorrect output for programs that depend on an exact 8207 implementation of IEEE or ISO rules/specifications for math 8208 functions. 8209 8210 The default is '-ftrapping-math'. 8211 8212'-frounding-math' 8213 Disable transformations and optimizations that assume default 8214 floating-point rounding behavior. This is round-to-zero for all 8215 floating point to integer conversions, and round-to-nearest for all 8216 other arithmetic truncations. This option should be specified for 8217 programs that change the FP rounding mode dynamically, or that may 8218 be executed with a non-default rounding mode. This option disables 8219 constant folding of floating-point expressions at compile time 8220 (which may be affected by rounding mode) and arithmetic 8221 transformations that are unsafe in the presence of sign-dependent 8222 rounding modes. 8223 8224 The default is '-fno-rounding-math'. 8225 8226 This option is experimental and does not currently guarantee to 8227 disable all GCC optimizations that are affected by rounding mode. 8228 Future versions of GCC may provide finer control of this setting 8229 using C99's 'FENV_ACCESS' pragma. This command-line option will be 8230 used to specify the default state for 'FENV_ACCESS'. 8231 8232'-fsignaling-nans' 8233 Compile code assuming that IEEE signaling NaNs may generate 8234 user-visible traps during floating-point operations. Setting this 8235 option disables optimizations that may change the number of 8236 exceptions visible with signaling NaNs. This option implies 8237 '-ftrapping-math'. 8238 8239 This option causes the preprocessor macro '__SUPPORT_SNAN__' to be 8240 defined. 8241 8242 The default is '-fno-signaling-nans'. 8243 8244 This option is experimental and does not currently guarantee to 8245 disable all GCC optimizations that affect signaling NaN behavior. 8246 8247'-fsingle-precision-constant' 8248 Treat floating-point constants as single precision instead of 8249 implicitly converting them to double-precision constants. 8250 8251'-fcx-limited-range' 8252 When enabled, this option states that a range reduction step is not 8253 needed when performing complex division. Also, there is no 8254 checking whether the result of a complex multiplication or division 8255 is 'NaN + I*NaN', with an attempt to rescue the situation in that 8256 case. The default is '-fno-cx-limited-range', but is enabled by 8257 '-ffast-math'. 8258 8259 This option controls the default setting of the ISO C99 8260 'CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to all 8261 languages. 8262 8263'-fcx-fortran-rules' 8264 Complex multiplication and division follow Fortran rules. Range 8265 reduction is done as part of complex division, but there is no 8266 checking whether the result of a complex multiplication or division 8267 is 'NaN + I*NaN', with an attempt to rescue the situation in that 8268 case. 8269 8270 The default is '-fno-cx-fortran-rules'. 8271 8272 The following options control optimizations that may improve 8273performance, but are not enabled by any '-O' options. This section 8274includes experimental options that may produce broken code. 8275 8276'-fbranch-probabilities' 8277 After running a program compiled with '-fprofile-arcs' (*note 8278 Options for Debugging Your Program or 'gcc': Debugging Options.), 8279 you can compile it a second time using '-fbranch-probabilities', to 8280 improve optimizations based on the number of times each branch was 8281 taken. When a program compiled with '-fprofile-arcs' exits, it 8282 saves arc execution counts to a file called 'SOURCENAME.gcda' for 8283 each source file. The information in this data file is very 8284 dependent on the structure of the generated code, so you must use 8285 the same source code and the same optimization options for both 8286 compilations. 8287 8288 With '-fbranch-probabilities', GCC puts a 'REG_BR_PROB' note on 8289 each 'JUMP_INSN' and 'CALL_INSN'. These can be used to improve 8290 optimization. Currently, they are only used in one place: in 8291 'reorg.c', instead of guessing which path a branch is most likely 8292 to take, the 'REG_BR_PROB' values are used to exactly determine 8293 which path is taken more often. 8294 8295'-fprofile-values' 8296 If combined with '-fprofile-arcs', it adds code so that some data 8297 about values of expressions in the program is gathered. 8298 8299 With '-fbranch-probabilities', it reads back the data gathered from 8300 profiling values of expressions for usage in optimizations. 8301 8302 Enabled with '-fprofile-generate' and '-fprofile-use'. 8303 8304'-fprofile-reorder-functions' 8305 Function reordering based on profile instrumentation collects first 8306 time of execution of a function and orders these functions in 8307 ascending order. 8308 8309 Enabled with '-fprofile-use'. 8310 8311'-fvpt' 8312 If combined with '-fprofile-arcs', this option instructs the 8313 compiler to add code to gather information about values of 8314 expressions. 8315 8316 With '-fbranch-probabilities', it reads back the data gathered and 8317 actually performs the optimizations based on them. Currently the 8318 optimizations include specialization of division operations using 8319 the knowledge about the value of the denominator. 8320 8321'-frename-registers' 8322 Attempt to avoid false dependencies in scheduled code by making use 8323 of registers left over after register allocation. This 8324 optimization most benefits processors with lots of registers. 8325 Depending on the debug information format adopted by the target, 8326 however, it can make debugging impossible, since variables no 8327 longer stay in a "home register". 8328 8329 Enabled by default with '-funroll-loops' and '-fpeel-loops'. 8330 8331'-ftracer' 8332 Perform tail duplication to enlarge superblock size. This 8333 transformation simplifies the control flow of the function allowing 8334 other optimizations to do a better job. 8335 8336 Enabled with '-fprofile-use'. 8337 8338'-funroll-loops' 8339 Unroll loops whose number of iterations can be determined at 8340 compile time or upon entry to the loop. '-funroll-loops' implies 8341 '-frerun-cse-after-loop', '-fweb' and '-frename-registers'. It 8342 also turns on complete loop peeling (i.e. complete removal of loops 8343 with a small constant number of iterations). This option makes 8344 code larger, and may or may not make it run faster. 8345 8346 Enabled with '-fprofile-use'. 8347 8348'-funroll-all-loops' 8349 Unroll all loops, even if their number of iterations is uncertain 8350 when the loop is entered. This usually makes programs run more 8351 slowly. '-funroll-all-loops' implies the same options as 8352 '-funroll-loops'. 8353 8354'-fpeel-loops' 8355 Peels loops for which there is enough information that they do not 8356 roll much (from profile feedback). It also turns on complete loop 8357 peeling (i.e. complete removal of loops with small constant number 8358 of iterations). 8359 8360 Enabled with '-fprofile-use'. 8361 8362'-fmove-loop-invariants' 8363 Enables the loop invariant motion pass in the RTL loop optimizer. 8364 Enabled at level '-O1' 8365 8366'-funswitch-loops' 8367 Move branches with loop invariant conditions out of the loop, with 8368 duplicates of the loop on both branches (modified according to 8369 result of the condition). 8370 8371'-ffunction-sections' 8372'-fdata-sections' 8373 Place each function or data item into its own section in the output 8374 file if the target supports arbitrary sections. The name of the 8375 function or the name of the data item determines the section's name 8376 in the output file. 8377 8378 Use these options on systems where the linker can perform 8379 optimizations to improve locality of reference in the instruction 8380 space. Most systems using the ELF object format and SPARC 8381 processors running Solaris 2 have linkers with such optimizations. 8382 AIX may have these optimizations in the future. 8383 8384 Only use these options when there are significant benefits from 8385 doing so. When you specify these options, the assembler and linker 8386 create larger object and executable files and are also slower. You 8387 cannot use 'gprof' on all systems if you specify this option, and 8388 you may have problems with debugging if you specify both this 8389 option and '-g'. 8390 8391'-fbranch-target-load-optimize' 8392 Perform branch target register load optimization before prologue / 8393 epilogue threading. The use of target registers can typically be 8394 exposed only during reload, thus hoisting loads out of loops and 8395 doing inter-block scheduling needs a separate optimization pass. 8396 8397'-fbranch-target-load-optimize2' 8398 Perform branch target register load optimization after prologue / 8399 epilogue threading. 8400 8401'-fbtr-bb-exclusive' 8402 When performing branch target register load optimization, don't 8403 reuse branch target registers within any basic block. 8404 8405'-fstack-protector' 8406 Emit extra code to check for buffer overflows, such as stack 8407 smashing attacks. This is done by adding a guard variable to 8408 functions with vulnerable objects. This includes functions that 8409 call 'alloca', and functions with buffers larger than 8 bytes. The 8410 guards are initialized when a function is entered and then checked 8411 when the function exits. If a guard check fails, an error message 8412 is printed and the program exits. 8413 8414'-fstack-protector-all' 8415 Like '-fstack-protector' except that all functions are protected. 8416 8417'-fstack-protector-strong' 8418 Like '-fstack-protector' but includes additional functions to be 8419 protected -- those that have local array definitions, or have 8420 references to local frame addresses. 8421 8422'-fsection-anchors' 8423 Try to reduce the number of symbolic address calculations by using 8424 shared "anchor" symbols to address nearby objects. This 8425 transformation can help to reduce the number of GOT entries and GOT 8426 accesses on some targets. 8427 8428 For example, the implementation of the following function 'foo': 8429 8430 static int a, b, c; 8431 int foo (void) { return a + b + c; } 8432 8433 usually calculates the addresses of all three variables, but if you 8434 compile it with '-fsection-anchors', it accesses the variables from 8435 a common anchor point instead. The effect is similar to the 8436 following pseudocode (which isn't valid C): 8437 8438 int foo (void) 8439 { 8440 register int *xr = &x; 8441 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 8442 } 8443 8444 Not all targets support this option. 8445 8446'--param NAME=VALUE' 8447 In some places, GCC uses various constants to control the amount of 8448 optimization that is done. For example, GCC does not inline 8449 functions that contain more than a certain number of instructions. 8450 You can control some of these constants on the command line using 8451 the '--param' option. 8452 8453 The names of specific parameters, and the meaning of the values, 8454 are tied to the internals of the compiler, and are subject to 8455 change without notice in future releases. 8456 8457 In each case, the VALUE is an integer. The allowable choices for 8458 NAME are: 8459 8460 'predictable-branch-outcome' 8461 When branch is predicted to be taken with probability lower 8462 than this threshold (in percent), then it is considered well 8463 predictable. The default is 10. 8464 8465 'max-crossjump-edges' 8466 The maximum number of incoming edges to consider for 8467 cross-jumping. The algorithm used by '-fcrossjumping' is 8468 O(N^2) in the number of edges incoming to each block. 8469 Increasing values mean more aggressive optimization, making 8470 the compilation time increase with probably small improvement 8471 in executable size. 8472 8473 'min-crossjump-insns' 8474 The minimum number of instructions that must be matched at the 8475 end of two blocks before cross-jumping is performed on them. 8476 This value is ignored in the case where all instructions in 8477 the block being cross-jumped from are matched. The default 8478 value is 5. 8479 8480 'max-grow-copy-bb-insns' 8481 The maximum code size expansion factor when copying basic 8482 blocks instead of jumping. The expansion is relative to a 8483 jump instruction. The default value is 8. 8484 8485 'max-goto-duplication-insns' 8486 The maximum number of instructions to duplicate to a block 8487 that jumps to a computed goto. To avoid O(N^2) behavior in a 8488 number of passes, GCC factors computed gotos early in the 8489 compilation process, and unfactors them as late as possible. 8490 Only computed jumps at the end of a basic blocks with no more 8491 than max-goto-duplication-insns are unfactored. The default 8492 value is 8. 8493 8494 'max-delay-slot-insn-search' 8495 The maximum number of instructions to consider when looking 8496 for an instruction to fill a delay slot. If more than this 8497 arbitrary number of instructions are searched, the time 8498 savings from filling the delay slot are minimal, so stop 8499 searching. Increasing values mean more aggressive 8500 optimization, making the compilation time increase with 8501 probably small improvement in execution time. 8502 8503 'max-delay-slot-live-search' 8504 When trying to fill delay slots, the maximum number of 8505 instructions to consider when searching for a block with valid 8506 live register information. Increasing this arbitrarily chosen 8507 value means more aggressive optimization, increasing the 8508 compilation time. This parameter should be removed when the 8509 delay slot code is rewritten to maintain the control-flow 8510 graph. 8511 8512 'max-gcse-memory' 8513 The approximate maximum amount of memory that can be allocated 8514 in order to perform the global common subexpression 8515 elimination optimization. If more memory than specified is 8516 required, the optimization is not done. 8517 8518 'max-gcse-insertion-ratio' 8519 If the ratio of expression insertions to deletions is larger 8520 than this value for any expression, then RTL PRE inserts or 8521 removes the expression and thus leaves partially redundant 8522 computations in the instruction stream. The default value is 8523 20. 8524 8525 'max-pending-list-length' 8526 The maximum number of pending dependencies scheduling allows 8527 before flushing the current state and starting over. Large 8528 functions with few branches or calls can create excessively 8529 large lists which needlessly consume memory and resources. 8530 8531 'max-modulo-backtrack-attempts' 8532 The maximum number of backtrack attempts the scheduler should 8533 make when modulo scheduling a loop. Larger values can 8534 exponentially increase compilation time. 8535 8536 'max-inline-insns-single' 8537 Several parameters control the tree inliner used in GCC. This 8538 number sets the maximum number of instructions (counted in 8539 GCC's internal representation) in a single function that the 8540 tree inliner considers for inlining. This only affects 8541 functions declared inline and methods implemented in a class 8542 declaration (C++). The default value is 400. 8543 8544 'max-inline-insns-auto' 8545 When you use '-finline-functions' (included in '-O3'), a lot 8546 of functions that would otherwise not be considered for 8547 inlining by the compiler are investigated. To those 8548 functions, a different (more restrictive) limit compared to 8549 functions declared inline can be applied. The default value 8550 is 40. 8551 8552 'inline-min-speedup' 8553 When estimated performance improvement of caller + callee 8554 runtime exceeds this threshold (in precent), the function can 8555 be inlined regardless the limit on '--param 8556 max-inline-insns-single' and '--param max-inline-insns-auto'. 8557 8558 'large-function-insns' 8559 The limit specifying really large functions. For functions 8560 larger than this limit after inlining, inlining is constrained 8561 by '--param large-function-growth'. This parameter is useful 8562 primarily to avoid extreme compilation time caused by 8563 non-linear algorithms used by the back end. The default value 8564 is 2700. 8565 8566 'large-function-growth' 8567 Specifies maximal growth of large function caused by inlining 8568 in percents. The default value is 100 which limits large 8569 function growth to 2.0 times the original size. 8570 8571 'large-unit-insns' 8572 The limit specifying large translation unit. Growth caused by 8573 inlining of units larger than this limit is limited by 8574 '--param inline-unit-growth'. For small units this might be 8575 too tight. For example, consider a unit consisting of 8576 function A that is inline and B that just calls A three times. 8577 If B is small relative to A, the growth of unit is 300\% and 8578 yet such inlining is very sane. For very large units 8579 consisting of small inlineable functions, however, the overall 8580 unit growth limit is needed to avoid exponential explosion of 8581 code size. Thus for smaller units, the size is increased to 8582 '--param large-unit-insns' before applying '--param 8583 inline-unit-growth'. The default is 10000. 8584 8585 'inline-unit-growth' 8586 Specifies maximal overall growth of the compilation unit 8587 caused by inlining. The default value is 30 which limits unit 8588 growth to 1.3 times the original size. 8589 8590 'ipcp-unit-growth' 8591 Specifies maximal overall growth of the compilation unit 8592 caused by interprocedural constant propagation. The default 8593 value is 10 which limits unit growth to 1.1 times the original 8594 size. 8595 8596 'large-stack-frame' 8597 The limit specifying large stack frames. While inlining the 8598 algorithm is trying to not grow past this limit too much. The 8599 default value is 256 bytes. 8600 8601 'large-stack-frame-growth' 8602 Specifies maximal growth of large stack frames caused by 8603 inlining in percents. The default value is 1000 which limits 8604 large stack frame growth to 11 times the original size. 8605 8606 'max-inline-insns-recursive' 8607 'max-inline-insns-recursive-auto' 8608 Specifies the maximum number of instructions an out-of-line 8609 copy of a self-recursive inline function can grow into by 8610 performing recursive inlining. 8611 8612 For functions declared inline, '--param 8613 max-inline-insns-recursive' is taken into account. For 8614 functions not declared inline, recursive inlining happens only 8615 when '-finline-functions' (included in '-O3') is enabled and 8616 '--param max-inline-insns-recursive-auto' is used. The 8617 default value is 450. 8618 8619 'max-inline-recursive-depth' 8620 'max-inline-recursive-depth-auto' 8621 Specifies the maximum recursion depth used for recursive 8622 inlining. 8623 8624 For functions declared inline, '--param 8625 max-inline-recursive-depth' is taken into account. For 8626 functions not declared inline, recursive inlining happens only 8627 when '-finline-functions' (included in '-O3') is enabled and 8628 '--param max-inline-recursive-depth-auto' is used. The 8629 default value is 8. 8630 8631 'min-inline-recursive-probability' 8632 Recursive inlining is profitable only for function having deep 8633 recursion in average and can hurt for function having little 8634 recursion depth by increasing the prologue size or complexity 8635 of function body to other optimizers. 8636 8637 When profile feedback is available (see '-fprofile-generate') 8638 the actual recursion depth can be guessed from probability 8639 that function recurses via a given call expression. This 8640 parameter limits inlining only to call expressions whose 8641 probability exceeds the given threshold (in percents). The 8642 default value is 10. 8643 8644 'early-inlining-insns' 8645 Specify growth that the early inliner can make. In effect it 8646 increases the amount of inlining for code having a large 8647 abstraction penalty. The default value is 10. 8648 8649 'max-early-inliner-iterations' 8650 'max-early-inliner-iterations' 8651 Limit of iterations of the early inliner. This basically 8652 bounds the number of nested indirect calls the early inliner 8653 can resolve. Deeper chains are still handled by late 8654 inlining. 8655 8656 'comdat-sharing-probability' 8657 'comdat-sharing-probability' 8658 Probability (in percent) that C++ inline function with comdat 8659 visibility are shared across multiple compilation units. The 8660 default value is 20. 8661 8662 'min-vect-loop-bound' 8663 The minimum number of iterations under which loops are not 8664 vectorized when '-ftree-vectorize' is used. The number of 8665 iterations after vectorization needs to be greater than the 8666 value specified by this option to allow vectorization. The 8667 default value is 0. 8668 8669 'gcse-cost-distance-ratio' 8670 Scaling factor in calculation of maximum distance an 8671 expression can be moved by GCSE optimizations. This is 8672 currently supported only in the code hoisting pass. The 8673 bigger the ratio, the more aggressive code hoisting is with 8674 simple expressions, i.e., the expressions that have cost less 8675 than 'gcse-unrestricted-cost'. Specifying 0 disables hoisting 8676 of simple expressions. The default value is 10. 8677 8678 'gcse-unrestricted-cost' 8679 Cost, roughly measured as the cost of a single typical machine 8680 instruction, at which GCSE optimizations do not constrain the 8681 distance an expression can travel. This is currently 8682 supported only in the code hoisting pass. The lesser the 8683 cost, the more aggressive code hoisting is. Specifying 0 8684 allows all expressions to travel unrestricted distances. The 8685 default value is 3. 8686 8687 'max-hoist-depth' 8688 The depth of search in the dominator tree for expressions to 8689 hoist. This is used to avoid quadratic behavior in hoisting 8690 algorithm. The value of 0 does not limit on the search, but 8691 may slow down compilation of huge functions. The default 8692 value is 30. 8693 8694 'max-tail-merge-comparisons' 8695 The maximum amount of similar bbs to compare a bb with. This 8696 is used to avoid quadratic behavior in tree tail merging. The 8697 default value is 10. 8698 8699 'max-tail-merge-iterations' 8700 The maximum amount of iterations of the pass over the 8701 function. This is used to limit compilation time in tree tail 8702 merging. The default value is 2. 8703 8704 'max-unrolled-insns' 8705 The maximum number of instructions that a loop may have to be 8706 unrolled. If a loop is unrolled, this parameter also 8707 determines how many times the loop code is unrolled. 8708 8709 'max-average-unrolled-insns' 8710 The maximum number of instructions biased by probabilities of 8711 their execution that a loop may have to be unrolled. If a 8712 loop is unrolled, this parameter also determines how many 8713 times the loop code is unrolled. 8714 8715 'max-unroll-times' 8716 The maximum number of unrollings of a single loop. 8717 8718 'max-peeled-insns' 8719 The maximum number of instructions that a loop may have to be 8720 peeled. If a loop is peeled, this parameter also determines 8721 how many times the loop code is peeled. 8722 8723 'max-peel-times' 8724 The maximum number of peelings of a single loop. 8725 8726 'max-peel-branches' 8727 The maximum number of branches on the hot path through the 8728 peeled sequence. 8729 8730 'max-completely-peeled-insns' 8731 The maximum number of insns of a completely peeled loop. 8732 8733 'max-completely-peel-times' 8734 The maximum number of iterations of a loop to be suitable for 8735 complete peeling. 8736 8737 'max-completely-peel-loop-nest-depth' 8738 The maximum depth of a loop nest suitable for complete 8739 peeling. 8740 8741 'max-unswitch-insns' 8742 The maximum number of insns of an unswitched loop. 8743 8744 'max-unswitch-level' 8745 The maximum number of branches unswitched in a single loop. 8746 8747 'lim-expensive' 8748 The minimum cost of an expensive expression in the loop 8749 invariant motion. 8750 8751 'iv-consider-all-candidates-bound' 8752 Bound on number of candidates for induction variables, below 8753 which all candidates are considered for each use in induction 8754 variable optimizations. If there are more candidates than 8755 this, only the most relevant ones are considered to avoid 8756 quadratic time complexity. 8757 8758 'iv-max-considered-uses' 8759 The induction variable optimizations give up on loops that 8760 contain more induction variable uses. 8761 8762 'iv-always-prune-cand-set-bound' 8763 If the number of candidates in the set is smaller than this 8764 value, always try to remove unnecessary ivs from the set when 8765 adding a new one. 8766 8767 'scev-max-expr-size' 8768 Bound on size of expressions used in the scalar evolutions 8769 analyzer. Large expressions slow the analyzer. 8770 8771 'scev-max-expr-complexity' 8772 Bound on the complexity of the expressions in the scalar 8773 evolutions analyzer. Complex expressions slow the analyzer. 8774 8775 'omega-max-vars' 8776 The maximum number of variables in an Omega constraint system. 8777 The default value is 128. 8778 8779 'omega-max-geqs' 8780 The maximum number of inequalities in an Omega constraint 8781 system. The default value is 256. 8782 8783 'omega-max-eqs' 8784 The maximum number of equalities in an Omega constraint 8785 system. The default value is 128. 8786 8787 'omega-max-wild-cards' 8788 The maximum number of wildcard variables that the Omega solver 8789 is able to insert. The default value is 18. 8790 8791 'omega-hash-table-size' 8792 The size of the hash table in the Omega solver. The default 8793 value is 550. 8794 8795 'omega-max-keys' 8796 The maximal number of keys used by the Omega solver. The 8797 default value is 500. 8798 8799 'omega-eliminate-redundant-constraints' 8800 When set to 1, use expensive methods to eliminate all 8801 redundant constraints. The default value is 0. 8802 8803 'vect-max-version-for-alignment-checks' 8804 The maximum number of run-time checks that can be performed 8805 when doing loop versioning for alignment in the vectorizer. 8806 8807 'vect-max-version-for-alias-checks' 8808 The maximum number of run-time checks that can be performed 8809 when doing loop versioning for alias in the vectorizer. 8810 8811 'vect-max-peeling-for-alignment' 8812 The maximum number of loop peels to enhance access alignment 8813 for vectorizer. Value -1 means 'no limit'. 8814 8815 'max-iterations-to-track' 8816 The maximum number of iterations of a loop the brute-force 8817 algorithm for analysis of the number of iterations of the loop 8818 tries to evaluate. 8819 8820 'hot-bb-count-ws-permille' 8821 A basic block profile count is considered hot if it 8822 contributes to the given permillage (i.e. 0...1000) of the 8823 entire profiled execution. 8824 8825 'hot-bb-frequency-fraction' 8826 Select fraction of the entry block frequency of executions of 8827 basic block in function given basic block needs to have to be 8828 considered hot. 8829 8830 'max-predicted-iterations' 8831 The maximum number of loop iterations we predict statically. 8832 This is useful in cases where a function contains a single 8833 loop with known bound and another loop with unknown bound. 8834 The known number of iterations is predicted correctly, while 8835 the unknown number of iterations average to roughly 10. This 8836 means that the loop without bounds appears artificially cold 8837 relative to the other one. 8838 8839 'builtin-expect-probability' 8840 Control the probability of the expression having the specified 8841 value. This parameter takes a percentage (i.e. 0 ... 100) 8842 as input. The default probability of 90 is obtained 8843 empirically. 8844 8845 'align-threshold' 8846 8847 Select fraction of the maximal frequency of executions of a 8848 basic block in a function to align the basic block. 8849 8850 'align-loop-iterations' 8851 8852 A loop expected to iterate at least the selected number of 8853 iterations is aligned. 8854 8855 'tracer-dynamic-coverage' 8856 'tracer-dynamic-coverage-feedback' 8857 8858 This value is used to limit superblock formation once the 8859 given percentage of executed instructions is covered. This 8860 limits unnecessary code size expansion. 8861 8862 The 'tracer-dynamic-coverage-feedback' is used only when 8863 profile feedback is available. The real profiles (as opposed 8864 to statically estimated ones) are much less balanced allowing 8865 the threshold to be larger value. 8866 8867 'tracer-max-code-growth' 8868 Stop tail duplication once code growth has reached given 8869 percentage. This is a rather artificial limit, as most of the 8870 duplicates are eliminated later in cross jumping, so it may be 8871 set to much higher values than is the desired code growth. 8872 8873 'tracer-min-branch-ratio' 8874 8875 Stop reverse growth when the reverse probability of best edge 8876 is less than this threshold (in percent). 8877 8878 'tracer-min-branch-ratio' 8879 'tracer-min-branch-ratio-feedback' 8880 8881 Stop forward growth if the best edge has probability lower 8882 than this threshold. 8883 8884 Similarly to 'tracer-dynamic-coverage' two values are present, 8885 one for compilation for profile feedback and one for 8886 compilation without. The value for compilation with profile 8887 feedback needs to be more conservative (higher) in order to 8888 make tracer effective. 8889 8890 'max-cse-path-length' 8891 8892 The maximum number of basic blocks on path that CSE considers. 8893 The default is 10. 8894 8895 'max-cse-insns' 8896 The maximum number of instructions CSE processes before 8897 flushing. The default is 1000. 8898 8899 'ggc-min-expand' 8900 8901 GCC uses a garbage collector to manage its own memory 8902 allocation. This parameter specifies the minimum percentage 8903 by which the garbage collector's heap should be allowed to 8904 expand between collections. Tuning this may improve 8905 compilation speed; it has no effect on code generation. 8906 8907 The default is 30% + 70% * (RAM/1GB) with an upper bound of 8908 100% when RAM >= 1GB. If 'getrlimit' is available, the notion 8909 of "RAM" is the smallest of actual RAM and 'RLIMIT_DATA' or 8910 'RLIMIT_AS'. If GCC is not able to calculate RAM on a 8911 particular platform, the lower bound of 30% is used. Setting 8912 this parameter and 'ggc-min-heapsize' to zero causes a full 8913 collection to occur at every opportunity. This is extremely 8914 slow, but can be useful for debugging. 8915 8916 'ggc-min-heapsize' 8917 8918 Minimum size of the garbage collector's heap before it begins 8919 bothering to collect garbage. The first collection occurs 8920 after the heap expands by 'ggc-min-expand'% beyond 8921 'ggc-min-heapsize'. Again, tuning this may improve 8922 compilation speed, and has no effect on code generation. 8923 8924 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 8925 that tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 8926 exceeded, but with a lower bound of 4096 (four megabytes) and 8927 an upper bound of 131072 (128 megabytes). If GCC is not able 8928 to calculate RAM on a particular platform, the lower bound is 8929 used. Setting this parameter very large effectively disables 8930 garbage collection. Setting this parameter and 8931 'ggc-min-expand' to zero causes a full collection to occur at 8932 every opportunity. 8933 8934 'max-reload-search-insns' 8935 The maximum number of instruction reload should look backward 8936 for equivalent register. Increasing values mean more 8937 aggressive optimization, making the compilation time increase 8938 with probably slightly better performance. The default value 8939 is 100. 8940 8941 'max-cselib-memory-locations' 8942 The maximum number of memory locations cselib should take into 8943 account. Increasing values mean more aggressive optimization, 8944 making the compilation time increase with probably slightly 8945 better performance. The default value is 500. 8946 8947 'reorder-blocks-duplicate' 8948 'reorder-blocks-duplicate-feedback' 8949 8950 Used by the basic block reordering pass to decide whether to 8951 use unconditional branch or duplicate the code on its 8952 destination. Code is duplicated when its estimated size is 8953 smaller than this value multiplied by the estimated size of 8954 unconditional jump in the hot spots of the program. 8955 8956 The 'reorder-block-duplicate-feedback' is used only when 8957 profile feedback is available. It may be set to higher values 8958 than 'reorder-block-duplicate' since information about the hot 8959 spots is more accurate. 8960 8961 'max-sched-ready-insns' 8962 The maximum number of instructions ready to be issued the 8963 scheduler should consider at any given time during the first 8964 scheduling pass. Increasing values mean more thorough 8965 searches, making the compilation time increase with probably 8966 little benefit. The default value is 100. 8967 8968 'max-sched-region-blocks' 8969 The maximum number of blocks in a region to be considered for 8970 interblock scheduling. The default value is 10. 8971 8972 'max-pipeline-region-blocks' 8973 The maximum number of blocks in a region to be considered for 8974 pipelining in the selective scheduler. The default value is 8975 15. 8976 8977 'max-sched-region-insns' 8978 The maximum number of insns in a region to be considered for 8979 interblock scheduling. The default value is 100. 8980 8981 'max-pipeline-region-insns' 8982 The maximum number of insns in a region to be considered for 8983 pipelining in the selective scheduler. The default value is 8984 200. 8985 8986 'min-spec-prob' 8987 The minimum probability (in percents) of reaching a source 8988 block for interblock speculative scheduling. The default 8989 value is 40. 8990 8991 'max-sched-extend-regions-iters' 8992 The maximum number of iterations through CFG to extend 8993 regions. A value of 0 (the default) disables region 8994 extensions. 8995 8996 'max-sched-insn-conflict-delay' 8997 The maximum conflict delay for an insn to be considered for 8998 speculative motion. The default value is 3. 8999 9000 'sched-spec-prob-cutoff' 9001 The minimal probability of speculation success (in percents), 9002 so that speculative insns are scheduled. The default value is 9003 40. 9004 9005 'sched-spec-state-edge-prob-cutoff' 9006 The minimum probability an edge must have for the scheduler to 9007 save its state across it. The default value is 10. 9008 9009 'sched-mem-true-dep-cost' 9010 Minimal distance (in CPU cycles) between store and load 9011 targeting same memory locations. The default value is 1. 9012 9013 'selsched-max-lookahead' 9014 The maximum size of the lookahead window of selective 9015 scheduling. It is a depth of search for available 9016 instructions. The default value is 50. 9017 9018 'selsched-max-sched-times' 9019 The maximum number of times that an instruction is scheduled 9020 during selective scheduling. This is the limit on the number 9021 of iterations through which the instruction may be pipelined. 9022 The default value is 2. 9023 9024 'selsched-max-insns-to-rename' 9025 The maximum number of best instructions in the ready list that 9026 are considered for renaming in the selective scheduler. The 9027 default value is 2. 9028 9029 'sms-min-sc' 9030 The minimum value of stage count that swing modulo scheduler 9031 generates. The default value is 2. 9032 9033 'max-last-value-rtl' 9034 The maximum size measured as number of RTLs that can be 9035 recorded in an expression in combiner for a pseudo register as 9036 last known value of that register. The default is 10000. 9037 9038 'integer-share-limit' 9039 Small integer constants can use a shared data structure, 9040 reducing the compiler's memory usage and increasing its speed. 9041 This sets the maximum value of a shared integer constant. The 9042 default value is 256. 9043 9044 'ssp-buffer-size' 9045 The minimum size of buffers (i.e. arrays) that receive stack 9046 smashing protection when '-fstack-protection' is used. 9047 9048 'min-size-for-stack-sharing' 9049 The minimum size of variables taking part in stack slot 9050 sharing when not optimizing. The default value is 32. 9051 9052 'max-jump-thread-duplication-stmts' 9053 Maximum number of statements allowed in a block that needs to 9054 be duplicated when threading jumps. 9055 9056 'max-fields-for-field-sensitive' 9057 Maximum number of fields in a structure treated in a field 9058 sensitive manner during pointer analysis. The default is zero 9059 for '-O0' and '-O1', and 100 for '-Os', '-O2', and '-O3'. 9060 9061 'prefetch-latency' 9062 Estimate on average number of instructions that are executed 9063 before prefetch finishes. The distance prefetched ahead is 9064 proportional to this constant. Increasing this number may 9065 also lead to less streams being prefetched (see 9066 'simultaneous-prefetches'). 9067 9068 'simultaneous-prefetches' 9069 Maximum number of prefetches that can run at the same time. 9070 9071 'l1-cache-line-size' 9072 The size of cache line in L1 cache, in bytes. 9073 9074 'l1-cache-size' 9075 The size of L1 cache, in kilobytes. 9076 9077 'l2-cache-size' 9078 The size of L2 cache, in kilobytes. 9079 9080 'min-insn-to-prefetch-ratio' 9081 The minimum ratio between the number of instructions and the 9082 number of prefetches to enable prefetching in a loop. 9083 9084 'prefetch-min-insn-to-mem-ratio' 9085 The minimum ratio between the number of instructions and the 9086 number of memory references to enable prefetching in a loop. 9087 9088 'use-canonical-types' 9089 Whether the compiler should use the "canonical" type system. 9090 By default, this should always be 1, which uses a more 9091 efficient internal mechanism for comparing types in C++ and 9092 Objective-C++. However, if bugs in the canonical type system 9093 are causing compilation failures, set this value to 0 to 9094 disable canonical types. 9095 9096 'switch-conversion-max-branch-ratio' 9097 Switch initialization conversion refuses to create arrays that 9098 are bigger than 'switch-conversion-max-branch-ratio' times the 9099 number of branches in the switch. 9100 9101 'max-partial-antic-length' 9102 Maximum length of the partial antic set computed during the 9103 tree partial redundancy elimination optimization 9104 ('-ftree-pre') when optimizing at '-O3' and above. For some 9105 sorts of source code the enhanced partial redundancy 9106 elimination optimization can run away, consuming all of the 9107 memory available on the host machine. This parameter sets a 9108 limit on the length of the sets that are computed, which 9109 prevents the runaway behavior. Setting a value of 0 for this 9110 parameter allows an unlimited set length. 9111 9112 'sccvn-max-scc-size' 9113 Maximum size of a strongly connected component (SCC) during 9114 SCCVN processing. If this limit is hit, SCCVN processing for 9115 the whole function is not done and optimizations depending on 9116 it are disabled. The default maximum SCC size is 10000. 9117 9118 'sccvn-max-alias-queries-per-access' 9119 Maximum number of alias-oracle queries we perform when looking 9120 for redundancies for loads and stores. If this limit is hit 9121 the search is aborted and the load or store is not considered 9122 redundant. The number of queries is algorithmically limited 9123 to the number of stores on all paths from the load to the 9124 function entry. The default maxmimum number of queries is 9125 1000. 9126 9127 'ira-max-loops-num' 9128 IRA uses regional register allocation by default. If a 9129 function contains more loops than the number given by this 9130 parameter, only at most the given number of the most 9131 frequently-executed loops form regions for regional register 9132 allocation. The default value of the parameter is 100. 9133 9134 'ira-max-conflict-table-size' 9135 Although IRA uses a sophisticated algorithm to compress the 9136 conflict table, the table can still require excessive amounts 9137 of memory for huge functions. If the conflict table for a 9138 function could be more than the size in MB given by this 9139 parameter, the register allocator instead uses a faster, 9140 simpler, and lower-quality algorithm that does not require 9141 building a pseudo-register conflict table. The default value 9142 of the parameter is 2000. 9143 9144 'ira-loop-reserved-regs' 9145 IRA can be used to evaluate more accurate register pressure in 9146 loops for decisions to move loop invariants (see '-O3'). The 9147 number of available registers reserved for some other purposes 9148 is given by this parameter. The default value of the 9149 parameter is 2, which is the minimal number of registers 9150 needed by typical instructions. This value is the best found 9151 from numerous experiments. 9152 9153 'loop-invariant-max-bbs-in-loop' 9154 Loop invariant motion can be very expensive, both in 9155 compilation time and in amount of needed compile-time memory, 9156 with very large loops. Loops with more basic blocks than this 9157 parameter won't have loop invariant motion optimization 9158 performed on them. The default value of the parameter is 1000 9159 for '-O1' and 10000 for '-O2' and above. 9160 9161 'loop-max-datarefs-for-datadeps' 9162 Building data dapendencies is expensive for very large loops. 9163 This parameter limits the number of data references in loops 9164 that are considered for data dependence analysis. These large 9165 loops are no handled by the optimizations using loop data 9166 dependencies. The default value is 1000. 9167 9168 'max-vartrack-size' 9169 Sets a maximum number of hash table slots to use during 9170 variable tracking dataflow analysis of any function. If this 9171 limit is exceeded with variable tracking at assignments 9172 enabled, analysis for that function is retried without it, 9173 after removing all debug insns from the function. If the 9174 limit is exceeded even without debug insns, var tracking 9175 analysis is completely disabled for the function. Setting the 9176 parameter to zero makes it unlimited. 9177 9178 'max-vartrack-expr-depth' 9179 Sets a maximum number of recursion levels when attempting to 9180 map variable names or debug temporaries to value expressions. 9181 This trades compilation time for more complete debug 9182 information. If this is set too low, value expressions that 9183 are available and could be represented in debug information 9184 may end up not being used; setting this higher may enable the 9185 compiler to find more complex debug expressions, but compile 9186 time and memory use may grow. The default is 12. 9187 9188 'min-nondebug-insn-uid' 9189 Use uids starting at this parameter for nondebug insns. The 9190 range below the parameter is reserved exclusively for debug 9191 insns created by '-fvar-tracking-assignments', but debug insns 9192 may get (non-overlapping) uids above it if the reserved range 9193 is exhausted. 9194 9195 'ipa-sra-ptr-growth-factor' 9196 IPA-SRA replaces a pointer to an aggregate with one or more 9197 new parameters only when their cumulative size is less or 9198 equal to 'ipa-sra-ptr-growth-factor' times the size of the 9199 original pointer parameter. 9200 9201 'tm-max-aggregate-size' 9202 When making copies of thread-local variables in a transaction, 9203 this parameter specifies the size in bytes after which 9204 variables are saved with the logging functions as opposed to 9205 save/restore code sequence pairs. This option only applies 9206 when using '-fgnu-tm'. 9207 9208 'graphite-max-nb-scop-params' 9209 To avoid exponential effects in the Graphite loop transforms, 9210 the number of parameters in a Static Control Part (SCoP) is 9211 bounded. The default value is 10 parameters. A variable 9212 whose value is unknown at compilation time and defined outside 9213 a SCoP is a parameter of the SCoP. 9214 9215 'graphite-max-bbs-per-function' 9216 To avoid exponential effects in the detection of SCoPs, the 9217 size of the functions analyzed by Graphite is bounded. The 9218 default value is 100 basic blocks. 9219 9220 'loop-block-tile-size' 9221 Loop blocking or strip mining transforms, enabled with 9222 '-floop-block' or '-floop-strip-mine', strip mine each loop in 9223 the loop nest by a given number of iterations. The strip 9224 length can be changed using the 'loop-block-tile-size' 9225 parameter. The default value is 51 iterations. 9226 9227 'ipa-cp-value-list-size' 9228 IPA-CP attempts to track all possible values and types passed 9229 to a function's parameter in order to propagate them and 9230 perform devirtualization. 'ipa-cp-value-list-size' is the 9231 maximum number of values and types it stores per one formal 9232 parameter of a function. 9233 9234 'ipa-cp-eval-threshold' 9235 IPA-CP calculates its own score of cloning profitability 9236 heuristics and performs those cloning opportunities with 9237 scores that exceed 'ipa-cp-eval-threshold'. 9238 9239 'ipa-max-agg-items' 9240 IPA-CP is also capable to propagate a number of scalar values 9241 passed in an aggregate. 'ipa-max-agg-items' controls the 9242 maximum number of such values per one parameter. 9243 9244 'ipa-cp-loop-hint-bonus' 9245 When IPA-CP determines that a cloning candidate would make the 9246 number of iterations of a loop known, it adds a bonus of 9247 'ipa-cp-loop-hint-bonus' bonus to the profitability score of 9248 the candidate. 9249 9250 'ipa-cp-array-index-hint-bonus' 9251 When IPA-CP determines that a cloning candidate would make the 9252 index of an array access known, it adds a bonus of 9253 'ipa-cp-array-index-hint-bonus' bonus to the profitability 9254 score of the candidate. 9255 9256 'lto-partitions' 9257 Specify desired number of partitions produced during WHOPR 9258 compilation. The number of partitions should exceed the 9259 number of CPUs used for compilation. The default value is 32. 9260 9261 'lto-minpartition' 9262 Size of minimal partition for WHOPR (in estimated 9263 instructions). This prevents expenses of splitting very small 9264 programs into too many partitions. 9265 9266 'cxx-max-namespaces-for-diagnostic-help' 9267 The maximum number of namespaces to consult for suggestions 9268 when C++ name lookup fails for an identifier. The default is 9269 1000. 9270 9271 'sink-frequency-threshold' 9272 The maximum relative execution frequency (in percents) of the 9273 target block relative to a statement's original block to allow 9274 statement sinking of a statement. Larger numbers result in 9275 more aggressive statement sinking. The default value is 75. 9276 A small positive adjustment is applied for statements with 9277 memory operands as those are even more profitable so sink. 9278 9279 'max-stores-to-sink' 9280 The maximum number of conditional stores paires that can be 9281 sunk. Set to 0 if either vectorization ('-ftree-vectorize') 9282 or if-conversion ('-ftree-loop-if-convert') is disabled. The 9283 default is 2. 9284 9285 'allow-load-data-races' 9286 Allow optimizers to introduce new data races on loads. Set to 9287 1 to allow, otherwise to 0. This option is enabled by default 9288 unless implicitly set by the '-fmemory-model=' option. 9289 9290 'allow-store-data-races' 9291 Allow optimizers to introduce new data races on stores. Set 9292 to 1 to allow, otherwise to 0. This option is enabled by 9293 default unless implicitly set by the '-fmemory-model=' option. 9294 9295 'allow-packed-load-data-races' 9296 Allow optimizers to introduce new data races on packed data 9297 loads. Set to 1 to allow, otherwise to 0. This option is 9298 enabled by default unless implicitly set by the 9299 '-fmemory-model=' option. 9300 9301 'allow-packed-store-data-races' 9302 Allow optimizers to introduce new data races on packed data 9303 stores. Set to 1 to allow, otherwise to 0. This option is 9304 enabled by default unless implicitly set by the 9305 '-fmemory-model=' option. 9306 9307 'case-values-threshold' 9308 The smallest number of different values for which it is best 9309 to use a jump-table instead of a tree of conditional branches. 9310 If the value is 0, use the default for the machine. The 9311 default is 0. 9312 9313 'tree-reassoc-width' 9314 Set the maximum number of instructions executed in parallel in 9315 reassociated tree. This parameter overrides target dependent 9316 heuristics used by default if has non zero value. 9317 9318 'sched-pressure-algorithm' 9319 Choose between the two available implementations of 9320 '-fsched-pressure'. Algorithm 1 is the original 9321 implementation and is the more likely to prevent instructions 9322 from being reordered. Algorithm 2 was designed to be a 9323 compromise between the relatively conservative approach taken 9324 by algorithm 1 and the rather aggressive approach taken by the 9325 default scheduler. It relies more heavily on having a regular 9326 register file and accurate register pressure classes. See 9327 'haifa-sched.c' in the GCC sources for more details. 9328 9329 The default choice depends on the target. 9330 9331 'max-slsr-cand-scan' 9332 Set the maximum number of existing candidates that will be 9333 considered when seeking a basis for a new straight-line 9334 strength reduction candidate. 9335 9336 'asan-globals' 9337 Enable buffer overflow detection for global objects. This 9338 kind of protection is enabled by default if you are using 9339 '-fsanitize=address' option. To disable global objects 9340 protection use '--param asan-globals=0'. 9341 9342 'asan-stack' 9343 Enable buffer overflow detection for stack objects. This kind 9344 of protection is enabled by default when 9345 using'-fsanitize=address'. To disable stack protection use 9346 '--param asan-stack=0' option. 9347 9348 'asan-instrument-reads' 9349 Enable buffer overflow detection for memory reads. This kind 9350 of protection is enabled by default when using 9351 '-fsanitize=address'. To disable memory reads protection use 9352 '--param asan-instrument-reads=0'. 9353 9354 'asan-instrument-writes' 9355 Enable buffer overflow detection for memory writes. This kind 9356 of protection is enabled by default when using 9357 '-fsanitize=address'. To disable memory writes protection use 9358 '--param asan-instrument-writes=0' option. 9359 9360 'asan-memintrin' 9361 Enable detection for built-in functions. This kind of 9362 protection is enabled by default when using 9363 '-fsanitize=address'. To disable built-in functions 9364 protection use '--param asan-memintrin=0'. 9365 9366 'asan-use-after-return' 9367 Enable detection of use-after-return. This kind of protection 9368 is enabled by default when using '-fsanitize=address' option. 9369 To disable use-after-return detection use '--param 9370 asan-use-after-return=0'. 9371 9372 'asan-instrumentation-with-call-threshold' 9373 If number of memory accesses in function being instrumented is 9374 greater or equal to this number, use callbacks instead of 9375 inline checks. E.g. to disable inline code use '--param 9376 asan-instrumentation-with-call-threshold=0'. 9377 9378 9379File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 9380 93813.11 Options Controlling the Preprocessor 9382========================================= 9383 9384These options control the C preprocessor, which is run on each C source 9385file before actual compilation. 9386 9387 If you use the '-E' option, nothing is done except preprocessing. Some 9388of these options make sense only together with '-E' because they cause 9389the preprocessor output to be unsuitable for actual compilation. 9390 9391'-Wp,OPTION' 9392 You can use '-Wp,OPTION' to bypass the compiler driver and pass 9393 OPTION directly through to the preprocessor. If OPTION contains 9394 commas, it is split into multiple options at the commas. However, 9395 many options are modified, translated or interpreted by the 9396 compiler driver before being passed to the preprocessor, and '-Wp' 9397 forcibly bypasses this phase. The preprocessor's direct interface 9398 is undocumented and subject to change, so whenever possible you 9399 should avoid using '-Wp' and let the driver handle the options 9400 instead. 9401 9402'-Xpreprocessor OPTION' 9403 Pass OPTION as an option to the preprocessor. You can use this to 9404 supply system-specific preprocessor options that GCC does not 9405 recognize. 9406 9407 If you want to pass an option that takes an argument, you must use 9408 '-Xpreprocessor' twice, once for the option and once for the 9409 argument. 9410 9411'-no-integrated-cpp' 9412 Perform preprocessing as a separate pass before compilation. By 9413 default, GCC performs preprocessing as an integrated part of input 9414 tokenization and parsing. If this option is provided, the 9415 appropriate language front end ('cc1', 'cc1plus', or 'cc1obj' for 9416 C, C++, and Objective-C, respectively) is instead invoked twice, 9417 once for preprocessing only and once for actual compilation of the 9418 preprocessed input. This option may be useful in conjunction with 9419 the '-B' or '-wrapper' options to specify an alternate preprocessor 9420 or perform additional processing of the program source between 9421 normal preprocessing and compilation. 9422 9423'-D NAME' 9424 Predefine NAME as a macro, with definition '1'. 9425 9426'-D NAME=DEFINITION' 9427 The contents of DEFINITION are tokenized and processed as if they 9428 appeared during translation phase three in a '#define' directive. 9429 In particular, the definition will be truncated by embedded newline 9430 characters. 9431 9432 If you are invoking the preprocessor from a shell or shell-like 9433 program you may need to use the shell's quoting syntax to protect 9434 characters such as spaces that have a meaning in the shell syntax. 9435 9436 If you wish to define a function-like macro on the command line, 9437 write its argument list with surrounding parentheses before the 9438 equals sign (if any). Parentheses are meaningful to most shells, 9439 so you will need to quote the option. With 'sh' and 'csh', 9440 '-D'NAME(ARGS...)=DEFINITION'' works. 9441 9442 '-D' and '-U' options are processed in the order they are given on 9443 the command line. All '-imacros FILE' and '-include FILE' options 9444 are processed after all '-D' and '-U' options. 9445 9446'-U NAME' 9447 Cancel any previous definition of NAME, either built in or provided 9448 with a '-D' option. 9449 9450'-undef' 9451 Do not predefine any system-specific or GCC-specific macros. The 9452 standard predefined macros remain defined. 9453 9454'-I DIR' 9455 Add the directory DIR to the list of directories to be searched for 9456 header files. Directories named by '-I' are searched before the 9457 standard system include directories. If the directory DIR is a 9458 standard system include directory, the option is ignored to ensure 9459 that the default search order for system directories and the 9460 special treatment of system headers are not defeated . If DIR 9461 begins with '=', then the '=' will be replaced by the sysroot 9462 prefix; see '--sysroot' and '-isysroot'. 9463 9464'-o FILE' 9465 Write output to FILE. This is the same as specifying FILE as the 9466 second non-option argument to 'cpp'. 'gcc' has a different 9467 interpretation of a second non-option argument, so you must use 9468 '-o' to specify the output file. 9469 9470'-Wall' 9471 Turns on all optional warnings which are desirable for normal code. 9472 At present this is '-Wcomment', '-Wtrigraphs', '-Wmultichar' and a 9473 warning about integer promotion causing a change of sign in '#if' 9474 expressions. Note that many of the preprocessor's warnings are on 9475 by default and have no options to control them. 9476 9477'-Wcomment' 9478'-Wcomments' 9479 Warn whenever a comment-start sequence '/*' appears in a '/*' 9480 comment, or whenever a backslash-newline appears in a '//' comment. 9481 (Both forms have the same effect.) 9482 9483'-Wtrigraphs' 9484 Most trigraphs in comments cannot affect the meaning of the 9485 program. However, a trigraph that would form an escaped newline 9486 ('??/' at the end of a line) can, by changing where the comment 9487 begins or ends. Therefore, only trigraphs that would form escaped 9488 newlines produce warnings inside a comment. 9489 9490 This option is implied by '-Wall'. If '-Wall' is not given, this 9491 option is still enabled unless trigraphs are enabled. To get 9492 trigraph conversion without warnings, but get the other '-Wall' 9493 warnings, use '-trigraphs -Wall -Wno-trigraphs'. 9494 9495'-Wtraditional' 9496 Warn about certain constructs that behave differently in 9497 traditional and ISO C. Also warn about ISO C constructs that have 9498 no traditional C equivalent, and problematic constructs which 9499 should be avoided. 9500 9501'-Wundef' 9502 Warn whenever an identifier which is not a macro is encountered in 9503 an '#if' directive, outside of 'defined'. Such identifiers are 9504 replaced with zero. 9505 9506'-Wunused-macros' 9507 Warn about macros defined in the main file that are unused. A 9508 macro is "used" if it is expanded or tested for existence at least 9509 once. The preprocessor will also warn if the macro has not been 9510 used at the time it is redefined or undefined. 9511 9512 Built-in macros, macros defined on the command line, and macros 9513 defined in include files are not warned about. 9514 9515 _Note:_ If a macro is actually used, but only used in skipped 9516 conditional blocks, then CPP will report it as unused. To avoid 9517 the warning in such a case, you might improve the scope of the 9518 macro's definition by, for example, moving it into the first 9519 skipped block. Alternatively, you could provide a dummy use with 9520 something like: 9521 9522 #if defined the_macro_causing_the_warning 9523 #endif 9524 9525'-Wendif-labels' 9526 Warn whenever an '#else' or an '#endif' are followed by text. This 9527 usually happens in code of the form 9528 9529 #if FOO 9530 ... 9531 #else FOO 9532 ... 9533 #endif FOO 9534 9535 The second and third 'FOO' should be in comments, but often are not 9536 in older programs. This warning is on by default. 9537 9538'-Werror' 9539 Make all warnings into hard errors. Source code which triggers 9540 warnings will be rejected. 9541 9542'-Wsystem-headers' 9543 Issue warnings for code in system headers. These are normally 9544 unhelpful in finding bugs in your own code, therefore suppressed. 9545 If you are responsible for the system library, you may want to see 9546 them. 9547 9548'-w' 9549 Suppress all warnings, including those which GNU CPP issues by 9550 default. 9551 9552'-pedantic' 9553 Issue all the mandatory diagnostics listed in the C standard. Some 9554 of them are left out by default, since they trigger frequently on 9555 harmless code. 9556 9557'-pedantic-errors' 9558 Issue all the mandatory diagnostics, and make all mandatory 9559 diagnostics into errors. This includes mandatory diagnostics that 9560 GCC issues without '-pedantic' but treats as warnings. 9561 9562'-M' 9563 Instead of outputting the result of preprocessing, output a rule 9564 suitable for 'make' describing the dependencies of the main source 9565 file. The preprocessor outputs one 'make' rule containing the 9566 object file name for that source file, a colon, and the names of 9567 all the included files, including those coming from '-include' or 9568 '-imacros' command line options. 9569 9570 Unless specified explicitly (with '-MT' or '-MQ'), the object file 9571 name consists of the name of the source file with any suffix 9572 replaced with object file suffix and with any leading directory 9573 parts removed. If there are many included files then the rule is 9574 split into several lines using '\'-newline. The rule has no 9575 commands. 9576 9577 This option does not suppress the preprocessor's debug output, such 9578 as '-dM'. To avoid mixing such debug output with the dependency 9579 rules you should explicitly specify the dependency output file with 9580 '-MF', or use an environment variable like 'DEPENDENCIES_OUTPUT' 9581 (*note Environment Variables::). Debug output will still be sent 9582 to the regular output stream as normal. 9583 9584 Passing '-M' to the driver implies '-E', and suppresses warnings 9585 with an implicit '-w'. 9586 9587'-MM' 9588 Like '-M' but do not mention header files that are found in system 9589 header directories, nor header files that are included, directly or 9590 indirectly, from such a header. 9591 9592 This implies that the choice of angle brackets or double quotes in 9593 an '#include' directive does not in itself determine whether that 9594 header will appear in '-MM' dependency output. This is a slight 9595 change in semantics from GCC versions 3.0 and earlier. 9596 9597'-MF FILE' 9598 When used with '-M' or '-MM', specifies a file to write the 9599 dependencies to. If no '-MF' switch is given the preprocessor 9600 sends the rules to the same place it would have sent preprocessed 9601 output. 9602 9603 When used with the driver options '-MD' or '-MMD', '-MF' overrides 9604 the default dependency output file. 9605 9606'-MG' 9607 In conjunction with an option such as '-M' requesting dependency 9608 generation, '-MG' assumes missing header files are generated files 9609 and adds them to the dependency list without raising an error. The 9610 dependency filename is taken directly from the '#include' directive 9611 without prepending any path. '-MG' also suppresses preprocessed 9612 output, as a missing header file renders this useless. 9613 9614 This feature is used in automatic updating of makefiles. 9615 9616'-MP' 9617 This option instructs CPP to add a phony target for each dependency 9618 other than the main file, causing each to depend on nothing. These 9619 dummy rules work around errors 'make' gives if you remove header 9620 files without updating the 'Makefile' to match. 9621 9622 This is typical output: 9623 9624 test.o: test.c test.h 9625 9626 test.h: 9627 9628'-MT TARGET' 9629 9630 Change the target of the rule emitted by dependency generation. By 9631 default CPP takes the name of the main input file, deletes any 9632 directory components and any file suffix such as '.c', and appends 9633 the platform's usual object suffix. The result is the target. 9634 9635 An '-MT' option will set the target to be exactly the string you 9636 specify. If you want multiple targets, you can specify them as a 9637 single argument to '-MT', or use multiple '-MT' options. 9638 9639 For example, '-MT '$(objpfx)foo.o'' might give 9640 9641 $(objpfx)foo.o: foo.c 9642 9643'-MQ TARGET' 9644 9645 Same as '-MT', but it quotes any characters which are special to 9646 Make. '-MQ '$(objpfx)foo.o'' gives 9647 9648 $$(objpfx)foo.o: foo.c 9649 9650 The default target is automatically quoted, as if it were given 9651 with '-MQ'. 9652 9653'-MD' 9654 '-MD' is equivalent to '-M -MF FILE', except that '-E' is not 9655 implied. The driver determines FILE based on whether an '-o' 9656 option is given. If it is, the driver uses its argument but with a 9657 suffix of '.d', otherwise it takes the name of the input file, 9658 removes any directory components and suffix, and applies a '.d' 9659 suffix. 9660 9661 If '-MD' is used in conjunction with '-E', any '-o' switch is 9662 understood to specify the dependency output file (*note -MF: 9663 dashMF.), but if used without '-E', each '-o' is understood to 9664 specify a target object file. 9665 9666 Since '-E' is not implied, '-MD' can be used to generate a 9667 dependency output file as a side-effect of the compilation process. 9668 9669'-MMD' 9670 Like '-MD' except mention only user header files, not system header 9671 files. 9672 9673'-fpch-deps' 9674 When using precompiled headers (*note Precompiled Headers::), this 9675 flag will cause the dependency-output flags to also list the files 9676 from the precompiled header's dependencies. If not specified only 9677 the precompiled header would be listed and not the files that were 9678 used to create it because those files are not consulted when a 9679 precompiled header is used. 9680 9681'-fpch-preprocess' 9682 This option allows use of a precompiled header (*note Precompiled 9683 Headers::) together with '-E'. It inserts a special '#pragma', 9684 '#pragma GCC pch_preprocess "FILENAME"' in the output to mark the 9685 place where the precompiled header was found, and its FILENAME. 9686 When '-fpreprocessed' is in use, GCC recognizes this '#pragma' and 9687 loads the PCH. 9688 9689 This option is off by default, because the resulting preprocessed 9690 output is only really suitable as input to GCC. It is switched on 9691 by '-save-temps'. 9692 9693 You should not write this '#pragma' in your own code, but it is 9694 safe to edit the filename if the PCH file is available in a 9695 different location. The filename may be absolute or it may be 9696 relative to GCC's current directory. 9697 9698'-x c' 9699'-x c++' 9700'-x objective-c' 9701'-x assembler-with-cpp' 9702 Specify the source language: C, C++, Objective-C, or assembly. 9703 This has nothing to do with standards conformance or extensions; it 9704 merely selects which base syntax to expect. If you give none of 9705 these options, cpp will deduce the language from the extension of 9706 the source file: '.c', '.cc', '.m', or '.S'. Some other common 9707 extensions for C++ and assembly are also recognized. If cpp does 9708 not recognize the extension, it will treat the file as C; this is 9709 the most generic mode. 9710 9711 _Note:_ Previous versions of cpp accepted a '-lang' option which 9712 selected both the language and the standards conformance level. 9713 This option has been removed, because it conflicts with the '-l' 9714 option. 9715 9716'-std=STANDARD' 9717'-ansi' 9718 Specify the standard to which the code should conform. Currently 9719 CPP knows about C and C++ standards; others may be added in the 9720 future. 9721 9722 STANDARD may be one of: 9723 'c90' 9724 'c89' 9725 'iso9899:1990' 9726 The ISO C standard from 1990. 'c90' is the customary 9727 shorthand for this version of the standard. 9728 9729 The '-ansi' option is equivalent to '-std=c90'. 9730 9731 'iso9899:199409' 9732 The 1990 C standard, as amended in 1994. 9733 9734 'iso9899:1999' 9735 'c99' 9736 'iso9899:199x' 9737 'c9x' 9738 The revised ISO C standard, published in December 1999. 9739 Before publication, this was known as C9X. 9740 9741 'iso9899:2011' 9742 'c11' 9743 'c1x' 9744 The revised ISO C standard, published in December 2011. 9745 Before publication, this was known as C1X. 9746 9747 'gnu90' 9748 'gnu89' 9749 The 1990 C standard plus GNU extensions. This is the default. 9750 9751 'gnu99' 9752 'gnu9x' 9753 The 1999 C standard plus GNU extensions. 9754 9755 'gnu11' 9756 'gnu1x' 9757 The 2011 C standard plus GNU extensions. 9758 9759 'c++98' 9760 The 1998 ISO C++ standard plus amendments. 9761 9762 'gnu++98' 9763 The same as '-std=c++98' plus GNU extensions. This is the 9764 default for C++ code. 9765 9766'-I-' 9767 Split the include path. Any directories specified with '-I' 9768 options before '-I-' are searched only for headers requested with 9769 '#include "FILE"'; they are not searched for '#include <FILE>'. If 9770 additional directories are specified with '-I' options after the 9771 '-I-', those directories are searched for all '#include' 9772 directives. 9773 9774 In addition, '-I-' inhibits the use of the directory of the current 9775 file directory as the first search directory for '#include "FILE"'. 9776 This option has been deprecated. 9777 9778'-nostdinc' 9779 Do not search the standard system directories for header files. 9780 Only the directories you have specified with '-I' options (and the 9781 directory of the current file, if appropriate) are searched. 9782 9783'-nostdinc++' 9784 Do not search for header files in the C++-specific standard 9785 directories, but do still search the other standard directories. 9786 (This option is used when building the C++ library.) 9787 9788'-include FILE' 9789 Process FILE as if '#include "file"' appeared as the first line of 9790 the primary source file. However, the first directory searched for 9791 FILE is the preprocessor's working directory _instead of_ the 9792 directory containing the main source file. If not found there, it 9793 is searched for in the remainder of the '#include "..."' search 9794 chain as normal. 9795 9796 If multiple '-include' options are given, the files are included in 9797 the order they appear on the command line. 9798 9799'-imacros FILE' 9800 Exactly like '-include', except that any output produced by 9801 scanning FILE is thrown away. Macros it defines remain defined. 9802 This allows you to acquire all the macros from a header without 9803 also processing its declarations. 9804 9805 All files specified by '-imacros' are processed before all files 9806 specified by '-include'. 9807 9808'-idirafter DIR' 9809 Search DIR for header files, but do it _after_ all directories 9810 specified with '-I' and the standard system directories have been 9811 exhausted. DIR is treated as a system include directory. If DIR 9812 begins with '=', then the '=' will be replaced by the sysroot 9813 prefix; see '--sysroot' and '-isysroot'. 9814 9815'-iprefix PREFIX' 9816 Specify PREFIX as the prefix for subsequent '-iwithprefix' options. 9817 If the prefix represents a directory, you should include the final 9818 '/'. 9819 9820'-iwithprefix DIR' 9821'-iwithprefixbefore DIR' 9822 Append DIR to the prefix specified previously with '-iprefix', and 9823 add the resulting directory to the include search path. 9824 '-iwithprefixbefore' puts it in the same place '-I' would; 9825 '-iwithprefix' puts it where '-idirafter' would. 9826 9827'-isysroot DIR' 9828 This option is like the '--sysroot' option, but applies only to 9829 header files (except for Darwin targets, where it applies to both 9830 header files and libraries). See the '--sysroot' option for more 9831 information. 9832 9833'-imultilib DIR' 9834 Use DIR as a subdirectory of the directory containing 9835 target-specific C++ headers. 9836 9837'-isystem DIR' 9838 Search DIR for header files, after all directories specified by 9839 '-I' but before the standard system directories. Mark it as a 9840 system directory, so that it gets the same special treatment as is 9841 applied to the standard system directories. If DIR begins with 9842 '=', then the '=' will be replaced by the sysroot prefix; see 9843 '--sysroot' and '-isysroot'. 9844 9845'-iquote DIR' 9846 Search DIR only for header files requested with '#include "FILE"'; 9847 they are not searched for '#include <FILE>', before all directories 9848 specified by '-I' and before the standard system directories. If 9849 DIR begins with '=', then the '=' will be replaced by the sysroot 9850 prefix; see '--sysroot' and '-isysroot'. 9851 9852'-fdirectives-only' 9853 When preprocessing, handle directives, but do not expand macros. 9854 9855 The option's behavior depends on the '-E' and '-fpreprocessed' 9856 options. 9857 9858 With '-E', preprocessing is limited to the handling of directives 9859 such as '#define', '#ifdef', and '#error'. Other preprocessor 9860 operations, such as macro expansion and trigraph conversion are not 9861 performed. In addition, the '-dD' option is implicitly enabled. 9862 9863 With '-fpreprocessed', predefinition of command line and most 9864 builtin macros is disabled. Macros such as '__LINE__', which are 9865 contextually dependent, are handled normally. This enables 9866 compilation of files previously preprocessed with '-E 9867 -fdirectives-only'. 9868 9869 With both '-E' and '-fpreprocessed', the rules for '-fpreprocessed' 9870 take precedence. This enables full preprocessing of files 9871 previously preprocessed with '-E -fdirectives-only'. 9872 9873'-fdollars-in-identifiers' 9874 Accept '$' in identifiers. 9875 9876'-fextended-identifiers' 9877 Accept universal character names in identifiers. This option is 9878 experimental; in a future version of GCC, it will be enabled by 9879 default for C99 and C++. 9880 9881'-fno-canonical-system-headers' 9882 When preprocessing, do not shorten system header paths with 9883 canonicalization. 9884 9885'-fpreprocessed' 9886 Indicate to the preprocessor that the input file has already been 9887 preprocessed. This suppresses things like macro expansion, 9888 trigraph conversion, escaped newline splicing, and processing of 9889 most directives. The preprocessor still recognizes and removes 9890 comments, so that you can pass a file preprocessed with '-C' to the 9891 compiler without problems. In this mode the integrated 9892 preprocessor is little more than a tokenizer for the front ends. 9893 9894 '-fpreprocessed' is implicit if the input file has one of the 9895 extensions '.i', '.ii' or '.mi'. These are the extensions that GCC 9896 uses for preprocessed files created by '-save-temps'. 9897 9898'-ftabstop=WIDTH' 9899 Set the distance between tab stops. This helps the preprocessor 9900 report correct column numbers in warnings or errors, even if tabs 9901 appear on the line. If the value is less than 1 or greater than 9902 100, the option is ignored. The default is 8. 9903 9904'-fdebug-cpp' 9905 This option is only useful for debugging GCC. When used with '-E', 9906 dumps debugging information about location maps. Every token in 9907 the output is preceded by the dump of the map its location belongs 9908 to. The dump of the map holding the location of a token would be: 9909 {'P':/file/path;'F':/includer/path;'L':LINE_NUM;'C':COL_NUM;'S':SYSTEM_HEADER_P;'M':MAP_ADDRESS;'E':MACRO_EXPANSION_P,'loc':LOCATION} 9910 9911 When used without '-E', this option has no effect. 9912 9913'-ftrack-macro-expansion[=LEVEL]' 9914 Track locations of tokens across macro expansions. This allows the 9915 compiler to emit diagnostic about the current macro expansion stack 9916 when a compilation error occurs in a macro expansion. Using this 9917 option makes the preprocessor and the compiler consume more memory. 9918 The LEVEL parameter can be used to choose the level of precision of 9919 token location tracking thus decreasing the memory consumption if 9920 necessary. Value '0' of LEVEL de-activates this option just as if 9921 no '-ftrack-macro-expansion' was present on the command line. 9922 Value '1' tracks tokens locations in a degraded mode for the sake 9923 of minimal memory overhead. In this mode all tokens resulting from 9924 the expansion of an argument of a function-like macro have the same 9925 location. Value '2' tracks tokens locations completely. This 9926 value is the most memory hungry. When this option is given no 9927 argument, the default parameter value is '2'. 9928 9929 Note that -ftrack-macro-expansion=2 is activated by default. 9930 9931'-fexec-charset=CHARSET' 9932 Set the execution character set, used for string and character 9933 constants. The default is UTF-8. CHARSET can be any encoding 9934 supported by the system's 'iconv' library routine. 9935 9936'-fwide-exec-charset=CHARSET' 9937 Set the wide execution character set, used for wide string and 9938 character constants. The default is UTF-32 or UTF-16, whichever 9939 corresponds to the width of 'wchar_t'. As with '-fexec-charset', 9940 CHARSET can be any encoding supported by the system's 'iconv' 9941 library routine; however, you will have problems with encodings 9942 that do not fit exactly in 'wchar_t'. 9943 9944'-finput-charset=CHARSET' 9945 Set the input character set, used for translation from the 9946 character set of the input file to the source character set used by 9947 GCC. If the locale does not specify, or GCC cannot get this 9948 information from the locale, the default is UTF-8. This can be 9949 overridden by either the locale or this command line option. 9950 Currently the command line option takes precedence if there's a 9951 conflict. CHARSET can be any encoding supported by the system's 9952 'iconv' library routine. 9953 9954'-fworking-directory' 9955 Enable generation of linemarkers in the preprocessor output that 9956 will let the compiler know the current working directory at the 9957 time of preprocessing. When this option is enabled, the 9958 preprocessor will emit, after the initial linemarker, a second 9959 linemarker with the current working directory followed by two 9960 slashes. GCC will use this directory, when it's present in the 9961 preprocessed input, as the directory emitted as the current working 9962 directory in some debugging information formats. This option is 9963 implicitly enabled if debugging information is enabled, but this 9964 can be inhibited with the negated form '-fno-working-directory'. 9965 If the '-P' flag is present in the command line, this option has no 9966 effect, since no '#line' directives are emitted whatsoever. 9967 9968'-fno-show-column' 9969 Do not print column numbers in diagnostics. This may be necessary 9970 if diagnostics are being scanned by a program that does not 9971 understand the column numbers, such as 'dejagnu'. 9972 9973'-A PREDICATE=ANSWER' 9974 Make an assertion with the predicate PREDICATE and answer ANSWER. 9975 This form is preferred to the older form '-A PREDICATE(ANSWER)', 9976 which is still supported, because it does not use shell special 9977 characters. 9978 9979'-A -PREDICATE=ANSWER' 9980 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 9981 9982'-dCHARS' 9983 CHARS is a sequence of one or more of the following characters, and 9984 must not be preceded by a space. Other characters are interpreted 9985 by the compiler proper, or reserved for future versions of GCC, and 9986 so are silently ignored. If you specify characters whose behavior 9987 conflicts, the result is undefined. 9988 9989 'M' 9990 Instead of the normal output, generate a list of '#define' 9991 directives for all the macros defined during the execution of 9992 the preprocessor, including predefined macros. This gives you 9993 a way of finding out what is predefined in your version of the 9994 preprocessor. Assuming you have no file 'foo.h', the command 9995 9996 touch foo.h; cpp -dM foo.h 9997 9998 will show all the predefined macros. 9999 10000 If you use '-dM' without the '-E' option, '-dM' is interpreted 10001 as a synonym for '-fdump-rtl-mach'. *Note (gcc)Debugging 10002 Options::. 10003 10004 'D' 10005 Like 'M' except in two respects: it does _not_ include the 10006 predefined macros, and it outputs _both_ the '#define' 10007 directives and the result of preprocessing. Both kinds of 10008 output go to the standard output file. 10009 10010 'N' 10011 Like 'D', but emit only the macro names, not their expansions. 10012 10013 'I' 10014 Output '#include' directives in addition to the result of 10015 preprocessing. 10016 10017 'U' 10018 Like 'D' except that only macros that are expanded, or whose 10019 definedness is tested in preprocessor directives, are output; 10020 the output is delayed until the use or test of the macro; and 10021 '#undef' directives are also output for macros tested but 10022 undefined at the time. 10023 10024'-P' 10025 Inhibit generation of linemarkers in the output from the 10026 preprocessor. This might be useful when running the preprocessor 10027 on something that is not C code, and will be sent to a program 10028 which might be confused by the linemarkers. 10029 10030'-C' 10031 Do not discard comments. All comments are passed through to the 10032 output file, except for comments in processed directives, which are 10033 deleted along with the directive. 10034 10035 You should be prepared for side effects when using '-C'; it causes 10036 the preprocessor to treat comments as tokens in their own right. 10037 For example, comments appearing at the start of what would be a 10038 directive line have the effect of turning that line into an 10039 ordinary source line, since the first token on the line is no 10040 longer a '#'. 10041 10042'-CC' 10043 Do not discard comments, including during macro expansion. This is 10044 like '-C', except that comments contained within macros are also 10045 passed through to the output file where the macro is expanded. 10046 10047 In addition to the side-effects of the '-C' option, the '-CC' 10048 option causes all C++-style comments inside a macro to be converted 10049 to C-style comments. This is to prevent later use of that macro 10050 from inadvertently commenting out the remainder of the source line. 10051 10052 The '-CC' option is generally used to support lint comments. 10053 10054'-traditional-cpp' 10055 Try to imitate the behavior of old-fashioned C preprocessors, as 10056 opposed to ISO C preprocessors. 10057 10058'-trigraphs' 10059 Process trigraph sequences. These are three-character sequences, 10060 all starting with '??', that are defined by ISO C to stand for 10061 single characters. For example, '??/' stands for '\', so ''??/n'' 10062 is a character constant for a newline. By default, GCC ignores 10063 trigraphs, but in standard-conforming modes it converts them. See 10064 the '-std' and '-ansi' options. 10065 10066 The nine trigraphs and their replacements are 10067 10068 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 10069 Replacement: [ ] { } # \ ^ | ~ 10070 10071'-remap' 10072 Enable special code to work around file systems which only permit 10073 very short file names, such as MS-DOS. 10074 10075'--help' 10076'--target-help' 10077 Print text describing all the command line options instead of 10078 preprocessing anything. 10079 10080'-v' 10081 Verbose mode. Print out GNU CPP's version number at the beginning 10082 of execution, and report the final form of the include path. 10083 10084'-H' 10085 Print the name of each header file used, in addition to other 10086 normal activities. Each name is indented to show how deep in the 10087 '#include' stack it is. Precompiled header files are also printed, 10088 even if they are found to be invalid; an invalid precompiled header 10089 file is printed with '...x' and a valid one with '...!' . 10090 10091'-version' 10092'--version' 10093 Print out GNU CPP's version number. With one dash, proceed to 10094 preprocess as normal. With two dashes, exit immediately. 10095 10096 10097File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 10098 100993.12 Passing Options to the Assembler 10100===================================== 10101 10102You can pass options to the assembler. 10103 10104'-Wa,OPTION' 10105 Pass OPTION as an option to the assembler. If OPTION contains 10106 commas, it is split into multiple options at the commas. 10107 10108'-Xassembler OPTION' 10109 Pass OPTION as an option to the assembler. You can use this to 10110 supply system-specific assembler options that GCC does not 10111 recognize. 10112 10113 If you want to pass an option that takes an argument, you must use 10114 '-Xassembler' twice, once for the option and once for the argument. 10115 10116 10117File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 10118 101193.13 Options for Linking 10120======================== 10121 10122These options come into play when the compiler links object files into 10123an executable output file. They are meaningless if the compiler is not 10124doing a link step. 10125 10126'OBJECT-FILE-NAME' 10127 A file name that does not end in a special recognized suffix is 10128 considered to name an object file or library. (Object files are 10129 distinguished from libraries by the linker according to the file 10130 contents.) If linking is done, these object files are used as 10131 input to the linker. 10132 10133'-c' 10134'-S' 10135'-E' 10136 If any of these options is used, then the linker is not run, and 10137 object file names should not be used as arguments. *Note Overall 10138 Options::. 10139 10140'-lLIBRARY' 10141'-l LIBRARY' 10142 Search the library named LIBRARY when linking. (The second 10143 alternative with the library as a separate argument is only for 10144 POSIX compliance and is not recommended.) 10145 10146 It makes a difference where in the command you write this option; 10147 the linker searches and processes libraries and object files in the 10148 order they are specified. Thus, 'foo.o -lz bar.o' searches library 10149 'z' after file 'foo.o' but before 'bar.o'. If 'bar.o' refers to 10150 functions in 'z', those functions may not be loaded. 10151 10152 The linker searches a standard list of directories for the library, 10153 which is actually a file named 'libLIBRARY.a'. The linker then 10154 uses this file as if it had been specified precisely by name. 10155 10156 The directories searched include several standard system 10157 directories plus any that you specify with '-L'. 10158 10159 Normally the files found this way are library files--archive files 10160 whose members are object files. The linker handles an archive file 10161 by scanning through it for members which define symbols that have 10162 so far been referenced but not defined. But if the file that is 10163 found is an ordinary object file, it is linked in the usual 10164 fashion. The only difference between using an '-l' option and 10165 specifying a file name is that '-l' surrounds LIBRARY with 'lib' 10166 and '.a' and searches several directories. 10167 10168'-lobjc' 10169 You need this special case of the '-l' option in order to link an 10170 Objective-C or Objective-C++ program. 10171 10172'-nostartfiles' 10173 Do not use the standard system startup files when linking. The 10174 standard system libraries are used normally, unless '-nostdlib' or 10175 '-nodefaultlibs' is used. 10176 10177'-nodefaultlibs' 10178 Do not use the standard system libraries when linking. Only the 10179 libraries you specify are passed to the linker, and options 10180 specifying linkage of the system libraries, such as 10181 '-static-libgcc' or '-shared-libgcc', are ignored. The standard 10182 startup files are used normally, unless '-nostartfiles' is used. 10183 10184 The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and 10185 'memmove'. These entries are usually resolved by entries in libc. 10186 These entry points should be supplied through some other mechanism 10187 when this option is specified. 10188 10189'-nostdlib' 10190 Do not use the standard system startup files or libraries when 10191 linking. No startup files and only the libraries you specify are 10192 passed to the linker, and options specifying linkage of the system 10193 libraries, such as '-static-libgcc' or '-shared-libgcc', are 10194 ignored. 10195 10196 The compiler may generate calls to 'memcmp', 'memset', 'memcpy' and 10197 'memmove'. These entries are usually resolved by entries in libc. 10198 These entry points should be supplied through some other mechanism 10199 when this option is specified. 10200 10201 One of the standard libraries bypassed by '-nostdlib' and 10202 '-nodefaultlibs' is 'libgcc.a', a library of internal subroutines 10203 which GCC uses to overcome shortcomings of particular machines, or 10204 special needs for some languages. (*Note Interfacing to GCC 10205 Output: (gccint)Interface, for more discussion of 'libgcc.a'.) In 10206 most cases, you need 'libgcc.a' even when you want to avoid other 10207 standard libraries. In other words, when you specify '-nostdlib' 10208 or '-nodefaultlibs' you should usually specify '-lgcc' as well. 10209 This ensures that you have no unresolved references to internal GCC 10210 library subroutines. (An example of such an internal subroutine is 10211 '__main', used to ensure C++ constructors are called; *note 10212 'collect2': (gccint)Collect2.) 10213 10214'-pie' 10215 Produce a position independent executable on targets that support 10216 it. For predictable results, you must also specify the same set of 10217 options used for compilation ('-fpie', '-fPIE', or model 10218 suboptions) when you specify this linker option. 10219 10220'-rdynamic' 10221 Pass the flag '-export-dynamic' to the ELF linker, on targets that 10222 support it. This instructs the linker to add all symbols, not only 10223 used ones, to the dynamic symbol table. This option is needed for 10224 some uses of 'dlopen' or to allow obtaining backtraces from within 10225 a program. 10226 10227'-s' 10228 Remove all symbol table and relocation information from the 10229 executable. 10230 10231'-static' 10232 On systems that support dynamic linking, this prevents linking with 10233 the shared libraries. On other systems, this option has no effect. 10234 10235'-shared' 10236 Produce a shared object which can then be linked with other objects 10237 to form an executable. Not all systems support this option. For 10238 predictable results, you must also specify the same set of options 10239 used for compilation ('-fpic', '-fPIC', or model suboptions) when 10240 you specify this linker option.(1) 10241 10242'-shared-libgcc' 10243'-static-libgcc' 10244 On systems that provide 'libgcc' as a shared library, these options 10245 force the use of either the shared or static version, respectively. 10246 If no shared version of 'libgcc' was built when the compiler was 10247 configured, these options have no effect. 10248 10249 There are several situations in which an application should use the 10250 shared 'libgcc' instead of the static version. The most common of 10251 these is when the application wishes to throw and catch exceptions 10252 across different shared libraries. In that case, each of the 10253 libraries as well as the application itself should use the shared 10254 'libgcc'. 10255 10256 Therefore, the G++ and GCJ drivers automatically add 10257 '-shared-libgcc' whenever you build a shared library or a main 10258 executable, because C++ and Java programs typically use exceptions, 10259 so this is the right thing to do. 10260 10261 If, instead, you use the GCC driver to create shared libraries, you 10262 may find that they are not always linked with the shared 'libgcc'. 10263 If GCC finds, at its configuration time, that you have a non-GNU 10264 linker or a GNU linker that does not support option 10265 '--eh-frame-hdr', it links the shared version of 'libgcc' into 10266 shared libraries by default. Otherwise, it takes advantage of the 10267 linker and optimizes away the linking with the shared version of 10268 'libgcc', linking with the static version of libgcc by default. 10269 This allows exceptions to propagate through such shared libraries, 10270 without incurring relocation costs at library load time. 10271 10272 However, if a library or main executable is supposed to throw or 10273 catch exceptions, you must link it using the G++ or GCJ driver, as 10274 appropriate for the languages used in the program, or using the 10275 option '-shared-libgcc', such that it is linked with the shared 10276 'libgcc'. 10277 10278'-static-libasan' 10279 When the '-fsanitize=address' option is used to link a program, the 10280 GCC driver automatically links against 'libasan'. If 'libasan' is 10281 available as a shared library, and the '-static' option is not 10282 used, then this links against the shared version of 'libasan'. The 10283 '-static-libasan' option directs the GCC driver to link 'libasan' 10284 statically, without necessarily linking other libraries statically. 10285 10286'-static-libtsan' 10287 When the '-fsanitize=thread' option is used to link a program, the 10288 GCC driver automatically links against 'libtsan'. If 'libtsan' is 10289 available as a shared library, and the '-static' option is not 10290 used, then this links against the shared version of 'libtsan'. The 10291 '-static-libtsan' option directs the GCC driver to link 'libtsan' 10292 statically, without necessarily linking other libraries statically. 10293 10294'-static-liblsan' 10295 When the '-fsanitize=leak' option is used to link a program, the 10296 GCC driver automatically links against 'liblsan'. If 'liblsan' is 10297 available as a shared library, and the '-static' option is not 10298 used, then this links against the shared version of 'liblsan'. The 10299 '-static-liblsan' option directs the GCC driver to link 'liblsan' 10300 statically, without necessarily linking other libraries statically. 10301 10302'-static-libubsan' 10303 When the '-fsanitize=undefined' option is used to link a program, 10304 the GCC driver automatically links against 'libubsan'. If 10305 'libubsan' is available as a shared library, and the '-static' 10306 option is not used, then this links against the shared version of 10307 'libubsan'. The '-static-libubsan' option directs the GCC driver 10308 to link 'libubsan' statically, without necessarily linking other 10309 libraries statically. 10310 10311'-static-libstdc++' 10312 When the 'g++' program is used to link a C++ program, it normally 10313 automatically links against 'libstdc++'. If 'libstdc++' is 10314 available as a shared library, and the '-static' option is not 10315 used, then this links against the shared version of 'libstdc++'. 10316 That is normally fine. However, it is sometimes useful to freeze 10317 the version of 'libstdc++' used by the program without going all 10318 the way to a fully static link. The '-static-libstdc++' option 10319 directs the 'g++' driver to link 'libstdc++' statically, without 10320 necessarily linking other libraries statically. 10321 10322'-symbolic' 10323 Bind references to global symbols when building a shared object. 10324 Warn about any unresolved references (unless overridden by the link 10325 editor option '-Xlinker -z -Xlinker defs'). Only a few systems 10326 support this option. 10327 10328'-T SCRIPT' 10329 Use SCRIPT as the linker script. This option is supported by most 10330 systems using the GNU linker. On some targets, such as bare-board 10331 targets without an operating system, the '-T' option may be 10332 required when linking to avoid references to undefined symbols. 10333 10334'-Xlinker OPTION' 10335 Pass OPTION as an option to the linker. You can use this to supply 10336 system-specific linker options that GCC does not recognize. 10337 10338 If you want to pass an option that takes a separate argument, you 10339 must use '-Xlinker' twice, once for the option and once for the 10340 argument. For example, to pass '-assert definitions', you must 10341 write '-Xlinker -assert -Xlinker definitions'. It does not work to 10342 write '-Xlinker "-assert definitions"', because this passes the 10343 entire string as a single argument, which is not what the linker 10344 expects. 10345 10346 When using the GNU linker, it is usually more convenient to pass 10347 arguments to linker options using the 'OPTION=VALUE' syntax than as 10348 separate arguments. For example, you can specify '-Xlinker 10349 -Map=output.map' rather than '-Xlinker -Map -Xlinker output.map'. 10350 Other linkers may not support this syntax for command-line options. 10351 10352'-Wl,OPTION' 10353 Pass OPTION as an option to the linker. If OPTION contains commas, 10354 it is split into multiple options at the commas. You can use this 10355 syntax to pass an argument to the option. For example, 10356 '-Wl,-Map,output.map' passes '-Map output.map' to the linker. When 10357 using the GNU linker, you can also get the same effect with 10358 '-Wl,-Map=output.map'. 10359 10360'-u SYMBOL' 10361 Pretend the symbol SYMBOL is undefined, to force linking of library 10362 modules to define it. You can use '-u' multiple times with 10363 different symbols to force loading of additional library modules. 10364 10365 ---------- Footnotes ---------- 10366 10367 (1) On some systems, 'gcc -shared' needs to build supplementary stub 10368code for constructors to work. On multi-libbed systems, 'gcc -shared' 10369must select the correct support libraries to link against. Failing to 10370supply the correct flags may lead to subtle defects. Supplying them in 10371cases where they are not necessary is innocuous. 10372 10373 10374File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 10375 103763.14 Options for Directory Search 10377================================= 10378 10379These options specify directories to search for header files, for 10380libraries and for parts of the compiler: 10381 10382'-IDIR' 10383 Add the directory DIR to the head of the list of directories to be 10384 searched for header files. This can be used to override a system 10385 header file, substituting your own version, since these directories 10386 are searched before the system header file directories. However, 10387 you should not use this option to add directories that contain 10388 vendor-supplied system header files (use '-isystem' for that). If 10389 you use more than one '-I' option, the directories are scanned in 10390 left-to-right order; the standard system directories come after. 10391 10392 If a standard system include directory, or a directory specified 10393 with '-isystem', is also specified with '-I', the '-I' option is 10394 ignored. The directory is still searched but as a system directory 10395 at its normal position in the system include chain. This is to 10396 ensure that GCC's procedure to fix buggy system headers and the 10397 ordering for the 'include_next' directive are not inadvertently 10398 changed. If you really need to change the search order for system 10399 directories, use the '-nostdinc' and/or '-isystem' options. 10400 10401'-iplugindir=DIR' 10402 Set the directory to search for plugins that are passed by 10403 '-fplugin=NAME' instead of '-fplugin=PATH/NAME.so'. This option is 10404 not meant to be used by the user, but only passed by the driver. 10405 10406'-iquoteDIR' 10407 Add the directory DIR to the head of the list of directories to be 10408 searched for header files only for the case of '#include "FILE"'; 10409 they are not searched for '#include <FILE>', otherwise just like 10410 '-I'. 10411 10412'-LDIR' 10413 Add directory DIR to the list of directories to be searched for 10414 '-l'. 10415 10416'-BPREFIX' 10417 This option specifies where to find the executables, libraries, 10418 include files, and data files of the compiler itself. 10419 10420 The compiler driver program runs one or more of the subprograms 10421 'cpp', 'cc1', 'as' and 'ld'. It tries PREFIX as a prefix for each 10422 program it tries to run, both with and without 'MACHINE/VERSION/' 10423 (*note Target Options::). 10424 10425 For each subprogram to be run, the compiler driver first tries the 10426 '-B' prefix, if any. If that name is not found, or if '-B' is not 10427 specified, the driver tries two standard prefixes, '/usr/lib/gcc/' 10428 and '/usr/local/lib/gcc/'. If neither of those results in a file 10429 name that is found, the unmodified program name is searched for 10430 using the directories specified in your 'PATH' environment 10431 variable. 10432 10433 The compiler checks to see if the path provided by the '-B' refers 10434 to a directory, and if necessary it adds a directory separator 10435 character at the end of the path. 10436 10437 '-B' prefixes that effectively specify directory names also apply 10438 to libraries in the linker, because the compiler translates these 10439 options into '-L' options for the linker. They also apply to 10440 include files in the preprocessor, because the compiler translates 10441 these options into '-isystem' options for the preprocessor. In 10442 this case, the compiler appends 'include' to the prefix. 10443 10444 The runtime support file 'libgcc.a' can also be searched for using 10445 the '-B' prefix, if needed. If it is not found there, the two 10446 standard prefixes above are tried, and that is all. The file is 10447 left out of the link if it is not found by those means. 10448 10449 Another way to specify a prefix much like the '-B' prefix is to use 10450 the environment variable 'GCC_EXEC_PREFIX'. *Note Environment 10451 Variables::. 10452 10453 As a special kludge, if the path provided by '-B' is 10454 '[dir/]stageN/', where N is a number in the range 0 to 9, then it 10455 is replaced by '[dir/]include'. This is to help with 10456 boot-strapping the compiler. 10457 10458'-specs=FILE' 10459 Process FILE after the compiler reads in the standard 'specs' file, 10460 in order to override the defaults which the 'gcc' driver program 10461 uses when determining what switches to pass to 'cc1', 'cc1plus', 10462 'as', 'ld', etc. More than one '-specs=FILE' can be specified on 10463 the command line, and they are processed in order, from left to 10464 right. 10465 10466'--sysroot=DIR' 10467 Use DIR as the logical root directory for headers and libraries. 10468 For example, if the compiler normally searches for headers in 10469 '/usr/include' and libraries in '/usr/lib', it instead searches 10470 'DIR/usr/include' and 'DIR/usr/lib'. 10471 10472 If you use both this option and the '-isysroot' option, then the 10473 '--sysroot' option applies to libraries, but the '-isysroot' option 10474 applies to header files. 10475 10476 The GNU linker (beginning with version 2.16) has the necessary 10477 support for this option. If your linker does not support this 10478 option, the header file aspect of '--sysroot' still works, but the 10479 library aspect does not. 10480 10481'--no-sysroot-suffix' 10482 For some targets, a suffix is added to the root directory specified 10483 with '--sysroot', depending on the other options used, so that 10484 headers may for example be found in 'DIR/SUFFIX/usr/include' 10485 instead of 'DIR/usr/include'. This option disables the addition of 10486 such a suffix. 10487 10488'-I-' 10489 This option has been deprecated. Please use '-iquote' instead for 10490 '-I' directories before the '-I-' and remove the '-I-'. Any 10491 directories you specify with '-I' options before the '-I-' option 10492 are searched only for the case of '#include "FILE"'; they are not 10493 searched for '#include <FILE>'. 10494 10495 If additional directories are specified with '-I' options after the 10496 '-I-', these directories are searched for all '#include' 10497 directives. (Ordinarily _all_ '-I' directories are used this way.) 10498 10499 In addition, the '-I-' option inhibits the use of the current 10500 directory (where the current input file came from) as the first 10501 search directory for '#include "FILE"'. There is no way to 10502 override this effect of '-I-'. With '-I.' you can specify 10503 searching the directory that is current when the compiler is 10504 invoked. That is not exactly the same as what the preprocessor 10505 does by default, but it is often satisfactory. 10506 10507 '-I-' does not inhibit the use of the standard system directories 10508 for header files. Thus, '-I-' and '-nostdinc' are independent. 10509 10510 10511File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 10512 105133.15 Specifying subprocesses and the switches to pass to them 10514============================================================= 10515 10516'gcc' is a driver program. It performs its job by invoking a sequence 10517of other programs to do the work of compiling, assembling and linking. 10518GCC interprets its command-line parameters and uses these to deduce 10519which programs it should invoke, and which command-line options it ought 10520to place on their command lines. This behavior is controlled by "spec 10521strings". In most cases there is one spec string for each program that 10522GCC can invoke, but a few programs have multiple spec strings to control 10523their behavior. The spec strings built into GCC can be overridden by 10524using the '-specs=' command-line switch to specify a spec file. 10525 10526 "Spec files" are plaintext files that are used to construct spec 10527strings. They consist of a sequence of directives separated by blank 10528lines. The type of directive is determined by the first non-whitespace 10529character on the line, which can be one of the following: 10530 10531'%COMMAND' 10532 Issues a COMMAND to the spec file processor. The commands that can 10533 appear here are: 10534 10535 '%include <FILE>' 10536 Search for FILE and insert its text at the current point in 10537 the specs file. 10538 10539 '%include_noerr <FILE>' 10540 Just like '%include', but do not generate an error message if 10541 the include file cannot be found. 10542 10543 '%rename OLD_NAME NEW_NAME' 10544 Rename the spec string OLD_NAME to NEW_NAME. 10545 10546'*[SPEC_NAME]:' 10547 This tells the compiler to create, override or delete the named 10548 spec string. All lines after this directive up to the next 10549 directive or blank line are considered to be the text for the spec 10550 string. If this results in an empty string then the spec is 10551 deleted. (Or, if the spec did not exist, then nothing happens.) 10552 Otherwise, if the spec does not currently exist a new spec is 10553 created. If the spec does exist then its contents are overridden 10554 by the text of this directive, unless the first character of that 10555 text is the '+' character, in which case the text is appended to 10556 the spec. 10557 10558'[SUFFIX]:' 10559 Creates a new '[SUFFIX] spec' pair. All lines after this directive 10560 and up to the next directive or blank line are considered to make 10561 up the spec string for the indicated suffix. When the compiler 10562 encounters an input file with the named suffix, it processes the 10563 spec string in order to work out how to compile that file. For 10564 example: 10565 10566 .ZZ: 10567 z-compile -input %i 10568 10569 This says that any input file whose name ends in '.ZZ' should be 10570 passed to the program 'z-compile', which should be invoked with the 10571 command-line switch '-input' and with the result of performing the 10572 '%i' substitution. (See below.) 10573 10574 As an alternative to providing a spec string, the text following a 10575 suffix directive can be one of the following: 10576 10577 '@LANGUAGE' 10578 This says that the suffix is an alias for a known LANGUAGE. 10579 This is similar to using the '-x' command-line switch to GCC 10580 to specify a language explicitly. For example: 10581 10582 .ZZ: 10583 @c++ 10584 10585 Says that .ZZ files are, in fact, C++ source files. 10586 10587 '#NAME' 10588 This causes an error messages saying: 10589 10590 NAME compiler not installed on this system. 10591 10592 GCC already has an extensive list of suffixes built into it. This 10593 directive adds an entry to the end of the list of suffixes, but 10594 since the list is searched from the end backwards, it is 10595 effectively possible to override earlier entries using this 10596 technique. 10597 10598 GCC has the following spec strings built into it. Spec files can 10599override these strings or create their own. Note that individual 10600targets can also add their own spec strings to this list. 10601 10602 asm Options to pass to the assembler 10603 asm_final Options to pass to the assembler post-processor 10604 cpp Options to pass to the C preprocessor 10605 cc1 Options to pass to the C compiler 10606 cc1plus Options to pass to the C++ compiler 10607 endfile Object files to include at the end of the link 10608 link Options to pass to the linker 10609 lib Libraries to include on the command line to the linker 10610 libgcc Decides which GCC support library to pass to the linker 10611 linker Sets the name of the linker 10612 predefines Defines to be passed to the C preprocessor 10613 signed_char Defines to pass to CPP to say whether char is signed 10614 by default 10615 startfile Object files to include at the start of the link 10616 10617 Here is a small example of a spec file: 10618 10619 %rename lib old_lib 10620 10621 *lib: 10622 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 10623 10624 This example renames the spec called 'lib' to 'old_lib' and then 10625overrides the previous definition of 'lib' with a new one. The new 10626definition adds in some extra command-line options before including the 10627text of the old definition. 10628 10629 "Spec strings" are a list of command-line options to be passed to their 10630corresponding program. In addition, the spec strings can contain 10631'%'-prefixed sequences to substitute variable text or to conditionally 10632insert text into the command line. Using these constructs it is 10633possible to generate quite complex command lines. 10634 10635 Here is a table of all defined '%'-sequences for spec strings. Note 10636that spaces are not generated automatically around the results of 10637expanding these sequences. Therefore you can concatenate them together 10638or combine them with constant text in a single argument. 10639 10640'%%' 10641 Substitute one '%' into the program name or argument. 10642 10643'%i' 10644 Substitute the name of the input file being processed. 10645 10646'%b' 10647 Substitute the basename of the input file being processed. This is 10648 the substring up to (and not including) the last period and not 10649 including the directory. 10650 10651'%B' 10652 This is the same as '%b', but include the file suffix (text after 10653 the last period). 10654 10655'%d' 10656 Marks the argument containing or following the '%d' as a temporary 10657 file name, so that that file is deleted if GCC exits successfully. 10658 Unlike '%g', this contributes no text to the argument. 10659 10660'%gSUFFIX' 10661 Substitute a file name that has suffix SUFFIX and is chosen once 10662 per compilation, and mark the argument in the same way as '%d'. To 10663 reduce exposure to denial-of-service attacks, the file name is now 10664 chosen in a way that is hard to predict even when previously chosen 10665 file names are known. For example, '%g.s ... %g.o ... %g.s' might 10666 turn into 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX matches the 10667 regexp '[.A-Za-z]*' or the special string '%O', which is treated 10668 exactly as if '%O' had been preprocessed. Previously, '%g' was 10669 simply substituted with a file name chosen once per compilation, 10670 without regard to any appended suffix (which was therefore treated 10671 just like ordinary text), making such attacks more likely to 10672 succeed. 10673 10674'%uSUFFIX' 10675 Like '%g', but generates a new temporary file name each time it 10676 appears instead of once per compilation. 10677 10678'%USUFFIX' 10679 Substitutes the last file name generated with '%uSUFFIX', 10680 generating a new one if there is no such last file name. In the 10681 absence of any '%uSUFFIX', this is just like '%gSUFFIX', except 10682 they don't share the same suffix _space_, so '%g.s ... %U.s ... 10683 %g.s ... %U.s' involves the generation of two distinct file names, 10684 one for each '%g.s' and another for each '%U.s'. Previously, '%U' 10685 was simply substituted with a file name chosen for the previous 10686 '%u', without regard to any appended suffix. 10687 10688'%jSUFFIX' 10689 Substitutes the name of the 'HOST_BIT_BUCKET', if any, and if it is 10690 writable, and if '-save-temps' is not used; otherwise, substitute 10691 the name of a temporary file, just like '%u'. This temporary file 10692 is not meant for communication between processes, but rather as a 10693 junk disposal mechanism. 10694 10695'%|SUFFIX' 10696'%mSUFFIX' 10697 Like '%g', except if '-pipe' is in effect. In that case '%|' 10698 substitutes a single dash and '%m' substitutes nothing at all. 10699 These are the two most common ways to instruct a program that it 10700 should read from standard input or write to standard output. If 10701 you need something more elaborate you can use an '%{pipe:'X'}' 10702 construct: see for example 'f/lang-specs.h'. 10703 10704'%.SUFFIX' 10705 Substitutes .SUFFIX for the suffixes of a matched switch's args 10706 when it is subsequently output with '%*'. SUFFIX is terminated by 10707 the next space or %. 10708 10709'%w' 10710 Marks the argument containing or following the '%w' as the 10711 designated output file of this compilation. This puts the argument 10712 into the sequence of arguments that '%o' substitutes. 10713 10714'%o' 10715 Substitutes the names of all the output files, with spaces 10716 automatically placed around them. You should write spaces around 10717 the '%o' as well or the results are undefined. '%o' is for use in 10718 the specs for running the linker. Input files whose names have no 10719 recognized suffix are not compiled at all, but they are included 10720 among the output files, so they are linked. 10721 10722'%O' 10723 Substitutes the suffix for object files. Note that this is handled 10724 specially when it immediately follows '%g, %u, or %U', because of 10725 the need for those to form complete file names. The handling is 10726 such that '%O' is treated exactly as if it had already been 10727 substituted, except that '%g, %u, and %U' do not currently support 10728 additional SUFFIX characters following '%O' as they do following, 10729 for example, '.o'. 10730 10731'%p' 10732 Substitutes the standard macro predefinitions for the current 10733 target machine. Use this when running 'cpp'. 10734 10735'%P' 10736 Like '%p', but puts '__' before and after the name of each 10737 predefined macro, except for macros that start with '__' or with 10738 '_L', where L is an uppercase letter. This is for ISO C. 10739 10740'%I' 10741 Substitute any of '-iprefix' (made from 'GCC_EXEC_PREFIX'), 10742 '-isysroot' (made from 'TARGET_SYSTEM_ROOT'), '-isystem' (made from 10743 'COMPILER_PATH' and '-B' options) and '-imultilib' as necessary. 10744 10745'%s' 10746 Current argument is the name of a library or startup file of some 10747 sort. Search for that file in a standard list of directories and 10748 substitute the full name found. The current working directory is 10749 included in the list of directories scanned. 10750 10751'%T' 10752 Current argument is the name of a linker script. Search for that 10753 file in the current list of directories to scan for libraries. If 10754 the file is located insert a '--script' option into the command 10755 line followed by the full path name found. If the file is not 10756 found then generate an error message. Note: the current working 10757 directory is not searched. 10758 10759'%eSTR' 10760 Print STR as an error message. STR is terminated by a newline. 10761 Use this when inconsistent options are detected. 10762 10763'%(NAME)' 10764 Substitute the contents of spec string NAME at this point. 10765 10766'%x{OPTION}' 10767 Accumulate an option for '%X'. 10768 10769'%X' 10770 Output the accumulated linker options specified by '-Wl' or a '%x' 10771 spec string. 10772 10773'%Y' 10774 Output the accumulated assembler options specified by '-Wa'. 10775 10776'%Z' 10777 Output the accumulated preprocessor options specified by '-Wp'. 10778 10779'%a' 10780 Process the 'asm' spec. This is used to compute the switches to be 10781 passed to the assembler. 10782 10783'%A' 10784 Process the 'asm_final' spec. This is a spec string for passing 10785 switches to an assembler post-processor, if such a program is 10786 needed. 10787 10788'%l' 10789 Process the 'link' spec. This is the spec for computing the 10790 command line passed to the linker. Typically it makes use of the 10791 '%L %G %S %D and %E' sequences. 10792 10793'%D' 10794 Dump out a '-L' option for each directory that GCC believes might 10795 contain startup files. If the target supports multilibs then the 10796 current multilib directory is prepended to each of these paths. 10797 10798'%L' 10799 Process the 'lib' spec. This is a spec string for deciding which 10800 libraries are included on the command line to the linker. 10801 10802'%G' 10803 Process the 'libgcc' spec. This is a spec string for deciding 10804 which GCC support library is included on the command line to the 10805 linker. 10806 10807'%S' 10808 Process the 'startfile' spec. This is a spec for deciding which 10809 object files are the first ones passed to the linker. Typically 10810 this might be a file named 'crt0.o'. 10811 10812'%E' 10813 Process the 'endfile' spec. This is a spec string that specifies 10814 the last object files that are passed to the linker. 10815 10816'%C' 10817 Process the 'cpp' spec. This is used to construct the arguments to 10818 be passed to the C preprocessor. 10819 10820'%1' 10821 Process the 'cc1' spec. This is used to construct the options to 10822 be passed to the actual C compiler ('cc1'). 10823 10824'%2' 10825 Process the 'cc1plus' spec. This is used to construct the options 10826 to be passed to the actual C++ compiler ('cc1plus'). 10827 10828'%*' 10829 Substitute the variable part of a matched option. See below. Note 10830 that each comma in the substituted string is replaced by a single 10831 space. 10832 10833'%<S' 10834 Remove all occurrences of '-S' from the command line. Note--this 10835 command is position dependent. '%' commands in the spec string 10836 before this one see '-S', '%' commands in the spec string after 10837 this one do not. 10838 10839'%:FUNCTION(ARGS)' 10840 Call the named function FUNCTION, passing it ARGS. ARGS is first 10841 processed as a nested spec string, then split into an argument 10842 vector in the usual fashion. The function returns a string which 10843 is processed as if it had appeared literally as part of the current 10844 spec. 10845 10846 The following built-in spec functions are provided: 10847 10848 'getenv' 10849 The 'getenv' spec function takes two arguments: an environment 10850 variable name and a string. If the environment variable is 10851 not defined, a fatal error is issued. Otherwise, the return 10852 value is the value of the environment variable concatenated 10853 with the string. For example, if 'TOPDIR' is defined as 10854 '/path/to/top', then: 10855 10856 %:getenv(TOPDIR /include) 10857 10858 expands to '/path/to/top/include'. 10859 10860 'if-exists' 10861 The 'if-exists' spec function takes one argument, an absolute 10862 pathname to a file. If the file exists, 'if-exists' returns 10863 the pathname. Here is a small example of its usage: 10864 10865 *startfile: 10866 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 10867 10868 'if-exists-else' 10869 The 'if-exists-else' spec function is similar to the 10870 'if-exists' spec function, except that it takes two arguments. 10871 The first argument is an absolute pathname to a file. If the 10872 file exists, 'if-exists-else' returns the pathname. If it 10873 does not exist, it returns the second argument. This way, 10874 'if-exists-else' can be used to select one file or another, 10875 based on the existence of the first. Here is a small example 10876 of its usage: 10877 10878 *startfile: 10879 crt0%O%s %:if-exists(crti%O%s) \ 10880 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 10881 10882 'replace-outfile' 10883 The 'replace-outfile' spec function takes two arguments. It 10884 looks for the first argument in the outfiles array and 10885 replaces it with the second argument. Here is a small example 10886 of its usage: 10887 10888 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 10889 10890 'remove-outfile' 10891 The 'remove-outfile' spec function takes one argument. It 10892 looks for the first argument in the outfiles array and removes 10893 it. Here is a small example its usage: 10894 10895 %:remove-outfile(-lm) 10896 10897 'pass-through-libs' 10898 The 'pass-through-libs' spec function takes any number of 10899 arguments. It finds any '-l' options and any non-options 10900 ending in '.a' (which it assumes are the names of linker input 10901 library archive files) and returns a result containing all the 10902 found arguments each prepended by '-plugin-opt=-pass-through=' 10903 and joined by spaces. This list is intended to be passed to 10904 the LTO linker plugin. 10905 10906 %:pass-through-libs(%G %L %G) 10907 10908 'print-asm-header' 10909 The 'print-asm-header' function takes no arguments and simply 10910 prints a banner like: 10911 10912 Assembler options 10913 ================= 10914 10915 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 10916 10917 It is used to separate compiler options from assembler options 10918 in the '--target-help' output. 10919 10920'%{S}' 10921 Substitutes the '-S' switch, if that switch is given to GCC. If 10922 that switch is not specified, this substitutes nothing. Note that 10923 the leading dash is omitted when specifying this option, and it is 10924 automatically inserted if the substitution is performed. Thus the 10925 spec string '%{foo}' matches the command-line option '-foo' and 10926 outputs the command-line option '-foo'. 10927 10928'%W{S}' 10929 Like %{'S'} but mark last argument supplied within as a file to be 10930 deleted on failure. 10931 10932'%{S*}' 10933 Substitutes all the switches specified to GCC whose names start 10934 with '-S', but which also take an argument. This is used for 10935 switches like '-o', '-D', '-I', etc. GCC considers '-o foo' as 10936 being one switch whose name starts with 'o'. %{o*} substitutes 10937 this text, including the space. Thus two arguments are generated. 10938 10939'%{S*&T*}' 10940 Like %{'S'*}, but preserve order of 'S' and 'T' options (the order 10941 of 'S' and 'T' in the spec is not significant). There can be any 10942 number of ampersand-separated variables; for each the wild card is 10943 optional. Useful for CPP as '%{D*&U*&A*}'. 10944 10945'%{S:X}' 10946 Substitutes 'X', if the '-S' switch is given to GCC. 10947 10948'%{!S:X}' 10949 Substitutes 'X', if the '-S' switch is _not_ given to GCC. 10950 10951'%{S*:X}' 10952 Substitutes 'X' if one or more switches whose names start with '-S' 10953 are specified to GCC. Normally 'X' is substituted only once, no 10954 matter how many such switches appeared. However, if '%*' appears 10955 somewhere in 'X', then 'X' is substituted once for each matching 10956 switch, with the '%*' replaced by the part of that switch matching 10957 the '*'. 10958 10959 If '%*' appears as the last part of a spec sequence then a space 10960 will be added after the end of the last substitution. If there is 10961 more text in the sequence however then a space will not be 10962 generated. This allows the '%*' substitution to be used as part of 10963 a larger string. For example, a spec string like this: 10964 10965 %{mcu=*:--script=%*/memory.ld} 10966 10967 when matching an option like '-mcu=newchip' will produce: 10968 10969 --script=newchip/memory.ld 10970 10971'%{.S:X}' 10972 Substitutes 'X', if processing a file with suffix 'S'. 10973 10974'%{!.S:X}' 10975 Substitutes 'X', if _not_ processing a file with suffix 'S'. 10976 10977'%{,S:X}' 10978 Substitutes 'X', if processing a file for language 'S'. 10979 10980'%{!,S:X}' 10981 Substitutes 'X', if not processing a file for language 'S'. 10982 10983'%{S|P:X}' 10984 Substitutes 'X' if either '-S' or '-P' is given to GCC. This may 10985 be combined with '!', '.', ',', and '*' sequences as well, although 10986 they have a stronger binding than the '|'. If '%*' appears in 'X', 10987 all of the alternatives must be starred, and only the first 10988 matching alternative is substituted. 10989 10990 For example, a spec string like this: 10991 10992 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 10993 10994 outputs the following command-line options from the following input 10995 command-line options: 10996 10997 fred.c -foo -baz 10998 jim.d -bar -boggle 10999 -d fred.c -foo -baz -boggle 11000 -d jim.d -bar -baz -boggle 11001 11002'%{S:X; T:Y; :D}' 11003 11004 If 'S' is given to GCC, substitutes 'X'; else if 'T' is given to 11005 GCC, substitutes 'Y'; else substitutes 'D'. There can be as many 11006 clauses as you need. This may be combined with '.', ',', '!', '|', 11007 and '*' as needed. 11008 11009 The conditional text 'X' in a %{'S':'X'} or similar construct may 11010contain other nested '%' constructs or spaces, or even newlines. They 11011are processed as usual, as described above. Trailing white space in 'X' 11012is ignored. White space may also appear anywhere on the left side of 11013the colon in these constructs, except between '.' or '*' and the 11014corresponding word. 11015 11016 The '-O', '-f', '-m', and '-W' switches are handled specifically in 11017these constructs. If another value of '-O' or the negated form of a 11018'-f', '-m', or '-W' switch is found later in the command line, the 11019earlier switch value is ignored, except with {'S'*} where 'S' is just 11020one letter, which passes all matching options. 11021 11022 The character '|' at the beginning of the predicate text is used to 11023indicate that a command should be piped to the following command, but 11024only if '-pipe' is specified. 11025 11026 It is built into GCC which switches take arguments and which do not. 11027(You might think it would be useful to generalize this to allow each 11028compiler's spec to say which switches take arguments. But this cannot 11029be done in a consistent fashion. GCC cannot even decide which input 11030files have been specified without knowing which switches take arguments, 11031and it must know which input files to compile in order to tell which 11032compilers to run). 11033 11034 GCC also knows implicitly that arguments starting in '-l' are to be 11035treated as compiler output files, and passed to the linker in their 11036proper position among the other output files. 11037 11038 11039File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 11040 110413.16 Specifying Target Machine and Compiler Version 11042=================================================== 11043 11044The usual way to run GCC is to run the executable called 'gcc', or 11045'MACHINE-gcc' when cross-compiling, or 'MACHINE-gcc-VERSION' to run a 11046version other than the one that was installed last. 11047 11048 11049File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 11050 110513.17 Hardware Models and Configurations 11052======================================= 11053 11054Each target machine types can have its own special options, starting 11055with '-m', to choose among various hardware models or 11056configurations--for example, 68010 vs 68020, floating coprocessor or 11057none. A single installed version of the compiler can compile for any 11058model or configuration, according to the options specified. 11059 11060 Some configurations of the compiler also support additional special 11061options, usually for compatibility with other compilers on the same 11062platform. 11063 11064* Menu: 11065 11066* AArch64 Options:: 11067* Adapteva Epiphany Options:: 11068* ARC Options:: 11069* ARM Options:: 11070* AVR Options:: 11071* Blackfin Options:: 11072* C6X Options:: 11073* CRIS Options:: 11074* CR16 Options:: 11075* Darwin Options:: 11076* DEC Alpha Options:: 11077* FR30 Options:: 11078* FRV Options:: 11079* GNU/Linux Options:: 11080* H8/300 Options:: 11081* HPPA Options:: 11082* i386 and x86-64 Options:: 11083* i386 and x86-64 Windows Options:: 11084* IA-64 Options:: 11085* LM32 Options:: 11086* M32C Options:: 11087* M32R/D Options:: 11088* M680x0 Options:: 11089* MCore Options:: 11090* MeP Options:: 11091* MicroBlaze Options:: 11092* MIPS Options:: 11093* MMIX Options:: 11094* MN10300 Options:: 11095* Moxie Options:: 11096* MSP430 Options:: 11097* NDS32 Options:: 11098* Nios II Options:: 11099* PDP-11 Options:: 11100* picoChip Options:: 11101* PowerPC Options:: 11102* RL78 Options:: 11103* RS/6000 and PowerPC Options:: 11104* RX Options:: 11105* S/390 and zSeries Options:: 11106* Score Options:: 11107* SH Options:: 11108* Solaris 2 Options:: 11109* SPARC Options:: 11110* SPU Options:: 11111* System V Options:: 11112* TILE-Gx Options:: 11113* TILEPro Options:: 11114* V850 Options:: 11115* VAX Options:: 11116* VMS Options:: 11117* VxWorks Options:: 11118* x86-64 Options:: 11119* Xstormy16 Options:: 11120* Xtensa Options:: 11121* zSeries Options:: 11122 11123 11124File: gcc.info, Node: AArch64 Options, Next: Adapteva Epiphany Options, Up: Submodel Options 11125 111263.17.1 AArch64 Options 11127---------------------- 11128 11129These options are defined for AArch64 implementations: 11130 11131'-mabi=NAME' 11132 Generate code for the specified data model. Permissible values are 11133 'ilp32' for SysV-like data model where int, long int and pointer 11134 are 32-bit, and 'lp64' for SysV-like data model where int is 11135 32-bit, but long int and pointer are 64-bit. 11136 11137 The default depends on the specific target configuration. Note 11138 that the LP64 and ILP32 ABIs are not link-compatible; you must 11139 compile your entire program with the same ABI, and link with a 11140 compatible set of libraries. 11141 11142'-mbig-endian' 11143 Generate big-endian code. This is the default when GCC is 11144 configured for an 'aarch64_be-*-*' target. 11145 11146'-mgeneral-regs-only' 11147 Generate code which uses only the general registers. 11148 11149'-mlittle-endian' 11150 Generate little-endian code. This is the default when GCC is 11151 configured for an 'aarch64-*-*' but not an 'aarch64_be-*-*' target. 11152 11153'-mcmodel=tiny' 11154 Generate code for the tiny code model. The program and its 11155 statically defined symbols must be within 1GB of each other. 11156 Pointers are 64 bits. Programs can be statically or dynamically 11157 linked. This model is not fully implemented and mostly treated as 11158 'small'. 11159 11160'-mcmodel=small' 11161 Generate code for the small code model. The program and its 11162 statically defined symbols must be within 4GB of each other. 11163 Pointers are 64 bits. Programs can be statically or dynamically 11164 linked. This is the default code model. 11165 11166'-mcmodel=large' 11167 Generate code for the large code model. This makes no assumptions 11168 about addresses and sizes of sections. Pointers are 64 bits. 11169 Programs can be statically linked only. 11170 11171'-mstrict-align' 11172 Do not assume that unaligned memory references will be handled by 11173 the system. 11174 11175'-momit-leaf-frame-pointer' 11176'-mno-omit-leaf-frame-pointer' 11177 Omit or keep the frame pointer in leaf functions. The former 11178 behaviour is the default. 11179 11180'-mtls-dialect=desc' 11181 Use TLS descriptors as the thread-local storage mechanism for 11182 dynamic accesses of TLS variables. This is the default. 11183 11184'-mtls-dialect=traditional' 11185 Use traditional TLS as the thread-local storage mechanism for 11186 dynamic accesses of TLS variables. 11187 11188'-mfix-cortex-a53-835769' 11189'-mno-fix-cortex-a53-835769' 11190 Enable or disable the workaround for the ARM Cortex-A53 erratum 11191 number 835769. This will involve inserting a NOP instruction 11192 between memory instructions and 64-bit integer multiply-accumulate 11193 instructions. 11194 11195'-march=NAME' 11196 Specify the name of the target architecture, optionally suffixed by 11197 one or more feature modifiers. This option has the form 11198 '-march=ARCH{+[no]FEATURE}*', where the only permissible value for 11199 ARCH is 'armv8-a'. The permissible values for FEATURE are 11200 documented in the sub-section below. 11201 11202 Where conflicting feature modifiers are specified, the right-most 11203 feature is used. 11204 11205 GCC uses this name to determine what kind of instructions it can 11206 emit when generating assembly code. 11207 11208 Where '-march' is specified without either of '-mtune' or '-mcpu' 11209 also being specified, the code will be tuned to perform well across 11210 a range of target processors implementing the target architecture. 11211 11212'-mtune=NAME' 11213 Specify the name of the target processor for which GCC should tune 11214 the performance of the code. Permissible values for this option 11215 are: 'generic', 'cortex-a53', 'cortex-a57'. 11216 11217 Additionally, this option can specify that GCC should tune the 11218 performance of the code for a big.LITTLE system. The only 11219 permissible value is 'cortex-a57.cortex-a53'. 11220 11221 Where none of '-mtune=', '-mcpu=' or '-march=' are specified, the 11222 code will be tuned to perform well across a range of target 11223 processors. 11224 11225 This option cannot be suffixed by feature modifiers. 11226 11227'-mcpu=NAME' 11228 Specify the name of the target processor, optionally suffixed by 11229 one or more feature modifiers. This option has the form 11230 '-mcpu=CPU{+[no]FEATURE}*', where the permissible values for CPU 11231 are the same as those available for '-mtune'. 11232 11233 The permissible values for FEATURE are documented in the 11234 sub-section below. 11235 11236 Where conflicting feature modifiers are specified, the right-most 11237 feature is used. 11238 11239 GCC uses this name to determine what kind of instructions it can 11240 emit when generating assembly code (as if by '-march') and to 11241 determine the target processor for which to tune for performance 11242 (as if by '-mtune'). Where this option is used in conjunction with 11243 '-march' or '-mtune', those options take precedence over the 11244 appropriate part of this option. 11245 112463.17.1.1 '-march' and '-mcpu' feature modifiers 11247............................................... 11248 11249Feature modifiers used with '-march' and '-mcpu' can be one the 11250following: 11251 11252'crc' 11253 Enable CRC extension. 11254'crypto' 11255 Enable Crypto extension. This implies Advanced SIMD is enabled. 11256'fp' 11257 Enable floating-point instructions. 11258'simd' 11259 Enable Advanced SIMD instructions. This implies floating-point 11260 instructions are enabled. This is the default for all current 11261 possible values for options '-march' and '-mcpu='. 11262 11263 11264File: gcc.info, Node: Adapteva Epiphany Options, Next: ARC Options, Prev: AArch64 Options, Up: Submodel Options 11265 112663.17.2 Adapteva Epiphany Options 11267-------------------------------- 11268 11269These '-m' options are defined for Adapteva Epiphany: 11270 11271'-mhalf-reg-file' 11272 Don't allocate any register in the range 'r32'...'r63'. That 11273 allows code to run on hardware variants that lack these registers. 11274 11275'-mprefer-short-insn-regs' 11276 Preferrentially allocate registers that allow short instruction 11277 generation. This can result in increased instruction count, so 11278 this may either reduce or increase overall code size. 11279 11280'-mbranch-cost=NUM' 11281 Set the cost of branches to roughly NUM "simple" instructions. 11282 This cost is only a heuristic and is not guaranteed to produce 11283 consistent results across releases. 11284 11285'-mcmove' 11286 Enable the generation of conditional moves. 11287 11288'-mnops=NUM' 11289 Emit NUM NOPs before every other generated instruction. 11290 11291'-mno-soft-cmpsf' 11292 For single-precision floating-point comparisons, emit an 'fsub' 11293 instruction and test the flags. This is faster than a software 11294 comparison, but can get incorrect results in the presence of NaNs, 11295 or when two different small numbers are compared such that their 11296 difference is calculated as zero. The default is '-msoft-cmpsf', 11297 which uses slower, but IEEE-compliant, software comparisons. 11298 11299'-mstack-offset=NUM' 11300 Set the offset between the top of the stack and the stack pointer. 11301 E.g., a value of 8 means that the eight bytes in the range 11302 'sp+0...sp+7' can be used by leaf functions without stack 11303 allocation. Values other than '8' or '16' are untested and 11304 unlikely to work. Note also that this option changes the ABI; 11305 compiling a program with a different stack offset than the 11306 libraries have been compiled with generally does not work. This 11307 option can be useful if you want to evaluate if a different stack 11308 offset would give you better code, but to actually use a different 11309 stack offset to build working programs, it is recommended to 11310 configure the toolchain with the appropriate 11311 '--with-stack-offset=NUM' option. 11312 11313'-mno-round-nearest' 11314 Make the scheduler assume that the rounding mode has been set to 11315 truncating. The default is '-mround-nearest'. 11316 11317'-mlong-calls' 11318 If not otherwise specified by an attribute, assume all calls might 11319 be beyond the offset range of the 'b' / 'bl' instructions, and 11320 therefore load the function address into a register before 11321 performing a (otherwise direct) call. This is the default. 11322 11323'-mshort-calls' 11324 If not otherwise specified by an attribute, assume all direct calls 11325 are in the range of the 'b' / 'bl' instructions, so use these 11326 instructions for direct calls. The default is '-mlong-calls'. 11327 11328'-msmall16' 11329 Assume addresses can be loaded as 16-bit unsigned values. This 11330 does not apply to function addresses for which '-mlong-calls' 11331 semantics are in effect. 11332 11333'-mfp-mode=MODE' 11334 Set the prevailing mode of the floating-point unit. This 11335 determines the floating-point mode that is provided and expected at 11336 function call and return time. Making this mode match the mode you 11337 predominantly need at function start can make your programs smaller 11338 and faster by avoiding unnecessary mode switches. 11339 11340 MODE can be set to one the following values: 11341 11342 'caller' 11343 Any mode at function entry is valid, and retained or restored 11344 when the function returns, and when it calls other functions. 11345 This mode is useful for compiling libraries or other 11346 compilation units you might want to incorporate into different 11347 programs with different prevailing FPU modes, and the 11348 convenience of being able to use a single object file 11349 outweighs the size and speed overhead for any extra mode 11350 switching that might be needed, compared with what would be 11351 needed with a more specific choice of prevailing FPU mode. 11352 11353 'truncate' 11354 This is the mode used for floating-point calculations with 11355 truncating (i.e. round towards zero) rounding mode. That 11356 includes conversion from floating point to integer. 11357 11358 'round-nearest' 11359 This is the mode used for floating-point calculations with 11360 round-to-nearest-or-even rounding mode. 11361 11362 'int' 11363 This is the mode used to perform integer calculations in the 11364 FPU, e.g. integer multiply, or integer 11365 multiply-and-accumulate. 11366 11367 The default is '-mfp-mode=caller' 11368 11369'-mnosplit-lohi' 11370'-mno-postinc' 11371'-mno-postmodify' 11372 Code generation tweaks that disable, respectively, splitting of 11373 32-bit loads, generation of post-increment addresses, and 11374 generation of post-modify addresses. The defaults are 11375 'msplit-lohi', '-mpost-inc', and '-mpost-modify'. 11376 11377'-mnovect-double' 11378 Change the preferred SIMD mode to SImode. The default is 11379 '-mvect-double', which uses DImode as preferred SIMD mode. 11380 11381'-max-vect-align=NUM' 11382 The maximum alignment for SIMD vector mode types. NUM may be 4 or 11383 8. The default is 8. Note that this is an ABI change, even though 11384 many library function interfaces are unaffected if they don't use 11385 SIMD vector modes in places that affect size and/or alignment of 11386 relevant types. 11387 11388'-msplit-vecmove-early' 11389 Split vector moves into single word moves before reload. In theory 11390 this can give better register allocation, but so far the reverse 11391 seems to be generally the case. 11392 11393'-m1reg-REG' 11394 Specify a register to hold the constant -1, which makes loading 11395 small negative constants and certain bitmasks faster. Allowable 11396 values for REG are 'r43' and 'r63', which specify use of that 11397 register as a fixed register, and 'none', which means that no 11398 register is used for this purpose. The default is '-m1reg-none'. 11399 11400 11401File: gcc.info, Node: ARC Options, Next: ARM Options, Prev: Adapteva Epiphany Options, Up: Submodel Options 11402 114033.17.3 ARC Options 11404------------------ 11405 11406The following options control the architecture variant for which code is 11407being compiled: 11408 11409'-mbarrel-shifter' 11410 Generate instructions supported by barrel shifter. This is the 11411 default unless '-mcpu=ARC601' is in effect. 11412 11413'-mcpu=CPU' 11414 Set architecture type, register usage, and instruction scheduling 11415 parameters for CPU. There are also shortcut alias options 11416 available for backward compatibility and convenience. Supported 11417 values for CPU are 11418 11419 'ARC600' 11420 Compile for ARC600. Aliases: '-mA6', '-mARC600'. 11421 11422 'ARC601' 11423 Compile for ARC601. Alias: '-mARC601'. 11424 11425 'ARC700' 11426 Compile for ARC700. Aliases: '-mA7', '-mARC700'. This is the 11427 default when configured with '--with-cpu=arc700'. 11428 11429'-mdpfp' 11430'-mdpfp-compact' 11431 FPX: Generate Double Precision FPX instructions, tuned for the 11432 compact implementation. 11433 11434'-mdpfp-fast' 11435 FPX: Generate Double Precision FPX instructions, tuned for the fast 11436 implementation. 11437 11438'-mno-dpfp-lrsr' 11439 Disable LR and SR instructions from using FPX extension aux 11440 registers. 11441 11442'-mea' 11443 Generate Extended arithmetic instructions. Currently only 'divaw', 11444 'adds', 'subs', and 'sat16' are supported. This is always enabled 11445 for '-mcpu=ARC700'. 11446 11447'-mno-mpy' 11448 Do not generate mpy instructions for ARC700. 11449 11450'-mmul32x16' 11451 Generate 32x16 bit multiply and mac instructions. 11452 11453'-mmul64' 11454 Generate mul64 and mulu64 instructions. Only valid for 11455 '-mcpu=ARC600'. 11456 11457'-mnorm' 11458 Generate norm instruction. This is the default if '-mcpu=ARC700' 11459 is in effect. 11460 11461'-mspfp' 11462'-mspfp-compact' 11463 FPX: Generate Single Precision FPX instructions, tuned for the 11464 compact implementation. 11465 11466'-mspfp-fast' 11467 FPX: Generate Single Precision FPX instructions, tuned for the fast 11468 implementation. 11469 11470'-msimd' 11471 Enable generation of ARC SIMD instructions via target-specific 11472 builtins. Only valid for '-mcpu=ARC700'. 11473 11474'-msoft-float' 11475 This option ignored; it is provided for compatibility purposes 11476 only. Software floating point code is emitted by default, and this 11477 default can overridden by FPX options; 'mspfp', 'mspfp-compact', or 11478 'mspfp-fast' for single precision, and 'mdpfp', 'mdpfp-compact', or 11479 'mdpfp-fast' for double precision. 11480 11481'-mswap' 11482 Generate swap instructions. 11483 11484 The following options are passed through to the assembler, and also 11485define preprocessor macro symbols. 11486 11487'-mdsp-packa' 11488 Passed down to the assembler to enable the DSP Pack A extensions. 11489 Also sets the preprocessor symbol '__Xdsp_packa'. 11490 11491'-mdvbf' 11492 Passed down to the assembler to enable the dual viterbi butterfly 11493 extension. Also sets the preprocessor symbol '__Xdvbf'. 11494 11495'-mlock' 11496 Passed down to the assembler to enable the Locked Load/Store 11497 Conditional extension. Also sets the preprocessor symbol 11498 '__Xlock'. 11499 11500'-mmac-d16' 11501 Passed down to the assembler. Also sets the preprocessor symbol 11502 '__Xxmac_d16'. 11503 11504'-mmac-24' 11505 Passed down to the assembler. Also sets the preprocessor symbol 11506 '__Xxmac_24'. 11507 11508'-mrtsc' 11509 Passed down to the assembler to enable the 64-bit Time-Stamp 11510 Counter extension instruction. Also sets the preprocessor symbol 11511 '__Xrtsc'. 11512 11513'-mswape' 11514 Passed down to the assembler to enable the swap byte ordering 11515 extension instruction. Also sets the preprocessor symbol 11516 '__Xswape'. 11517 11518'-mtelephony' 11519 Passed down to the assembler to enable dual and single operand 11520 instructions for telephony. Also sets the preprocessor symbol 11521 '__Xtelephony'. 11522 11523'-mxy' 11524 Passed down to the assembler to enable the XY Memory extension. 11525 Also sets the preprocessor symbol '__Xxy'. 11526 11527 The following options control how the assembly code is annotated: 11528 11529'-misize' 11530 Annotate assembler instructions with estimated addresses. 11531 11532'-mannotate-align' 11533 Explain what alignment considerations lead to the decision to make 11534 an instruction short or long. 11535 11536 The following options are passed through to the linker: 11537 11538'-marclinux' 11539 Passed through to the linker, to specify use of the 'arclinux' 11540 emulation. This option is enabled by default in tool chains built 11541 for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when 11542 profiling is not requested. 11543 11544'-marclinux_prof' 11545 Passed through to the linker, to specify use of the 'arclinux_prof' 11546 emulation. This option is enabled by default in tool chains built 11547 for 'arc-linux-uclibc' and 'arceb-linux-uclibc' targets when 11548 profiling is requested. 11549 11550 The following options control the semantics of generated code: 11551 11552'-mepilogue-cfi' 11553 Enable generation of call frame information for epilogues. 11554 11555'-mno-epilogue-cfi' 11556 Disable generation of call frame information for epilogues. 11557 11558'-mlong-calls' 11559 Generate call insns as register indirect calls, thus providing 11560 access to the full 32-bit address range. 11561 11562'-mmedium-calls' 11563 Don't use less than 25 bit addressing range for calls, which is the 11564 offset available for an unconditional branch-and-link instruction. 11565 Conditional execution of function calls is suppressed, to allow use 11566 of the 25-bit range, rather than the 21-bit range with conditional 11567 branch-and-link. This is the default for tool chains built for 'arc-linux-uclibc' 11568 and 'arceb-linux-uclibc' targets. 11569 11570'-mno-sdata' 11571 Do not generate sdata references. This is the default for tool 11572 chains built for 'arc-linux-uclibc' and 'arceb-linux-uclibc' 11573 targets. 11574 11575'-mucb-mcount' 11576 Instrument with mcount calls as used in UCB code. I.e. do the 11577 counting in the callee, not the caller. By default ARC 11578 instrumentation counts in the caller. 11579 11580'-mvolatile-cache' 11581 Use ordinarily cached memory accesses for volatile references. 11582 This is the default. 11583 11584'-mno-volatile-cache' 11585 Enable cache bypass for volatile references. 11586 11587 The following options fine tune code generation: 11588'-malign-call' 11589 Do alignment optimizations for call instructions. 11590 11591'-mauto-modify-reg' 11592 Enable the use of pre/post modify with register displacement. 11593 11594'-mbbit-peephole' 11595 Enable bbit peephole2. 11596 11597'-mno-brcc' 11598 This option disables a target-specific pass in 'arc_reorg' to 11599 generate 'BRcc' instructions. It has no effect on 'BRcc' 11600 generation driven by the combiner pass. 11601 11602'-mcase-vector-pcrel' 11603 Use pc-relative switch case tables - this enables case table 11604 shortening. This is the default for '-Os'. 11605 11606'-mcompact-casesi' 11607 Enable compact casesi pattern. This is the default for '-Os'. 11608 11609'-mno-cond-exec' 11610 Disable ARCompact specific pass to generate conditional execution 11611 instructions. Due to delay slot scheduling and interactions 11612 between operand numbers, literal sizes, instruction lengths, and 11613 the support for conditional execution, the target-independent pass 11614 to generate conditional execution is often lacking, so the ARC port 11615 has kept a special pass around that tries to find more conditional 11616 execution generating opportunities after register allocation, 11617 branch shortening, and delay slot scheduling have been done. This 11618 pass generally, but not always, improves performance and code size, 11619 at the cost of extra compilation time, which is why there is an 11620 option to switch it off. If you have a problem with call 11621 instructions exceeding their allowable offset range because they 11622 are conditionalized, you should consider using '-mmedium-calls' 11623 instead. 11624 11625'-mearly-cbranchsi' 11626 Enable pre-reload use of the cbranchsi pattern. 11627 11628'-mexpand-adddi' 11629 Expand 'adddi3' and 'subdi3' at rtl generation time into 'add.f', 11630 'adc' etc. 11631 11632'-mindexed-loads' 11633 Enable the use of indexed loads. This can be problematic because 11634 some optimizers will then assume the that indexed stores exist, 11635 which is not the case. 11636 11637'-mlra' 11638 Enable Local Register Allocation. This is still experimental for 11639 ARC, so by default the compiler uses standard reload (i.e. 11640 '-mno-lra'). 11641 11642'-mlra-priority-none' 11643 Don't indicate any priority for target registers. 11644 11645'-mlra-priority-compact' 11646 Indicate target register priority for r0..r3 / r12..r15. 11647 11648'-mlra-priority-noncompact' 11649 Reduce target regsiter priority for r0..r3 / r12..r15. 11650 11651'-mno-millicode' 11652 When optimizing for size (using '-Os'), prologues and epilogues 11653 that have to save or restore a large number of registers are often 11654 shortened by using call to a special function in libgcc; this is 11655 referred to as a _millicode_ call. As these calls can pose 11656 performance issues, and/or cause linking issues when linking in a 11657 nonstandard way, this option is provided to turn off millicode call 11658 generation. 11659 11660'-mmixed-code' 11661 Tweak register allocation to help 16-bit instruction generation. 11662 This generally has the effect of decreasing the average instruction 11663 size while increasing the instruction count. 11664 11665'-mq-class' 11666 Enable 'q' instruction alternatives. This is the default for 11667 '-Os'. 11668 11669'-mRcq' 11670 Enable Rcq constraint handling - most short code generation depends 11671 on this. This is the default. 11672 11673'-mRcw' 11674 Enable Rcw constraint handling - ccfsm condexec mostly depends on 11675 this. This is the default. 11676 11677'-msize-level=LEVEL' 11678 Fine-tune size optimization with regards to instruction lengths and 11679 alignment. The recognized values for LEVEL are: 11680 '0' 11681 No size optimization. This level is deprecated and treated 11682 like '1'. 11683 11684 '1' 11685 Short instructions are used opportunistically. 11686 11687 '2' 11688 In addition, alignment of loops and of code after barriers are 11689 dropped. 11690 11691 '3' 11692 In addition, optional data alignment is dropped, and the 11693 option 'Os' is enabled. 11694 11695 This defaults to '3' when '-Os' is in effect. Otherwise, the 11696 behavior when this is not set is equivalent to level '1'. 11697 11698'-mtune=CPU' 11699 Set instruction scheduling parameters for CPU, overriding any 11700 implied by '-mcpu='. 11701 11702 Supported values for CPU are 11703 11704 'ARC600' 11705 Tune for ARC600 cpu. 11706 11707 'ARC601' 11708 Tune for ARC601 cpu. 11709 11710 'ARC700' 11711 Tune for ARC700 cpu with standard multiplier block. 11712 11713 'ARC700-xmac' 11714 Tune for ARC700 cpu with XMAC block. 11715 11716 'ARC725D' 11717 Tune for ARC725D cpu. 11718 11719 'ARC750D' 11720 Tune for ARC750D cpu. 11721 11722'-mmultcost=NUM' 11723 Cost to assume for a multiply instruction, with '4' being equal to 11724 a normal instruction. 11725 11726'-munalign-prob-threshold=PROBABILITY' 11727 Set probability threshold for unaligning branches. When tuning for 11728 'ARC700' and optimizing for speed, branches without filled delay 11729 slot are preferably emitted unaligned and long, unless profiling 11730 indicates that the probability for the branch to be taken is below 11731 PROBABILITY. *Note Cross-profiling::. The default is 11732 (REG_BR_PROB_BASE/2), i.e. 5000. 11733 11734 The following options are maintained for backward compatibility, but 11735are now deprecated and will be removed in a future release: 11736 11737'-margonaut' 11738 Obsolete FPX. 11739 11740'-mbig-endian' 11741'-EB' 11742 Compile code for big endian targets. Use of these options is now 11743 deprecated. Users wanting big-endian code, should use the 'arceb-elf32' 11744 and 'arceb-linux-uclibc' targets when building the tool chain, for 11745 which big-endian is the default. 11746 11747'-mlittle-endian' 11748'-EL' 11749 Compile code for little endian targets. Use of these options is 11750 now deprecated. Users wanting little-endian code should use the 'arc-elf32' 11751 and 'arc-linux-uclibc' targets when building the tool chain, for 11752 which little-endian is the default. 11753 11754'-mbarrel_shifter' 11755 Replaced by '-mbarrel-shifter' 11756 11757'-mdpfp_compact' 11758 Replaced by '-mdpfp-compact' 11759 11760'-mdpfp_fast' 11761 Replaced by '-mdpfp-fast' 11762 11763'-mdsp_packa' 11764 Replaced by '-mdsp-packa' 11765 11766'-mEA' 11767 Replaced by '-mea' 11768 11769'-mmac_24' 11770 Replaced by '-mmac-24' 11771 11772'-mmac_d16' 11773 Replaced by '-mmac-d16' 11774 11775'-mspfp_compact' 11776 Replaced by '-mspfp-compact' 11777 11778'-mspfp_fast' 11779 Replaced by '-mspfp-fast' 11780 11781'-mtune=CPU' 11782 Values 'arc600', 'arc601', 'arc700' and 'arc700-xmac' for CPU are 11783 replaced by 'ARC600', 'ARC601', 'ARC700' and 'ARC700-xmac' 11784 respectively 11785 11786'-multcost=NUM' 11787 Replaced by '-mmultcost'. 11788 11789 11790File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 11791 117923.17.4 ARM Options 11793------------------ 11794 11795These '-m' options are defined for Advanced RISC Machines (ARM) 11796architectures: 11797 11798'-mabi=NAME' 11799 Generate code for the specified ABI. Permissible values are: 11800 'apcs-gnu', 'atpcs', 'aapcs', 'aapcs-linux' and 'iwmmxt'. 11801 11802'-mapcs-frame' 11803 Generate a stack frame that is compliant with the ARM Procedure 11804 Call Standard for all functions, even if this is not strictly 11805 necessary for correct execution of the code. Specifying 11806 '-fomit-frame-pointer' with this option causes the stack frames not 11807 to be generated for leaf functions. The default is 11808 '-mno-apcs-frame'. 11809 11810'-mapcs' 11811 This is a synonym for '-mapcs-frame'. 11812 11813'-mthumb-interwork' 11814 Generate code that supports calling between the ARM and Thumb 11815 instruction sets. Without this option, on pre-v5 architectures, 11816 the two instruction sets cannot be reliably used inside one 11817 program. The default is '-mno-thumb-interwork', since slightly 11818 larger code is generated when '-mthumb-interwork' is specified. In 11819 AAPCS configurations this option is meaningless. 11820 11821'-mno-sched-prolog' 11822 Prevent the reordering of instructions in the function prologue, or 11823 the merging of those instruction with the instructions in the 11824 function's body. This means that all functions start with a 11825 recognizable set of instructions (or in fact one of a choice from a 11826 small set of different function prologues), and this information 11827 can be used to locate the start of functions inside an executable 11828 piece of code. The default is '-msched-prolog'. 11829 11830'-mfloat-abi=NAME' 11831 Specifies which floating-point ABI to use. Permissible values are: 11832 'soft', 'softfp' and 'hard'. 11833 11834 Specifying 'soft' causes GCC to generate output containing library 11835 calls for floating-point operations. 'softfp' allows the 11836 generation of code using hardware floating-point instructions, but 11837 still uses the soft-float calling conventions. 'hard' allows 11838 generation of floating-point instructions and uses FPU-specific 11839 calling conventions. 11840 11841 The default depends on the specific target configuration. Note 11842 that the hard-float and soft-float ABIs are not link-compatible; 11843 you must compile your entire program with the same ABI, and link 11844 with a compatible set of libraries. 11845 11846'-mlittle-endian' 11847 Generate code for a processor running in little-endian mode. This 11848 is the default for all standard configurations. 11849 11850'-mbig-endian' 11851 Generate code for a processor running in big-endian mode; the 11852 default is to compile code for a little-endian processor. 11853 11854'-mwords-little-endian' 11855 This option only applies when generating code for big-endian 11856 processors. Generate code for a little-endian word order but a 11857 big-endian byte order. That is, a byte order of the form 11858 '32107654'. Note: this option should only be used if you require 11859 compatibility with code for big-endian ARM processors generated by 11860 versions of the compiler prior to 2.8. This option is now 11861 deprecated. 11862 11863'-march=NAME' 11864 This specifies the name of the target ARM architecture. GCC uses 11865 this name to determine what kind of instructions it can emit when 11866 generating assembly code. This option can be used in conjunction 11867 with or instead of the '-mcpu=' option. Permissible names are: 11868 'armv2', 'armv2a', 'armv3', 'armv3m', 'armv4', 'armv4t', 'armv5', 11869 'armv5t', 'armv5e', 'armv5te', 'armv6', 'armv6j', 'armv6t2', 11870 'armv6z', 'armv6zk', 'armv6-m', 'armv7', 'armv7-a', 'armv7-r', 11871 'armv7-m', 'armv7e-m', 'armv7ve', 'armv8-a', 'armv8-a+crc', 11872 'iwmmxt', 'iwmmxt2', 'ep9312'. 11873 11874 '-march=armv7ve' is the armv7-a architecture with virtualization 11875 extensions. 11876 11877 '-march=armv8-a+crc' enables code generation for the ARMv8-A 11878 architecture together with the optional CRC32 extensions. 11879 11880 '-march=native' causes the compiler to auto-detect the architecture 11881 of the build computer. At present, this feature is only supported 11882 on GNU/Linux, and not all architectures are recognized. If the 11883 auto-detect is unsuccessful the option has no effect. 11884 11885'-mtune=NAME' 11886 This option specifies the name of the target ARM processor for 11887 which GCC should tune the performance of the code. For some ARM 11888 implementations better performance can be obtained by using this 11889 option. Permissible names are: 'arm2', 'arm250', 'arm3', 'arm6', 11890 'arm60', 'arm600', 'arm610', 'arm620', 'arm7', 'arm7m', 'arm7d', 11891 'arm7dm', 'arm7di', 'arm7dmi', 'arm70', 'arm700', 'arm700i', 11892 'arm710', 'arm710c', 'arm7100', 'arm720', 'arm7500', 'arm7500fe', 11893 'arm7tdmi', 'arm7tdmi-s', 'arm710t', 'arm720t', 'arm740t', 11894 'strongarm', 'strongarm110', 'strongarm1100', 'strongarm1110', 11895 'arm8', 'arm810', 'arm9', 'arm9e', 'arm920', 'arm920t', 'arm922t', 11896 'arm946e-s', 'arm966e-s', 'arm968e-s', 'arm926ej-s', 'arm940t', 11897 'arm9tdmi', 'arm10tdmi', 'arm1020t', 'arm1026ej-s', 'arm10e', 11898 'arm1020e', 'arm1022e', 'arm1136j-s', 'arm1136jf-s', 'mpcore', 11899 'mpcorenovfp', 'arm1156t2-s', 'arm1156t2f-s', 'arm1176jz-s', 11900 'arm1176jzf-s', 'cortex-a5', 'cortex-a7', 'cortex-a8', 'cortex-a9', 11901 'cortex-a12', 'cortex-a15', 'cortex-a53', 'cortex-a57', 11902 'cortex-r4', 'cortex-r4f', 'cortex-r5', 'cortex-r7', 'cortex-m4', 11903 'cortex-m3', 'cortex-m1', 'cortex-m0', 'cortex-m0plus', 11904 'marvell-pj4', 'xscale', 'iwmmxt', 'iwmmxt2', 'ep9312', 'fa526', 11905 'fa626', 'fa606te', 'fa626te', 'fmp626', 'fa726te'. 11906 11907 Additionally, this option can specify that GCC should tune the 11908 performance of the code for a big.LITTLE system. Permissible names 11909 are: 'cortex-a15.cortex-a7', 'cortex-a57.cortex-a53'. 11910 11911 '-mtune=generic-ARCH' specifies that GCC should tune the 11912 performance for a blend of processors within architecture ARCH. 11913 The aim is to generate code that run well on the current most 11914 popular processors, balancing between optimizations that benefit 11915 some CPUs in the range, and avoiding performance pitfalls of other 11916 CPUs. The effects of this option may change in future GCC versions 11917 as CPU models come and go. 11918 11919 '-mtune=native' causes the compiler to auto-detect the CPU of the 11920 build computer. At present, this feature is only supported on 11921 GNU/Linux, and not all architectures are recognized. If the 11922 auto-detect is unsuccessful the option has no effect. 11923 11924'-mcpu=NAME' 11925 This specifies the name of the target ARM processor. GCC uses this 11926 name to derive the name of the target ARM architecture (as if 11927 specified by '-march') and the ARM processor type for which to tune 11928 for performance (as if specified by '-mtune'). Where this option 11929 is used in conjunction with '-march' or '-mtune', those options 11930 take precedence over the appropriate part of this option. 11931 11932 Permissible names for this option are the same as those for 11933 '-mtune'. 11934 11935 '-mcpu=generic-ARCH' is also permissible, and is equivalent to 11936 '-march=ARCH -mtune=generic-ARCH'. See '-mtune' for more 11937 information. 11938 11939 '-mcpu=native' causes the compiler to auto-detect the CPU of the 11940 build computer. At present, this feature is only supported on 11941 GNU/Linux, and not all architectures are recognized. If the 11942 auto-detect is unsuccessful the option has no effect. 11943 11944'-mfpu=NAME' 11945 This specifies what floating-point hardware (or hardware emulation) 11946 is available on the target. Permissible names are: 'vfp', 'vfpv3', 11947 'vfpv3-fp16', 'vfpv3-d16', 'vfpv3-d16-fp16', 'vfpv3xd', 11948 'vfpv3xd-fp16', 'neon', 'neon-fp16', 'vfpv4', 'vfpv4-d16', 11949 'fpv4-sp-d16', 'neon-vfpv4', 'fp-armv8', 'neon-fp-armv8', and 11950 'crypto-neon-fp-armv8'. 11951 11952 If '-msoft-float' is specified this specifies the format of 11953 floating-point values. 11954 11955 If the selected floating-point hardware includes the NEON extension 11956 (e.g. '-mfpu'='neon'), note that floating-point operations are not 11957 generated by GCC's auto-vectorization pass unless 11958 '-funsafe-math-optimizations' is also specified. This is because 11959 NEON hardware does not fully implement the IEEE 754 standard for 11960 floating-point arithmetic (in particular denormal values are 11961 treated as zero), so the use of NEON instructions may lead to a 11962 loss of precision. 11963 11964'-mfp16-format=NAME' 11965 Specify the format of the '__fp16' half-precision floating-point 11966 type. Permissible names are 'none', 'ieee', and 'alternative'; the 11967 default is 'none', in which case the '__fp16' type is not defined. 11968 *Note Half-Precision::, for more information. 11969 11970'-mstructure-size-boundary=N' 11971 The sizes of all structures and unions are rounded up to a multiple 11972 of the number of bits set by this option. Permissible values are 11973 8, 32 and 64. The default value varies for different toolchains. 11974 For the COFF targeted toolchain the default value is 8. A value of 11975 64 is only allowed if the underlying ABI supports it. 11976 11977 Specifying a larger number can produce faster, more efficient code, 11978 but can also increase the size of the program. Different values 11979 are potentially incompatible. Code compiled with one value cannot 11980 necessarily expect to work with code or libraries compiled with 11981 another value, if they exchange information using structures or 11982 unions. 11983 11984'-mabort-on-noreturn' 11985 Generate a call to the function 'abort' at the end of a 'noreturn' 11986 function. It is executed if the function tries to return. 11987 11988'-mlong-calls' 11989'-mno-long-calls' 11990 Tells the compiler to perform function calls by first loading the 11991 address of the function into a register and then performing a 11992 subroutine call on this register. This switch is needed if the 11993 target function lies outside of the 64-megabyte addressing range of 11994 the offset-based version of subroutine call instruction. 11995 11996 Even if this switch is enabled, not all function calls are turned 11997 into long calls. The heuristic is that static functions, functions 11998 that have the 'short-call' attribute, functions that are inside the 11999 scope of a '#pragma no_long_calls' directive, and functions whose 12000 definitions have already been compiled within the current 12001 compilation unit are not turned into long calls. The exceptions to 12002 this rule are that weak function definitions, functions with the 12003 'long-call' attribute or the 'section' attribute, and functions 12004 that are within the scope of a '#pragma long_calls' directive are 12005 always turned into long calls. 12006 12007 This feature is not enabled by default. Specifying 12008 '-mno-long-calls' restores the default behavior, as does placing 12009 the function calls within the scope of a '#pragma long_calls_off' 12010 directive. Note these switches have no effect on how the compiler 12011 generates code to handle function calls via function pointers. 12012 12013'-msingle-pic-base' 12014 Treat the register used for PIC addressing as read-only, rather 12015 than loading it in the prologue for each function. The runtime 12016 system is responsible for initializing this register with an 12017 appropriate value before execution begins. 12018 12019'-mpic-register=REG' 12020 Specify the register to be used for PIC addressing. For standard 12021 PIC base case, the default will be any suitable register determined 12022 by compiler. For single PIC base case, the default is 'R9' if 12023 target is EABI based or stack-checking is enabled, otherwise the 12024 default is 'R10'. 12025 12026'-mpic-data-is-text-relative' 12027 Assume that each data segments are relative to text segment at load 12028 time. Therefore, it permits addressing data using PC-relative 12029 operations. This option is on by default for targets other than 12030 VxWorks RTP. 12031 12032'-mpoke-function-name' 12033 Write the name of each function into the text section, directly 12034 preceding the function prologue. The generated code is similar to 12035 this: 12036 12037 t0 12038 .ascii "arm_poke_function_name", 0 12039 .align 12040 t1 12041 .word 0xff000000 + (t1 - t0) 12042 arm_poke_function_name 12043 mov ip, sp 12044 stmfd sp!, {fp, ip, lr, pc} 12045 sub fp, ip, #4 12046 12047 When performing a stack backtrace, code can inspect the value of 12048 'pc' stored at 'fp + 0'. If the trace function then looks at 12049 location 'pc - 12' and the top 8 bits are set, then we know that 12050 there is a function name embedded immediately preceding this 12051 location and has length '((pc[-3]) & 0xff000000)'. 12052 12053'-mthumb' 12054'-marm' 12055 12056 Select between generating code that executes in ARM and Thumb 12057 states. The default for most configurations is to generate code 12058 that executes in ARM state, but the default can be changed by 12059 configuring GCC with the '--with-mode='STATE configure option. 12060 12061'-mtpcs-frame' 12062 Generate a stack frame that is compliant with the Thumb Procedure 12063 Call Standard for all non-leaf functions. (A leaf function is one 12064 that does not call any other functions.) The default is 12065 '-mno-tpcs-frame'. 12066 12067'-mtpcs-leaf-frame' 12068 Generate a stack frame that is compliant with the Thumb Procedure 12069 Call Standard for all leaf functions. (A leaf function is one that 12070 does not call any other functions.) The default is 12071 '-mno-apcs-leaf-frame'. 12072 12073'-mcallee-super-interworking' 12074 Gives all externally visible functions in the file being compiled 12075 an ARM instruction set header which switches to Thumb mode before 12076 executing the rest of the function. This allows these functions to 12077 be called from non-interworking code. This option is not valid in 12078 AAPCS configurations because interworking is enabled by default. 12079 12080'-mcaller-super-interworking' 12081 Allows calls via function pointers (including virtual functions) to 12082 execute correctly regardless of whether the target code has been 12083 compiled for interworking or not. There is a small overhead in the 12084 cost of executing a function pointer if this option is enabled. 12085 This option is not valid in AAPCS configurations because 12086 interworking is enabled by default. 12087 12088'-mtp=NAME' 12089 Specify the access model for the thread local storage pointer. The 12090 valid models are 'soft', which generates calls to 12091 '__aeabi_read_tp', 'cp15', which fetches the thread pointer from 12092 'cp15' directly (supported in the arm6k architecture), and 'auto', 12093 which uses the best available method for the selected processor. 12094 The default setting is 'auto'. 12095 12096'-mtls-dialect=DIALECT' 12097 Specify the dialect to use for accessing thread local storage. Two 12098 DIALECTs are supported--'gnu' and 'gnu2'. The 'gnu' dialect 12099 selects the original GNU scheme for supporting local and global 12100 dynamic TLS models. The 'gnu2' dialect selects the GNU descriptor 12101 scheme, which provides better performance for shared libraries. 12102 The GNU descriptor scheme is compatible with the original scheme, 12103 but does require new assembler, linker and library support. 12104 Initial and local exec TLS models are unaffected by this option and 12105 always use the original scheme. 12106 12107'-mword-relocations' 12108 Only generate absolute relocations on word-sized values (i.e. 12109 R_ARM_ABS32). This is enabled by default on targets (uClinux, 12110 SymbianOS) where the runtime loader imposes this restriction, and 12111 when '-fpic' or '-fPIC' is specified. 12112 12113'-mfix-cortex-m3-ldrd' 12114 Some Cortex-M3 cores can cause data corruption when 'ldrd' 12115 instructions with overlapping destination and base registers are 12116 used. This option avoids generating these instructions. This 12117 option is enabled by default when '-mcpu=cortex-m3' is specified. 12118 12119'-munaligned-access' 12120'-mno-unaligned-access' 12121 Enables (or disables) reading and writing of 16- and 32- bit values 12122 from addresses that are not 16- or 32- bit aligned. By default 12123 unaligned access is disabled for all pre-ARMv6 and all ARMv6-M 12124 architectures, and enabled for all other architectures. If 12125 unaligned access is not enabled then words in packed data 12126 structures will be accessed a byte at a time. 12127 12128 The ARM attribute 'Tag_CPU_unaligned_access' will be set in the 12129 generated object file to either true or false, depending upon the 12130 setting of this option. If unaligned access is enabled then the 12131 preprocessor symbol '__ARM_FEATURE_UNALIGNED' will also be defined. 12132 12133'-mneon-for-64bits' 12134 Enables using Neon to handle scalar 64-bits operations. This is 12135 disabled by default since the cost of moving data from core 12136 registers to Neon is high. 12137 12138'-mslow-flash-data' 12139 Assume loading data from flash is slower than fetching instruction. 12140 Therefore literal load is minimized for better performance. This 12141 option is only supported when compiling for ARMv7 M-profile and off 12142 by default. 12143 12144'-mrestrict-it' 12145 Restricts generation of IT blocks to conform to the rules of ARMv8. 12146 IT blocks can only contain a single 16-bit instruction from a 12147 select set of instructions. This option is on by default for ARMv8 12148 Thumb mode. 12149 12150 12151File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 12152 121533.17.5 AVR Options 12154------------------ 12155 12156These options are defined for AVR implementations: 12157 12158'-mmcu=MCU' 12159 Specify Atmel AVR instruction set architectures (ISA) or MCU type. 12160 12161 The default for this option is 'avr2'. 12162 12163 GCC supports the following AVR devices and ISAs: 12164 12165 'avr2' 12166 "Classic" devices with up to 8 KiB of program memory. 12167 MCU = 'attiny22', 'attiny26', 'at90c8534', 'at90s2313', 12168 'at90s2323', 'at90s2333', 'at90s2343', 'at90s4414', 12169 'at90s4433', 'at90s4434', 'at90s8515', 'at90s8535'. 12170 12171 'avr25' 12172 "Classic" devices with up to 8 KiB of program memory and with 12173 the 'MOVW' instruction. 12174 MCU = 'ata5272', 'ata6289', 'attiny13', 'attiny13a', 12175 'attiny2313', 'attiny2313a', 'attiny24', 'attiny24a', 12176 'attiny25', 'attiny261', 'attiny261a', 'attiny43u', 12177 'attiny4313', 'attiny44', 'attiny44a', 'attiny45', 12178 'attiny461', 'attiny461a', 'attiny48', 'attiny84', 12179 'attiny84a', 'attiny85', 'attiny861', 'attiny861a', 12180 'attiny87', 'attiny88', 'at86rf401'. 12181 12182 'avr3' 12183 "Classic" devices with 16 KiB up to 64 KiB of program memory. 12184 MCU = 'at43usb355', 'at76c711'. 12185 12186 'avr31' 12187 "Classic" devices with 128 KiB of program memory. 12188 MCU = 'atmega103', 'at43usb320'. 12189 12190 'avr35' 12191 "Classic" devices with 16 KiB up to 64 KiB of program memory 12192 and with the 'MOVW' instruction. 12193 MCU = 'ata5505', 'atmega16u2', 'atmega32u2', 'atmega8u2', 12194 'attiny1634', 'attiny167', 'at90usb162', 'at90usb82'. 12195 12196 'avr4' 12197 "Enhanced" devices with up to 8 KiB of program memory. 12198 MCU = 'ata6285', 'ata6286', 'atmega48', 'atmega48a', 12199 'atmega48p', 'atmega48pa', 'atmega8', 'atmega8a', 12200 'atmega8hva', 'atmega8515', 'atmega8535', 'atmega88', 12201 'atmega88a', 'atmega88p', 'atmega88pa', 'at90pwm1', 12202 'at90pwm2', 'at90pwm2b', 'at90pwm3', 'at90pwm3b', 'at90pwm81'. 12203 12204 'avr5' 12205 "Enhanced" devices with 16 KiB up to 64 KiB of program memory. 12206 12207 MCU = 'ata5790', 'ata5790n', 'ata5795', 'atmega16', 12208 'atmega16a', 'atmega16hva', 'atmega16hva2', 'atmega16hvb', 12209 'atmega16hvbrevb', 'atmega16m1', 'atmega16u4', 'atmega161', 12210 'atmega162', 'atmega163', 'atmega164a', 'atmega164p', 12211 'atmega164pa', 'atmega165', 'atmega165a', 'atmega165p', 12212 'atmega165pa', 'atmega168', 'atmega168a', 'atmega168p', 12213 'atmega168pa', 'atmega169', 'atmega169a', 'atmega169p', 12214 'atmega169pa', 'atmega26hvg', 'atmega32', 'atmega32a', 12215 'atmega32c1', 'atmega32hvb', 'atmega32hvbrevb', 'atmega32m1', 12216 'atmega32u4', 'atmega32u6', 'atmega323', 'atmega324a', 12217 'atmega324p', 'atmega324pa', 'atmega325', 'atmega325a', 12218 'atmega325p', 'atmega3250', 'atmega3250a', 'atmega3250p', 12219 'atmega3250pa', 'atmega328', 'atmega328p', 'atmega329', 12220 'atmega329a', 'atmega329p', 'atmega329pa', 'atmega3290', 12221 'atmega3290a', 'atmega3290p', 'atmega3290pa', 'atmega406', 12222 'atmega48hvf', 'atmega64', 'atmega64a', 'atmega64c1', 12223 'atmega64hve', 'atmega64m1', 'atmega64rfa2', 'atmega64rfr2', 12224 'atmega640', 'atmega644', 'atmega644a', 'atmega644p', 12225 'atmega644pa', 'atmega645', 'atmega645a', 'atmega645p', 12226 'atmega6450', 'atmega6450a', 'atmega6450p', 'atmega649', 12227 'atmega649a', 'atmega649p', 'atmega6490', 'atmega6490a', 12228 'atmega6490p', 'at90can32', 'at90can64', 'at90pwm161', 12229 'at90pwm216', 'at90pwm316', 'at90scr100', 'at90usb646', 12230 'at90usb647', 'at94k', 'm3000'. 12231 12232 'avr51' 12233 "Enhanced" devices with 128 KiB of program memory. 12234 MCU = 'atmega128', 'atmega128a', 'atmega128rfa1', 12235 'atmega1280', 'atmega1281', 'atmega1284', 'atmega1284p', 12236 'at90can128', 'at90usb1286', 'at90usb1287'. 12237 12238 'avr6' 12239 "Enhanced" devices with 3-byte PC, i.e. with more than 128 KiB 12240 of program memory. 12241 MCU = 'atmega2560', 'atmega2561'. 12242 12243 'avrxmega2' 12244 "XMEGA" devices with more than 8 KiB and up to 64 KiB of 12245 program memory. 12246 MCU = 'atmxt112sl', 'atmxt224', 'atmxt224e', 'atmxt336s', 12247 'atxmega16a4', 'atxmega16a4u', 'atxmega16c4', 'atxmega16d4', 12248 'atxmega32a4', 'atxmega32a4u', 'atxmega32c4', 'atxmega32d4', 12249 'atxmega32e5', 'atxmega32x1'. 12250 12251 'avrxmega4' 12252 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 12253 program memory. 12254 MCU = 'atxmega64a3', 'atxmega64a3u', 'atxmega64a4u', 12255 'atxmega64b1', 'atxmega64b3', 'atxmega64c3', 'atxmega64d3', 12256 'atxmega64d4'. 12257 12258 'avrxmega5' 12259 "XMEGA" devices with more than 64 KiB and up to 128 KiB of 12260 program memory and more than 64 KiB of RAM. 12261 MCU = 'atxmega64a1', 'atxmega64a1u'. 12262 12263 'avrxmega6' 12264 "XMEGA" devices with more than 128 KiB of program memory. 12265 MCU = 'atmxt540s', 'atmxt540sreva', 'atxmega128a3', 12266 'atxmega128a3u', 'atxmega128b1', 'atxmega128b3', 12267 'atxmega128c3', 'atxmega128d3', 'atxmega128d4', 12268 'atxmega192a3', 'atxmega192a3u', 'atxmega192c3', 12269 'atxmega192d3', 'atxmega256a3', 'atxmega256a3b', 12270 'atxmega256a3bu', 'atxmega256a3u', 'atxmega256c3', 12271 'atxmega256d3', 'atxmega384c3', 'atxmega384d3'. 12272 12273 'avrxmega7' 12274 "XMEGA" devices with more than 128 KiB of program memory and 12275 more than 64 KiB of RAM. 12276 MCU = 'atxmega128a1', 'atxmega128a1u', 'atxmega128a4u'. 12277 12278 'avr1' 12279 This ISA is implemented by the minimal AVR core and supported 12280 for assembler only. 12281 MCU = 'attiny11', 'attiny12', 'attiny15', 'attiny28', 12282 'at90s1200'. 12283 12284'-maccumulate-args' 12285 Accumulate outgoing function arguments and acquire/release the 12286 needed stack space for outgoing function arguments once in function 12287 prologue/epilogue. Without this option, outgoing arguments are 12288 pushed before calling a function and popped afterwards. 12289 12290 Popping the arguments after the function call can be expensive on 12291 AVR so that accumulating the stack space might lead to smaller 12292 executables because arguments need not to be removed from the stack 12293 after such a function call. 12294 12295 This option can lead to reduced code size for functions that 12296 perform several calls to functions that get their arguments on the 12297 stack like calls to printf-like functions. 12298 12299'-mbranch-cost=COST' 12300 Set the branch costs for conditional branch instructions to COST. 12301 Reasonable values for COST are small, non-negative integers. The 12302 default branch cost is 0. 12303 12304'-mcall-prologues' 12305 Functions prologues/epilogues are expanded as calls to appropriate 12306 subroutines. Code size is smaller. 12307 12308'-mint8' 12309 Assume 'int' to be 8-bit integer. This affects the sizes of all 12310 types: a 'char' is 1 byte, an 'int' is 1 byte, a 'long' is 2 bytes, 12311 and 'long long' is 4 bytes. Please note that this option does not 12312 conform to the C standards, but it results in smaller code size. 12313 12314'-mno-interrupts' 12315 Generated code is not compatible with hardware interrupts. Code 12316 size is smaller. 12317 12318'-mrelax' 12319 Try to replace 'CALL' resp. 'JMP' instruction by the shorter 12320 'RCALL' resp. 'RJMP' instruction if applicable. Setting '-mrelax' 12321 just adds the '--relax' option to the linker command line when the 12322 linker is called. 12323 12324 Jump relaxing is performed by the linker because jump offsets are 12325 not known before code is located. Therefore, the assembler code 12326 generated by the compiler is the same, but the instructions in the 12327 executable may differ from instructions in the assembler code. 12328 12329 Relaxing must be turned on if linker stubs are needed, see the 12330 section on 'EIND' and linker stubs below. 12331 12332'-msp8' 12333 Treat the stack pointer register as an 8-bit register, i.e. assume 12334 the high byte of the stack pointer is zero. In general, you don't 12335 need to set this option by hand. 12336 12337 This option is used internally by the compiler to select and build 12338 multilibs for architectures 'avr2' and 'avr25'. These 12339 architectures mix devices with and without 'SPH'. For any setting 12340 other than '-mmcu=avr2' or '-mmcu=avr25' the compiler driver will 12341 add or remove this option from the compiler proper's command line, 12342 because the compiler then knows if the device or architecture has 12343 an 8-bit stack pointer and thus no 'SPH' register or not. 12344 12345'-mstrict-X' 12346 Use address register 'X' in a way proposed by the hardware. This 12347 means that 'X' is only used in indirect, post-increment or 12348 pre-decrement addressing. 12349 12350 Without this option, the 'X' register may be used in the same way 12351 as 'Y' or 'Z' which then is emulated by additional instructions. 12352 For example, loading a value with 'X+const' addressing with a small 12353 non-negative 'const < 64' to a register RN is performed as 12354 12355 adiw r26, const ; X += const 12356 ld RN, X ; RN = *X 12357 sbiw r26, const ; X -= const 12358 12359'-mtiny-stack' 12360 Only change the lower 8 bits of the stack pointer. 12361 12362'-Waddr-space-convert' 12363 Warn about conversions between address spaces in the case where the 12364 resulting address space is not contained in the incoming address 12365 space. 12366 123673.17.5.1 'EIND' and Devices with more than 128 Ki Bytes of Flash 12368................................................................ 12369 12370Pointers in the implementation are 16 bits wide. The address of a 12371function or label is represented as word address so that indirect jumps 12372and calls can target any code address in the range of 64 Ki words. 12373 12374 In order to facilitate indirect jump on devices with more than 128 Ki 12375bytes of program memory space, there is a special function register 12376called 'EIND' that serves as most significant part of the target address 12377when 'EICALL' or 'EIJMP' instructions are used. 12378 12379 Indirect jumps and calls on these devices are handled as follows by the 12380compiler and are subject to some limitations: 12381 12382 * The compiler never sets 'EIND'. 12383 12384 * The compiler uses 'EIND' implicitely in 'EICALL'/'EIJMP' 12385 instructions or might read 'EIND' directly in order to emulate an 12386 indirect call/jump by means of a 'RET' instruction. 12387 12388 * The compiler assumes that 'EIND' never changes during the startup 12389 code or during the application. In particular, 'EIND' is not 12390 saved/restored in function or interrupt service routine 12391 prologue/epilogue. 12392 12393 * For indirect calls to functions and computed goto, the linker 12394 generates _stubs_. Stubs are jump pads sometimes also called 12395 _trampolines_. Thus, the indirect call/jump jumps to such a stub. 12396 The stub contains a direct jump to the desired address. 12397 12398 * Linker relaxation must be turned on so that the linker will 12399 generate the stubs correctly an all situaltion. See the compiler 12400 option '-mrelax' and the linler option '--relax'. There are corner 12401 cases where the linker is supposed to generate stubs but aborts 12402 without relaxation and without a helpful error message. 12403 12404 * The default linker script is arranged for code with 'EIND = 0'. If 12405 code is supposed to work for a setup with 'EIND != 0', a custom 12406 linker script has to be used in order to place the sections whose 12407 name start with '.trampolines' into the segment where 'EIND' points 12408 to. 12409 12410 * The startup code from libgcc never sets 'EIND'. Notice that 12411 startup code is a blend of code from libgcc and AVR-LibC. For the 12412 impact of AVR-LibC on 'EIND', see the 12413 AVR-LibC user manual (http://nongnu.org/avr-libc/user-manual/). 12414 12415 * It is legitimate for user-specific startup code to set up 'EIND' 12416 early, for example by means of initialization code located in 12417 section '.init3'. Such code runs prior to general startup code 12418 that initializes RAM and calls constructors, but after the bit of 12419 startup code from AVR-LibC that sets 'EIND' to the segment where 12420 the vector table is located. 12421 #include <avr/io.h> 12422 12423 static void 12424 __attribute__((section(".init3"),naked,used,no_instrument_function)) 12425 init3_set_eind (void) 12426 { 12427 __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" 12428 "out %i0,r24" :: "n" (&EIND) : "r24","memory"); 12429 } 12430 12431 The '__trampolines_start' symbol is defined in the linker script. 12432 12433 * Stubs are generated automatically by the linker if the following 12434 two conditions are met: 12435 12436 - The address of a label is taken by means of the 'gs' modifier 12437 (short for _generate stubs_) like so: 12438 LDI r24, lo8(gs(FUNC)) 12439 LDI r25, hi8(gs(FUNC)) 12440 - The final location of that label is in a code segment 12441 _outside_ the segment where the stubs are located. 12442 12443 * The compiler emits such 'gs' modifiers for code labels in the 12444 following situations: 12445 - Taking address of a function or code label. 12446 - Computed goto. 12447 - If prologue-save function is used, see '-mcall-prologues' 12448 command-line option. 12449 - Switch/case dispatch tables. If you do not want such dispatch 12450 tables you can specify the '-fno-jump-tables' command-line 12451 option. 12452 - C and C++ constructors/destructors called during 12453 startup/shutdown. 12454 - If the tools hit a 'gs()' modifier explained above. 12455 12456 * Jumping to non-symbolic addresses like so is _not_ supported: 12457 12458 int main (void) 12459 { 12460 /* Call function at word address 0x2 */ 12461 return ((int(*)(void)) 0x2)(); 12462 } 12463 12464 Instead, a stub has to be set up, i.e. the function has to be 12465 called through a symbol ('func_4' in the example): 12466 12467 int main (void) 12468 { 12469 extern int func_4 (void); 12470 12471 /* Call function at byte address 0x4 */ 12472 return func_4(); 12473 } 12474 12475 and the application be linked with '-Wl,--defsym,func_4=0x4'. 12476 Alternatively, 'func_4' can be defined in the linker script. 12477 124783.17.5.2 Handling of the 'RAMPD', 'RAMPX', 'RAMPY' and 'RAMPZ' Special Function Registers 12479......................................................................................... 12480 12481Some AVR devices support memories larger than the 64 KiB range that can 12482be accessed with 16-bit pointers. To access memory locations outside 12483this 64 KiB range, the contentent of a 'RAMP' register is used as high 12484part of the address: The 'X', 'Y', 'Z' address register is concatenated 12485with the 'RAMPX', 'RAMPY', 'RAMPZ' special function register, 12486respectively, to get a wide address. Similarly, 'RAMPD' is used 12487together with direct addressing. 12488 12489 * The startup code initializes the 'RAMP' special function registers 12490 with zero. 12491 12492 * If a *note named address space: AVR Named Address Spaces. other 12493 than generic or '__flash' is used, then 'RAMPZ' is set as needed 12494 before the operation. 12495 12496 * If the device supports RAM larger than 64 KiB and the compiler 12497 needs to change 'RAMPZ' to accomplish an operation, 'RAMPZ' is 12498 reset to zero after the operation. 12499 12500 * If the device comes with a specific 'RAMP' register, the ISR 12501 prologue/epilogue saves/restores that SFR and initializes it with 12502 zero in case the ISR code might (implicitly) use it. 12503 12504 * RAM larger than 64 KiB is not supported by GCC for AVR targets. If 12505 you use inline assembler to read from locations outside the 16-bit 12506 address range and change one of the 'RAMP' registers, you must 12507 reset it to zero after the access. 12508 125093.17.5.3 AVR Built-in Macros 12510............................ 12511 12512GCC defines several built-in macros so that the user code can test for 12513the presence or absence of features. Almost any of the following 12514built-in macros are deduced from device capabilities and thus triggered 12515by the '-mmcu=' command-line option. 12516 12517 For even more AVR-specific built-in macros see *note AVR Named Address 12518Spaces:: and *note AVR Built-in Functions::. 12519 12520'__AVR_ARCH__' 12521 Build-in macro that resolves to a decimal number that identifies 12522 the architecture and depends on the '-mmcu=MCU' option. Possible 12523 values are: 12524 12525 '2', '25', '3', '31', '35', '4', '5', '51', '6', '102', '104', 12526 '105', '106', '107' 12527 12528 for MCU='avr2', 'avr25', 'avr3', 'avr31', 'avr35', 'avr4', 'avr5', 12529 'avr51', 'avr6', 'avrxmega2', 'avrxmega4', 'avrxmega5', 12530 'avrxmega6', 'avrxmega7', respectively. If MCU specifies a device, 12531 this built-in macro is set accordingly. For example, with 12532 '-mmcu=atmega8' the macro will be defined to '4'. 12533 12534'__AVR_DEVICE__' 12535 Setting '-mmcu=DEVICE' defines this built-in macro which reflects 12536 the device's name. For example, '-mmcu=atmega8' defines the 12537 built-in macro '__AVR_ATmega8__', '-mmcu=attiny261a' defines 12538 '__AVR_ATtiny261A__', etc. 12539 12540 The built-in macros' names follow the scheme '__AVR_DEVICE__' where 12541 DEVICE is the device name as from the AVR user manual. The 12542 difference between DEVICE in the built-in macro and DEVICE in 12543 '-mmcu=DEVICE' is that the latter is always lowercase. 12544 12545 If DEVICE is not a device but only a core architecture like 12546 'avr51', this macro will not be defined. 12547 12548'__AVR_XMEGA__' 12549 The device / architecture belongs to the XMEGA family of devices. 12550 12551'__AVR_HAVE_ELPM__' 12552 The device has the the 'ELPM' instruction. 12553 12554'__AVR_HAVE_ELPMX__' 12555 The device has the 'ELPM RN,Z' and 'ELPM RN,Z+' instructions. 12556 12557'__AVR_HAVE_MOVW__' 12558 The device has the 'MOVW' instruction to perform 16-bit 12559 register-register moves. 12560 12561'__AVR_HAVE_LPMX__' 12562 The device has the 'LPM RN,Z' and 'LPM RN,Z+' instructions. 12563 12564'__AVR_HAVE_MUL__' 12565 The device has a hardware multiplier. 12566 12567'__AVR_HAVE_JMP_CALL__' 12568 The device has the 'JMP' and 'CALL' instructions. This is the case 12569 for devices with at least 16 KiB of program memory. 12570 12571'__AVR_HAVE_EIJMP_EICALL__' 12572'__AVR_3_BYTE_PC__' 12573 The device has the 'EIJMP' and 'EICALL' instructions. This is the 12574 case for devices with more than 128 KiB of program memory. This 12575 also means that the program counter (PC) is 3 bytes wide. 12576 12577'__AVR_2_BYTE_PC__' 12578 The program counter (PC) is 2 bytes wide. This is the case for 12579 devices with up to 128 KiB of program memory. 12580 12581'__AVR_HAVE_8BIT_SP__' 12582'__AVR_HAVE_16BIT_SP__' 12583 The stack pointer (SP) register is treated as 8-bit respectively 12584 16-bit register by the compiler. The definition of these macros is 12585 affected by '-mtiny-stack'. 12586 12587'__AVR_HAVE_SPH__' 12588'__AVR_SP8__' 12589 The device has the SPH (high part of stack pointer) special 12590 function register or has an 8-bit stack pointer, respectively. The 12591 definition of these macros is affected by '-mmcu=' and in the cases 12592 of '-mmcu=avr2' and '-mmcu=avr25' also by '-msp8'. 12593 12594'__AVR_HAVE_RAMPD__' 12595'__AVR_HAVE_RAMPX__' 12596'__AVR_HAVE_RAMPY__' 12597'__AVR_HAVE_RAMPZ__' 12598 The device has the 'RAMPD', 'RAMPX', 'RAMPY', 'RAMPZ' special 12599 function register, respectively. 12600 12601'__NO_INTERRUPTS__' 12602 This macro reflects the '-mno-interrupts' command line option. 12603 12604'__AVR_ERRATA_SKIP__' 12605'__AVR_ERRATA_SKIP_JMP_CALL__' 12606 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit 12607 instructions because of a hardware erratum. Skip instructions are 12608 'SBRS', 'SBRC', 'SBIS', 'SBIC' and 'CPSE'. The second macro is 12609 only defined if '__AVR_HAVE_JMP_CALL__' is also set. 12610 12611'__AVR_ISA_RMW__' 12612 The device has Read-Modify-Write instructions (XCH, LAC, LAS and 12613 LAT). 12614 12615'__AVR_SFR_OFFSET__=OFFSET' 12616 Instructions that can address I/O special function registers 12617 directly like 'IN', 'OUT', 'SBI', etc. may use a different address 12618 as if addressed by an instruction to access RAM like 'LD' or 'STS'. 12619 This offset depends on the device architecture and has to be 12620 subtracted from the RAM address in order to get the respective 12621 I/O address. 12622 12623'__WITH_AVRLIBC__' 12624 The compiler is configured to be used together with AVR-Libc. See 12625 the '--with-avrlibc' configure option. 12626 12627 12628File: gcc.info, Node: Blackfin Options, Next: C6X Options, Prev: AVR Options, Up: Submodel Options 12629 126303.17.6 Blackfin Options 12631----------------------- 12632 12633'-mcpu=CPU[-SIREVISION]' 12634 Specifies the name of the target Blackfin processor. Currently, 12635 CPU can be one of 'bf512', 'bf514', 'bf516', 'bf518', 'bf522', 12636 'bf523', 'bf524', 'bf525', 'bf526', 'bf527', 'bf531', 'bf532', 12637 'bf533', 'bf534', 'bf536', 'bf537', 'bf538', 'bf539', 'bf542', 12638 'bf544', 'bf547', 'bf548', 'bf549', 'bf542m', 'bf544m', 'bf547m', 12639 'bf548m', 'bf549m', 'bf561', 'bf592'. 12640 12641 The optional SIREVISION specifies the silicon revision of the 12642 target Blackfin processor. Any workarounds available for the 12643 targeted silicon revision are enabled. If SIREVISION is 'none', no 12644 workarounds are enabled. If SIREVISION is 'any', all workarounds 12645 for the targeted processor are enabled. The '__SILICON_REVISION__' 12646 macro is defined to two hexadecimal digits representing the major 12647 and minor numbers in the silicon revision. If SIREVISION is 12648 'none', the '__SILICON_REVISION__' is not defined. If SIREVISION 12649 is 'any', the '__SILICON_REVISION__' is defined to be '0xffff'. If 12650 this optional SIREVISION is not used, GCC assumes the latest known 12651 silicon revision of the targeted Blackfin processor. 12652 12653 GCC defines a preprocessor macro for the specified CPU. For the 12654 'bfin-elf' toolchain, this option causes the hardware BSP provided 12655 by libgloss to be linked in if '-msim' is not given. 12656 12657 Without this option, 'bf532' is used as the processor by default. 12658 12659 Note that support for 'bf561' is incomplete. For 'bf561', only the 12660 preprocessor macro is defined. 12661 12662'-msim' 12663 Specifies that the program will be run on the simulator. This 12664 causes the simulator BSP provided by libgloss to be linked in. 12665 This option has effect only for 'bfin-elf' toolchain. Certain 12666 other options, such as '-mid-shared-library' and '-mfdpic', imply 12667 '-msim'. 12668 12669'-momit-leaf-frame-pointer' 12670 Don't keep the frame pointer in a register for leaf functions. 12671 This avoids the instructions to save, set up and restore frame 12672 pointers and makes an extra register available in leaf functions. 12673 The option '-fomit-frame-pointer' removes the frame pointer for all 12674 functions, which might make debugging harder. 12675 12676'-mspecld-anomaly' 12677 When enabled, the compiler ensures that the generated code does not 12678 contain speculative loads after jump instructions. If this option 12679 is used, '__WORKAROUND_SPECULATIVE_LOADS' is defined. 12680 12681'-mno-specld-anomaly' 12682 Don't generate extra code to prevent speculative loads from 12683 occurring. 12684 12685'-mcsync-anomaly' 12686 When enabled, the compiler ensures that the generated code does not 12687 contain CSYNC or SSYNC instructions too soon after conditional 12688 branches. If this option is used, '__WORKAROUND_SPECULATIVE_SYNCS' 12689 is defined. 12690 12691'-mno-csync-anomaly' 12692 Don't generate extra code to prevent CSYNC or SSYNC instructions 12693 from occurring too soon after a conditional branch. 12694 12695'-mlow-64k' 12696 When enabled, the compiler is free to take advantage of the 12697 knowledge that the entire program fits into the low 64k of memory. 12698 12699'-mno-low-64k' 12700 Assume that the program is arbitrarily large. This is the default. 12701 12702'-mstack-check-l1' 12703 Do stack checking using information placed into L1 scratchpad 12704 memory by the uClinux kernel. 12705 12706'-mid-shared-library' 12707 Generate code that supports shared libraries via the library ID 12708 method. This allows for execute in place and shared libraries in 12709 an environment without virtual memory management. This option 12710 implies '-fPIC'. With a 'bfin-elf' target, this option implies 12711 '-msim'. 12712 12713'-mno-id-shared-library' 12714 Generate code that doesn't assume ID-based shared libraries are 12715 being used. This is the default. 12716 12717'-mleaf-id-shared-library' 12718 Generate code that supports shared libraries via the library ID 12719 method, but assumes that this library or executable won't link 12720 against any other ID shared libraries. That allows the compiler to 12721 use faster code for jumps and calls. 12722 12723'-mno-leaf-id-shared-library' 12724 Do not assume that the code being compiled won't link against any 12725 ID shared libraries. Slower code is generated for jump and call 12726 insns. 12727 12728'-mshared-library-id=n' 12729 Specifies the identification number of the ID-based shared library 12730 being compiled. Specifying a value of 0 generates more compact 12731 code; specifying other values forces the allocation of that number 12732 to the current library but is no more space- or time-efficient than 12733 omitting this option. 12734 12735'-msep-data' 12736 Generate code that allows the data segment to be located in a 12737 different area of memory from the text segment. This allows for 12738 execute in place in an environment without virtual memory 12739 management by eliminating relocations against the text section. 12740 12741'-mno-sep-data' 12742 Generate code that assumes that the data segment follows the text 12743 segment. This is the default. 12744 12745'-mlong-calls' 12746'-mno-long-calls' 12747 Tells the compiler to perform function calls by first loading the 12748 address of the function into a register and then performing a 12749 subroutine call on this register. This switch is needed if the 12750 target function lies outside of the 24-bit addressing range of the 12751 offset-based version of subroutine call instruction. 12752 12753 This feature is not enabled by default. Specifying 12754 '-mno-long-calls' restores the default behavior. Note these 12755 switches have no effect on how the compiler generates code to 12756 handle function calls via function pointers. 12757 12758'-mfast-fp' 12759 Link with the fast floating-point library. This library relaxes 12760 some of the IEEE floating-point standard's rules for checking 12761 inputs against Not-a-Number (NAN), in the interest of performance. 12762 12763'-minline-plt' 12764 Enable inlining of PLT entries in function calls to functions that 12765 are not known to bind locally. It has no effect without '-mfdpic'. 12766 12767'-mmulticore' 12768 Build a standalone application for multicore Blackfin processors. 12769 This option causes proper start files and link scripts supporting 12770 multicore to be used, and defines the macro '__BFIN_MULTICORE'. It 12771 can only be used with '-mcpu=bf561[-SIREVISION]'. 12772 12773 This option can be used with '-mcorea' or '-mcoreb', which selects 12774 the one-application-per-core programming model. Without '-mcorea' 12775 or '-mcoreb', the single-application/dual-core programming model is 12776 used. In this model, the main function of Core B should be named 12777 as 'coreb_main'. 12778 12779 If this option is not used, the single-core application programming 12780 model is used. 12781 12782'-mcorea' 12783 Build a standalone application for Core A of BF561 when using the 12784 one-application-per-core programming model. Proper start files and 12785 link scripts are used to support Core A, and the macro 12786 '__BFIN_COREA' is defined. This option can only be used in 12787 conjunction with '-mmulticore'. 12788 12789'-mcoreb' 12790 Build a standalone application for Core B of BF561 when using the 12791 one-application-per-core programming model. Proper start files and 12792 link scripts are used to support Core B, and the macro 12793 '__BFIN_COREB' is defined. When this option is used, 'coreb_main' 12794 should be used instead of 'main'. This option can only be used in 12795 conjunction with '-mmulticore'. 12796 12797'-msdram' 12798 Build a standalone application for SDRAM. Proper start files and 12799 link scripts are used to put the application into SDRAM, and the 12800 macro '__BFIN_SDRAM' is defined. The loader should initialize 12801 SDRAM before loading the application. 12802 12803'-micplb' 12804 Assume that ICPLBs are enabled at run time. This has an effect on 12805 certain anomaly workarounds. For Linux targets, the default is to 12806 assume ICPLBs are enabled; for standalone applications the default 12807 is off. 12808 12809 12810File: gcc.info, Node: C6X Options, Next: CRIS Options, Prev: Blackfin Options, Up: Submodel Options 12811 128123.17.7 C6X Options 12813------------------ 12814 12815'-march=NAME' 12816 This specifies the name of the target architecture. GCC uses this 12817 name to determine what kind of instructions it can emit when 12818 generating assembly code. Permissible names are: 'c62x', 'c64x', 12819 'c64x+', 'c67x', 'c67x+', 'c674x'. 12820 12821'-mbig-endian' 12822 Generate code for a big-endian target. 12823 12824'-mlittle-endian' 12825 Generate code for a little-endian target. This is the default. 12826 12827'-msim' 12828 Choose startup files and linker script suitable for the simulator. 12829 12830'-msdata=default' 12831 Put small global and static data in the '.neardata' section, which 12832 is pointed to by register 'B14'. Put small uninitialized global 12833 and static data in the '.bss' section, which is adjacent to the 12834 '.neardata' section. Put small read-only data into the '.rodata' 12835 section. The corresponding sections used for large pieces of data 12836 are '.fardata', '.far' and '.const'. 12837 12838'-msdata=all' 12839 Put all data, not just small objects, into the sections reserved 12840 for small data, and use addressing relative to the 'B14' register 12841 to access them. 12842 12843'-msdata=none' 12844 Make no use of the sections reserved for small data, and use 12845 absolute addresses to access all data. Put all initialized global 12846 and static data in the '.fardata' section, and all uninitialized 12847 data in the '.far' section. Put all constant data into the 12848 '.const' section. 12849 12850 12851File: gcc.info, Node: CRIS Options, Next: CR16 Options, Prev: C6X Options, Up: Submodel Options 12852 128533.17.8 CRIS Options 12854------------------- 12855 12856These options are defined specifically for the CRIS ports. 12857 12858'-march=ARCHITECTURE-TYPE' 12859'-mcpu=ARCHITECTURE-TYPE' 12860 Generate code for the specified architecture. The choices for 12861 ARCHITECTURE-TYPE are 'v3', 'v8' and 'v10' for respectively 12862 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is 'v0' except for 12863 cris-axis-linux-gnu, where the default is 'v10'. 12864 12865'-mtune=ARCHITECTURE-TYPE' 12866 Tune to ARCHITECTURE-TYPE everything applicable about the generated 12867 code, except for the ABI and the set of available instructions. 12868 The choices for ARCHITECTURE-TYPE are the same as for 12869 '-march=ARCHITECTURE-TYPE'. 12870 12871'-mmax-stack-frame=N' 12872 Warn when the stack frame of a function exceeds N bytes. 12873 12874'-metrax4' 12875'-metrax100' 12876 The options '-metrax4' and '-metrax100' are synonyms for 12877 '-march=v3' and '-march=v8' respectively. 12878 12879'-mmul-bug-workaround' 12880'-mno-mul-bug-workaround' 12881 Work around a bug in the 'muls' and 'mulu' instructions for CPU 12882 models where it applies. This option is active by default. 12883 12884'-mpdebug' 12885 Enable CRIS-specific verbose debug-related information in the 12886 assembly code. This option also has the effect of turning off the 12887 '#NO_APP' formatted-code indicator to the assembler at the 12888 beginning of the assembly file. 12889 12890'-mcc-init' 12891 Do not use condition-code results from previous instruction; always 12892 emit compare and test instructions before use of condition codes. 12893 12894'-mno-side-effects' 12895 Do not emit instructions with side effects in addressing modes 12896 other than post-increment. 12897 12898'-mstack-align' 12899'-mno-stack-align' 12900'-mdata-align' 12901'-mno-data-align' 12902'-mconst-align' 12903'-mno-const-align' 12904 These options ('no-' options) arrange (eliminate arrangements) for 12905 the stack frame, individual data and constants to be aligned for 12906 the maximum single data access size for the chosen CPU model. The 12907 default is to arrange for 32-bit alignment. ABI details such as 12908 structure layout are not affected by these options. 12909 12910'-m32-bit' 12911'-m16-bit' 12912'-m8-bit' 12913 Similar to the stack- data- and const-align options above, these 12914 options arrange for stack frame, writable data and constants to all 12915 be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 12916 alignment. 12917 12918'-mno-prologue-epilogue' 12919'-mprologue-epilogue' 12920 With '-mno-prologue-epilogue', the normal function prologue and 12921 epilogue which set up the stack frame are omitted and no return 12922 instructions or return sequences are generated in the code. Use 12923 this option only together with visual inspection of the compiled 12924 code: no warnings or errors are generated when call-saved registers 12925 must be saved, or storage for local variables needs to be 12926 allocated. 12927 12928'-mno-gotplt' 12929'-mgotplt' 12930 With '-fpic' and '-fPIC', don't generate (do generate) instruction 12931 sequences that load addresses for functions from the PLT part of 12932 the GOT rather than (traditional on other architectures) calls to 12933 the PLT. The default is '-mgotplt'. 12934 12935'-melf' 12936 Legacy no-op option only recognized with the cris-axis-elf and 12937 cris-axis-linux-gnu targets. 12938 12939'-mlinux' 12940 Legacy no-op option only recognized with the cris-axis-linux-gnu 12941 target. 12942 12943'-sim' 12944 This option, recognized for the cris-axis-elf, arranges to link 12945 with input-output functions from a simulator library. Code, 12946 initialized data and zero-initialized data are allocated 12947 consecutively. 12948 12949'-sim2' 12950 Like '-sim', but pass linker options to locate initialized data at 12951 0x40000000 and zero-initialized data at 0x80000000. 12952 12953 12954File: gcc.info, Node: CR16 Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 12955 129563.17.9 CR16 Options 12957------------------- 12958 12959These options are defined specifically for the CR16 ports. 12960 12961'-mmac' 12962 Enable the use of multiply-accumulate instructions. Disabled by 12963 default. 12964 12965'-mcr16cplus' 12966'-mcr16c' 12967 Generate code for CR16C or CR16C+ architecture. CR16C+ 12968 architecture is default. 12969 12970'-msim' 12971 Links the library libsim.a which is in compatible with simulator. 12972 Applicable to ELF compiler only. 12973 12974'-mint32' 12975 Choose integer type as 32-bit wide. 12976 12977'-mbit-ops' 12978 Generates 'sbit'/'cbit' instructions for bit manipulations. 12979 12980'-mdata-model=MODEL' 12981 Choose a data model. The choices for MODEL are 'near', 'far' or 12982 'medium'. 'medium' is default. However, 'far' is not valid with 12983 '-mcr16c', as the CR16C architecture does not support the far data 12984 model. 12985 12986 12987File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CR16 Options, Up: Submodel Options 12988 129893.17.10 Darwin Options 12990---------------------- 12991 12992These options are defined for all architectures running the Darwin 12993operating system. 12994 12995 FSF GCC on Darwin does not create "fat" object files; it creates an 12996object file for the single architecture that GCC was built to target. 12997Apple's GCC on Darwin does create "fat" files if multiple '-arch' 12998options are used; it does so by running the compiler or linker multiple 12999times and joining the results together with 'lipo'. 13000 13001 The subtype of the file created (like 'ppc7400' or 'ppc970' or 'i686') 13002is determined by the flags that specify the ISA that GCC is targeting, 13003like '-mcpu' or '-march'. The '-force_cpusubtype_ALL' option can be 13004used to override this. 13005 13006 The Darwin tools vary in their behavior when presented with an ISA 13007mismatch. The assembler, 'as', only permits instructions to be used 13008that are valid for the subtype of the file it is generating, so you 13009cannot put 64-bit instructions in a 'ppc750' object file. The linker 13010for shared libraries, '/usr/bin/libtool', fails and prints an error if 13011asked to create a shared library with a less restrictive subtype than 13012its input files (for instance, trying to put a 'ppc970' object file in a 13013'ppc7400' library). The linker for executables, 'ld', quietly gives the 13014executable the most restrictive subtype of any of its input files. 13015 13016'-FDIR' 13017 Add the framework directory DIR to the head of the list of 13018 directories to be searched for header files. These directories are 13019 interleaved with those specified by '-I' options and are scanned in 13020 a left-to-right order. 13021 13022 A framework directory is a directory with frameworks in it. A 13023 framework is a directory with a 'Headers' and/or 'PrivateHeaders' 13024 directory contained directly in it that ends in '.framework'. The 13025 name of a framework is the name of this directory excluding the 13026 '.framework'. Headers associated with the framework are found in 13027 one of those two directories, with 'Headers' being searched first. 13028 A subframework is a framework directory that is in a framework's 13029 'Frameworks' directory. Includes of subframework headers can only 13030 appear in a header of a framework that contains the subframework, 13031 or in a sibling subframework header. Two subframeworks are 13032 siblings if they occur in the same framework. A subframework 13033 should not have the same name as a framework; a warning is issued 13034 if this is violated. Currently a subframework cannot have 13035 subframeworks; in the future, the mechanism may be extended to 13036 support this. The standard frameworks can be found in 13037 '/System/Library/Frameworks' and '/Library/Frameworks'. An example 13038 include looks like '#include <Framework/header.h>', where 13039 'Framework' denotes the name of the framework and 'header.h' is 13040 found in the 'PrivateHeaders' or 'Headers' directory. 13041 13042'-iframeworkDIR' 13043 Like '-F' except the directory is a treated as a system directory. 13044 The main difference between this '-iframework' and '-F' is that 13045 with '-iframework' the compiler does not warn about constructs 13046 contained within header files found via DIR. This option is valid 13047 only for the C family of languages. 13048 13049'-gused' 13050 Emit debugging information for symbols that are used. For stabs 13051 debugging format, this enables '-feliminate-unused-debug-symbols'. 13052 This is by default ON. 13053 13054'-gfull' 13055 Emit debugging information for all symbols and types. 13056 13057'-mmacosx-version-min=VERSION' 13058 The earliest version of MacOS X that this executable will run on is 13059 VERSION. Typical values of VERSION include '10.1', '10.2', and 13060 '10.3.9'. 13061 13062 If the compiler was built to use the system's headers by default, 13063 then the default for this option is the system version on which the 13064 compiler is running, otherwise the default is to make choices that 13065 are compatible with as many systems and code bases as possible. 13066 13067'-mkernel' 13068 Enable kernel development mode. The '-mkernel' option sets 13069 '-static', '-fno-common', '-fno-use-cxa-atexit', '-fno-exceptions', 13070 '-fno-non-call-exceptions', '-fapple-kext', '-fno-weak' and 13071 '-fno-rtti' where applicable. This mode also sets '-mno-altivec', 13072 '-msoft-float', '-fno-builtin' and '-mlong-branch' for PowerPC 13073 targets. 13074 13075'-mone-byte-bool' 13076 Override the defaults for 'bool' so that 'sizeof(bool)==1'. By 13077 default 'sizeof(bool)' is '4' when compiling for Darwin/PowerPC and 13078 '1' when compiling for Darwin/x86, so this option has no effect on 13079 x86. 13080 13081 *Warning:* The '-mone-byte-bool' switch causes GCC to generate code 13082 that is not binary compatible with code generated without that 13083 switch. Using this switch may require recompiling all other 13084 modules in a program, including system libraries. Use this switch 13085 to conform to a non-default data model. 13086 13087'-mfix-and-continue' 13088'-ffix-and-continue' 13089'-findirect-data' 13090 Generate code suitable for fast turnaround development, such as to 13091 allow GDB to dynamically load '.o' files into already-running 13092 programs. '-findirect-data' and '-ffix-and-continue' are provided 13093 for backwards compatibility. 13094 13095'-all_load' 13096 Loads all members of static archive libraries. See man ld(1) for 13097 more information. 13098 13099'-arch_errors_fatal' 13100 Cause the errors having to do with files that have the wrong 13101 architecture to be fatal. 13102 13103'-bind_at_load' 13104 Causes the output file to be marked such that the dynamic linker 13105 will bind all undefined references when the file is loaded or 13106 launched. 13107 13108'-bundle' 13109 Produce a Mach-o bundle format file. See man ld(1) for more 13110 information. 13111 13112'-bundle_loader EXECUTABLE' 13113 This option specifies the EXECUTABLE that will load the build 13114 output file being linked. See man ld(1) for more information. 13115 13116'-dynamiclib' 13117 When passed this option, GCC produces a dynamic library instead of 13118 an executable when linking, using the Darwin 'libtool' command. 13119 13120'-force_cpusubtype_ALL' 13121 This causes GCC's output file to have the ALL subtype, instead of 13122 one controlled by the '-mcpu' or '-march' option. 13123 13124'-allowable_client CLIENT_NAME' 13125'-client_name' 13126'-compatibility_version' 13127'-current_version' 13128'-dead_strip' 13129'-dependency-file' 13130'-dylib_file' 13131'-dylinker_install_name' 13132'-dynamic' 13133'-exported_symbols_list' 13134'-filelist' 13135'-flat_namespace' 13136'-force_flat_namespace' 13137'-headerpad_max_install_names' 13138'-image_base' 13139'-init' 13140'-install_name' 13141'-keep_private_externs' 13142'-multi_module' 13143'-multiply_defined' 13144'-multiply_defined_unused' 13145'-noall_load' 13146'-no_dead_strip_inits_and_terms' 13147'-nofixprebinding' 13148'-nomultidefs' 13149'-noprebind' 13150'-noseglinkedit' 13151'-pagezero_size' 13152'-prebind' 13153'-prebind_all_twolevel_modules' 13154'-private_bundle' 13155'-read_only_relocs' 13156'-sectalign' 13157'-sectobjectsymbols' 13158'-whyload' 13159'-seg1addr' 13160'-sectcreate' 13161'-sectobjectsymbols' 13162'-sectorder' 13163'-segaddr' 13164'-segs_read_only_addr' 13165'-segs_read_write_addr' 13166'-seg_addr_table' 13167'-seg_addr_table_filename' 13168'-seglinkedit' 13169'-segprot' 13170'-segs_read_only_addr' 13171'-segs_read_write_addr' 13172'-single_module' 13173'-static' 13174'-sub_library' 13175'-sub_umbrella' 13176'-twolevel_namespace' 13177'-umbrella' 13178'-undefined' 13179'-unexported_symbols_list' 13180'-weak_reference_mismatches' 13181'-whatsloaded' 13182 These options are passed to the Darwin linker. The Darwin linker 13183 man page describes them in detail. 13184 13185 13186File: gcc.info, Node: DEC Alpha Options, Next: FR30 Options, Prev: Darwin Options, Up: Submodel Options 13187 131883.17.11 DEC Alpha Options 13189------------------------- 13190 13191These '-m' options are defined for the DEC Alpha implementations: 13192 13193'-mno-soft-float' 13194'-msoft-float' 13195 Use (do not use) the hardware floating-point instructions for 13196 floating-point operations. When '-msoft-float' is specified, 13197 functions in 'libgcc.a' are used to perform floating-point 13198 operations. Unless they are replaced by routines that emulate the 13199 floating-point operations, or compiled in such a way as to call 13200 such emulations routines, these routines issue floating-point 13201 operations. If you are compiling for an Alpha without 13202 floating-point operations, you must ensure that the library is 13203 built so as not to call them. 13204 13205 Note that Alpha implementations without floating-point operations 13206 are required to have floating-point registers. 13207 13208'-mfp-reg' 13209'-mno-fp-regs' 13210 Generate code that uses (does not use) the floating-point register 13211 set. '-mno-fp-regs' implies '-msoft-float'. If the floating-point 13212 register set is not used, floating-point operands are passed in 13213 integer registers as if they were integers and floating-point 13214 results are passed in '$0' instead of '$f0'. This is a 13215 non-standard calling sequence, so any function with a 13216 floating-point argument or return value called by code compiled 13217 with '-mno-fp-regs' must also be compiled with that option. 13218 13219 A typical use of this option is building a kernel that does not 13220 use, and hence need not save and restore, any floating-point 13221 registers. 13222 13223'-mieee' 13224 The Alpha architecture implements floating-point hardware optimized 13225 for maximum performance. It is mostly compliant with the IEEE 13226 floating-point standard. However, for full compliance, software 13227 assistance is required. This option generates code fully 13228 IEEE-compliant code _except_ that the INEXACT-FLAG is not 13229 maintained (see below). If this option is turned on, the 13230 preprocessor macro '_IEEE_FP' is defined during compilation. The 13231 resulting code is less efficient but is able to correctly support 13232 denormalized numbers and exceptional IEEE values such as 13233 not-a-number and plus/minus infinity. Other Alpha compilers call 13234 this option '-ieee_with_no_inexact'. 13235 13236'-mieee-with-inexact' 13237 This is like '-mieee' except the generated code also maintains the 13238 IEEE INEXACT-FLAG. Turning on this option causes the generated 13239 code to implement fully-compliant IEEE math. In addition to 13240 '_IEEE_FP', '_IEEE_FP_EXACT' is defined as a preprocessor macro. 13241 On some Alpha implementations the resulting code may execute 13242 significantly slower than the code generated by default. Since 13243 there is very little code that depends on the INEXACT-FLAG, you 13244 should normally not specify this option. Other Alpha compilers 13245 call this option '-ieee_with_inexact'. 13246 13247'-mfp-trap-mode=TRAP-MODE' 13248 This option controls what floating-point related traps are enabled. 13249 Other Alpha compilers call this option '-fptm TRAP-MODE'. The trap 13250 mode can be set to one of four values: 13251 13252 'n' 13253 This is the default (normal) setting. The only traps that are 13254 enabled are the ones that cannot be disabled in software 13255 (e.g., division by zero trap). 13256 13257 'u' 13258 In addition to the traps enabled by 'n', underflow traps are 13259 enabled as well. 13260 13261 'su' 13262 Like 'u', but the instructions are marked to be safe for 13263 software completion (see Alpha architecture manual for 13264 details). 13265 13266 'sui' 13267 Like 'su', but inexact traps are enabled as well. 13268 13269'-mfp-rounding-mode=ROUNDING-MODE' 13270 Selects the IEEE rounding mode. Other Alpha compilers call this 13271 option '-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 13272 13273 'n' 13274 Normal IEEE rounding mode. Floating-point numbers are rounded 13275 towards the nearest machine number or towards the even machine 13276 number in case of a tie. 13277 13278 'm' 13279 Round towards minus infinity. 13280 13281 'c' 13282 Chopped rounding mode. Floating-point numbers are rounded 13283 towards zero. 13284 13285 'd' 13286 Dynamic rounding mode. A field in the floating-point control 13287 register (FPCR, see Alpha architecture reference manual) 13288 controls the rounding mode in effect. The C library 13289 initializes this register for rounding towards plus infinity. 13290 Thus, unless your program modifies the FPCR, 'd' corresponds 13291 to round towards plus infinity. 13292 13293'-mtrap-precision=TRAP-PRECISION' 13294 In the Alpha architecture, floating-point traps are imprecise. 13295 This means without software assistance it is impossible to recover 13296 from a floating trap and program execution normally needs to be 13297 terminated. GCC can generate code that can assist operating system 13298 trap handlers in determining the exact location that caused a 13299 floating-point trap. Depending on the requirements of an 13300 application, different levels of precisions can be selected: 13301 13302 'p' 13303 Program precision. This option is the default and means a 13304 trap handler can only identify which program caused a 13305 floating-point exception. 13306 13307 'f' 13308 Function precision. The trap handler can determine the 13309 function that caused a floating-point exception. 13310 13311 'i' 13312 Instruction precision. The trap handler can determine the 13313 exact instruction that caused a floating-point exception. 13314 13315 Other Alpha compilers provide the equivalent options called 13316 '-scope_safe' and '-resumption_safe'. 13317 13318'-mieee-conformant' 13319 This option marks the generated code as IEEE conformant. You must 13320 not use this option unless you also specify '-mtrap-precision=i' 13321 and either '-mfp-trap-mode=su' or '-mfp-trap-mode=sui'. Its only 13322 effect is to emit the line '.eflag 48' in the function prologue of 13323 the generated assembly file. 13324 13325'-mbuild-constants' 13326 Normally GCC examines a 32- or 64-bit integer constant to see if it 13327 can construct it from smaller constants in two or three 13328 instructions. If it cannot, it outputs the constant as a literal 13329 and generates code to load it from the data segment at run time. 13330 13331 Use this option to require GCC to construct _all_ integer constants 13332 using code, even if it takes more instructions (the maximum is 13333 six). 13334 13335 You typically use this option to build a shared library dynamic 13336 loader. Itself a shared library, it must relocate itself in memory 13337 before it can find the variables and constants in its own data 13338 segment. 13339 13340'-mbwx' 13341'-mno-bwx' 13342'-mcix' 13343'-mno-cix' 13344'-mfix' 13345'-mno-fix' 13346'-mmax' 13347'-mno-max' 13348 Indicate whether GCC should generate code to use the optional BWX, 13349 CIX, FIX and MAX instruction sets. The default is to use the 13350 instruction sets supported by the CPU type specified via '-mcpu=' 13351 option or that of the CPU on which GCC was built if none is 13352 specified. 13353 13354'-mfloat-vax' 13355'-mfloat-ieee' 13356 Generate code that uses (does not use) VAX F and G floating-point 13357 arithmetic instead of IEEE single and double precision. 13358 13359'-mexplicit-relocs' 13360'-mno-explicit-relocs' 13361 Older Alpha assemblers provided no way to generate symbol 13362 relocations except via assembler macros. Use of these macros does 13363 not allow optimal instruction scheduling. GNU binutils as of 13364 version 2.12 supports a new syntax that allows the compiler to 13365 explicitly mark which relocations should apply to which 13366 instructions. This option is mostly useful for debugging, as GCC 13367 detects the capabilities of the assembler when it is built and sets 13368 the default accordingly. 13369 13370'-msmall-data' 13371'-mlarge-data' 13372 When '-mexplicit-relocs' is in effect, static data is accessed via 13373 "gp-relative" relocations. When '-msmall-data' is used, objects 8 13374 bytes long or smaller are placed in a "small data area" (the 13375 '.sdata' and '.sbss' sections) and are accessed via 16-bit 13376 relocations off of the '$gp' register. This limits the size of the 13377 small data area to 64KB, but allows the variables to be directly 13378 accessed via a single instruction. 13379 13380 The default is '-mlarge-data'. With this option the data area is 13381 limited to just below 2GB. Programs that require more than 2GB of 13382 data must use 'malloc' or 'mmap' to allocate the data in the heap 13383 instead of in the program's data segment. 13384 13385 When generating code for shared libraries, '-fpic' implies 13386 '-msmall-data' and '-fPIC' implies '-mlarge-data'. 13387 13388'-msmall-text' 13389'-mlarge-text' 13390 When '-msmall-text' is used, the compiler assumes that the code of 13391 the entire program (or shared library) fits in 4MB, and is thus 13392 reachable with a branch instruction. When '-msmall-data' is used, 13393 the compiler can assume that all local symbols share the same '$gp' 13394 value, and thus reduce the number of instructions required for a 13395 function call from 4 to 1. 13396 13397 The default is '-mlarge-text'. 13398 13399'-mcpu=CPU_TYPE' 13400 Set the instruction set and instruction scheduling parameters for 13401 machine type CPU_TYPE. You can specify either the 'EV' style name 13402 or the corresponding chip number. GCC supports scheduling 13403 parameters for the EV4, EV5 and EV6 family of processors and 13404 chooses the default values for the instruction set from the 13405 processor you specify. If you do not specify a processor type, GCC 13406 defaults to the processor on which the compiler was built. 13407 13408 Supported values for CPU_TYPE are 13409 13410 'ev4' 13411 'ev45' 13412 '21064' 13413 Schedules as an EV4 and has no instruction set extensions. 13414 13415 'ev5' 13416 '21164' 13417 Schedules as an EV5 and has no instruction set extensions. 13418 13419 'ev56' 13420 '21164a' 13421 Schedules as an EV5 and supports the BWX extension. 13422 13423 'pca56' 13424 '21164pc' 13425 '21164PC' 13426 Schedules as an EV5 and supports the BWX and MAX extensions. 13427 13428 'ev6' 13429 '21264' 13430 Schedules as an EV6 and supports the BWX, FIX, and MAX 13431 extensions. 13432 13433 'ev67' 13434 '21264a' 13435 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 13436 extensions. 13437 13438 Native toolchains also support the value 'native', which selects 13439 the best architecture option for the host processor. 13440 '-mcpu=native' has no effect if GCC does not recognize the 13441 processor. 13442 13443'-mtune=CPU_TYPE' 13444 Set only the instruction scheduling parameters for machine type 13445 CPU_TYPE. The instruction set is not changed. 13446 13447 Native toolchains also support the value 'native', which selects 13448 the best architecture option for the host processor. 13449 '-mtune=native' has no effect if GCC does not recognize the 13450 processor. 13451 13452'-mmemory-latency=TIME' 13453 Sets the latency the scheduler should assume for typical memory 13454 references as seen by the application. This number is highly 13455 dependent on the memory access patterns used by the application and 13456 the size of the external cache on the machine. 13457 13458 Valid options for TIME are 13459 13460 'NUMBER' 13461 A decimal number representing clock cycles. 13462 13463 'L1' 13464 'L2' 13465 'L3' 13466 'main' 13467 The compiler contains estimates of the number of clock cycles 13468 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 13469 (also called Dcache, Scache, and Bcache), as well as to main 13470 memory. Note that L3 is only valid for EV5. 13471 13472 13473File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options 13474 134753.17.12 FR30 Options 13476-------------------- 13477 13478These options are defined specifically for the FR30 port. 13479 13480'-msmall-model' 13481 Use the small address space model. This can produce smaller code, 13482 but it does assume that all symbolic values and addresses fit into 13483 a 20-bit range. 13484 13485'-mno-lsim' 13486 Assume that runtime support has been provided and so there is no 13487 need to include the simulator library ('libsim.a') on the linker 13488 command line. 13489 13490 13491File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 13492 134933.17.13 FRV Options 13494------------------- 13495 13496'-mgpr-32' 13497 13498 Only use the first 32 general-purpose registers. 13499 13500'-mgpr-64' 13501 13502 Use all 64 general-purpose registers. 13503 13504'-mfpr-32' 13505 13506 Use only the first 32 floating-point registers. 13507 13508'-mfpr-64' 13509 13510 Use all 64 floating-point registers. 13511 13512'-mhard-float' 13513 13514 Use hardware instructions for floating-point operations. 13515 13516'-msoft-float' 13517 13518 Use library routines for floating-point operations. 13519 13520'-malloc-cc' 13521 13522 Dynamically allocate condition code registers. 13523 13524'-mfixed-cc' 13525 13526 Do not try to dynamically allocate condition code registers, only 13527 use 'icc0' and 'fcc0'. 13528 13529'-mdword' 13530 13531 Change ABI to use double word insns. 13532 13533'-mno-dword' 13534 13535 Do not use double word instructions. 13536 13537'-mdouble' 13538 13539 Use floating-point double instructions. 13540 13541'-mno-double' 13542 13543 Do not use floating-point double instructions. 13544 13545'-mmedia' 13546 13547 Use media instructions. 13548 13549'-mno-media' 13550 13551 Do not use media instructions. 13552 13553'-mmuladd' 13554 13555 Use multiply and add/subtract instructions. 13556 13557'-mno-muladd' 13558 13559 Do not use multiply and add/subtract instructions. 13560 13561'-mfdpic' 13562 13563 Select the FDPIC ABI, which uses function descriptors to represent 13564 pointers to functions. Without any PIC/PIE-related options, it 13565 implies '-fPIE'. With '-fpic' or '-fpie', it assumes GOT entries 13566 and small data are within a 12-bit range from the GOT base address; 13567 with '-fPIC' or '-fPIE', GOT offsets are computed with 32 bits. 13568 With a 'bfin-elf' target, this option implies '-msim'. 13569 13570'-minline-plt' 13571 13572 Enable inlining of PLT entries in function calls to functions that 13573 are not known to bind locally. It has no effect without '-mfdpic'. 13574 It's enabled by default if optimizing for speed and compiling for 13575 shared libraries (i.e., '-fPIC' or '-fpic'), or when an 13576 optimization option such as '-O3' or above is present in the 13577 command line. 13578 13579'-mTLS' 13580 13581 Assume a large TLS segment when generating thread-local code. 13582 13583'-mtls' 13584 13585 Do not assume a large TLS segment when generating thread-local 13586 code. 13587 13588'-mgprel-ro' 13589 13590 Enable the use of 'GPREL' relocations in the FDPIC ABI for data 13591 that is known to be in read-only sections. It's enabled by 13592 default, except for '-fpic' or '-fpie': even though it may help 13593 make the global offset table smaller, it trades 1 instruction for 13594 4. With '-fPIC' or '-fPIE', it trades 3 instructions for 4, one of 13595 which may be shared by multiple symbols, and it avoids the need for 13596 a GOT entry for the referenced symbol, so it's more likely to be a 13597 win. If it is not, '-mno-gprel-ro' can be used to disable it. 13598 13599'-multilib-library-pic' 13600 13601 Link with the (library, not FD) pic libraries. It's implied by 13602 '-mlibrary-pic', as well as by '-fPIC' and '-fpic' without 13603 '-mfdpic'. You should never have to use it explicitly. 13604 13605'-mlinked-fp' 13606 13607 Follow the EABI requirement of always creating a frame pointer 13608 whenever a stack frame is allocated. This option is enabled by 13609 default and can be disabled with '-mno-linked-fp'. 13610 13611'-mlong-calls' 13612 13613 Use indirect addressing to call functions outside the current 13614 compilation unit. This allows the functions to be placed anywhere 13615 within the 32-bit address space. 13616 13617'-malign-labels' 13618 13619 Try to align labels to an 8-byte boundary by inserting NOPs into 13620 the previous packet. This option only has an effect when VLIW 13621 packing is enabled. It doesn't create new packets; it merely adds 13622 NOPs to existing ones. 13623 13624'-mlibrary-pic' 13625 13626 Generate position-independent EABI code. 13627 13628'-macc-4' 13629 13630 Use only the first four media accumulator registers. 13631 13632'-macc-8' 13633 13634 Use all eight media accumulator registers. 13635 13636'-mpack' 13637 13638 Pack VLIW instructions. 13639 13640'-mno-pack' 13641 13642 Do not pack VLIW instructions. 13643 13644'-mno-eflags' 13645 13646 Do not mark ABI switches in e_flags. 13647 13648'-mcond-move' 13649 13650 Enable the use of conditional-move instructions (default). 13651 13652 This switch is mainly for debugging the compiler and will likely be 13653 removed in a future version. 13654 13655'-mno-cond-move' 13656 13657 Disable the use of conditional-move instructions. 13658 13659 This switch is mainly for debugging the compiler and will likely be 13660 removed in a future version. 13661 13662'-mscc' 13663 13664 Enable the use of conditional set instructions (default). 13665 13666 This switch is mainly for debugging the compiler and will likely be 13667 removed in a future version. 13668 13669'-mno-scc' 13670 13671 Disable the use of conditional set instructions. 13672 13673 This switch is mainly for debugging the compiler and will likely be 13674 removed in a future version. 13675 13676'-mcond-exec' 13677 13678 Enable the use of conditional execution (default). 13679 13680 This switch is mainly for debugging the compiler and will likely be 13681 removed in a future version. 13682 13683'-mno-cond-exec' 13684 13685 Disable the use of conditional execution. 13686 13687 This switch is mainly for debugging the compiler and will likely be 13688 removed in a future version. 13689 13690'-mvliw-branch' 13691 13692 Run a pass to pack branches into VLIW instructions (default). 13693 13694 This switch is mainly for debugging the compiler and will likely be 13695 removed in a future version. 13696 13697'-mno-vliw-branch' 13698 13699 Do not run a pass to pack branches into VLIW instructions. 13700 13701 This switch is mainly for debugging the compiler and will likely be 13702 removed in a future version. 13703 13704'-mmulti-cond-exec' 13705 13706 Enable optimization of '&&' and '||' in conditional execution 13707 (default). 13708 13709 This switch is mainly for debugging the compiler and will likely be 13710 removed in a future version. 13711 13712'-mno-multi-cond-exec' 13713 13714 Disable optimization of '&&' and '||' in conditional execution. 13715 13716 This switch is mainly for debugging the compiler and will likely be 13717 removed in a future version. 13718 13719'-mnested-cond-exec' 13720 13721 Enable nested conditional execution optimizations (default). 13722 13723 This switch is mainly for debugging the compiler and will likely be 13724 removed in a future version. 13725 13726'-mno-nested-cond-exec' 13727 13728 Disable nested conditional execution optimizations. 13729 13730 This switch is mainly for debugging the compiler and will likely be 13731 removed in a future version. 13732 13733'-moptimize-membar' 13734 13735 This switch removes redundant 'membar' instructions from the 13736 compiler-generated code. It is enabled by default. 13737 13738'-mno-optimize-membar' 13739 13740 This switch disables the automatic removal of redundant 'membar' 13741 instructions from the generated code. 13742 13743'-mtomcat-stats' 13744 13745 Cause gas to print out tomcat statistics. 13746 13747'-mcpu=CPU' 13748 13749 Select the processor type for which to generate code. Possible 13750 values are 'frv', 'fr550', 'tomcat', 'fr500', 'fr450', 'fr405', 13751 'fr400', 'fr300' and 'simple'. 13752 13753 13754File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 13755 137563.17.14 GNU/Linux Options 13757------------------------- 13758 13759These '-m' options are defined for GNU/Linux targets: 13760 13761'-mglibc' 13762 Use the GNU C library. This is the default except on 13763 '*-*-linux-*uclibc*' and '*-*-linux-*android*' targets. 13764 13765'-muclibc' 13766 Use uClibc C library. This is the default on '*-*-linux-*uclibc*' 13767 targets. 13768 13769'-mbionic' 13770 Use Bionic C library. This is the default on '*-*-linux-*android*' 13771 targets. 13772 13773'-mandroid' 13774 Compile code compatible with Android platform. This is the default 13775 on '*-*-linux-*android*' targets. 13776 13777 When compiling, this option enables '-mbionic', '-fPIC', 13778 '-fno-exceptions' and '-fno-rtti' by default. When linking, this 13779 option makes the GCC driver pass Android-specific options to the 13780 linker. Finally, this option causes the preprocessor macro 13781 '__ANDROID__' to be defined. 13782 13783'-tno-android-cc' 13784 Disable compilation effects of '-mandroid', i.e., do not enable 13785 '-mbionic', '-fPIC', '-fno-exceptions' and '-fno-rtti' by default. 13786 13787'-tno-android-ld' 13788 Disable linking effects of '-mandroid', i.e., pass standard Linux 13789 linking options to the linker. 13790 13791 13792File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 13793 137943.17.15 H8/300 Options 13795---------------------- 13796 13797These '-m' options are defined for the H8/300 implementations: 13798 13799'-mrelax' 13800 Shorten some address references at link time, when possible; uses 13801 the linker option '-relax'. *Note 'ld' and the H8/300: (ld)H8/300, 13802 for a fuller description. 13803 13804'-mh' 13805 Generate code for the H8/300H. 13806 13807'-ms' 13808 Generate code for the H8S. 13809 13810'-mn' 13811 Generate code for the H8S and H8/300H in the normal mode. This 13812 switch must be used either with '-mh' or '-ms'. 13813 13814'-ms2600' 13815 Generate code for the H8S/2600. This switch must be used with 13816 '-ms'. 13817 13818'-mexr' 13819 Extended registers are stored on stack before execution of function 13820 with monitor attribute. Default option is '-mexr'. This option is 13821 valid only for H8S targets. 13822 13823'-mno-exr' 13824 Extended registers are not stored on stack before execution of 13825 function with monitor attribute. Default option is '-mno-exr'. 13826 This option is valid only for H8S targets. 13827 13828'-mint32' 13829 Make 'int' data 32 bits by default. 13830 13831'-malign-300' 13832 On the H8/300H and H8S, use the same alignment rules as for the 13833 H8/300. The default for the H8/300H and H8S is to align longs and 13834 floats on 4-byte boundaries. '-malign-300' causes them to be 13835 aligned on 2-byte boundaries. This option has no effect on the 13836 H8/300. 13837 13838 13839File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 13840 138413.17.16 HPPA Options 13842-------------------- 13843 13844These '-m' options are defined for the HPPA family of computers: 13845 13846'-march=ARCHITECTURE-TYPE' 13847 Generate code for the specified architecture. The choices for 13848 ARCHITECTURE-TYPE are '1.0' for PA 1.0, '1.1' for PA 1.1, and '2.0' 13849 for PA 2.0 processors. Refer to '/usr/lib/sched.models' on an 13850 HP-UX system to determine the proper architecture option for your 13851 machine. Code compiled for lower numbered architectures runs on 13852 higher numbered architectures, but not the other way around. 13853 13854'-mpa-risc-1-0' 13855'-mpa-risc-1-1' 13856'-mpa-risc-2-0' 13857 Synonyms for '-march=1.0', '-march=1.1', and '-march=2.0' 13858 respectively. 13859 13860'-mjump-in-delay' 13861 Fill delay slots of function calls with unconditional jump 13862 instructions by modifying the return pointer for the function call 13863 to be the target of the conditional jump. 13864 13865'-mdisable-fpregs' 13866 Prevent floating-point registers from being used in any manner. 13867 This is necessary for compiling kernels that perform lazy context 13868 switching of floating-point registers. If you use this option and 13869 attempt to perform floating-point operations, the compiler aborts. 13870 13871'-mdisable-indexing' 13872 Prevent the compiler from using indexing address modes. This 13873 avoids some rather obscure problems when compiling MIG generated 13874 code under MACH. 13875 13876'-mno-space-regs' 13877 Generate code that assumes the target has no space registers. This 13878 allows GCC to generate faster indirect calls and use unscaled index 13879 address modes. 13880 13881 Such code is suitable for level 0 PA systems and kernels. 13882 13883'-mfast-indirect-calls' 13884 Generate code that assumes calls never cross space boundaries. 13885 This allows GCC to emit code that performs faster indirect calls. 13886 13887 This option does not work in the presence of shared libraries or 13888 nested functions. 13889 13890'-mfixed-range=REGISTER-RANGE' 13891 Generate code treating the given register range as fixed registers. 13892 A fixed register is one that the register allocator cannot use. 13893 This is useful when compiling kernel code. A register range is 13894 specified as two registers separated by a dash. Multiple register 13895 ranges can be specified separated by a comma. 13896 13897'-mlong-load-store' 13898 Generate 3-instruction load and store sequences as sometimes 13899 required by the HP-UX 10 linker. This is equivalent to the '+k' 13900 option to the HP compilers. 13901 13902'-mportable-runtime' 13903 Use the portable calling conventions proposed by HP for ELF 13904 systems. 13905 13906'-mgas' 13907 Enable the use of assembler directives only GAS understands. 13908 13909'-mschedule=CPU-TYPE' 13910 Schedule code according to the constraints for the machine type 13911 CPU-TYPE. The choices for CPU-TYPE are '700' '7100', '7100LC', 13912 '7200', '7300' and '8000'. Refer to '/usr/lib/sched.models' on an 13913 HP-UX system to determine the proper scheduling option for your 13914 machine. The default scheduling is '8000'. 13915 13916'-mlinker-opt' 13917 Enable the optimization pass in the HP-UX linker. Note this makes 13918 symbolic debugging impossible. It also triggers a bug in the HP-UX 13919 8 and HP-UX 9 linkers in which they give bogus error messages when 13920 linking some programs. 13921 13922'-msoft-float' 13923 Generate output containing library calls for floating point. 13924 *Warning:* the requisite libraries are not available for all HPPA 13925 targets. Normally the facilities of the machine's usual C compiler 13926 are used, but this cannot be done directly in cross-compilation. 13927 You must make your own arrangements to provide suitable library 13928 functions for cross-compilation. 13929 13930 '-msoft-float' changes the calling convention in the output file; 13931 therefore, it is only useful if you compile _all_ of a program with 13932 this option. In particular, you need to compile 'libgcc.a', the 13933 library that comes with GCC, with '-msoft-float' in order for this 13934 to work. 13935 13936'-msio' 13937 Generate the predefine, '_SIO', for server IO. The default is 13938 '-mwsio'. This generates the predefines, '__hp9000s700', 13939 '__hp9000s700__' and '_WSIO', for workstation IO. These options 13940 are available under HP-UX and HI-UX. 13941 13942'-mgnu-ld' 13943 Use options specific to GNU 'ld'. This passes '-shared' to 'ld' 13944 when building a shared library. It is the default when GCC is 13945 configured, explicitly or implicitly, with the GNU linker. This 13946 option does not affect which 'ld' is called; it only changes what 13947 parameters are passed to that 'ld'. The 'ld' that is called is 13948 determined by the '--with-ld' configure option, GCC's program 13949 search path, and finally by the user's 'PATH'. The linker used by 13950 GCC can be printed using 'which `gcc -print-prog-name=ld`'. This 13951 option is only available on the 64-bit HP-UX GCC, i.e. configured 13952 with 'hppa*64*-*-hpux*'. 13953 13954'-mhp-ld' 13955 Use options specific to HP 'ld'. This passes '-b' to 'ld' when 13956 building a shared library and passes '+Accept TypeMismatch' to 'ld' 13957 on all links. It is the default when GCC is configured, explicitly 13958 or implicitly, with the HP linker. This option does not affect 13959 which 'ld' is called; it only changes what parameters are passed to 13960 that 'ld'. The 'ld' that is called is determined by the 13961 '--with-ld' configure option, GCC's program search path, and 13962 finally by the user's 'PATH'. The linker used by GCC can be 13963 printed using 'which `gcc -print-prog-name=ld`'. This option is 13964 only available on the 64-bit HP-UX GCC, i.e. configured with 13965 'hppa*64*-*-hpux*'. 13966 13967'-mlong-calls' 13968 Generate code that uses long call sequences. This ensures that a 13969 call is always able to reach linker generated stubs. The default 13970 is to generate long calls only when the distance from the call site 13971 to the beginning of the function or translation unit, as the case 13972 may be, exceeds a predefined limit set by the branch type being 13973 used. The limits for normal calls are 7,600,000 and 240,000 bytes, 13974 respectively for the PA 2.0 and PA 1.X architectures. Sibcalls are 13975 always limited at 240,000 bytes. 13976 13977 Distances are measured from the beginning of functions when using 13978 the '-ffunction-sections' option, or when using the '-mgas' and 13979 '-mno-portable-runtime' options together under HP-UX with the SOM 13980 linker. 13981 13982 It is normally not desirable to use this option as it degrades 13983 performance. However, it may be useful in large applications, 13984 particularly when partial linking is used to build the application. 13985 13986 The types of long calls used depends on the capabilities of the 13987 assembler and linker, and the type of code being generated. The 13988 impact on systems that support long absolute calls, and long pic 13989 symbol-difference or pc-relative calls should be relatively small. 13990 However, an indirect call is used on 32-bit ELF systems in pic code 13991 and it is quite long. 13992 13993'-munix=UNIX-STD' 13994 Generate compiler predefines and select a startfile for the 13995 specified UNIX standard. The choices for UNIX-STD are '93', '95' 13996 and '98'. '93' is supported on all HP-UX versions. '95' is 13997 available on HP-UX 10.10 and later. '98' is available on HP-UX 13998 11.11 and later. The default values are '93' for HP-UX 10.00, '95' 13999 for HP-UX 10.10 though to 11.00, and '98' for HP-UX 11.11 and 14000 later. 14001 14002 '-munix=93' provides the same predefines as GCC 3.3 and 3.4. 14003 '-munix=95' provides additional predefines for 'XOPEN_UNIX' and 14004 '_XOPEN_SOURCE_EXTENDED', and the startfile 'unix95.o'. 14005 '-munix=98' provides additional predefines for '_XOPEN_UNIX', 14006 '_XOPEN_SOURCE_EXTENDED', '_INCLUDE__STDC_A1_SOURCE' and 14007 '_INCLUDE_XOPEN_SOURCE_500', and the startfile 'unix98.o'. 14008 14009 It is _important_ to note that this option changes the interfaces 14010 for various library routines. It also affects the operational 14011 behavior of the C library. Thus, _extreme_ care is needed in using 14012 this option. 14013 14014 Library code that is intended to operate with more than one UNIX 14015 standard must test, set and restore the variable 14016 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 14017 provide this capability. 14018 14019'-nolibdld' 14020 Suppress the generation of link options to search libdld.sl when 14021 the '-static' option is specified on HP-UX 10 and later. 14022 14023'-static' 14024 The HP-UX implementation of setlocale in libc has a dependency on 14025 libdld.sl. There isn't an archive version of libdld.sl. Thus, 14026 when the '-static' option is specified, special link options are 14027 needed to resolve this dependency. 14028 14029 On HP-UX 10 and later, the GCC driver adds the necessary options to 14030 link with libdld.sl when the '-static' option is specified. This 14031 causes the resulting binary to be dynamic. On the 64-bit port, the 14032 linkers generate dynamic binaries by default in any case. The 14033 '-nolibdld' option can be used to prevent the GCC driver from 14034 adding these link options. 14035 14036'-threads' 14037 Add support for multithreading with the "dce thread" library under 14038 HP-UX. This option sets flags for both the preprocessor and 14039 linker. 14040 14041 14042File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 14043 140443.17.17 Intel 386 and AMD x86-64 Options 14045---------------------------------------- 14046 14047These '-m' options are defined for the i386 and x86-64 family of 14048computers: 14049 14050'-march=CPU-TYPE' 14051 Generate instructions for the machine type CPU-TYPE. In contrast 14052 to '-mtune=CPU-TYPE', which merely tunes the generated code for the 14053 specified CPU-TYPE, '-march=CPU-TYPE' allows GCC to generate code 14054 that may not run at all on processors other than the one indicated. 14055 Specifying '-march=CPU-TYPE' implies '-mtune=CPU-TYPE'. 14056 14057 The choices for CPU-TYPE are: 14058 14059 'native' 14060 This selects the CPU to generate code for at compilation time 14061 by determining the processor type of the compiling machine. 14062 Using '-march=native' enables all instruction subsets 14063 supported by the local machine (hence the result might not run 14064 on different machines). Using '-mtune=native' produces code 14065 optimized for the local machine under the constraints of the 14066 selected instruction set. 14067 14068 'i386' 14069 Original Intel i386 CPU. 14070 14071 'i486' 14072 Intel i486 CPU. (No scheduling is implemented for this chip.) 14073 14074 'i586' 14075 'pentium' 14076 Intel Pentium CPU with no MMX support. 14077 14078 'pentium-mmx' 14079 Intel Pentium MMX CPU, based on Pentium core with MMX 14080 instruction set support. 14081 14082 'pentiumpro' 14083 Intel Pentium Pro CPU. 14084 14085 'i686' 14086 When used with '-march', the Pentium Pro instruction set is 14087 used, so the code runs on all i686 family chips. When used 14088 with '-mtune', it has the same meaning as 'generic'. 14089 14090 'pentium2' 14091 Intel Pentium II CPU, based on Pentium Pro core with MMX 14092 instruction set support. 14093 14094 'pentium3' 14095 'pentium3m' 14096 Intel Pentium III CPU, based on Pentium Pro core with MMX and 14097 SSE instruction set support. 14098 14099 'pentium-m' 14100 Intel Pentium M; low-power version of Intel Pentium III CPU 14101 with MMX, SSE and SSE2 instruction set support. Used by 14102 Centrino notebooks. 14103 14104 'pentium4' 14105 'pentium4m' 14106 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set 14107 support. 14108 14109 'prescott' 14110 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 14111 and SSE3 instruction set support. 14112 14113 'nocona' 14114 Improved version of Intel Pentium 4 CPU with 64-bit 14115 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 14116 14117 'core2' 14118 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 14119 and SSSE3 instruction set support. 14120 14121 'nehalem' 14122 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, 14123 SSE3, SSSE3, SSE4.1, SSE4.2 and POPCNT instruction set 14124 support. 14125 14126 'westmere' 14127 Intel Westmere CPU with 64-bit extensions, MMX, SSE, SSE2, 14128 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES and PCLMUL 14129 instruction set support. 14130 14131 'sandybridge' 14132 Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, 14133 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES and PCLMUL 14134 instruction set support. 14135 14136 'ivybridge' 14137 Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, 14138 SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, 14139 FSGSBASE, RDRND and F16C instruction set support. 14140 14141 'haswell' 14142 Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, 14143 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 14144 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction 14145 set support. 14146 14147 'broadwell' 14148 Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, 14149 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, 14150 PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX 14151 and PREFETCHW instruction set support. 14152 14153 'bonnell' 14154 Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, 14155 SSE2, SSE3 and SSSE3 instruction set support. 14156 14157 'silvermont' 14158 Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, 14159 SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and 14160 RDRND instruction set support. 14161 14162 'k6' 14163 AMD K6 CPU with MMX instruction set support. 14164 14165 'k6-2' 14166 'k6-3' 14167 Improved versions of AMD K6 CPU with MMX and 3DNow! 14168 instruction set support. 14169 14170 'athlon' 14171 'athlon-tbird' 14172 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 14173 prefetch instructions support. 14174 14175 'athlon-4' 14176 'athlon-xp' 14177 'athlon-mp' 14178 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 14179 full SSE instruction set support. 14180 14181 'k8' 14182 'opteron' 14183 'athlon64' 14184 'athlon-fx' 14185 Processors based on the AMD K8 core with x86-64 instruction 14186 set support, including the AMD Opteron, Athlon 64, and Athlon 14187 64 FX processors. (This supersets MMX, SSE, SSE2, 3DNow!, 14188 enhanced 3DNow! and 64-bit instruction set extensions.) 14189 14190 'k8-sse3' 14191 'opteron-sse3' 14192 'athlon64-sse3' 14193 Improved versions of AMD K8 cores with SSE3 instruction set 14194 support. 14195 14196 'amdfam10' 14197 'barcelona' 14198 CPUs based on AMD Family 10h cores with x86-64 instruction set 14199 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 14200 enhanced 3DNow!, ABM and 64-bit instruction set extensions.) 14201 14202 'bdver1' 14203 CPUs based on AMD Family 15h cores with x86-64 instruction set 14204 support. (This supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, 14205 CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM 14206 and 64-bit instruction set extensions.) 14207 'bdver2' 14208 AMD Family 15h core based CPUs with x86-64 instruction set 14209 support. (This supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, 14210 LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, 14211 SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.) 14212 'bdver3' 14213 AMD Family 15h core based CPUs with x86-64 instruction set 14214 support. (This supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, 14215 AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, 14216 SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 14217 extensions. 14218 'bdver4' 14219 AMD Family 15h core based CPUs with x86-64 instruction set 14220 support. (This supersets BMI, BMI2, TBM, F16C, FMA, FMA4, 14221 FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, 14222 SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit 14223 instruction set extensions. 14224 14225 'btver1' 14226 CPUs based on AMD Family 14h cores with x86-64 instruction set 14227 support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, 14228 CX16, ABM and 64-bit instruction set extensions.) 14229 14230 'btver2' 14231 CPUs based on AMD Family 16h cores with x86-64 instruction set 14232 support. This includes MOVBE, F16C, BMI, AVX, PCL_MUL, AES, 14233 SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX 14234 and 64-bit instruction set extensions. 14235 14236 'winchip-c6' 14237 IDT WinChip C6 CPU, dealt in same way as i486 with additional 14238 MMX instruction set support. 14239 14240 'winchip2' 14241 IDT WinChip 2 CPU, dealt in same way as i486 with additional 14242 MMX and 3DNow! instruction set support. 14243 14244 'c3' 14245 VIA C3 CPU with MMX and 3DNow! instruction set support. (No 14246 scheduling is implemented for this chip.) 14247 14248 'c3-2' 14249 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set 14250 support. (No scheduling is implemented for this chip.) 14251 14252 'geode' 14253 AMD Geode embedded processor with MMX and 3DNow! instruction 14254 set support. 14255 14256'-mtune=CPU-TYPE' 14257 Tune to CPU-TYPE everything applicable about the generated code, 14258 except for the ABI and the set of available instructions. While 14259 picking a specific CPU-TYPE schedules things appropriately for that 14260 particular chip, the compiler does not generate any code that 14261 cannot run on the default machine type unless you use a 14262 '-march=CPU-TYPE' option. For example, if GCC is configured for 14263 i686-pc-linux-gnu then '-mtune=pentium4' generates code that is 14264 tuned for Pentium 4 but still runs on i686 machines. 14265 14266 The choices for CPU-TYPE are the same as for '-march'. In 14267 addition, '-mtune' supports 2 extra choices for CPU-TYPE: 14268 14269 'generic' 14270 Produce code optimized for the most common IA32/AMD64/EM64T 14271 processors. If you know the CPU on which your code will run, 14272 then you should use the corresponding '-mtune' or '-march' 14273 option instead of '-mtune=generic'. But, if you do not know 14274 exactly what CPU users of your application will have, then you 14275 should use this option. 14276 14277 As new processors are deployed in the marketplace, the 14278 behavior of this option will change. Therefore, if you 14279 upgrade to a newer version of GCC, code generation controlled 14280 by this option will change to reflect the processors that are 14281 most common at the time that version of GCC is released. 14282 14283 There is no '-march=generic' option because '-march' indicates 14284 the instruction set the compiler can use, and there is no 14285 generic instruction set applicable to all processors. In 14286 contrast, '-mtune' indicates the processor (or, in this case, 14287 collection of processors) for which the code is optimized. 14288 14289 'intel' 14290 Produce code optimized for the most current Intel processors, 14291 which are Haswell and Silvermont for this version of GCC. If 14292 you know the CPU on which your code will run, then you should 14293 use the corresponding '-mtune' or '-march' option instead of 14294 '-mtune=intel'. But, if you want your application performs 14295 better on both Haswell and Silvermont, then you should use 14296 this option. 14297 14298 As new Intel processors are deployed in the marketplace, the 14299 behavior of this option will change. Therefore, if you 14300 upgrade to a newer version of GCC, code generation controlled 14301 by this option will change to reflect the most current Intel 14302 processors at the time that version of GCC is released. 14303 14304 There is no '-march=intel' option because '-march' indicates 14305 the instruction set the compiler can use, and there is no 14306 common instruction set applicable to all processors. In 14307 contrast, '-mtune' indicates the processor (or, in this case, 14308 collection of processors) for which the code is optimized. 14309 14310'-mcpu=CPU-TYPE' 14311 A deprecated synonym for '-mtune'. 14312 14313'-mfpmath=UNIT' 14314 Generate floating-point arithmetic for selected unit UNIT. The 14315 choices for UNIT are: 14316 14317 '387' 14318 Use the standard 387 floating-point coprocessor present on the 14319 majority of chips and emulated otherwise. Code compiled with 14320 this option runs almost everywhere. The temporary results are 14321 computed in 80-bit precision instead of the precision 14322 specified by the type, resulting in slightly different results 14323 compared to most of other chips. See '-ffloat-store' for more 14324 detailed description. 14325 14326 This is the default choice for i386 compiler. 14327 14328 'sse' 14329 Use scalar floating-point instructions present in the SSE 14330 instruction set. This instruction set is supported by Pentium 14331 III and newer chips, and in the AMD line by Athlon-4, Athlon 14332 XP and Athlon MP chips. The earlier version of the SSE 14333 instruction set supports only single-precision arithmetic, 14334 thus the double and extended-precision arithmetic are still 14335 done using 387. A later version, present only in Pentium 4 14336 and AMD x86-64 chips, supports double-precision arithmetic 14337 too. 14338 14339 For the i386 compiler, you must use '-march=CPU-TYPE', '-msse' 14340 or '-msse2' switches to enable SSE extensions and make this 14341 option effective. For the x86-64 compiler, these extensions 14342 are enabled by default. 14343 14344 The resulting code should be considerably faster in the 14345 majority of cases and avoid the numerical instability problems 14346 of 387 code, but may break some existing code that expects 14347 temporaries to be 80 bits. 14348 14349 This is the default choice for the x86-64 compiler. 14350 14351 'sse,387' 14352 'sse+387' 14353 'both' 14354 Attempt to utilize both instruction sets at once. This 14355 effectively doubles the amount of available registers, and on 14356 chips with separate execution units for 387 and SSE the 14357 execution resources too. Use this option with care, as it is 14358 still experimental, because the GCC register allocator does 14359 not model separate functional units well, resulting in 14360 unstable performance. 14361 14362'-masm=DIALECT' 14363 Output assembly instructions using selected DIALECT. Supported 14364 choices are 'intel' or 'att' (the default). Darwin does not 14365 support 'intel'. 14366 14367'-mieee-fp' 14368'-mno-ieee-fp' 14369 Control whether or not the compiler uses IEEE floating-point 14370 comparisons. These correctly handle the case where the result of a 14371 comparison is unordered. 14372 14373'-msoft-float' 14374 Generate output containing library calls for floating point. 14375 14376 *Warning:* the requisite libraries are not part of GCC. Normally 14377 the facilities of the machine's usual C compiler are used, but this 14378 can't be done directly in cross-compilation. You must make your 14379 own arrangements to provide suitable library functions for 14380 cross-compilation. 14381 14382 On machines where a function returns floating-point results in the 14383 80387 register stack, some floating-point opcodes may be emitted 14384 even if '-msoft-float' is used. 14385 14386'-mno-fp-ret-in-387' 14387 Do not use the FPU registers for return values of functions. 14388 14389 The usual calling convention has functions return values of types 14390 'float' and 'double' in an FPU register, even if there is no FPU. 14391 The idea is that the operating system should emulate an FPU. 14392 14393 The option '-mno-fp-ret-in-387' causes such values to be returned 14394 in ordinary CPU registers instead. 14395 14396'-mno-fancy-math-387' 14397 Some 387 emulators do not support the 'sin', 'cos' and 'sqrt' 14398 instructions for the 387. Specify this option to avoid generating 14399 those instructions. This option is the default on FreeBSD, OpenBSD 14400 and NetBSD. This option is overridden when '-march' indicates that 14401 the target CPU always has an FPU and so the instruction does not 14402 need emulation. These instructions are not generated unless you 14403 also use the '-funsafe-math-optimizations' switch. 14404 14405'-malign-double' 14406'-mno-align-double' 14407 Control whether GCC aligns 'double', 'long double', and 'long long' 14408 variables on a two-word boundary or a one-word boundary. Aligning 14409 'double' variables on a two-word boundary produces code that runs 14410 somewhat faster on a Pentium at the expense of more memory. 14411 14412 On x86-64, '-malign-double' is enabled by default. 14413 14414 *Warning:* if you use the '-malign-double' switch, structures 14415 containing the above types are aligned differently than the 14416 published application binary interface specifications for the 386 14417 and are not binary compatible with structures in code compiled 14418 without that switch. 14419 14420'-m96bit-long-double' 14421'-m128bit-long-double' 14422 These switches control the size of 'long double' type. The i386 14423 application binary interface specifies the size to be 96 bits, so 14424 '-m96bit-long-double' is the default in 32-bit mode. 14425 14426 Modern architectures (Pentium and newer) prefer 'long double' to be 14427 aligned to an 8- or 16-byte boundary. In arrays or structures 14428 conforming to the ABI, this is not possible. So specifying 14429 '-m128bit-long-double' aligns 'long double' to a 16-byte boundary 14430 by padding the 'long double' with an additional 32-bit zero. 14431 14432 In the x86-64 compiler, '-m128bit-long-double' is the default 14433 choice as its ABI specifies that 'long double' is aligned on 14434 16-byte boundary. 14435 14436 Notice that neither of these options enable any extra precision 14437 over the x87 standard of 80 bits for a 'long double'. 14438 14439 *Warning:* if you override the default value for your target ABI, 14440 this changes the size of structures and arrays containing 'long 14441 double' variables, as well as modifying the function calling 14442 convention for functions taking 'long double'. Hence they are not 14443 binary-compatible with code compiled without that switch. 14444 14445'-mlong-double-64' 14446'-mlong-double-80' 14447'-mlong-double-128' 14448 These switches control the size of 'long double' type. A size of 14449 64 bits makes the 'long double' type equivalent to the 'double' 14450 type. This is the default for 32-bit Bionic C library. A size of 14451 128 bits makes the 'long double' type equivalent to the 14452 '__float128' type. This is the default for 64-bit Bionic C 14453 library. 14454 14455 *Warning:* if you override the default value for your target ABI, 14456 this changes the size of structures and arrays containing 'long 14457 double' variables, as well as modifying the function calling 14458 convention for functions taking 'long double'. Hence they are not 14459 binary-compatible with code compiled without that switch. 14460 14461'-mlarge-data-threshold=THRESHOLD' 14462 When '-mcmodel=medium' is specified, data objects larger than 14463 THRESHOLD are placed in the large data section. This value must be 14464 the same across all objects linked into the binary, and defaults to 14465 65535. 14466 14467'-mrtd' 14468 Use a different function-calling convention, in which functions 14469 that take a fixed number of arguments return with the 'ret NUM' 14470 instruction, which pops their arguments while returning. This 14471 saves one instruction in the caller since there is no need to pop 14472 the arguments there. 14473 14474 You can specify that an individual function is called with this 14475 calling sequence with the function attribute 'stdcall'. You can 14476 also override the '-mrtd' option by using the function attribute 14477 'cdecl'. *Note Function Attributes::. 14478 14479 *Warning:* this calling convention is incompatible with the one 14480 normally used on Unix, so you cannot use it if you need to call 14481 libraries compiled with the Unix compiler. 14482 14483 Also, you must provide function prototypes for all functions that 14484 take variable numbers of arguments (including 'printf'); otherwise 14485 incorrect code is generated for calls to those functions. 14486 14487 In addition, seriously incorrect code results if you call a 14488 function with too many arguments. (Normally, extra arguments are 14489 harmlessly ignored.) 14490 14491'-mregparm=NUM' 14492 Control how many registers are used to pass integer arguments. By 14493 default, no registers are used to pass arguments, and at most 3 14494 registers can be used. You can control this behavior for a 14495 specific function by using the function attribute 'regparm'. *Note 14496 Function Attributes::. 14497 14498 *Warning:* if you use this switch, and NUM is nonzero, then you 14499 must build all modules with the same value, including any 14500 libraries. This includes the system libraries and startup modules. 14501 14502'-msseregparm' 14503 Use SSE register passing conventions for float and double arguments 14504 and return values. You can control this behavior for a specific 14505 function by using the function attribute 'sseregparm'. *Note 14506 Function Attributes::. 14507 14508 *Warning:* if you use this switch then you must build all modules 14509 with the same value, including any libraries. This includes the 14510 system libraries and startup modules. 14511 14512'-mvect8-ret-in-mem' 14513 Return 8-byte vectors in memory instead of MMX registers. This is 14514 the default on Solaris 8 and 9 and VxWorks to match the ABI of the 14515 Sun Studio compilers until version 12. Later compiler versions 14516 (starting with Studio 12 Update 1) follow the ABI used by other x86 14517 targets, which is the default on Solaris 10 and later. _Only_ use 14518 this option if you need to remain compatible with existing code 14519 produced by those previous compiler versions or older versions of 14520 GCC. 14521 14522'-mpc32' 14523'-mpc64' 14524'-mpc80' 14525 14526 Set 80387 floating-point precision to 32, 64 or 80 bits. When 14527 '-mpc32' is specified, the significands of results of 14528 floating-point operations are rounded to 24 bits (single 14529 precision); '-mpc64' rounds the significands of results of 14530 floating-point operations to 53 bits (double precision) and 14531 '-mpc80' rounds the significands of results of floating-point 14532 operations to 64 bits (extended double precision), which is the 14533 default. When this option is used, floating-point operations in 14534 higher precisions are not available to the programmer without 14535 setting the FPU control word explicitly. 14536 14537 Setting the rounding of floating-point operations to less than the 14538 default 80 bits can speed some programs by 2% or more. Note that 14539 some mathematical libraries assume that extended-precision (80-bit) 14540 floating-point operations are enabled by default; routines in such 14541 libraries could suffer significant loss of accuracy, typically 14542 through so-called "catastrophic cancellation", when this option is 14543 used to set the precision to less than extended precision. 14544 14545'-mstackrealign' 14546 Realign the stack at entry. On the Intel x86, the '-mstackrealign' 14547 option generates an alternate prologue and epilogue that realigns 14548 the run-time stack if necessary. This supports mixing legacy codes 14549 that keep 4-byte stack alignment with modern codes that keep 14550 16-byte stack alignment for SSE compatibility. See also the 14551 attribute 'force_align_arg_pointer', applicable to individual 14552 functions. 14553 14554'-mpreferred-stack-boundary=NUM' 14555 Attempt to keep the stack boundary aligned to a 2 raised to NUM 14556 byte boundary. If '-mpreferred-stack-boundary' is not specified, 14557 the default is 4 (16 bytes or 128 bits). 14558 14559 *Warning:* When generating code for the x86-64 architecture with 14560 SSE extensions disabled, '-mpreferred-stack-boundary=3' can be used 14561 to keep the stack boundary aligned to 8 byte boundary. Since 14562 x86-64 ABI require 16 byte stack alignment, this is ABI 14563 incompatible and intended to be used in controlled environment 14564 where stack space is important limitation. This option will lead 14565 to wrong code when functions compiled with 16 byte stack alignment 14566 (such as functions from a standard library) are called with 14567 misaligned stack. In this case, SSE instructions may lead to 14568 misaligned memory access traps. In addition, variable arguments 14569 will be handled incorrectly for 16 byte aligned objects (including 14570 x87 long double and __int128), leading to wrong results. You must 14571 build all modules with '-mpreferred-stack-boundary=3', including 14572 any libraries. This includes the system libraries and startup 14573 modules. 14574 14575'-mincoming-stack-boundary=NUM' 14576 Assume the incoming stack is aligned to a 2 raised to NUM byte 14577 boundary. If '-mincoming-stack-boundary' is not specified, the one 14578 specified by '-mpreferred-stack-boundary' is used. 14579 14580 On Pentium and Pentium Pro, 'double' and 'long double' values 14581 should be aligned to an 8-byte boundary (see '-malign-double') or 14582 suffer significant run time performance penalties. On Pentium III, 14583 the Streaming SIMD Extension (SSE) data type '__m128' may not work 14584 properly if it is not 16-byte aligned. 14585 14586 To ensure proper alignment of this values on the stack, the stack 14587 boundary must be as aligned as that required by any value stored on 14588 the stack. Further, every function must be generated such that it 14589 keeps the stack aligned. Thus calling a function compiled with a 14590 higher preferred stack boundary from a function compiled with a 14591 lower preferred stack boundary most likely misaligns the stack. It 14592 is recommended that libraries that use callbacks always use the 14593 default setting. 14594 14595 This extra alignment does consume extra stack space, and generally 14596 increases code size. Code that is sensitive to stack space usage, 14597 such as embedded systems and operating system kernels, may want to 14598 reduce the preferred alignment to '-mpreferred-stack-boundary=2'. 14599 14600'-mmmx' 14601'-mno-mmx' 14602'-msse' 14603'-mno-sse' 14604'-msse2' 14605'-mno-sse2' 14606'-msse3' 14607'-mno-sse3' 14608'-mssse3' 14609'-mno-ssse3' 14610'-msse4.1' 14611'-mno-sse4.1' 14612'-msse4.2' 14613'-mno-sse4.2' 14614'-msse4' 14615'-mno-sse4' 14616'-mavx' 14617'-mno-avx' 14618'-mavx2' 14619'-mno-avx2' 14620'-mavx512f' 14621'-mno-avx512f' 14622'-mavx512pf' 14623'-mno-avx512pf' 14624'-mavx512er' 14625'-mno-avx512er' 14626'-mavx512cd' 14627'-mno-avx512cd' 14628'-msha' 14629'-mno-sha' 14630'-maes' 14631'-mno-aes' 14632'-mpclmul' 14633'-mno-pclmul' 14634'-mfsgsbase' 14635'-mno-fsgsbase' 14636'-mrdrnd' 14637'-mno-rdrnd' 14638'-mf16c' 14639'-mno-f16c' 14640'-mfma' 14641'-mno-fma' 14642'-mprefetchwt1' 14643'-mno-prefetchwt1' 14644'-msse4a' 14645'-mno-sse4a' 14646'-mfma4' 14647'-mno-fma4' 14648'-mxop' 14649'-mno-xop' 14650'-mlwp' 14651'-mno-lwp' 14652'-m3dnow' 14653'-mno-3dnow' 14654'-mpopcnt' 14655'-mno-popcnt' 14656'-mabm' 14657'-mno-abm' 14658'-mbmi' 14659'-mbmi2' 14660'-mno-bmi' 14661'-mno-bmi2' 14662'-mlzcnt' 14663'-mno-lzcnt' 14664'-mfxsr' 14665'-mxsave' 14666'-mxsaveopt' 14667'-mrtm' 14668'-mtbm' 14669'-mno-tbm' 14670 These switches enable or disable the use of instructions in the 14671 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, 14672 AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, 14673 SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, 14674 LZCNT, RTM, or 3DNow! extended instruction sets. These extensions 14675 are also available as built-in functions: see *note X86 Built-in 14676 Functions::, for details of the functions enabled and disabled by 14677 these switches. 14678 14679 To generate SSE/SSE2 instructions automatically from floating-point 14680 code (as opposed to 387 instructions), see '-mfpmath=sse'. 14681 14682 GCC depresses SSEx instructions when '-mavx' is used. Instead, it 14683 generates new AVX instructions or AVX equivalence for all SSEx 14684 instructions when needed. 14685 14686 These options enable GCC to use these extended instructions in 14687 generated code, even without '-mfpmath=sse'. Applications that 14688 perform run-time CPU detection must compile separate files for each 14689 supported architecture, using the appropriate flags. In 14690 particular, the file containing the CPU detection code should be 14691 compiled without these options. 14692 14693'-mdump-tune-features' 14694 This option instructs GCC to dump the names of the x86 performance 14695 tuning features and default settings. The names can be used in 14696 '-mtune-ctrl=FEATURE-LIST'. 14697 14698'-mtune-ctrl=FEATURE-LIST' 14699 This option is used to do fine grain control of x86 code generation 14700 features. FEATURE-LIST is a comma separated list of FEATURE names. 14701 See also '-mdump-tune-features'. When specified, the FEATURE will 14702 be turned on if it is not preceded with '^', otherwise, it will be 14703 turned off. '-mtune-ctrl=FEATURE-LIST' is intended to be used by 14704 GCC developers. Using it may lead to code paths not covered by 14705 testing and can potentially result in compiler ICEs or runtime 14706 errors. 14707 14708'-mno-default' 14709 This option instructs GCC to turn off all tunable features. See 14710 also '-mtune-ctrl=FEATURE-LIST' and '-mdump-tune-features'. 14711 14712'-mcld' 14713 This option instructs GCC to emit a 'cld' instruction in the 14714 prologue of functions that use string instructions. String 14715 instructions depend on the DF flag to select between autoincrement 14716 or autodecrement mode. While the ABI specifies the DF flag to be 14717 cleared on function entry, some operating systems violate this 14718 specification by not clearing the DF flag in their exception 14719 dispatchers. The exception handler can be invoked with the DF flag 14720 set, which leads to wrong direction mode when string instructions 14721 are used. This option can be enabled by default on 32-bit x86 14722 targets by configuring GCC with the '--enable-cld' configure 14723 option. Generation of 'cld' instructions can be suppressed with 14724 the '-mno-cld' compiler option in this case. 14725 14726'-mvzeroupper' 14727 This option instructs GCC to emit a 'vzeroupper' instruction before 14728 a transfer of control flow out of the function to minimize the AVX 14729 to SSE transition penalty as well as remove unnecessary 'zeroupper' 14730 intrinsics. 14731 14732'-mprefer-avx128' 14733 This option instructs GCC to use 128-bit AVX instructions instead 14734 of 256-bit AVX instructions in the auto-vectorizer. 14735 14736'-mcx16' 14737 This option enables GCC to generate 'CMPXCHG16B' instructions. 14738 'CMPXCHG16B' allows for atomic operations on 128-bit double 14739 quadword (or oword) data types. This is useful for high-resolution 14740 counters that can be updated by multiple processors (or cores). 14741 This instruction is generated as part of atomic built-in functions: 14742 see *note __sync Builtins:: or *note __atomic Builtins:: for 14743 details. 14744 14745'-msahf' 14746 This option enables generation of 'SAHF' instructions in 64-bit 14747 code. Early Intel Pentium 4 CPUs with Intel 64 support, prior to 14748 the introduction of Pentium 4 G1 step in December 2005, lacked the 14749 'LAHF' and 'SAHF' instructions which were supported by AMD64. 14750 These are load and store instructions, respectively, for certain 14751 status flags. In 64-bit mode, the 'SAHF' instruction is used to 14752 optimize 'fmod', 'drem', and 'remainder' built-in functions; see 14753 *note Other Builtins:: for details. 14754 14755'-mmovbe' 14756 This option enables use of the 'movbe' instruction to implement 14757 '__builtin_bswap32' and '__builtin_bswap64'. 14758 14759'-mcrc32' 14760 This option enables built-in functions '__builtin_ia32_crc32qi', 14761 '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and 14762 '__builtin_ia32_crc32di' to generate the 'crc32' machine 14763 instruction. 14764 14765'-mrecip' 14766 This option enables use of 'RCPSS' and 'RSQRTSS' instructions (and 14767 their vectorized variants 'RCPPS' and 'RSQRTPS') with an additional 14768 Newton-Raphson step to increase precision instead of 'DIVSS' and 14769 'SQRTSS' (and their vectorized variants) for single-precision 14770 floating-point arguments. These instructions are generated only 14771 when '-funsafe-math-optimizations' is enabled together with 14772 '-finite-math-only' and '-fno-trapping-math'. Note that while the 14773 throughput of the sequence is higher than the throughput of the 14774 non-reciprocal instruction, the precision of the sequence can be 14775 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 14776 0.99999994). 14777 14778 Note that GCC implements '1.0f/sqrtf(X)' in terms of 'RSQRTSS' (or 14779 'RSQRTPS') already with '-ffast-math' (or the above option 14780 combination), and doesn't need '-mrecip'. 14781 14782 Also note that GCC emits the above sequence with additional 14783 Newton-Raphson step for vectorized single-float division and 14784 vectorized 'sqrtf(X)' already with '-ffast-math' (or the above 14785 option combination), and doesn't need '-mrecip'. 14786 14787'-mrecip=OPT' 14788 This option controls which reciprocal estimate instructions may be 14789 used. OPT is a comma-separated list of options, which may be 14790 preceded by a '!' to invert the option: 14791 14792 'all' 14793 Enable all estimate instructions. 14794 14795 'default' 14796 Enable the default instructions, equivalent to '-mrecip'. 14797 14798 'none' 14799 Disable all estimate instructions, equivalent to '-mno-recip'. 14800 14801 'div' 14802 Enable the approximation for scalar division. 14803 14804 'vec-div' 14805 Enable the approximation for vectorized division. 14806 14807 'sqrt' 14808 Enable the approximation for scalar square root. 14809 14810 'vec-sqrt' 14811 Enable the approximation for vectorized square root. 14812 14813 So, for example, '-mrecip=all,!sqrt' enables all of the reciprocal 14814 approximations, except for square root. 14815 14816'-mveclibabi=TYPE' 14817 Specifies the ABI type to use for vectorizing intrinsics using an 14818 external library. Supported values for TYPE are 'svml' for the 14819 Intel short vector math library and 'acml' for the AMD math core 14820 library. To use this option, both '-ftree-vectorize' and 14821 '-funsafe-math-optimizations' have to be enabled, and an SVML or 14822 ACML ABI-compatible library must be specified at link time. 14823 14824 GCC currently emits calls to 'vmldExp2', 'vmldLn2', 'vmldLog102', 14825 'vmldLog102', 'vmldPow2', 'vmldTanh2', 'vmldTan2', 'vmldAtan2', 14826 'vmldAtanh2', 'vmldCbrt2', 'vmldSinh2', 'vmldSin2', 'vmldAsinh2', 14827 'vmldAsin2', 'vmldCosh2', 'vmldCos2', 'vmldAcosh2', 'vmldAcos2', 14828 'vmlsExp4', 'vmlsLn4', 'vmlsLog104', 'vmlsLog104', 'vmlsPow4', 14829 'vmlsTanh4', 'vmlsTan4', 'vmlsAtan4', 'vmlsAtanh4', 'vmlsCbrt4', 14830 'vmlsSinh4', 'vmlsSin4', 'vmlsAsinh4', 'vmlsAsin4', 'vmlsCosh4', 14831 'vmlsCos4', 'vmlsAcosh4' and 'vmlsAcos4' for corresponding function 14832 type when '-mveclibabi=svml' is used, and '__vrd2_sin', 14833 '__vrd2_cos', '__vrd2_exp', '__vrd2_log', '__vrd2_log2', 14834 '__vrd2_log10', '__vrs4_sinf', '__vrs4_cosf', '__vrs4_expf', 14835 '__vrs4_logf', '__vrs4_log2f', '__vrs4_log10f' and '__vrs4_powf' 14836 for the corresponding function type when '-mveclibabi=acml' is 14837 used. 14838 14839'-mabi=NAME' 14840 Generate code for the specified calling convention. Permissible 14841 values are 'sysv' for the ABI used on GNU/Linux and other systems, 14842 and 'ms' for the Microsoft ABI. The default is to use the Microsoft 14843 ABI when targeting Microsoft Windows and the SysV ABI on all other 14844 systems. You can control this behavior for a specific function by 14845 using the function attribute 'ms_abi'/'sysv_abi'. *Note Function 14846 Attributes::. 14847 14848'-mtls-dialect=TYPE' 14849 Generate code to access thread-local storage using the 'gnu' or 14850 'gnu2' conventions. 'gnu' is the conservative default; 'gnu2' is 14851 more efficient, but it may add compile- and run-time requirements 14852 that cannot be satisfied on all systems. 14853 14854'-mpush-args' 14855'-mno-push-args' 14856 Use PUSH operations to store outgoing parameters. This method is 14857 shorter and usually equally fast as method using SUB/MOV operations 14858 and is enabled by default. In some cases disabling it may improve 14859 performance because of improved scheduling and reduced 14860 dependencies. 14861 14862'-maccumulate-outgoing-args' 14863 If enabled, the maximum amount of space required for outgoing 14864 arguments is computed in the function prologue. This is faster on 14865 most modern CPUs because of reduced dependencies, improved 14866 scheduling and reduced stack usage when the preferred stack 14867 boundary is not equal to 2. The drawback is a notable increase in 14868 code size. This switch implies '-mno-push-args'. 14869 14870'-mthreads' 14871 Support thread-safe exception handling on MinGW. Programs that rely 14872 on thread-safe exception handling must compile and link all code 14873 with the '-mthreads' option. When compiling, '-mthreads' defines 14874 '-D_MT'; when linking, it links in a special thread helper library 14875 '-lmingwthrd' which cleans up per-thread exception-handling data. 14876 14877'-mno-align-stringops' 14878 Do not align the destination of inlined string operations. This 14879 switch reduces code size and improves performance in case the 14880 destination is already aligned, but GCC doesn't know about it. 14881 14882'-minline-all-stringops' 14883 By default GCC inlines string operations only when the destination 14884 is known to be aligned to least a 4-byte boundary. This enables 14885 more inlining and increases code size, but may improve performance 14886 of code that depends on fast 'memcpy', 'strlen', and 'memset' for 14887 short lengths. 14888 14889'-minline-stringops-dynamically' 14890 For string operations of unknown size, use run-time checks with 14891 inline code for small blocks and a library call for large blocks. 14892 14893'-mstringop-strategy=ALG' 14894 Override the internal decision heuristic for the particular 14895 algorithm to use for inlining string operations. The allowed 14896 values for ALG are: 14897 14898 'rep_byte' 14899 'rep_4byte' 14900 'rep_8byte' 14901 Expand using i386 'rep' prefix of the specified size. 14902 14903 'byte_loop' 14904 'loop' 14905 'unrolled_loop' 14906 Expand into an inline loop. 14907 14908 'libcall' 14909 Always use a library call. 14910 14911'-mmemcpy-strategy=STRATEGY' 14912 Override the internal decision heuristic to decide if 14913 '__builtin_memcpy' should be inlined and what inline algorithm to 14914 use when the expected size of the copy operation is known. 14915 STRATEGY is a comma-separated list of ALG:MAX_SIZE:DEST_ALIGN 14916 triplets. ALG is specified in '-mstringop-strategy', MAX_SIZE 14917 specifies the max byte size with which inline algorithm ALG is 14918 allowed. For the last triplet, the MAX_SIZE must be '-1'. The 14919 MAX_SIZE of the triplets in the list must be specified in 14920 increasing order. The minimal byte size for ALG is '0' for the 14921 first triplet and 'MAX_SIZE + 1' of the preceding range. 14922 14923'-mmemset-strategy=STRATEGY' 14924 The option is similar to '-mmemcpy-strategy=' except that it is to 14925 control '__builtin_memset' expansion. 14926 14927'-momit-leaf-frame-pointer' 14928 Don't keep the frame pointer in a register for leaf functions. 14929 This avoids the instructions to save, set up, and restore frame 14930 pointers and makes an extra register available in leaf functions. 14931 The option '-fomit-leaf-frame-pointer' removes the frame pointer 14932 for leaf functions, which might make debugging harder. 14933 14934'-mtls-direct-seg-refs' 14935'-mno-tls-direct-seg-refs' 14936 Controls whether TLS variables may be accessed with offsets from 14937 the TLS segment register ('%gs' for 32-bit, '%fs' for 64-bit), or 14938 whether the thread base pointer must be added. Whether or not this 14939 is valid depends on the operating system, and whether it maps the 14940 segment to cover the entire TLS area. 14941 14942 For systems that use the GNU C Library, the default is on. 14943 14944'-msse2avx' 14945'-mno-sse2avx' 14946 Specify that the assembler should encode SSE instructions with VEX 14947 prefix. The option '-mavx' turns this on by default. 14948 14949'-mfentry' 14950'-mno-fentry' 14951 If profiling is active ('-pg'), put the profiling counter call 14952 before the prologue. Note: On x86 architectures the attribute 14953 'ms_hook_prologue' isn't possible at the moment for '-mfentry' and 14954 '-pg'. 14955 14956'-m8bit-idiv' 14957'-mno-8bit-idiv' 14958 On some processors, like Intel Atom, 8-bit unsigned integer divide 14959 is much faster than 32-bit/64-bit integer divide. This option 14960 generates a run-time check. If both dividend and divisor are 14961 within range of 0 to 255, 8-bit unsigned integer divide is used 14962 instead of 32-bit/64-bit integer divide. 14963 14964'-mavx256-split-unaligned-load' 14965'-mavx256-split-unaligned-store' 14966 Split 32-byte AVX unaligned load and store. 14967 14968'-mstack-protector-guard=GUARD' 14969 Generate stack protection code using canary at GUARD. Supported 14970 locations are 'global' for global canary or 'tls' for per-thread 14971 canary in the TLS block (the default). This option has effect only 14972 when '-fstack-protector' or '-fstack-protector-all' is specified. 14973 14974 These '-m' switches are supported in addition to the above on x86-64 14975processors in 64-bit environments. 14976 14977'-m32' 14978'-m64' 14979'-mx32' 14980'-m16' 14981 Generate code for a 16-bit, 32-bit or 64-bit environment. The 14982 '-m32' option sets 'int', 'long', and pointer types to 32 bits, and 14983 generates code that runs on any i386 system. 14984 14985 The '-m64' option sets 'int' to 32 bits and 'long' and pointer 14986 types to 64 bits, and generates code for the x86-64 architecture. 14987 For Darwin only the '-m64' option also turns off the '-fno-pic' and 14988 '-mdynamic-no-pic' options. 14989 14990 The '-mx32' option sets 'int', 'long', and pointer types to 32 14991 bits, and generates code for the x86-64 architecture. 14992 14993 The '-m16' option is the same as '-m32', except for that it outputs 14994 the '.code16gcc' assembly directive at the beginning of the 14995 assembly output so that the binary can run in 16-bit mode. 14996 14997'-mno-red-zone' 14998 Do not use a so-called "red zone" for x86-64 code. The red zone is 14999 mandated by the x86-64 ABI; it is a 128-byte area beyond the 15000 location of the stack pointer that is not modified by signal or 15001 interrupt handlers and therefore can be used for temporary data 15002 without adjusting the stack pointer. The flag '-mno-red-zone' 15003 disables this red zone. 15004 15005'-mcmodel=small' 15006 Generate code for the small code model: the program and its symbols 15007 must be linked in the lower 2 GB of the address space. Pointers 15008 are 64 bits. Programs can be statically or dynamically linked. 15009 This is the default code model. 15010 15011'-mcmodel=kernel' 15012 Generate code for the kernel code model. The kernel runs in the 15013 negative 2 GB of the address space. This model has to be used for 15014 Linux kernel code. 15015 15016'-mcmodel=medium' 15017 Generate code for the medium model: the program is linked in the 15018 lower 2 GB of the address space. Small symbols are also placed 15019 there. Symbols with sizes larger than '-mlarge-data-threshold' are 15020 put into large data or BSS sections and can be located above 2GB. 15021 Programs can be statically or dynamically linked. 15022 15023'-mcmodel=large' 15024 Generate code for the large model. This model makes no assumptions 15025 about addresses and sizes of sections. 15026 15027'-maddress-mode=long' 15028 Generate code for long address mode. This is only supported for 15029 64-bit and x32 environments. It is the default address mode for 15030 64-bit environments. 15031 15032'-maddress-mode=short' 15033 Generate code for short address mode. This is only supported for 15034 32-bit and x32 environments. It is the default address mode for 15035 32-bit and x32 environments. 15036 15037 15038File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 15039 150403.17.18 i386 and x86-64 Windows Options 15041--------------------------------------- 15042 15043These additional options are available for Microsoft Windows targets: 15044 15045'-mconsole' 15046 This option specifies that a console application is to be 15047 generated, by instructing the linker to set the PE header subsystem 15048 type required for console applications. This option is available 15049 for Cygwin and MinGW targets and is enabled by default on those 15050 targets. 15051 15052'-mdll' 15053 This option is available for Cygwin and MinGW targets. It 15054 specifies that a DLL--a dynamic link library--is to be generated, 15055 enabling the selection of the required runtime startup object and 15056 entry point. 15057 15058'-mnop-fun-dllimport' 15059 This option is available for Cygwin and MinGW targets. It 15060 specifies that the 'dllimport' attribute should be ignored. 15061 15062'-mthread' 15063 This option is available for MinGW targets. It specifies that 15064 MinGW-specific thread support is to be used. 15065 15066'-municode' 15067 This option is available for MinGW-w64 targets. It causes the 15068 'UNICODE' preprocessor macro to be predefined, and chooses 15069 Unicode-capable runtime startup code. 15070 15071'-mwin32' 15072 This option is available for Cygwin and MinGW targets. It 15073 specifies that the typical Microsoft Windows predefined macros are 15074 to be set in the pre-processor, but does not influence the choice 15075 of runtime library/startup code. 15076 15077'-mwindows' 15078 This option is available for Cygwin and MinGW targets. It 15079 specifies that a GUI application is to be generated by instructing 15080 the linker to set the PE header subsystem type appropriately. 15081 15082'-fno-set-stack-executable' 15083 This option is available for MinGW targets. It specifies that the 15084 executable flag for the stack used by nested functions isn't set. 15085 This is necessary for binaries running in kernel mode of Microsoft 15086 Windows, as there the User32 API, which is used to set executable 15087 privileges, isn't available. 15088 15089'-fwritable-relocated-rdata' 15090 This option is available for MinGW and Cygwin targets. It 15091 specifies that relocated-data in read-only section is put into 15092 .data section. This is a necessary for older runtimes not 15093 supporting modification of .rdata sections for pseudo-relocation. 15094 15095'-mpe-aligned-commons' 15096 This option is available for Cygwin and MinGW targets. It 15097 specifies that the GNU extension to the PE file format that permits 15098 the correct alignment of COMMON variables should be used when 15099 generating code. It is enabled by default if GCC detects that the 15100 target assembler found during configuration supports the feature. 15101 15102 See also under *note i386 and x86-64 Options:: for standard options. 15103 15104 15105File: gcc.info, Node: IA-64 Options, Next: LM32 Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 15106 151073.17.19 IA-64 Options 15108--------------------- 15109 15110These are the '-m' options defined for the Intel IA-64 architecture. 15111 15112'-mbig-endian' 15113 Generate code for a big-endian target. This is the default for 15114 HP-UX. 15115 15116'-mlittle-endian' 15117 Generate code for a little-endian target. This is the default for 15118 AIX5 and GNU/Linux. 15119 15120'-mgnu-as' 15121'-mno-gnu-as' 15122 Generate (or don't) code for the GNU assembler. This is the 15123 default. 15124 15125'-mgnu-ld' 15126'-mno-gnu-ld' 15127 Generate (or don't) code for the GNU linker. This is the default. 15128 15129'-mno-pic' 15130 Generate code that does not use a global pointer register. The 15131 result is not position independent code, and violates the IA-64 15132 ABI. 15133 15134'-mvolatile-asm-stop' 15135'-mno-volatile-asm-stop' 15136 Generate (or don't) a stop bit immediately before and after 15137 volatile asm statements. 15138 15139'-mregister-names' 15140'-mno-register-names' 15141 Generate (or don't) 'in', 'loc', and 'out' register names for the 15142 stacked registers. This may make assembler output more readable. 15143 15144'-mno-sdata' 15145'-msdata' 15146 Disable (or enable) optimizations that use the small data section. 15147 This may be useful for working around optimizer bugs. 15148 15149'-mconstant-gp' 15150 Generate code that uses a single constant global pointer value. 15151 This is useful when compiling kernel code. 15152 15153'-mauto-pic' 15154 Generate code that is self-relocatable. This implies 15155 '-mconstant-gp'. This is useful when compiling firmware code. 15156 15157'-minline-float-divide-min-latency' 15158 Generate code for inline divides of floating-point values using the 15159 minimum latency algorithm. 15160 15161'-minline-float-divide-max-throughput' 15162 Generate code for inline divides of floating-point values using the 15163 maximum throughput algorithm. 15164 15165'-mno-inline-float-divide' 15166 Do not generate inline code for divides of floating-point values. 15167 15168'-minline-int-divide-min-latency' 15169 Generate code for inline divides of integer values using the 15170 minimum latency algorithm. 15171 15172'-minline-int-divide-max-throughput' 15173 Generate code for inline divides of integer values using the 15174 maximum throughput algorithm. 15175 15176'-mno-inline-int-divide' 15177 Do not generate inline code for divides of integer values. 15178 15179'-minline-sqrt-min-latency' 15180 Generate code for inline square roots using the minimum latency 15181 algorithm. 15182 15183'-minline-sqrt-max-throughput' 15184 Generate code for inline square roots using the maximum throughput 15185 algorithm. 15186 15187'-mno-inline-sqrt' 15188 Do not generate inline code for 'sqrt'. 15189 15190'-mfused-madd' 15191'-mno-fused-madd' 15192 Do (don't) generate code that uses the fused multiply/add or 15193 multiply/subtract instructions. The default is to use these 15194 instructions. 15195 15196'-mno-dwarf2-asm' 15197'-mdwarf2-asm' 15198 Don't (or do) generate assembler code for the DWARF 2 line number 15199 debugging info. This may be useful when not using the GNU 15200 assembler. 15201 15202'-mearly-stop-bits' 15203'-mno-early-stop-bits' 15204 Allow stop bits to be placed earlier than immediately preceding the 15205 instruction that triggered the stop bit. This can improve 15206 instruction scheduling, but does not always do so. 15207 15208'-mfixed-range=REGISTER-RANGE' 15209 Generate code treating the given register range as fixed registers. 15210 A fixed register is one that the register allocator cannot use. 15211 This is useful when compiling kernel code. A register range is 15212 specified as two registers separated by a dash. Multiple register 15213 ranges can be specified separated by a comma. 15214 15215'-mtls-size=TLS-SIZE' 15216 Specify bit size of immediate TLS offsets. Valid values are 14, 15217 22, and 64. 15218 15219'-mtune=CPU-TYPE' 15220 Tune the instruction scheduling for a particular CPU, Valid values 15221 are 'itanium', 'itanium1', 'merced', 'itanium2', and 'mckinley'. 15222 15223'-milp32' 15224'-mlp64' 15225 Generate code for a 32-bit or 64-bit environment. The 32-bit 15226 environment sets int, long and pointer to 32 bits. The 64-bit 15227 environment sets int to 32 bits and long and pointer to 64 bits. 15228 These are HP-UX specific flags. 15229 15230'-mno-sched-br-data-spec' 15231'-msched-br-data-spec' 15232 (Dis/En)able data speculative scheduling before reload. This 15233 results in generation of 'ld.a' instructions and the corresponding 15234 check instructions ('ld.c' / 'chk.a'). The default is 'disable'. 15235 15236'-msched-ar-data-spec' 15237'-mno-sched-ar-data-spec' 15238 (En/Dis)able data speculative scheduling after reload. This 15239 results in generation of 'ld.a' instructions and the corresponding 15240 check instructions ('ld.c' / 'chk.a'). The default is 'enable'. 15241 15242'-mno-sched-control-spec' 15243'-msched-control-spec' 15244 (Dis/En)able control speculative scheduling. This feature is 15245 available only during region scheduling (i.e. before reload). This 15246 results in generation of the 'ld.s' instructions and the 15247 corresponding check instructions 'chk.s'. The default is 15248 'disable'. 15249 15250'-msched-br-in-data-spec' 15251'-mno-sched-br-in-data-spec' 15252 (En/Dis)able speculative scheduling of the instructions that are 15253 dependent on the data speculative loads before reload. This is 15254 effective only with '-msched-br-data-spec' enabled. The default is 15255 'enable'. 15256 15257'-msched-ar-in-data-spec' 15258'-mno-sched-ar-in-data-spec' 15259 (En/Dis)able speculative scheduling of the instructions that are 15260 dependent on the data speculative loads after reload. This is 15261 effective only with '-msched-ar-data-spec' enabled. The default is 15262 'enable'. 15263 15264'-msched-in-control-spec' 15265'-mno-sched-in-control-spec' 15266 (En/Dis)able speculative scheduling of the instructions that are 15267 dependent on the control speculative loads. This is effective only 15268 with '-msched-control-spec' enabled. The default is 'enable'. 15269 15270'-mno-sched-prefer-non-data-spec-insns' 15271'-msched-prefer-non-data-spec-insns' 15272 If enabled, data-speculative instructions are chosen for schedule 15273 only if there are no other choices at the moment. This makes the 15274 use of the data speculation much more conservative. The default is 15275 'disable'. 15276 15277'-mno-sched-prefer-non-control-spec-insns' 15278'-msched-prefer-non-control-spec-insns' 15279 If enabled, control-speculative instructions are chosen for 15280 schedule only if there are no other choices at the moment. This 15281 makes the use of the control speculation much more conservative. 15282 The default is 'disable'. 15283 15284'-mno-sched-count-spec-in-critical-path' 15285'-msched-count-spec-in-critical-path' 15286 If enabled, speculative dependencies are considered during 15287 computation of the instructions priorities. This makes the use of 15288 the speculation a bit more conservative. The default is 'disable'. 15289 15290'-msched-spec-ldc' 15291 Use a simple data speculation check. This option is on by default. 15292 15293'-msched-control-spec-ldc' 15294 Use a simple check for control speculation. This option is on by 15295 default. 15296 15297'-msched-stop-bits-after-every-cycle' 15298 Place a stop bit after every cycle when scheduling. This option is 15299 on by default. 15300 15301'-msched-fp-mem-deps-zero-cost' 15302 Assume that floating-point stores and loads are not likely to cause 15303 a conflict when placed into the same instruction group. This 15304 option is disabled by default. 15305 15306'-msel-sched-dont-check-control-spec' 15307 Generate checks for control speculation in selective scheduling. 15308 This flag is disabled by default. 15309 15310'-msched-max-memory-insns=MAX-INSNS' 15311 Limit on the number of memory insns per instruction group, giving 15312 lower priority to subsequent memory insns attempting to schedule in 15313 the same instruction group. Frequently useful to prevent cache 15314 bank conflicts. The default value is 1. 15315 15316'-msched-max-memory-insns-hard-limit' 15317 Makes the limit specified by 'msched-max-memory-insns' a hard 15318 limit, disallowing more than that number in an instruction group. 15319 Otherwise, the limit is "soft", meaning that non-memory operations 15320 are preferred when the limit is reached, but memory operations may 15321 still be scheduled. 15322 15323 15324File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64 Options, Up: Submodel Options 15325 153263.17.20 LM32 Options 15327-------------------- 15328 15329These '-m' options are defined for the LatticeMico32 architecture: 15330 15331'-mbarrel-shift-enabled' 15332 Enable barrel-shift instructions. 15333 15334'-mdivide-enabled' 15335 Enable divide and modulus instructions. 15336 15337'-mmultiply-enabled' 15338 Enable multiply instructions. 15339 15340'-msign-extend-enabled' 15341 Enable sign extend instructions. 15342 15343'-muser-enabled' 15344 Enable user-defined instructions. 15345 15346 15347File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 15348 153493.17.21 M32C Options 15350-------------------- 15351 15352'-mcpu=NAME' 15353 Select the CPU for which code is generated. NAME may be one of 15354 'r8c' for the R8C/Tiny series, 'm16c' for the M16C (up to /60) 15355 series, 'm32cm' for the M16C/80 series, or 'm32c' for the M32C/80 15356 series. 15357 15358'-msim' 15359 Specifies that the program will be run on the simulator. This 15360 causes an alternate runtime library to be linked in which supports, 15361 for example, file I/O. You must not use this option when 15362 generating programs that will run on real hardware; you must 15363 provide your own runtime library for whatever I/O functions are 15364 needed. 15365 15366'-memregs=NUMBER' 15367 Specifies the number of memory-based pseudo-registers GCC uses 15368 during code generation. These pseudo-registers are used like real 15369 registers, so there is a tradeoff between GCC's ability to fit the 15370 code into available registers, and the performance penalty of using 15371 memory instead of registers. Note that all modules in a program 15372 must be compiled with the same value for this option. Because of 15373 that, you must not use this option with GCC's default runtime 15374 libraries. 15375 15376 15377File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 15378 153793.17.22 M32R/D Options 15380---------------------- 15381 15382These '-m' options are defined for Renesas M32R/D architectures: 15383 15384'-m32r2' 15385 Generate code for the M32R/2. 15386 15387'-m32rx' 15388 Generate code for the M32R/X. 15389 15390'-m32r' 15391 Generate code for the M32R. This is the default. 15392 15393'-mmodel=small' 15394 Assume all objects live in the lower 16MB of memory (so that their 15395 addresses can be loaded with the 'ld24' instruction), and assume 15396 all subroutines are reachable with the 'bl' instruction. This is 15397 the default. 15398 15399 The addressability of a particular object can be set with the 15400 'model' attribute. 15401 15402'-mmodel=medium' 15403 Assume objects may be anywhere in the 32-bit address space (the 15404 compiler generates 'seth/add3' instructions to load their 15405 addresses), and assume all subroutines are reachable with the 'bl' 15406 instruction. 15407 15408'-mmodel=large' 15409 Assume objects may be anywhere in the 32-bit address space (the 15410 compiler generates 'seth/add3' instructions to load their 15411 addresses), and assume subroutines may not be reachable with the 15412 'bl' instruction (the compiler generates the much slower 15413 'seth/add3/jl' instruction sequence). 15414 15415'-msdata=none' 15416 Disable use of the small data area. Variables are put into one of 15417 '.data', '.bss', or '.rodata' (unless the 'section' attribute has 15418 been specified). This is the default. 15419 15420 The small data area consists of sections '.sdata' and '.sbss'. 15421 Objects may be explicitly put in the small data area with the 15422 'section' attribute using one of these sections. 15423 15424'-msdata=sdata' 15425 Put small global and static data in the small data area, but do not 15426 generate special code to reference them. 15427 15428'-msdata=use' 15429 Put small global and static data in the small data area, and 15430 generate special instructions to reference them. 15431 15432'-G NUM' 15433 Put global and static objects less than or equal to NUM bytes into 15434 the small data or BSS sections instead of the normal data or BSS 15435 sections. The default value of NUM is 8. The '-msdata' option 15436 must be set to one of 'sdata' or 'use' for this option to have any 15437 effect. 15438 15439 All modules should be compiled with the same '-G NUM' value. 15440 Compiling with different values of NUM may or may not work; if it 15441 doesn't the linker gives an error message--incorrect code is not 15442 generated. 15443 15444'-mdebug' 15445 Makes the M32R-specific code in the compiler display some 15446 statistics that might help in debugging programs. 15447 15448'-malign-loops' 15449 Align all loops to a 32-byte boundary. 15450 15451'-mno-align-loops' 15452 Do not enforce a 32-byte alignment for loops. This is the default. 15453 15454'-missue-rate=NUMBER' 15455 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 15456 15457'-mbranch-cost=NUMBER' 15458 NUMBER can only be 1 or 2. If it is 1 then branches are preferred 15459 over conditional code, if it is 2, then the opposite applies. 15460 15461'-mflush-trap=NUMBER' 15462 Specifies the trap number to use to flush the cache. The default 15463 is 12. Valid numbers are between 0 and 15 inclusive. 15464 15465'-mno-flush-trap' 15466 Specifies that the cache cannot be flushed by using a trap. 15467 15468'-mflush-func=NAME' 15469 Specifies the name of the operating system function to call to 15470 flush the cache. The default is __flush_cache_, but a function 15471 call is only used if a trap is not available. 15472 15473'-mno-flush-func' 15474 Indicates that there is no OS function for flushing the cache. 15475 15476 15477File: gcc.info, Node: M680x0 Options, Next: MCore Options, Prev: M32R/D Options, Up: Submodel Options 15478 154793.17.23 M680x0 Options 15480---------------------- 15481 15482These are the '-m' options defined for M680x0 and ColdFire processors. 15483The default settings depend on which architecture was selected when the 15484compiler was configured; the defaults for the most common choices are 15485given below. 15486 15487'-march=ARCH' 15488 Generate code for a specific M680x0 or ColdFire instruction set 15489 architecture. Permissible values of ARCH for M680x0 architectures 15490 are: '68000', '68010', '68020', '68030', '68040', '68060' and 15491 'cpu32'. ColdFire architectures are selected according to 15492 Freescale's ISA classification and the permissible values are: 15493 'isaa', 'isaaplus', 'isab' and 'isac'. 15494 15495 GCC defines a macro '__mcfARCH__' whenever it is generating code 15496 for a ColdFire target. The ARCH in this macro is one of the 15497 '-march' arguments given above. 15498 15499 When used together, '-march' and '-mtune' select code that runs on 15500 a family of similar processors but that is optimized for a 15501 particular microarchitecture. 15502 15503'-mcpu=CPU' 15504 Generate code for a specific M680x0 or ColdFire processor. The 15505 M680x0 CPUs are: '68000', '68010', '68020', '68030', '68040', 15506 '68060', '68302', '68332' and 'cpu32'. The ColdFire CPUs are given 15507 by the table below, which also classifies the CPUs into families: 15508 15509 *Family* *'-mcpu' arguments* 15510 '51' '51' '51ac' '51ag' '51cn' '51em' '51je' '51jf' '51jg' 15511 '51jm' '51mm' '51qe' '51qm' 15512 '5206' '5202' '5204' '5206' 15513 '5206e' '5206e' 15514 '5208' '5207' '5208' 15515 '5211a' '5210a' '5211a' 15516 '5213' '5211' '5212' '5213' 15517 '5216' '5214' '5216' 15518 '52235' '52230' '52231' '52232' '52233' '52234' '52235' 15519 '5225' '5224' '5225' 15520 '52259' '52252' '52254' '52255' '52256' '52258' '52259' 15521 '5235' '5232' '5233' '5234' '5235' '523x' 15522 '5249' '5249' 15523 '5250' '5250' 15524 '5271' '5270' '5271' 15525 '5272' '5272' 15526 '5275' '5274' '5275' 15527 '5282' '5280' '5281' '5282' '528x' 15528 '53017' '53011' '53012' '53013' '53014' '53015' '53016' '53017' 15529 '5307' '5307' 15530 '5329' '5327' '5328' '5329' '532x' 15531 '5373' '5372' '5373' '537x' 15532 '5407' '5407' 15533 '5475' '5470' '5471' '5472' '5473' '5474' '5475' '547x' '5480' 15534 '5481' '5482' '5483' '5484' '5485' 15535 15536 '-mcpu=CPU' overrides '-march=ARCH' if ARCH is compatible with CPU. 15537 Other combinations of '-mcpu' and '-march' are rejected. 15538 15539 GCC defines the macro '__mcf_cpu_CPU' when ColdFire target CPU is 15540 selected. It also defines '__mcf_family_FAMILY', where the value 15541 of FAMILY is given by the table above. 15542 15543'-mtune=TUNE' 15544 Tune the code for a particular microarchitecture within the 15545 constraints set by '-march' and '-mcpu'. The M680x0 15546 microarchitectures are: '68000', '68010', '68020', '68030', 15547 '68040', '68060' and 'cpu32'. The ColdFire microarchitectures are: 15548 'cfv1', 'cfv2', 'cfv3', 'cfv4' and 'cfv4e'. 15549 15550 You can also use '-mtune=68020-40' for code that needs to run 15551 relatively well on 68020, 68030 and 68040 targets. 15552 '-mtune=68020-60' is similar but includes 68060 targets as well. 15553 These two options select the same tuning decisions as '-m68020-40' 15554 and '-m68020-60' respectively. 15555 15556 GCC defines the macros '__mcARCH' and '__mcARCH__' when tuning for 15557 680x0 architecture ARCH. It also defines 'mcARCH' unless either 15558 '-ansi' or a non-GNU '-std' option is used. If GCC is tuning for a 15559 range of architectures, as selected by '-mtune=68020-40' or 15560 '-mtune=68020-60', it defines the macros for every architecture in 15561 the range. 15562 15563 GCC also defines the macro '__mUARCH__' when tuning for ColdFire 15564 microarchitecture UARCH, where UARCH is one of the arguments given 15565 above. 15566 15567'-m68000' 15568'-mc68000' 15569 Generate output for a 68000. This is the default when the compiler 15570 is configured for 68000-based systems. It is equivalent to 15571 '-march=68000'. 15572 15573 Use this option for microcontrollers with a 68000 or EC000 core, 15574 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 15575 15576'-m68010' 15577 Generate output for a 68010. This is the default when the compiler 15578 is configured for 68010-based systems. It is equivalent to 15579 '-march=68010'. 15580 15581'-m68020' 15582'-mc68020' 15583 Generate output for a 68020. This is the default when the compiler 15584 is configured for 68020-based systems. It is equivalent to 15585 '-march=68020'. 15586 15587'-m68030' 15588 Generate output for a 68030. This is the default when the compiler 15589 is configured for 68030-based systems. It is equivalent to 15590 '-march=68030'. 15591 15592'-m68040' 15593 Generate output for a 68040. This is the default when the compiler 15594 is configured for 68040-based systems. It is equivalent to 15595 '-march=68040'. 15596 15597 This option inhibits the use of 68881/68882 instructions that have 15598 to be emulated by software on the 68040. Use this option if your 15599 68040 does not have code to emulate those instructions. 15600 15601'-m68060' 15602 Generate output for a 68060. This is the default when the compiler 15603 is configured for 68060-based systems. It is equivalent to 15604 '-march=68060'. 15605 15606 This option inhibits the use of 68020 and 68881/68882 instructions 15607 that have to be emulated by software on the 68060. Use this option 15608 if your 68060 does not have code to emulate those instructions. 15609 15610'-mcpu32' 15611 Generate output for a CPU32. This is the default when the compiler 15612 is configured for CPU32-based systems. It is equivalent to 15613 '-march=cpu32'. 15614 15615 Use this option for microcontrollers with a CPU32 or CPU32+ core, 15616 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 15617 68341, 68349 and 68360. 15618 15619'-m5200' 15620 Generate output for a 520X ColdFire CPU. This is the default when 15621 the compiler is configured for 520X-based systems. It is 15622 equivalent to '-mcpu=5206', and is now deprecated in favor of that 15623 option. 15624 15625 Use this option for microcontroller with a 5200 core, including the 15626 MCF5202, MCF5203, MCF5204 and MCF5206. 15627 15628'-m5206e' 15629 Generate output for a 5206e ColdFire CPU. The option is now 15630 deprecated in favor of the equivalent '-mcpu=5206e'. 15631 15632'-m528x' 15633 Generate output for a member of the ColdFire 528X family. The 15634 option is now deprecated in favor of the equivalent '-mcpu=528x'. 15635 15636'-m5307' 15637 Generate output for a ColdFire 5307 CPU. The option is now 15638 deprecated in favor of the equivalent '-mcpu=5307'. 15639 15640'-m5407' 15641 Generate output for a ColdFire 5407 CPU. The option is now 15642 deprecated in favor of the equivalent '-mcpu=5407'. 15643 15644'-mcfv4e' 15645 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 15646 This includes use of hardware floating-point instructions. The 15647 option is equivalent to '-mcpu=547x', and is now deprecated in 15648 favor of that option. 15649 15650'-m68020-40' 15651 Generate output for a 68040, without using any of the new 15652 instructions. This results in code that can run relatively 15653 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15654 generated code does use the 68881 instructions that are emulated on 15655 the 68040. 15656 15657 The option is equivalent to '-march=68020' '-mtune=68020-40'. 15658 15659'-m68020-60' 15660 Generate output for a 68060, without using any of the new 15661 instructions. This results in code that can run relatively 15662 efficiently on either a 68020/68881 or a 68030 or a 68040. The 15663 generated code does use the 68881 instructions that are emulated on 15664 the 68060. 15665 15666 The option is equivalent to '-march=68020' '-mtune=68020-60'. 15667 15668'-mhard-float' 15669'-m68881' 15670 Generate floating-point instructions. This is the default for 15671 68020 and above, and for ColdFire devices that have an FPU. It 15672 defines the macro '__HAVE_68881__' on M680x0 targets and 15673 '__mcffpu__' on ColdFire targets. 15674 15675'-msoft-float' 15676 Do not generate floating-point instructions; use library calls 15677 instead. This is the default for 68000, 68010, and 68832 targets. 15678 It is also the default for ColdFire devices that have no FPU. 15679 15680'-mdiv' 15681'-mno-div' 15682 Generate (do not generate) ColdFire hardware divide and remainder 15683 instructions. If '-march' is used without '-mcpu', the default is 15684 "on" for ColdFire architectures and "off" for M680x0 architectures. 15685 Otherwise, the default is taken from the target CPU (either the 15686 default CPU, or the one specified by '-mcpu'). For example, the 15687 default is "off" for '-mcpu=5206' and "on" for '-mcpu=5206e'. 15688 15689 GCC defines the macro '__mcfhwdiv__' when this option is enabled. 15690 15691'-mshort' 15692 Consider type 'int' to be 16 bits wide, like 'short int'. 15693 Additionally, parameters passed on the stack are also aligned to a 15694 16-bit boundary even on targets whose API mandates promotion to 15695 32-bit. 15696 15697'-mno-short' 15698 Do not consider type 'int' to be 16 bits wide. This is the 15699 default. 15700 15701'-mnobitfield' 15702'-mno-bitfield' 15703 Do not use the bit-field instructions. The '-m68000', '-mcpu32' 15704 and '-m5200' options imply '-mnobitfield'. 15705 15706'-mbitfield' 15707 Do use the bit-field instructions. The '-m68020' option implies 15708 '-mbitfield'. This is the default if you use a configuration 15709 designed for a 68020. 15710 15711'-mrtd' 15712 Use a different function-calling convention, in which functions 15713 that take a fixed number of arguments return with the 'rtd' 15714 instruction, which pops their arguments while returning. This 15715 saves one instruction in the caller since there is no need to pop 15716 the arguments there. 15717 15718 This calling convention is incompatible with the one normally used 15719 on Unix, so you cannot use it if you need to call libraries 15720 compiled with the Unix compiler. 15721 15722 Also, you must provide function prototypes for all functions that 15723 take variable numbers of arguments (including 'printf'); otherwise 15724 incorrect code is generated for calls to those functions. 15725 15726 In addition, seriously incorrect code results if you call a 15727 function with too many arguments. (Normally, extra arguments are 15728 harmlessly ignored.) 15729 15730 The 'rtd' instruction is supported by the 68010, 68020, 68030, 15731 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 15732 15733'-mno-rtd' 15734 Do not use the calling conventions selected by '-mrtd'. This is 15735 the default. 15736 15737'-malign-int' 15738'-mno-align-int' 15739 Control whether GCC aligns 'int', 'long', 'long long', 'float', 15740 'double', and 'long double' variables on a 32-bit boundary 15741 ('-malign-int') or a 16-bit boundary ('-mno-align-int'). Aligning 15742 variables on 32-bit boundaries produces code that runs somewhat 15743 faster on processors with 32-bit busses at the expense of more 15744 memory. 15745 15746 *Warning:* if you use the '-malign-int' switch, GCC aligns 15747 structures containing the above types differently than most 15748 published application binary interface specifications for the m68k. 15749 15750'-mpcrel' 15751 Use the pc-relative addressing mode of the 68000 directly, instead 15752 of using a global offset table. At present, this option implies 15753 '-fpic', allowing at most a 16-bit offset for pc-relative 15754 addressing. '-fPIC' is not presently supported with '-mpcrel', 15755 though this could be supported for 68020 and higher processors. 15756 15757'-mno-strict-align' 15758'-mstrict-align' 15759 Do not (do) assume that unaligned memory references are handled by 15760 the system. 15761 15762'-msep-data' 15763 Generate code that allows the data segment to be located in a 15764 different area of memory from the text segment. This allows for 15765 execute-in-place in an environment without virtual memory 15766 management. This option implies '-fPIC'. 15767 15768'-mno-sep-data' 15769 Generate code that assumes that the data segment follows the text 15770 segment. This is the default. 15771 15772'-mid-shared-library' 15773 Generate code that supports shared libraries via the library ID 15774 method. This allows for execute-in-place and shared libraries in 15775 an environment without virtual memory management. This option 15776 implies '-fPIC'. 15777 15778'-mno-id-shared-library' 15779 Generate code that doesn't assume ID-based shared libraries are 15780 being used. This is the default. 15781 15782'-mshared-library-id=n' 15783 Specifies the identification number of the ID-based shared library 15784 being compiled. Specifying a value of 0 generates more compact 15785 code; specifying other values forces the allocation of that number 15786 to the current library, but is no more space- or time-efficient 15787 than omitting this option. 15788 15789'-mxgot' 15790'-mno-xgot' 15791 When generating position-independent code for ColdFire, generate 15792 code that works if the GOT has more than 8192 entries. This code 15793 is larger and slower than code generated without this option. On 15794 M680x0 processors, this option is not needed; '-fPIC' suffices. 15795 15796 GCC normally uses a single instruction to load values from the GOT. 15797 While this is relatively efficient, it only works if the GOT is 15798 smaller than about 64k. Anything larger causes the linker to 15799 report an error such as: 15800 15801 relocation truncated to fit: R_68K_GOT16O foobar 15802 15803 If this happens, you should recompile your code with '-mxgot'. It 15804 should then work with very large GOTs. However, code generated 15805 with '-mxgot' is less efficient, since it takes 4 instructions to 15806 fetch the value of a global symbol. 15807 15808 Note that some linkers, including newer versions of the GNU linker, 15809 can create multiple GOTs and sort GOT entries. If you have such a 15810 linker, you should only need to use '-mxgot' when compiling a 15811 single object file that accesses more than 8192 GOT entries. Very 15812 few do. 15813 15814 These options have no effect unless GCC is generating 15815 position-independent code. 15816 15817 15818File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M680x0 Options, Up: Submodel Options 15819 158203.17.24 MCore Options 15821--------------------- 15822 15823These are the '-m' options defined for the Motorola M*Core processors. 15824 15825'-mhardlit' 15826'-mno-hardlit' 15827 Inline constants into the code stream if it can be done in two 15828 instructions or less. 15829 15830'-mdiv' 15831'-mno-div' 15832 Use the divide instruction. (Enabled by default). 15833 15834'-mrelax-immediate' 15835'-mno-relax-immediate' 15836 Allow arbitrary-sized immediates in bit operations. 15837 15838'-mwide-bitfields' 15839'-mno-wide-bitfields' 15840 Always treat bit-fields as 'int'-sized. 15841 15842'-m4byte-functions' 15843'-mno-4byte-functions' 15844 Force all functions to be aligned to a 4-byte boundary. 15845 15846'-mcallgraph-data' 15847'-mno-callgraph-data' 15848 Emit callgraph information. 15849 15850'-mslow-bytes' 15851'-mno-slow-bytes' 15852 Prefer word access when reading byte quantities. 15853 15854'-mlittle-endian' 15855'-mbig-endian' 15856 Generate code for a little-endian target. 15857 15858'-m210' 15859'-m340' 15860 Generate code for the 210 processor. 15861 15862'-mno-lsim' 15863 Assume that runtime support has been provided and so omit the 15864 simulator library ('libsim.a)' from the linker command line. 15865 15866'-mstack-increment=SIZE' 15867 Set the maximum amount for a single stack increment operation. 15868 Large values can increase the speed of programs that contain 15869 functions that need a large amount of stack space, but they can 15870 also trigger a segmentation fault if the stack is extended too 15871 much. The default value is 0x1000. 15872 15873 15874File: gcc.info, Node: MeP Options, Next: MicroBlaze Options, Prev: MCore Options, Up: Submodel Options 15875 158763.17.25 MeP Options 15877------------------- 15878 15879'-mabsdiff' 15880 Enables the 'abs' instruction, which is the absolute difference 15881 between two registers. 15882 15883'-mall-opts' 15884 Enables all the optional instructions--average, multiply, divide, 15885 bit operations, leading zero, absolute difference, min/max, clip, 15886 and saturation. 15887 15888'-maverage' 15889 Enables the 'ave' instruction, which computes the average of two 15890 registers. 15891 15892'-mbased=N' 15893 Variables of size N bytes or smaller are placed in the '.based' 15894 section by default. Based variables use the '$tp' register as a 15895 base register, and there is a 128-byte limit to the '.based' 15896 section. 15897 15898'-mbitops' 15899 Enables the bit operation instructions--bit test ('btstm'), set 15900 ('bsetm'), clear ('bclrm'), invert ('bnotm'), and test-and-set 15901 ('tas'). 15902 15903'-mc=NAME' 15904 Selects which section constant data is placed in. NAME may be 15905 'tiny', 'near', or 'far'. 15906 15907'-mclip' 15908 Enables the 'clip' instruction. Note that '-mclip' is not useful 15909 unless you also provide '-mminmax'. 15910 15911'-mconfig=NAME' 15912 Selects one of the built-in core configurations. Each MeP chip has 15913 one or more modules in it; each module has a core CPU and a variety 15914 of coprocessors, optional instructions, and peripherals. The 15915 'MeP-Integrator' tool, not part of GCC, provides these 15916 configurations through this option; using this option is the same 15917 as using all the corresponding command-line options. The default 15918 configuration is 'default'. 15919 15920'-mcop' 15921 Enables the coprocessor instructions. By default, this is a 32-bit 15922 coprocessor. Note that the coprocessor is normally enabled via the 15923 '-mconfig=' option. 15924 15925'-mcop32' 15926 Enables the 32-bit coprocessor's instructions. 15927 15928'-mcop64' 15929 Enables the 64-bit coprocessor's instructions. 15930 15931'-mivc2' 15932 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 15933 15934'-mdc' 15935 Causes constant variables to be placed in the '.near' section. 15936 15937'-mdiv' 15938 Enables the 'div' and 'divu' instructions. 15939 15940'-meb' 15941 Generate big-endian code. 15942 15943'-mel' 15944 Generate little-endian code. 15945 15946'-mio-volatile' 15947 Tells the compiler that any variable marked with the 'io' attribute 15948 is to be considered volatile. 15949 15950'-ml' 15951 Causes variables to be assigned to the '.far' section by default. 15952 15953'-mleadz' 15954 Enables the 'leadz' (leading zero) instruction. 15955 15956'-mm' 15957 Causes variables to be assigned to the '.near' section by default. 15958 15959'-mminmax' 15960 Enables the 'min' and 'max' instructions. 15961 15962'-mmult' 15963 Enables the multiplication and multiply-accumulate instructions. 15964 15965'-mno-opts' 15966 Disables all the optional instructions enabled by '-mall-opts'. 15967 15968'-mrepeat' 15969 Enables the 'repeat' and 'erepeat' instructions, used for 15970 low-overhead looping. 15971 15972'-ms' 15973 Causes all variables to default to the '.tiny' section. Note that 15974 there is a 65536-byte limit to this section. Accesses to these 15975 variables use the '%gp' base register. 15976 15977'-msatur' 15978 Enables the saturation instructions. Note that the compiler does 15979 not currently generate these itself, but this option is included 15980 for compatibility with other tools, like 'as'. 15981 15982'-msdram' 15983 Link the SDRAM-based runtime instead of the default ROM-based 15984 runtime. 15985 15986'-msim' 15987 Link the simulator run-time libraries. 15988 15989'-msimnovec' 15990 Link the simulator runtime libraries, excluding built-in support 15991 for reset and exception vectors and tables. 15992 15993'-mtf' 15994 Causes all functions to default to the '.far' section. Without 15995 this option, functions default to the '.near' section. 15996 15997'-mtiny=N' 15998 Variables that are N bytes or smaller are allocated to the '.tiny' 15999 section. These variables use the '$gp' base register. The default 16000 for this option is 4, but note that there's a 65536-byte limit to 16001 the '.tiny' section. 16002 16003 16004File: gcc.info, Node: MicroBlaze Options, Next: MIPS Options, Prev: MeP Options, Up: Submodel Options 16005 160063.17.26 MicroBlaze Options 16007-------------------------- 16008 16009'-msoft-float' 16010 Use software emulation for floating point (default). 16011 16012'-mhard-float' 16013 Use hardware floating-point instructions. 16014 16015'-mmemcpy' 16016 Do not optimize block moves, use 'memcpy'. 16017 16018'-mno-clearbss' 16019 This option is deprecated. Use '-fno-zero-initialized-in-bss' 16020 instead. 16021 16022'-mcpu=CPU-TYPE' 16023 Use features of, and schedule code for, the given CPU. Supported 16024 values are in the format 'vX.YY.Z', where X is a major version, YY 16025 is the minor version, and Z is compatibility code. Example values 16026 are 'v3.00.a', 'v4.00.b', 'v5.00.a', 'v5.00.b', 'v5.00.b', 16027 'v6.00.a'. 16028 16029'-mxl-soft-mul' 16030 Use software multiply emulation (default). 16031 16032'-mxl-soft-div' 16033 Use software emulation for divides (default). 16034 16035'-mxl-barrel-shift' 16036 Use the hardware barrel shifter. 16037 16038'-mxl-pattern-compare' 16039 Use pattern compare instructions. 16040 16041'-msmall-divides' 16042 Use table lookup optimization for small signed integer divisions. 16043 16044'-mxl-stack-check' 16045 This option is deprecated. Use '-fstack-check' instead. 16046 16047'-mxl-gp-opt' 16048 Use GP-relative '.sdata'/'.sbss' sections. 16049 16050'-mxl-multiply-high' 16051 Use multiply high instructions for high part of 32x32 multiply. 16052 16053'-mxl-float-convert' 16054 Use hardware floating-point conversion instructions. 16055 16056'-mxl-float-sqrt' 16057 Use hardware floating-point square root instruction. 16058 16059'-mbig-endian' 16060 Generate code for a big-endian target. 16061 16062'-mlittle-endian' 16063 Generate code for a little-endian target. 16064 16065'-mxl-reorder' 16066 Use reorder instructions (swap and byte reversed load/store). 16067 16068'-mxl-mode-APP-MODEL' 16069 Select application model APP-MODEL. Valid models are 16070 'executable' 16071 normal executable (default), uses startup code 'crt0.o'. 16072 16073 'xmdstub' 16074 for use with Xilinx Microprocessor Debugger (XMD) based 16075 software intrusive debug agent called xmdstub. This uses 16076 startup file 'crt1.o' and sets the start address of the 16077 program to 0x800. 16078 16079 'bootstrap' 16080 for applications that are loaded using a bootloader. This 16081 model uses startup file 'crt2.o' which does not contain a 16082 processor reset vector handler. This is suitable for 16083 transferring control on a processor reset to the bootloader 16084 rather than the application. 16085 16086 'novectors' 16087 for applications that do not require any of the MicroBlaze 16088 vectors. This option may be useful for applications running 16089 within a monitoring application. This model uses 'crt3.o' as 16090 a startup file. 16091 16092 Option '-xl-mode-APP-MODEL' is a deprecated alias for 16093 '-mxl-mode-APP-MODEL'. 16094 16095 16096File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MicroBlaze Options, Up: Submodel Options 16097 160983.17.27 MIPS Options 16099-------------------- 16100 16101'-EB' 16102 Generate big-endian code. 16103 16104'-EL' 16105 Generate little-endian code. This is the default for 'mips*el-*-*' 16106 configurations. 16107 16108'-march=ARCH' 16109 Generate code that runs on ARCH, which can be the name of a generic 16110 MIPS ISA, or the name of a particular processor. The ISA names 16111 are: 'mips1', 'mips2', 'mips3', 'mips4', 'mips32', 'mips32r2', 16112 'mips64' and 'mips64r2'. The processor names are: '4kc', '4km', 16113 '4kp', '4ksc', '4kec', '4kem', '4kep', '4ksd', '5kc', '5kf', 16114 '20kc', '24kc', '24kf2_1', '24kf1_1', '24kec', '24kef2_1', 16115 '24kef1_1', '34kc', '34kf2_1', '34kf1_1', '34kn', '74kc', 16116 '74kf2_1', '74kf1_1', '74kf3_2', '1004kc', '1004kf2_1', 16117 '1004kf1_1', 'loongson2e', 'loongson2f', 'loongson3a', 'm4k', 16118 'm14k', 'm14kc', 'm14ke', 'm14kec', 'octeon', 'octeon+', 'octeon2', 16119 'orion', 'r2000', 'r3000', 'r3900', 'r4000', 'r4400', 'r4600', 16120 'r4650', 'r4700', 'r6000', 'r8000', 'rm7000', 'rm9000', 'r10000', 16121 'r12000', 'r14000', 'r16000', 'sb1', 'sr71000', 'vr4100', 'vr4111', 16122 'vr4120', 'vr4130', 'vr4300', 'vr5000', 'vr5400', 'vr5500', 'xlr' 16123 and 'xlp'. The special value 'from-abi' selects the most 16124 compatible architecture for the selected ABI (that is, 'mips1' for 16125 32-bit ABIs and 'mips3' for 64-bit ABIs). 16126 16127 The native Linux/GNU toolchain also supports the value 'native', 16128 which selects the best architecture option for the host processor. 16129 '-march=native' has no effect if GCC does not recognize the 16130 processor. 16131 16132 In processor names, a final '000' can be abbreviated as 'k' (for 16133 example, '-march=r2k'). Prefixes are optional, and 'vr' may be 16134 written 'r'. 16135 16136 Names of the form 'Nf2_1' refer to processors with FPUs clocked at 16137 half the rate of the core, names of the form 'Nf1_1' refer to 16138 processors with FPUs clocked at the same rate as the core, and 16139 names of the form 'Nf3_2' refer to processors with FPUs clocked a 16140 ratio of 3:2 with respect to the core. For compatibility reasons, 16141 'Nf' is accepted as a synonym for 'Nf2_1' while 'Nx' and 'Bfx' are 16142 accepted as synonyms for 'Nf1_1'. 16143 16144 GCC defines two macros based on the value of this option. The 16145 first is '_MIPS_ARCH', which gives the name of target architecture, 16146 as a string. The second has the form '_MIPS_ARCH_FOO', where FOO 16147 is the capitalized value of '_MIPS_ARCH'. For example, 16148 '-march=r2000' sets '_MIPS_ARCH' to '"r2000"' and defines the macro 16149 '_MIPS_ARCH_R2000'. 16150 16151 Note that the '_MIPS_ARCH' macro uses the processor names given 16152 above. In other words, it has the full prefix and does not 16153 abbreviate '000' as 'k'. In the case of 'from-abi', the macro 16154 names the resolved architecture (either '"mips1"' or '"mips3"'). 16155 It names the default architecture when no '-march' option is given. 16156 16157'-mtune=ARCH' 16158 Optimize for ARCH. Among other things, this option controls the 16159 way instructions are scheduled, and the perceived cost of 16160 arithmetic operations. The list of ARCH values is the same as for 16161 '-march'. 16162 16163 When this option is not used, GCC optimizes for the processor 16164 specified by '-march'. By using '-march' and '-mtune' together, it 16165 is possible to generate code that runs on a family of processors, 16166 but optimize the code for one particular member of that family. 16167 16168 '-mtune' defines the macros '_MIPS_TUNE' and '_MIPS_TUNE_FOO', 16169 which work in the same way as the '-march' ones described above. 16170 16171'-mips1' 16172 Equivalent to '-march=mips1'. 16173 16174'-mips2' 16175 Equivalent to '-march=mips2'. 16176 16177'-mips3' 16178 Equivalent to '-march=mips3'. 16179 16180'-mips4' 16181 Equivalent to '-march=mips4'. 16182 16183'-mips32' 16184 Equivalent to '-march=mips32'. 16185 16186'-mips32r2' 16187 Equivalent to '-march=mips32r2'. 16188 16189'-mips64' 16190 Equivalent to '-march=mips64'. 16191 16192'-mips64r2' 16193 Equivalent to '-march=mips64r2'. 16194 16195'-mips16' 16196'-mno-mips16' 16197 Generate (do not generate) MIPS16 code. If GCC is targeting a 16198 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE. 16199 16200 MIPS16 code generation can also be controlled on a per-function 16201 basis by means of 'mips16' and 'nomips16' attributes. *Note 16202 Function Attributes::, for more information. 16203 16204'-mflip-mips16' 16205 Generate MIPS16 code on alternating functions. This option is 16206 provided for regression testing of mixed MIPS16/non-MIPS16 code 16207 generation, and is not intended for ordinary use in compiling user 16208 code. 16209 16210'-minterlink-compressed' 16211'-mno-interlink-compressed' 16212 Require (do not require) that code using the standard 16213 (uncompressed) MIPS ISA be link-compatible with MIPS16 and 16214 microMIPS code, and vice versa. 16215 16216 For example, code using the standard ISA encoding cannot jump 16217 directly to MIPS16 or microMIPS code; it must either use a call or 16218 an indirect jump. '-minterlink-compressed' therefore disables 16219 direct jumps unless GCC knows that the target of the jump is not 16220 compressed. 16221 16222'-minterlink-mips16' 16223'-mno-interlink-mips16' 16224 Aliases of '-minterlink-compressed' and 16225 '-mno-interlink-compressed'. These options predate the microMIPS 16226 ASE and are retained for backwards compatibility. 16227 16228'-mabi=32' 16229'-mabi=o64' 16230'-mabi=n32' 16231'-mabi=64' 16232'-mabi=eabi' 16233 Generate code for the given ABI. 16234 16235 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 16236 generates 64-bit code when you select a 64-bit architecture, but 16237 you can use '-mgp32' to get 32-bit code instead. 16238 16239 For information about the O64 ABI, see 16240 <http://gcc.gnu.org/projects/mipso64-abi.html>. 16241 16242 GCC supports a variant of the o32 ABI in which floating-point 16243 registers are 64 rather than 32 bits wide. You can select this 16244 combination with '-mabi=32' '-mfp64'. This ABI relies on the 16245 'mthc1' and 'mfhc1' instructions and is therefore only supported 16246 for MIPS32R2 processors. 16247 16248 The register assignments for arguments and return values remain the 16249 same, but each scalar value is passed in a single 64-bit register 16250 rather than a pair of 32-bit registers. For example, scalar 16251 floating-point values are returned in '$f0' only, not a '$f0'/'$f1' 16252 pair. The set of call-saved registers also remains the same, but 16253 all 64 bits are saved. 16254 16255'-mabicalls' 16256'-mno-abicalls' 16257 Generate (do not generate) code that is suitable for SVR4-style 16258 dynamic objects. '-mabicalls' is the default for SVR4-based 16259 systems. 16260 16261'-mshared' 16262'-mno-shared' 16263 Generate (do not generate) code that is fully position-independent, 16264 and that can therefore be linked into shared libraries. This 16265 option only affects '-mabicalls'. 16266 16267 All '-mabicalls' code has traditionally been position-independent, 16268 regardless of options like '-fPIC' and '-fpic'. However, as an 16269 extension, the GNU toolchain allows executables to use absolute 16270 accesses for locally-binding symbols. It can also use shorter GP 16271 initialization sequences and generate direct calls to 16272 locally-defined functions. This mode is selected by '-mno-shared'. 16273 16274 '-mno-shared' depends on binutils 2.16 or higher and generates 16275 objects that can only be linked by the GNU linker. However, the 16276 option does not affect the ABI of the final executable; it only 16277 affects the ABI of relocatable objects. Using '-mno-shared' 16278 generally makes executables both smaller and quicker. 16279 16280 '-mshared' is the default. 16281 16282'-mplt' 16283'-mno-plt' 16284 Assume (do not assume) that the static and dynamic linkers support 16285 PLTs and copy relocations. This option only affects '-mno-shared 16286 -mabicalls'. For the n64 ABI, this option has no effect without 16287 '-msym32'. 16288 16289 You can make '-mplt' the default by configuring GCC with 16290 '--with-mips-plt'. The default is '-mno-plt' otherwise. 16291 16292'-mxgot' 16293'-mno-xgot' 16294 Lift (do not lift) the usual restrictions on the size of the global 16295 offset table. 16296 16297 GCC normally uses a single instruction to load values from the GOT. 16298 While this is relatively efficient, it only works if the GOT is 16299 smaller than about 64k. Anything larger causes the linker to 16300 report an error such as: 16301 16302 relocation truncated to fit: R_MIPS_GOT16 foobar 16303 16304 If this happens, you should recompile your code with '-mxgot'. 16305 This works with very large GOTs, although the code is also less 16306 efficient, since it takes three instructions to fetch the value of 16307 a global symbol. 16308 16309 Note that some linkers can create multiple GOTs. If you have such 16310 a linker, you should only need to use '-mxgot' when a single object 16311 file accesses more than 64k's worth of GOT entries. Very few do. 16312 16313 These options have no effect unless GCC is generating position 16314 independent code. 16315 16316'-mgp32' 16317 Assume that general-purpose registers are 32 bits wide. 16318 16319'-mgp64' 16320 Assume that general-purpose registers are 64 bits wide. 16321 16322'-mfp32' 16323 Assume that floating-point registers are 32 bits wide. 16324 16325'-mfp64' 16326 Assume that floating-point registers are 64 bits wide. 16327 16328'-mhard-float' 16329 Use floating-point coprocessor instructions. 16330 16331'-msoft-float' 16332 Do not use floating-point coprocessor instructions. Implement 16333 floating-point calculations using library calls instead. 16334 16335'-mno-float' 16336 Equivalent to '-msoft-float', but additionally asserts that the 16337 program being compiled does not perform any floating-point 16338 operations. This option is presently supported only by some 16339 bare-metal MIPS configurations, where it may select a special set 16340 of libraries that lack all floating-point support (including, for 16341 example, the floating-point 'printf' formats). If code compiled 16342 with '-mno-float' accidentally contains floating-point operations, 16343 it is likely to suffer a link-time or run-time failure. 16344 16345'-msingle-float' 16346 Assume that the floating-point coprocessor only supports 16347 single-precision operations. 16348 16349'-mdouble-float' 16350 Assume that the floating-point coprocessor supports 16351 double-precision operations. This is the default. 16352 16353'-mabs=2008' 16354'-mabs=legacy' 16355 These options control the treatment of the special not-a-number 16356 (NaN) IEEE 754 floating-point data with the 'abs.fmt' and 'neg.fmt' 16357 machine instructions. 16358 16359 By default or when the '-mabs=legacy' is used the legacy treatment 16360 is selected. In this case these instructions are considered 16361 arithmetic and avoided where correct operation is required and the 16362 input operand might be a NaN. A longer sequence of instructions 16363 that manipulate the sign bit of floating-point datum manually is 16364 used instead unless the '-ffinite-math-only' option has also been 16365 specified. 16366 16367 The '-mabs=2008' option selects the IEEE 754-2008 treatment. In 16368 this case these instructions are considered non-arithmetic and 16369 therefore operating correctly in all cases, including in particular 16370 where the input operand is a NaN. These instructions are therefore 16371 always used for the respective operations. 16372 16373'-mnan=2008' 16374'-mnan=legacy' 16375 These options control the encoding of the special not-a-number 16376 (NaN) IEEE 754 floating-point data. 16377 16378 The '-mnan=legacy' option selects the legacy encoding. In this 16379 case quiet NaNs (qNaNs) are denoted by the first bit of their 16380 trailing significand field being 0, whereas signalling NaNs (sNaNs) 16381 are denoted by the first bit of their trailing significand field 16382 being 1. 16383 16384 The '-mnan=2008' option selects the IEEE 754-2008 encoding. In 16385 this case qNaNs are denoted by the first bit of their trailing 16386 significand field being 1, whereas sNaNs are denoted by the first 16387 bit of their trailing significand field being 0. 16388 16389 The default is '-mnan=legacy' unless GCC has been configured with 16390 '--with-nan=2008'. 16391 16392'-mllsc' 16393'-mno-llsc' 16394 Use (do not use) 'll', 'sc', and 'sync' instructions to implement 16395 atomic memory built-in functions. When neither option is 16396 specified, GCC uses the instructions if the target architecture 16397 supports them. 16398 16399 '-mllsc' is useful if the runtime environment can emulate the 16400 instructions and '-mno-llsc' can be useful when compiling for 16401 nonstandard ISAs. You can make either option the default by 16402 configuring GCC with '--with-llsc' and '--without-llsc' 16403 respectively. '--with-llsc' is the default for some 16404 configurations; see the installation documentation for details. 16405 16406'-mdsp' 16407'-mno-dsp' 16408 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 16409 Built-in Functions::. This option defines the preprocessor macro 16410 '__mips_dsp'. It also defines '__mips_dsp_rev' to 1. 16411 16412'-mdspr2' 16413'-mno-dspr2' 16414 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 16415 Built-in Functions::. This option defines the preprocessor macros 16416 '__mips_dsp' and '__mips_dspr2'. It also defines '__mips_dsp_rev' 16417 to 2. 16418 16419'-msmartmips' 16420'-mno-smartmips' 16421 Use (do not use) the MIPS SmartMIPS ASE. 16422 16423'-mpaired-single' 16424'-mno-paired-single' 16425 Use (do not use) paired-single floating-point instructions. *Note 16426 MIPS Paired-Single Support::. This option requires hardware 16427 floating-point support to be enabled. 16428 16429'-mdmx' 16430'-mno-mdmx' 16431 Use (do not use) MIPS Digital Media Extension instructions. This 16432 option can only be used when generating 64-bit code and requires 16433 hardware floating-point support to be enabled. 16434 16435'-mips3d' 16436'-mno-mips3d' 16437 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 16438 Functions::. The option '-mips3d' implies '-mpaired-single'. 16439 16440'-mmicromips' 16441'-mno-micromips' 16442 Generate (do not generate) microMIPS code. 16443 16444 MicroMIPS code generation can also be controlled on a per-function 16445 basis by means of 'micromips' and 'nomicromips' attributes. *Note 16446 Function Attributes::, for more information. 16447 16448'-mmt' 16449'-mno-mt' 16450 Use (do not use) MT Multithreading instructions. 16451 16452'-mmcu' 16453'-mno-mcu' 16454 Use (do not use) the MIPS MCU ASE instructions. 16455 16456'-meva' 16457'-mno-eva' 16458 Use (do not use) the MIPS Enhanced Virtual Addressing instructions. 16459 16460'-mvirt' 16461'-mno-virt' 16462 Use (do not use) the MIPS Virtualization Application Specific 16463 instructions. 16464 16465'-mlong64' 16466 Force 'long' types to be 64 bits wide. See '-mlong32' for an 16467 explanation of the default and the way that the pointer size is 16468 determined. 16469 16470'-mlong32' 16471 Force 'long', 'int', and pointer types to be 32 bits wide. 16472 16473 The default size of 'int's, 'long's and pointers depends on the 16474 ABI. All the supported ABIs use 32-bit 'int's. The n64 ABI uses 16475 64-bit 'long's, as does the 64-bit EABI; the others use 32-bit 16476 'long's. Pointers are the same size as 'long's, or the same size 16477 as integer registers, whichever is smaller. 16478 16479'-msym32' 16480'-mno-sym32' 16481 Assume (do not assume) that all symbols have 32-bit values, 16482 regardless of the selected ABI. This option is useful in 16483 combination with '-mabi=64' and '-mno-abicalls' because it allows 16484 GCC to generate shorter and faster references to symbolic 16485 addresses. 16486 16487'-G NUM' 16488 Put definitions of externally-visible data in a small data section 16489 if that data is no bigger than NUM bytes. GCC can then generate 16490 more efficient accesses to the data; see '-mgpopt' for details. 16491 16492 The default '-G' option depends on the configuration. 16493 16494'-mlocal-sdata' 16495'-mno-local-sdata' 16496 Extend (do not extend) the '-G' behavior to local data too, such as 16497 to static variables in C. '-mlocal-sdata' is the default for all 16498 configurations. 16499 16500 If the linker complains that an application is using too much small 16501 data, you might want to try rebuilding the less 16502 performance-critical parts with '-mno-local-sdata'. You might also 16503 want to build large libraries with '-mno-local-sdata', so that the 16504 libraries leave more room for the main program. 16505 16506'-mextern-sdata' 16507'-mno-extern-sdata' 16508 Assume (do not assume) that externally-defined data is in a small 16509 data section if the size of that data is within the '-G' limit. 16510 '-mextern-sdata' is the default for all configurations. 16511 16512 If you compile a module MOD with '-mextern-sdata' '-G NUM' 16513 '-mgpopt', and MOD references a variable VAR that is no bigger than 16514 NUM bytes, you must make sure that VAR is placed in a small data 16515 section. If VAR is defined by another module, you must either 16516 compile that module with a high-enough '-G' setting or attach a 16517 'section' attribute to VAR's definition. If VAR is common, you 16518 must link the application with a high-enough '-G' setting. 16519 16520 The easiest way of satisfying these restrictions is to compile and 16521 link every module with the same '-G' option. However, you may wish 16522 to build a library that supports several different small data 16523 limits. You can do this by compiling the library with the highest 16524 supported '-G' setting and additionally using '-mno-extern-sdata' 16525 to stop the library from making assumptions about 16526 externally-defined data. 16527 16528'-mgpopt' 16529'-mno-gpopt' 16530 Use (do not use) GP-relative accesses for symbols that are known to 16531 be in a small data section; see '-G', '-mlocal-sdata' and 16532 '-mextern-sdata'. '-mgpopt' is the default for all configurations. 16533 16534 '-mno-gpopt' is useful for cases where the '$gp' register might not 16535 hold the value of '_gp'. For example, if the code is part of a 16536 library that might be used in a boot monitor, programs that call 16537 boot monitor routines pass an unknown value in '$gp'. (In such 16538 situations, the boot monitor itself is usually compiled with 16539 '-G0'.) 16540 16541 '-mno-gpopt' implies '-mno-local-sdata' and '-mno-extern-sdata'. 16542 16543'-membedded-data' 16544'-mno-embedded-data' 16545 Allocate variables to the read-only data section first if possible, 16546 then next in the small data section if possible, otherwise in data. 16547 This gives slightly slower code than the default, but reduces the 16548 amount of RAM required when executing, and thus may be preferred 16549 for some embedded systems. 16550 16551'-muninit-const-in-rodata' 16552'-mno-uninit-const-in-rodata' 16553 Put uninitialized 'const' variables in the read-only data section. 16554 This option is only meaningful in conjunction with 16555 '-membedded-data'. 16556 16557'-mcode-readable=SETTING' 16558 Specify whether GCC may generate code that reads from executable 16559 sections. There are three possible settings: 16560 16561 '-mcode-readable=yes' 16562 Instructions may freely access executable sections. This is 16563 the default setting. 16564 16565 '-mcode-readable=pcrel' 16566 MIPS16 PC-relative load instructions can access executable 16567 sections, but other instructions must not do so. This option 16568 is useful on 4KSc and 4KSd processors when the code TLBs have 16569 the Read Inhibit bit set. It is also useful on processors 16570 that can be configured to have a dual instruction/data SRAM 16571 interface and that, like the M4K, automatically redirect 16572 PC-relative loads to the instruction RAM. 16573 16574 '-mcode-readable=no' 16575 Instructions must not access executable sections. This option 16576 can be useful on targets that are configured to have a dual 16577 instruction/data SRAM interface but that (unlike the M4K) do 16578 not automatically redirect PC-relative loads to the 16579 instruction RAM. 16580 16581'-msplit-addresses' 16582'-mno-split-addresses' 16583 Enable (disable) use of the '%hi()' and '%lo()' assembler 16584 relocation operators. This option has been superseded by 16585 '-mexplicit-relocs' but is retained for backwards compatibility. 16586 16587'-mexplicit-relocs' 16588'-mno-explicit-relocs' 16589 Use (do not use) assembler relocation operators when dealing with 16590 symbolic addresses. The alternative, selected by 16591 '-mno-explicit-relocs', is to use assembler macros instead. 16592 16593 '-mexplicit-relocs' is the default if GCC was configured to use an 16594 assembler that supports relocation operators. 16595 16596'-mcheck-zero-division' 16597'-mno-check-zero-division' 16598 Trap (do not trap) on integer division by zero. 16599 16600 The default is '-mcheck-zero-division'. 16601 16602'-mdivide-traps' 16603'-mdivide-breaks' 16604 MIPS systems check for division by zero by generating either a 16605 conditional trap or a break instruction. Using traps results in 16606 smaller code, but is only supported on MIPS II and later. Also, 16607 some versions of the Linux kernel have a bug that prevents trap 16608 from generating the proper signal ('SIGFPE'). Use '-mdivide-traps' 16609 to allow conditional traps on architectures that support them and 16610 '-mdivide-breaks' to force the use of breaks. 16611 16612 The default is usually '-mdivide-traps', but this can be overridden 16613 at configure time using '--with-divide=breaks'. Divide-by-zero 16614 checks can be completely disabled using '-mno-check-zero-division'. 16615 16616'-mmemcpy' 16617'-mno-memcpy' 16618 Force (do not force) the use of 'memcpy()' for non-trivial block 16619 moves. The default is '-mno-memcpy', which allows GCC to inline 16620 most constant-sized copies. 16621 16622'-mlong-calls' 16623'-mno-long-calls' 16624 Disable (do not disable) use of the 'jal' instruction. Calling 16625 functions using 'jal' is more efficient but requires the caller and 16626 callee to be in the same 256 megabyte segment. 16627 16628 This option has no effect on abicalls code. The default is 16629 '-mno-long-calls'. 16630 16631'-mmad' 16632'-mno-mad' 16633 Enable (disable) use of the 'mad', 'madu' and 'mul' instructions, 16634 as provided by the R4650 ISA. 16635 16636'-mimadd' 16637'-mno-imadd' 16638 Enable (disable) use of the 'madd' and 'msub' integer instructions. 16639 The default is '-mimadd' on architectures that support 'madd' and 16640 'msub' except for the 74k architecture where it was found to 16641 generate slower code. 16642 16643'-mfused-madd' 16644'-mno-fused-madd' 16645 Enable (disable) use of the floating-point multiply-accumulate 16646 instructions, when they are available. The default is 16647 '-mfused-madd'. 16648 16649 On the R8000 CPU when multiply-accumulate instructions are used, 16650 the intermediate product is calculated to infinite precision and is 16651 not subject to the FCSR Flush to Zero bit. This may be undesirable 16652 in some circumstances. On other processors the result is 16653 numerically identical to the equivalent computation using separate 16654 multiply, add, subtract and negate instructions. 16655 16656'-nocpp' 16657 Tell the MIPS assembler to not run its preprocessor over user 16658 assembler files (with a '.s' suffix) when assembling them. 16659 16660'-mfix-24k' 16661'-mno-fix-24k' 16662 Work around the 24K E48 (lost data on stores during refill) errata. 16663 The workarounds are implemented by the assembler rather than by 16664 GCC. 16665 16666'-mfix-r4000' 16667'-mno-fix-r4000' 16668 Work around certain R4000 CPU errata: 16669 - A double-word or a variable shift may give an incorrect result 16670 if executed immediately after starting an integer division. 16671 - A double-word or a variable shift may give an incorrect result 16672 if executed while an integer multiplication is in progress. 16673 - An integer division may give an incorrect result if started in 16674 a delay slot of a taken branch or a jump. 16675 16676'-mfix-r4400' 16677'-mno-fix-r4400' 16678 Work around certain R4400 CPU errata: 16679 - A double-word or a variable shift may give an incorrect result 16680 if executed immediately after starting an integer division. 16681 16682'-mfix-r10000' 16683'-mno-fix-r10000' 16684 Work around certain R10000 errata: 16685 - 'll'/'sc' sequences may not behave atomically on revisions 16686 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 16687 16688 This option can only be used if the target architecture supports 16689 branch-likely instructions. '-mfix-r10000' is the default when 16690 '-march=r10000' is used; '-mno-fix-r10000' is the default 16691 otherwise. 16692 16693'-mfix-rm7000' 16694'-mno-fix-rm7000' 16695 Work around the RM7000 'dmult'/'dmultu' errata. The workarounds 16696 are implemented by the assembler rather than by GCC. 16697 16698'-mfix-vr4120' 16699'-mno-fix-vr4120' 16700 Work around certain VR4120 errata: 16701 - 'dmultu' does not always produce the correct result. 16702 - 'div' and 'ddiv' do not always produce the correct result if 16703 one of the operands is negative. 16704 The workarounds for the division errata rely on special functions 16705 in 'libgcc.a'. At present, these functions are only provided by 16706 the 'mips64vr*-elf' configurations. 16707 16708 Other VR4120 errata require a NOP to be inserted between certain 16709 pairs of instructions. These errata are handled by the assembler, 16710 not by GCC itself. 16711 16712'-mfix-vr4130' 16713 Work around the VR4130 'mflo'/'mfhi' errata. The workarounds are 16714 implemented by the assembler rather than by GCC, although GCC 16715 avoids using 'mflo' and 'mfhi' if the VR4130 'macc', 'macchi', 16716 'dmacc' and 'dmacchi' instructions are available instead. 16717 16718'-mfix-sb1' 16719'-mno-fix-sb1' 16720 Work around certain SB-1 CPU core errata. (This flag currently 16721 works around the SB-1 revision 2 "F1" and "F2" floating-point 16722 errata.) 16723 16724'-mr10k-cache-barrier=SETTING' 16725 Specify whether GCC should insert cache barriers to avoid the 16726 side-effects of speculation on R10K processors. 16727 16728 In common with many processors, the R10K tries to predict the 16729 outcome of a conditional branch and speculatively executes 16730 instructions from the "taken" branch. It later aborts these 16731 instructions if the predicted outcome is wrong. However, on the 16732 R10K, even aborted instructions can have side effects. 16733 16734 This problem only affects kernel stores and, depending on the 16735 system, kernel loads. As an example, a speculatively-executed 16736 store may load the target memory into cache and mark the cache line 16737 as dirty, even if the store itself is later aborted. If a DMA 16738 operation writes to the same area of memory before the "dirty" line 16739 is flushed, the cached data overwrites the DMA-ed data. See the 16740 R10K processor manual for a full description, including other 16741 potential problems. 16742 16743 One workaround is to insert cache barrier instructions before every 16744 memory access that might be speculatively executed and that might 16745 have side effects even if aborted. '-mr10k-cache-barrier=SETTING' 16746 controls GCC's implementation of this workaround. It assumes that 16747 aborted accesses to any byte in the following regions does not have 16748 side effects: 16749 16750 1. the memory occupied by the current function's stack frame; 16751 16752 2. the memory occupied by an incoming stack argument; 16753 16754 3. the memory occupied by an object with a link-time-constant 16755 address. 16756 16757 It is the kernel's responsibility to ensure that speculative 16758 accesses to these regions are indeed safe. 16759 16760 If the input program contains a function declaration such as: 16761 16762 void foo (void); 16763 16764 then the implementation of 'foo' must allow 'j foo' and 'jal foo' 16765 to be executed speculatively. GCC honors this restriction for 16766 functions it compiles itself. It expects non-GCC functions (such 16767 as hand-written assembly code) to do the same. 16768 16769 The option has three forms: 16770 16771 '-mr10k-cache-barrier=load-store' 16772 Insert a cache barrier before a load or store that might be 16773 speculatively executed and that might have side effects even 16774 if aborted. 16775 16776 '-mr10k-cache-barrier=store' 16777 Insert a cache barrier before a store that might be 16778 speculatively executed and that might have side effects even 16779 if aborted. 16780 16781 '-mr10k-cache-barrier=none' 16782 Disable the insertion of cache barriers. This is the default 16783 setting. 16784 16785'-mflush-func=FUNC' 16786'-mno-flush-func' 16787 Specifies the function to call to flush the I and D caches, or to 16788 not call any such function. If called, the function must take the 16789 same arguments as the common '_flush_func()', that is, the address 16790 of the memory range for which the cache is being flushed, the size 16791 of the memory range, and the number 3 (to flush both caches). The 16792 default depends on the target GCC was configured for, but commonly 16793 is either '_flush_func' or '__cpu_flush'. 16794 16795'mbranch-cost=NUM' 16796 Set the cost of branches to roughly NUM "simple" instructions. 16797 This cost is only a heuristic and is not guaranteed to produce 16798 consistent results across releases. A zero cost redundantly 16799 selects the default, which is based on the '-mtune' setting. 16800 16801'-mbranch-likely' 16802'-mno-branch-likely' 16803 Enable or disable use of Branch Likely instructions, regardless of 16804 the default for the selected architecture. By default, Branch 16805 Likely instructions may be generated if they are supported by the 16806 selected architecture. An exception is for the MIPS32 and MIPS64 16807 architectures and processors that implement those architectures; 16808 for those, Branch Likely instructions are not be generated by 16809 default because the MIPS32 and MIPS64 architectures specifically 16810 deprecate their use. 16811 16812'-mfp-exceptions' 16813'-mno-fp-exceptions' 16814 Specifies whether FP exceptions are enabled. This affects how FP 16815 instructions are scheduled for some processors. The default is 16816 that FP exceptions are enabled. 16817 16818 For instance, on the SB-1, if FP exceptions are disabled, and we 16819 are emitting 64-bit code, then we can use both FP pipes. 16820 Otherwise, we can only use one FP pipe. 16821 16822'-mvr4130-align' 16823'-mno-vr4130-align' 16824 The VR4130 pipeline is two-way superscalar, but can only issue two 16825 instructions together if the first one is 8-byte aligned. When 16826 this option is enabled, GCC aligns pairs of instructions that it 16827 thinks should execute in parallel. 16828 16829 This option only has an effect when optimizing for the VR4130. It 16830 normally makes code faster, but at the expense of making it bigger. 16831 It is enabled by default at optimization level '-O3'. 16832 16833'-msynci' 16834'-mno-synci' 16835 Enable (disable) generation of 'synci' instructions on 16836 architectures that support it. The 'synci' instructions (if 16837 enabled) are generated when '__builtin___clear_cache()' is 16838 compiled. 16839 16840 This option defaults to '-mno-synci', but the default can be 16841 overridden by configuring with '--with-synci'. 16842 16843 When compiling code for single processor systems, it is generally 16844 safe to use 'synci'. However, on many multi-core (SMP) systems, it 16845 does not invalidate the instruction caches on all cores and may 16846 lead to undefined behavior. 16847 16848'-mrelax-pic-calls' 16849'-mno-relax-pic-calls' 16850 Try to turn PIC calls that are normally dispatched via register 16851 '$25' into direct calls. This is only possible if the linker can 16852 resolve the destination at link-time and if the destination is 16853 within range for a direct call. 16854 16855 '-mrelax-pic-calls' is the default if GCC was configured to use an 16856 assembler and a linker that support the '.reloc' assembly directive 16857 and '-mexplicit-relocs' is in effect. With '-mno-explicit-relocs', 16858 this optimization can be performed by the assembler and the linker 16859 alone without help from the compiler. 16860 16861'-mmcount-ra-address' 16862'-mno-mcount-ra-address' 16863 Emit (do not emit) code that allows '_mcount' to modify the calling 16864 function's return address. When enabled, this option extends the 16865 usual '_mcount' interface with a new RA-ADDRESS parameter, which 16866 has type 'intptr_t *' and is passed in register '$12'. '_mcount' 16867 can then modify the return address by doing both of the following: 16868 * Returning the new address in register '$31'. 16869 * Storing the new address in '*RA-ADDRESS', if RA-ADDRESS is 16870 nonnull. 16871 16872 The default is '-mno-mcount-ra-address'. 16873 16874 16875File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 16876 168773.17.28 MMIX Options 16878-------------------- 16879 16880These options are defined for the MMIX: 16881 16882'-mlibfuncs' 16883'-mno-libfuncs' 16884 Specify that intrinsic library functions are being compiled, 16885 passing all values in registers, no matter the size. 16886 16887'-mepsilon' 16888'-mno-epsilon' 16889 Generate floating-point comparison instructions that compare with 16890 respect to the 'rE' epsilon register. 16891 16892'-mabi=mmixware' 16893'-mabi=gnu' 16894 Generate code that passes function parameters and return values 16895 that (in the called function) are seen as registers '$0' and up, as 16896 opposed to the GNU ABI which uses global registers '$231' and up. 16897 16898'-mzero-extend' 16899'-mno-zero-extend' 16900 When reading data from memory in sizes shorter than 64 bits, use 16901 (do not use) zero-extending load instructions by default, rather 16902 than sign-extending ones. 16903 16904'-mknuthdiv' 16905'-mno-knuthdiv' 16906 Make the result of a division yielding a remainder have the same 16907 sign as the divisor. With the default, '-mno-knuthdiv', the sign 16908 of the remainder follows the sign of the dividend. Both methods 16909 are arithmetically valid, the latter being almost exclusively used. 16910 16911'-mtoplevel-symbols' 16912'-mno-toplevel-symbols' 16913 Prepend (do not prepend) a ':' to all global symbols, so the 16914 assembly code can be used with the 'PREFIX' assembly directive. 16915 16916'-melf' 16917 Generate an executable in the ELF format, rather than the default 16918 'mmo' format used by the 'mmix' simulator. 16919 16920'-mbranch-predict' 16921'-mno-branch-predict' 16922 Use (do not use) the probable-branch instructions, when static 16923 branch prediction indicates a probable branch. 16924 16925'-mbase-addresses' 16926'-mno-base-addresses' 16927 Generate (do not generate) code that uses _base addresses_. Using 16928 a base address automatically generates a request (handled by the 16929 assembler and the linker) for a constant to be set up in a global 16930 register. The register is used for one or more base address 16931 requests within the range 0 to 255 from the value held in the 16932 register. The generally leads to short and fast code, but the 16933 number of different data items that can be addressed is limited. 16934 This means that a program that uses lots of static data may require 16935 '-mno-base-addresses'. 16936 16937'-msingle-exit' 16938'-mno-single-exit' 16939 Force (do not force) generated code to have a single exit point in 16940 each function. 16941 16942 16943File: gcc.info, Node: MN10300 Options, Next: Moxie Options, Prev: MMIX Options, Up: Submodel Options 16944 169453.17.29 MN10300 Options 16946----------------------- 16947 16948These '-m' options are defined for Matsushita MN10300 architectures: 16949 16950'-mmult-bug' 16951 Generate code to avoid bugs in the multiply instructions for the 16952 MN10300 processors. This is the default. 16953 16954'-mno-mult-bug' 16955 Do not generate code to avoid bugs in the multiply instructions for 16956 the MN10300 processors. 16957 16958'-mam33' 16959 Generate code using features specific to the AM33 processor. 16960 16961'-mno-am33' 16962 Do not generate code using features specific to the AM33 processor. 16963 This is the default. 16964 16965'-mam33-2' 16966 Generate code using features specific to the AM33/2.0 processor. 16967 16968'-mam34' 16969 Generate code using features specific to the AM34 processor. 16970 16971'-mtune=CPU-TYPE' 16972 Use the timing characteristics of the indicated CPU type when 16973 scheduling instructions. This does not change the targeted 16974 processor type. The CPU type must be one of 'mn10300', 'am33', 16975 'am33-2' or 'am34'. 16976 16977'-mreturn-pointer-on-d0' 16978 When generating a function that returns a pointer, return the 16979 pointer in both 'a0' and 'd0'. Otherwise, the pointer is returned 16980 only in 'a0', and attempts to call such functions without a 16981 prototype result in errors. Note that this option is on by 16982 default; use '-mno-return-pointer-on-d0' to disable it. 16983 16984'-mno-crt0' 16985 Do not link in the C run-time initialization object file. 16986 16987'-mrelax' 16988 Indicate to the linker that it should perform a relaxation 16989 optimization pass to shorten branches, calls and absolute memory 16990 addresses. This option only has an effect when used on the command 16991 line for the final link step. 16992 16993 This option makes symbolic debugging impossible. 16994 16995'-mliw' 16996 Allow the compiler to generate _Long Instruction Word_ instructions 16997 if the target is the 'AM33' or later. This is the default. This 16998 option defines the preprocessor macro '__LIW__'. 16999 17000'-mnoliw' 17001 Do not allow the compiler to generate _Long Instruction Word_ 17002 instructions. This option defines the preprocessor macro 17003 '__NO_LIW__'. 17004 17005'-msetlb' 17006 Allow the compiler to generate the _SETLB_ and _Lcc_ instructions 17007 if the target is the 'AM33' or later. This is the default. This 17008 option defines the preprocessor macro '__SETLB__'. 17009 17010'-mnosetlb' 17011 Do not allow the compiler to generate _SETLB_ or _Lcc_ 17012 instructions. This option defines the preprocessor macro 17013 '__NO_SETLB__'. 17014 17015 17016File: gcc.info, Node: Moxie Options, Next: MSP430 Options, Prev: MN10300 Options, Up: Submodel Options 17017 170183.17.30 Moxie Options 17019--------------------- 17020 17021'-meb' 17022 Generate big-endian code. This is the default for 'moxie-*-*' 17023 configurations. 17024 17025'-mel' 17026 Generate little-endian code. 17027 17028'-mno-crt0' 17029 Do not link in the C run-time initialization object file. 17030 17031 17032File: gcc.info, Node: MSP430 Options, Next: NDS32 Options, Prev: Moxie Options, Up: Submodel Options 17033 170343.17.31 MSP430 Options 17035---------------------- 17036 17037These options are defined for the MSP430: 17038 17039'-masm-hex' 17040 Force assembly output to always use hex constants. Normally such 17041 constants are signed decimals, but this option is available for 17042 testsuite and/or aesthetic purposes. 17043 17044'-mmcu=' 17045 Select the MCU to target. This is used to create a C preprocessor 17046 symbol based upon the MCU name, converted to upper case and pre- 17047 and post- fixed with '__'. This in turn will be used by the 17048 'msp430.h' header file to select an MCU specific supplimentary 17049 header file. 17050 17051 The option also sets the ISA to use. If the MCU name is one that 17052 is known to only support the 430 ISA then that is selected, 17053 otherwise the 430X ISA is selected. A generic MCU name of 'msp430' 17054 can also be used to select the 430 ISA. Similarly the generic 17055 'msp430x' MCU name will select the 430X ISA. 17056 17057 In addition an MCU specific linker script will be added to the 17058 linker command line. The script's name is the name of the MCU with 17059 '.ld' appended. Thus specifying '-mmcu=xxx' on the gcc command 17060 line will define the C preprocessor symbol '__XXX__' and cause the 17061 linker to search for a script called 'xxx.ld'. 17062 17063 This option is also passed on to the assembler. 17064 17065'-mcpu=' 17066 Specifies the ISA to use. Accepted values are 'msp430', 'msp430x' 17067 and 'msp430xv2'. This option is deprecated. The '-mmcu=' option 17068 should be used to select the ISA. 17069 17070'-msim' 17071 Link to the simulator runtime libraries and linker script. 17072 Overrides any scripts that would be selected by the '-mmcu=' 17073 option. 17074 17075'-mlarge' 17076 Use large-model addressing (20-bit pointers, 32-bit 'size_t'). 17077 17078'-msmall' 17079 Use small-model addressing (16-bit pointers, 16-bit 'size_t'). 17080 17081'-mrelax' 17082 This option is passed to the assembler and linker, and allows the 17083 linker to perform certain optimizations that cannot be done until 17084 the final link. 17085 17086'mhwmult=' 17087 Describes the type of hardware multiply supported by the target. 17088 Accepted values are 'none' for no hardware multiply, '16bit' for 17089 the original 16-bit-only multiply supported by early MCUs. '32bit' 17090 for the 16/32-bit multiply supported by later MCUs and 'f5series' 17091 for the 16/32-bit multiply supported by F5-series MCUs. A value of 17092 'auto' can also be given. This tells GCC to deduce the hardware 17093 multiply support based upon the MCU name provided by the '-mmcu' 17094 option. If no '-mmcu' option is specified then '32bit' hardware 17095 multiply support is assumed. 'auto' is the default setting. 17096 17097 Hardware multiplies are normally performed by calling a library 17098 routine. This saves space in the generated code. When compiling 17099 at '-O3' or higher however the hardware multiplier is invoked 17100 inline. This makes for bigger, but faster code. 17101 17102 The hardware multiply routines disable interrupts whilst running 17103 and restore the previous interrupt state when they finish. This 17104 makes them safe to use inside interrupt handlers as well as in 17105 normal code. 17106 17107'-minrt' 17108 Enable the use of a minimum runtime environment - no static 17109 initializers or constructors. This is intended for 17110 memory-constrained devices. The compiler will include special 17111 symbols in some objects that tell the linker and runtime which code 17112 fragments are required. 17113 17114 17115File: gcc.info, Node: NDS32 Options, Next: Nios II Options, Prev: MSP430 Options, Up: Submodel Options 17116 171173.17.32 NDS32 Options 17118--------------------- 17119 17120These options are defined for NDS32 implementations: 17121 17122'-mbig-endian' 17123 Generate code in big-endian mode. 17124 17125'-mlittle-endian' 17126 Generate code in little-endian mode. 17127 17128'-mreduced-regs' 17129 Use reduced-set registers for register allocation. 17130 17131'-mfull-regs' 17132 Use full-set registers for register allocation. 17133 17134'-mcmov' 17135 Generate conditional move instructions. 17136 17137'-mno-cmov' 17138 Do not generate conditional move instructions. 17139 17140'-mperf-ext' 17141 Generate performance extension instructions. 17142 17143'-mno-perf-ext' 17144 Do not generate performance extension instructions. 17145 17146'-mv3push' 17147 Generate v3 push25/pop25 instructions. 17148 17149'-mno-v3push' 17150 Do not generate v3 push25/pop25 instructions. 17151 17152'-m16-bit' 17153 Generate 16-bit instructions. 17154 17155'-mno-16-bit' 17156 Do not generate 16-bit instructions. 17157 17158'-mgp-direct' 17159 Generate GP base instructions directly. 17160 17161'-mno-gp-direct' 17162 Do no generate GP base instructions directly. 17163 17164'-misr-vector-size=NUM' 17165 Specify the size of each interrupt vector, which must be 4 or 16. 17166 17167'-mcache-block-size=NUM' 17168 Specify the size of each cache block, which must be a power of 2 17169 between 4 and 512. 17170 17171'-march=ARCH' 17172 Specify the name of the target architecture. 17173 17174'-mforce-fp-as-gp' 17175 Prevent $fp being allocated during register allocation so that 17176 compiler is able to force performing fp-as-gp optimization. 17177 17178'-mforbid-fp-as-gp' 17179 Forbid using $fp to access static and global variables. This 17180 option strictly forbids fp-as-gp optimization regardless of 17181 '-mforce-fp-as-gp'. 17182 17183'-mex9' 17184 Use special directives to guide linker doing ex9 optimization. 17185 17186'-mctor-dtor' 17187 Enable constructor/destructor feature. 17188 17189'-mrelax' 17190 Guide linker to relax instructions. 17191 17192 17193File: gcc.info, Node: Nios II Options, Next: PDP-11 Options, Prev: NDS32 Options, Up: Submodel Options 17194 171953.17.33 Nios II Options 17196----------------------- 17197 17198These are the options defined for the Altera Nios II processor. 17199 17200'-G NUM' 17201 Put global and static objects less than or equal to NUM bytes into 17202 the small data or BSS sections instead of the normal data or BSS 17203 sections. The default value of NUM is 8. 17204 17205'-mgpopt' 17206'-mno-gpopt' 17207 Generate (do not generate) GP-relative accesses for objects in the 17208 small data or BSS sections. The default is '-mgpopt' except when 17209 '-fpic' or '-fPIC' is specified to generate position-independent 17210 code. Note that the Nios II ABI does not permit GP-relative 17211 accesses from shared libraries. 17212 17213 You may need to specify '-mno-gpopt' explicitly when building 17214 programs that include large amounts of small data, including large 17215 GOT data sections. In this case, the 16-bit offset for GP-relative 17216 addressing may not be large enough to allow access to the entire 17217 small data section. 17218 17219'-mel' 17220'-meb' 17221 Generate little-endian (default) or big-endian (experimental) code, 17222 respectively. 17223 17224'-mbypass-cache' 17225'-mno-bypass-cache' 17226 Force all load and store instructions to always bypass cache by 17227 using I/O variants of the instructions. The default is not to 17228 bypass the cache. 17229 17230'-mno-cache-volatile' 17231'-mcache-volatile' 17232 Volatile memory access bypass the cache using the I/O variants of 17233 the load and store instructions. The default is not to bypass the 17234 cache. 17235 17236'-mno-fast-sw-div' 17237'-mfast-sw-div' 17238 Do not use table-based fast divide for small numbers. The default 17239 is to use the fast divide at '-O3' and above. 17240 17241'-mno-hw-mul' 17242'-mhw-mul' 17243'-mno-hw-mulx' 17244'-mhw-mulx' 17245'-mno-hw-div' 17246'-mhw-div' 17247 Enable or disable emitting 'mul', 'mulx' and 'div' family of 17248 instructions by the compiler. The default is to emit 'mul' and not 17249 emit 'div' and 'mulx'. 17250 17251'-mcustom-INSN=N' 17252'-mno-custom-INSN' 17253 Each '-mcustom-INSN=N' option enables use of a custom instruction 17254 with encoding N when generating code that uses INSN. For example, 17255 '-mcustom-fadds=253' generates custom instruction 253 for 17256 single-precision floating-point add operations instead of the 17257 default behavior of using a library call. 17258 17259 The following values of INSN are supported. Except as otherwise 17260 noted, floating-point operations are expected to be implemented 17261 with normal IEEE 754 semantics and correspond directly to the C 17262 operators or the equivalent GCC built-in functions (*note Other 17263 Builtins::). 17264 17265 Single-precision floating point: 17266 17267 'fadds', 'fsubs', 'fdivs', 'fmuls' 17268 Binary arithmetic operations. 17269 17270 'fnegs' 17271 Unary negation. 17272 17273 'fabss' 17274 Unary absolute value. 17275 17276 'fcmpeqs', 'fcmpges', 'fcmpgts', 'fcmples', 'fcmplts', 'fcmpnes' 17277 Comparison operations. 17278 17279 'fmins', 'fmaxs' 17280 Floating-point minimum and maximum. These instructions are 17281 only generated if '-ffinite-math-only' is specified. 17282 17283 'fsqrts' 17284 Unary square root operation. 17285 17286 'fcoss', 'fsins', 'ftans', 'fatans', 'fexps', 'flogs' 17287 Floating-point trigonometric and exponential functions. These 17288 instructions are only generated if 17289 '-funsafe-math-optimizations' is also specified. 17290 17291 Double-precision floating point: 17292 17293 'faddd', 'fsubd', 'fdivd', 'fmuld' 17294 Binary arithmetic operations. 17295 17296 'fnegd' 17297 Unary negation. 17298 17299 'fabsd' 17300 Unary absolute value. 17301 17302 'fcmpeqd', 'fcmpged', 'fcmpgtd', 'fcmpled', 'fcmpltd', 'fcmpned' 17303 Comparison operations. 17304 17305 'fmind', 'fmaxd' 17306 Double-precision minimum and maximum. These instructions are 17307 only generated if '-ffinite-math-only' is specified. 17308 17309 'fsqrtd' 17310 Unary square root operation. 17311 17312 'fcosd', 'fsind', 'ftand', 'fatand', 'fexpd', 'flogd' 17313 Double-precision trigonometric and exponential functions. 17314 These instructions are only generated if 17315 '-funsafe-math-optimizations' is also specified. 17316 17317 Conversions: 17318 'fextsd' 17319 Conversion from single precision to double precision. 17320 17321 'ftruncds' 17322 Conversion from double precision to single precision. 17323 17324 'fixsi', 'fixsu', 'fixdi', 'fixdu' 17325 Conversion from floating point to signed or unsigned integer 17326 types, with truncation towards zero. 17327 17328 'floatis', 'floatus', 'floatid', 'floatud' 17329 Conversion from signed or unsigned integer types to 17330 floating-point types. 17331 17332 In addition, all of the following transfer instructions for 17333 internal registers X and Y must be provided to use any of the 17334 double-precision floating-point instructions. Custom instructions 17335 taking two double-precision source operands expect the first 17336 operand in the 64-bit register X. The other operand (or only 17337 operand of a unary operation) is given to the custom arithmetic 17338 instruction with the least significant half in source register SRC1 17339 and the most significant half in SRC2. A custom instruction that 17340 returns a double-precision result returns the most significant 32 17341 bits in the destination register and the other half in 32-bit 17342 register Y. GCC automatically generates the necessary code 17343 sequences to write register X and/or read register Y when 17344 double-precision floating-point instructions are used. 17345 17346 'fwrx' 17347 Write SRC1 into the least significant half of X and SRC2 into 17348 the most significant half of X. 17349 17350 'fwry' 17351 Write SRC1 into Y. 17352 17353 'frdxhi', 'frdxlo' 17354 Read the most or least (respectively) significant half of X 17355 and store it in DEST. 17356 17357 'frdy' 17358 Read the value of Y and store it into DEST. 17359 17360 Note that you can gain more local control over generation of Nios 17361 II custom instructions by using the 'target("custom-INSN=N")' and 17362 'target("no-custom-INSN")' function attributes (*note Function 17363 Attributes::) or pragmas (*note Function Specific Option 17364 Pragmas::). 17365 17366'-mcustom-fpu-cfg=NAME' 17367 17368 This option enables a predefined, named set of custom instruction 17369 encodings (see '-mcustom-INSN' above). Currently, the following 17370 sets are defined: 17371 17372 '-mcustom-fpu-cfg=60-1' is equivalent to: 17373 -mcustom-fmuls=252 17374 -mcustom-fadds=253 17375 -mcustom-fsubs=254 17376 -fsingle-precision-constant 17377 17378 '-mcustom-fpu-cfg=60-2' is equivalent to: 17379 -mcustom-fmuls=252 17380 -mcustom-fadds=253 17381 -mcustom-fsubs=254 17382 -mcustom-fdivs=255 17383 -fsingle-precision-constant 17384 17385 '-mcustom-fpu-cfg=72-3' is equivalent to: 17386 -mcustom-floatus=243 17387 -mcustom-fixsi=244 17388 -mcustom-floatis=245 17389 -mcustom-fcmpgts=246 17390 -mcustom-fcmples=249 17391 -mcustom-fcmpeqs=250 17392 -mcustom-fcmpnes=251 17393 -mcustom-fmuls=252 17394 -mcustom-fadds=253 17395 -mcustom-fsubs=254 17396 -mcustom-fdivs=255 17397 -fsingle-precision-constant 17398 17399 Custom instruction assignments given by individual '-mcustom-INSN=' 17400 options override those given by '-mcustom-fpu-cfg=', regardless of 17401 the order of the options on the command line. 17402 17403 Note that you can gain more local control over selection of a FPU 17404 configuration by using the 'target("custom-fpu-cfg=NAME")' function 17405 attribute (*note Function Attributes::) or pragma (*note Function 17406 Specific Option Pragmas::). 17407 17408 These additional '-m' options are available for the Altera Nios II ELF 17409(bare-metal) target: 17410 17411'-mhal' 17412 Link with HAL BSP. This suppresses linking with the GCC-provided C 17413 runtime startup and termination code, and is typically used in 17414 conjunction with '-msys-crt0=' to specify the location of the 17415 alternate startup code provided by the HAL BSP. 17416 17417'-msmallc' 17418 Link with a limited version of the C library, '-lsmallc', rather 17419 than Newlib. 17420 17421'-msys-crt0=STARTFILE' 17422 STARTFILE is the file name of the startfile (crt0) to use when 17423 linking. This option is only useful in conjunction with '-mhal'. 17424 17425'-msys-lib=SYSTEMLIB' 17426 SYSTEMLIB is the library name of the library that provides 17427 low-level system calls required by the C library, e.g. 'read' and 17428 'write'. This option is typically used to link with a library 17429 provided by a HAL BSP. 17430 17431 17432File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: Nios II Options, Up: Submodel Options 17433 174343.17.34 PDP-11 Options 17435---------------------- 17436 17437These options are defined for the PDP-11: 17438 17439'-mfpu' 17440 Use hardware FPP floating point. This is the default. (FIS 17441 floating point on the PDP-11/40 is not supported.) 17442 17443'-msoft-float' 17444 Do not use hardware floating point. 17445 17446'-mac0' 17447 Return floating-point results in ac0 (fr0 in Unix assembler 17448 syntax). 17449 17450'-mno-ac0' 17451 Return floating-point results in memory. This is the default. 17452 17453'-m40' 17454 Generate code for a PDP-11/40. 17455 17456'-m45' 17457 Generate code for a PDP-11/45. This is the default. 17458 17459'-m10' 17460 Generate code for a PDP-11/10. 17461 17462'-mbcopy-builtin' 17463 Use inline 'movmemhi' patterns for copying memory. This is the 17464 default. 17465 17466'-mbcopy' 17467 Do not use inline 'movmemhi' patterns for copying memory. 17468 17469'-mint16' 17470'-mno-int32' 17471 Use 16-bit 'int'. This is the default. 17472 17473'-mint32' 17474'-mno-int16' 17475 Use 32-bit 'int'. 17476 17477'-mfloat64' 17478'-mno-float32' 17479 Use 64-bit 'float'. This is the default. 17480 17481'-mfloat32' 17482'-mno-float64' 17483 Use 32-bit 'float'. 17484 17485'-mabshi' 17486 Use 'abshi2' pattern. This is the default. 17487 17488'-mno-abshi' 17489 Do not use 'abshi2' pattern. 17490 17491'-mbranch-expensive' 17492 Pretend that branches are expensive. This is for experimenting 17493 with code generation only. 17494 17495'-mbranch-cheap' 17496 Do not pretend that branches are expensive. This is the default. 17497 17498'-munix-asm' 17499 Use Unix assembler syntax. This is the default when configured for 17500 'pdp11-*-bsd'. 17501 17502'-mdec-asm' 17503 Use DEC assembler syntax. This is the default when configured for 17504 any PDP-11 target other than 'pdp11-*-bsd'. 17505 17506 17507File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 17508 175093.17.35 picoChip Options 17510------------------------ 17511 17512These '-m' options are defined for picoChip implementations: 17513 17514'-mae=AE_TYPE' 17515 Set the instruction set, register set, and instruction scheduling 17516 parameters for array element type AE_TYPE. Supported values for 17517 AE_TYPE are 'ANY', 'MUL', and 'MAC'. 17518 17519 '-mae=ANY' selects a completely generic AE type. Code generated 17520 with this option runs on any of the other AE types. The code is 17521 not as efficient as it would be if compiled for a specific AE type, 17522 and some types of operation (e.g., multiplication) do not work 17523 properly on all types of AE. 17524 17525 '-mae=MUL' selects a MUL AE type. This is the most useful AE type 17526 for compiled code, and is the default. 17527 17528 '-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 17529 option may suffer from poor performance of byte (char) 17530 manipulation, since the DSP AE does not provide hardware support 17531 for byte load/stores. 17532 17533'-msymbol-as-address' 17534 Enable the compiler to directly use a symbol name as an address in 17535 a load/store instruction, without first loading it into a register. 17536 Typically, the use of this option generates larger programs, which 17537 run faster than when the option isn't used. However, the results 17538 vary from program to program, so it is left as a user option, 17539 rather than being permanently enabled. 17540 17541'-mno-inefficient-warnings' 17542 Disables warnings about the generation of inefficient code. These 17543 warnings can be generated, for example, when compiling code that 17544 performs byte-level memory operations on the MAC AE type. The MAC 17545 AE has no hardware support for byte-level memory operations, so all 17546 byte load/stores must be synthesized from word load/store 17547 operations. This is inefficient and a warning is generated to 17548 indicate that you should rewrite the code to avoid byte operations, 17549 or to target an AE type that has the necessary hardware support. 17550 This option disables these warnings. 17551 17552 17553File: gcc.info, Node: PowerPC Options, Next: RL78 Options, Prev: picoChip Options, Up: Submodel Options 17554 175553.17.36 PowerPC Options 17556----------------------- 17557 17558These are listed under *Note RS/6000 and PowerPC Options::. 17559 17560 17561File: gcc.info, Node: RL78 Options, Next: RS/6000 and PowerPC Options, Prev: PowerPC Options, Up: Submodel Options 17562 175633.17.37 RL78 Options 17564-------------------- 17565 17566'-msim' 17567 Links in additional target libraries to support operation within a 17568 simulator. 17569 17570'-mmul=none' 17571'-mmul=g13' 17572'-mmul=rl78' 17573 Specifies the type of hardware multiplication support to be used. 17574 The default is 'none', which uses software multiplication 17575 functions. The 'g13' option is for the hardware multiply/divide 17576 peripheral only on the RL78/G13 targets. The 'rl78' option is for 17577 the standard hardware multiplication defined in the RL78 software 17578 manual. 17579 17580 17581File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: RL78 Options, Up: Submodel Options 17582 175833.17.38 IBM RS/6000 and PowerPC Options 17584--------------------------------------- 17585 17586These '-m' options are defined for the IBM RS/6000 and PowerPC: 17587'-mpowerpc-gpopt' 17588'-mno-powerpc-gpopt' 17589'-mpowerpc-gfxopt' 17590'-mno-powerpc-gfxopt' 17591'-mpowerpc64' 17592'-mno-powerpc64' 17593'-mmfcrf' 17594'-mno-mfcrf' 17595'-mpopcntb' 17596'-mno-popcntb' 17597'-mpopcntd' 17598'-mno-popcntd' 17599'-mfprnd' 17600'-mno-fprnd' 17601'-mcmpb' 17602'-mno-cmpb' 17603'-mmfpgpr' 17604'-mno-mfpgpr' 17605'-mhard-dfp' 17606'-mno-hard-dfp' 17607 You use these options to specify which instructions are available 17608 on the processor you are using. The default value of these options 17609 is determined when configuring GCC. Specifying the 17610 '-mcpu=CPU_TYPE' overrides the specification of these options. We 17611 recommend you use the '-mcpu=CPU_TYPE' option rather than the 17612 options listed above. 17613 17614 Specifying '-mpowerpc-gpopt' allows GCC to use the optional PowerPC 17615 architecture instructions in the General Purpose group, including 17616 floating-point square root. Specifying '-mpowerpc-gfxopt' allows 17617 GCC to use the optional PowerPC architecture instructions in the 17618 Graphics group, including floating-point select. 17619 17620 The '-mmfcrf' option allows GCC to generate the move from condition 17621 register field instruction implemented on the POWER4 processor and 17622 other processors that support the PowerPC V2.01 architecture. The 17623 '-mpopcntb' option allows GCC to generate the popcount and 17624 double-precision FP reciprocal estimate instruction implemented on 17625 the POWER5 processor and other processors that support the PowerPC 17626 V2.02 architecture. The '-mpopcntd' option allows GCC to generate 17627 the popcount instruction implemented on the POWER7 processor and 17628 other processors that support the PowerPC V2.06 architecture. The 17629 '-mfprnd' option allows GCC to generate the FP round to integer 17630 instructions implemented on the POWER5+ processor and other 17631 processors that support the PowerPC V2.03 architecture. The 17632 '-mcmpb' option allows GCC to generate the compare bytes 17633 instruction implemented on the POWER6 processor and other 17634 processors that support the PowerPC V2.05 architecture. The 17635 '-mmfpgpr' option allows GCC to generate the FP move to/from 17636 general-purpose register instructions implemented on the POWER6X 17637 processor and other processors that support the extended PowerPC 17638 V2.05 architecture. The '-mhard-dfp' option allows GCC to generate 17639 the decimal floating-point instructions implemented on some POWER 17640 processors. 17641 17642 The '-mpowerpc64' option allows GCC to generate the additional 17643 64-bit instructions that are found in the full PowerPC64 17644 architecture and to treat GPRs as 64-bit, doubleword quantities. 17645 GCC defaults to '-mno-powerpc64'. 17646 17647'-mcpu=CPU_TYPE' 17648 Set architecture type, register usage, and instruction scheduling 17649 parameters for machine type CPU_TYPE. Supported values for 17650 CPU_TYPE are '401', '403', '405', '405fp', '440', '440fp', '464', 17651 '464fp', '476', '476fp', '505', '601', '602', '603', '603e', '604', 17652 '604e', '620', '630', '740', '7400', '7450', '750', '801', '821', 17653 '823', '860', '970', '8540', 'a2', 'e300c2', 'e300c3', 'e500mc', 17654 'e500mc64', 'e5500', 'e6500', 'ec603e', 'G3', 'G4', 'G5', 'titan', 17655 'power3', 'power4', 'power5', 'power5+', 'power6', 'power6x', 17656 'power7', 'power8', 'powerpc', 'powerpc64', and 'rs64'. 17657 17658 '-mcpu=powerpc', and '-mcpu=powerpc64' specify pure 32-bit PowerPC 17659 and 64-bit PowerPC architecture machine types, with an appropriate, 17660 generic processor model assumed for scheduling purposes. 17661 17662 The other options specify a specific processor. Code generated 17663 under those options runs best on that processor, and may not run at 17664 all on others. 17665 17666 The '-mcpu' options automatically enable or disable the following 17667 options: 17668 17669 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 17670 -mpopcntb -mpopcntd -mpowerpc64 17671 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 17672 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 17673 -mcrypto -mdirect-move -mpower8-fusion -mpower8-vector 17674 -mquad-memory -mquad-memory-atomic 17675 17676 The particular options set for any particular CPU varies between 17677 compiler versions, depending on what setting seems to produce 17678 optimal code for that CPU; it doesn't necessarily reflect the 17679 actual hardware's capabilities. If you wish to set an individual 17680 option to a particular value, you may specify it after the '-mcpu' 17681 option, like '-mcpu=970 -mno-altivec'. 17682 17683 On AIX, the '-maltivec' and '-mpowerpc64' options are not enabled 17684 or disabled by the '-mcpu' option at present because AIX does not 17685 have full support for these options. You may still enable or 17686 disable them individually if you're sure it'll work in your 17687 environment. 17688 17689'-mtune=CPU_TYPE' 17690 Set the instruction scheduling parameters for machine type 17691 CPU_TYPE, but do not set the architecture type or register usage, 17692 as '-mcpu=CPU_TYPE' does. The same values for CPU_TYPE are used 17693 for '-mtune' as for '-mcpu'. If both are specified, the code 17694 generated uses the architecture and registers set by '-mcpu', but 17695 the scheduling parameters set by '-mtune'. 17696 17697'-mcmodel=small' 17698 Generate PowerPC64 code for the small model: The TOC is limited to 17699 64k. 17700 17701'-mcmodel=medium' 17702 Generate PowerPC64 code for the medium model: The TOC and other 17703 static data may be up to a total of 4G in size. 17704 17705'-mcmodel=large' 17706 Generate PowerPC64 code for the large model: The TOC may be up to 17707 4G in size. Other data and code is only limited by the 64-bit 17708 address space. 17709 17710'-maltivec' 17711'-mno-altivec' 17712 Generate code that uses (does not use) AltiVec instructions, and 17713 also enable the use of built-in functions that allow more direct 17714 access to the AltiVec instruction set. You may also need to set 17715 '-mabi=altivec' to adjust the current ABI with AltiVec ABI 17716 enhancements. 17717 17718 When '-maltivec' is used, rather than '-maltivec=le' or 17719 '-maltivec=be', the element order for Altivec intrinsics such as 17720 'vec_splat', 'vec_extract', and 'vec_insert' will match array 17721 element order corresponding to the endianness of the target. That 17722 is, element zero identifies the leftmost element in a vector 17723 register when targeting a big-endian platform, and identifies the 17724 rightmost element in a vector register when targeting a 17725 little-endian platform. 17726 17727'-maltivec=be' 17728 Generate Altivec instructions using big-endian element order, 17729 regardless of whether the target is big- or little-endian. This is 17730 the default when targeting a big-endian platform. 17731 17732 The element order is used to interpret element numbers in Altivec 17733 intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. 17734 By default, these will match array element order corresponding to 17735 the endianness for the target. 17736 17737'-maltivec=le' 17738 Generate Altivec instructions using little-endian element order, 17739 regardless of whether the target is big- or little-endian. This is 17740 the default when targeting a little-endian platform. This option 17741 is currently ignored when targeting a big-endian platform. 17742 17743 The element order is used to interpret element numbers in Altivec 17744 intrinsics such as 'vec_splat', 'vec_extract', and 'vec_insert'. 17745 By default, these will match array element order corresponding to 17746 the endianness for the target. 17747 17748'-mvrsave' 17749'-mno-vrsave' 17750 Generate VRSAVE instructions when generating AltiVec code. 17751 17752'-mgen-cell-microcode' 17753 Generate Cell microcode instructions. 17754 17755'-mwarn-cell-microcode' 17756 Warn when a Cell microcode instruction is emitted. An example of a 17757 Cell microcode instruction is a variable shift. 17758 17759'-msecure-plt' 17760 Generate code that allows 'ld' and 'ld.so' to build executables and 17761 shared libraries with non-executable '.plt' and '.got' sections. 17762 This is a PowerPC 32-bit SYSV ABI option. 17763 17764'-mbss-plt' 17765 Generate code that uses a BSS '.plt' section that 'ld.so' fills in, 17766 and requires '.plt' and '.got' sections that are both writable and 17767 executable. This is a PowerPC 32-bit SYSV ABI option. 17768 17769'-misel' 17770'-mno-isel' 17771 This switch enables or disables the generation of ISEL 17772 instructions. 17773 17774'-misel=YES/NO' 17775 This switch has been deprecated. Use '-misel' and '-mno-isel' 17776 instead. 17777 17778'-mspe' 17779'-mno-spe' 17780 This switch enables or disables the generation of SPE simd 17781 instructions. 17782 17783'-mpaired' 17784'-mno-paired' 17785 This switch enables or disables the generation of PAIRED simd 17786 instructions. 17787 17788'-mspe=YES/NO' 17789 This option has been deprecated. Use '-mspe' and '-mno-spe' 17790 instead. 17791 17792'-mvsx' 17793'-mno-vsx' 17794 Generate code that uses (does not use) vector/scalar (VSX) 17795 instructions, and also enable the use of built-in functions that 17796 allow more direct access to the VSX instruction set. 17797 17798'-mcrypto' 17799'-mno-crypto' 17800 Enable the use (disable) of the built-in functions that allow 17801 direct access to the cryptographic instructions that were added in 17802 version 2.07 of the PowerPC ISA. 17803 17804'-mdirect-move' 17805'-mno-direct-move' 17806 Generate code that uses (does not use) the instructions to move 17807 data between the general purpose registers and the vector/scalar 17808 (VSX) registers that were added in version 2.07 of the PowerPC ISA. 17809 17810'-mpower8-fusion' 17811'-mno-power8-fusion' 17812 Generate code that keeps (does not keeps) some integer operations 17813 adjacent so that the instructions can be fused together on power8 17814 and later processors. 17815 17816'-mpower8-vector' 17817'-mno-power8-vector' 17818 Generate code that uses (does not use) the vector and scalar 17819 instructions that were added in version 2.07 of the PowerPC ISA. 17820 Also enable the use of built-in functions that allow more direct 17821 access to the vector instructions. 17822 17823'-mquad-memory' 17824'-mno-quad-memory' 17825 Generate code that uses (does not use) the non-atomic quad word 17826 memory instructions. The '-mquad-memory' option requires use of 17827 64-bit mode. 17828 17829'-mquad-memory-atomic' 17830'-mno-quad-memory-atomic' 17831 Generate code that uses (does not use) the atomic quad word memory 17832 instructions. The '-mquad-memory-atomic' option requires use of 17833 64-bit mode. 17834 17835'-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 17836'-mfloat-gprs' 17837 This switch enables or disables the generation of floating-point 17838 operations on the general-purpose registers for architectures that 17839 support it. 17840 17841 The argument YES or SINGLE enables the use of single-precision 17842 floating-point operations. 17843 17844 The argument DOUBLE enables the use of single and double-precision 17845 floating-point operations. 17846 17847 The argument NO disables floating-point operations on the 17848 general-purpose registers. 17849 17850 This option is currently only available on the MPC854x. 17851 17852'-m32' 17853'-m64' 17854 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 17855 targets (including GNU/Linux). The 32-bit environment sets int, 17856 long and pointer to 32 bits and generates code that runs on any 17857 PowerPC variant. The 64-bit environment sets int to 32 bits and 17858 long and pointer to 64 bits, and generates code for PowerPC64, as 17859 for '-mpowerpc64'. 17860 17861'-mfull-toc' 17862'-mno-fp-in-toc' 17863'-mno-sum-in-toc' 17864'-mminimal-toc' 17865 Modify generation of the TOC (Table Of Contents), which is created 17866 for every executable file. The '-mfull-toc' option is selected by 17867 default. In that case, GCC allocates at least one TOC entry for 17868 each unique non-automatic variable reference in your program. GCC 17869 also places floating-point constants in the TOC. However, only 17870 16,384 entries are available in the TOC. 17871 17872 If you receive a linker error message that saying you have 17873 overflowed the available TOC space, you can reduce the amount of 17874 TOC space used with the '-mno-fp-in-toc' and '-mno-sum-in-toc' 17875 options. '-mno-fp-in-toc' prevents GCC from putting floating-point 17876 constants in the TOC and '-mno-sum-in-toc' forces GCC to generate 17877 code to calculate the sum of an address and a constant at run time 17878 instead of putting that sum into the TOC. You may specify one or 17879 both of these options. Each causes GCC to produce very slightly 17880 slower and larger code at the expense of conserving TOC space. 17881 17882 If you still run out of space in the TOC even when you specify both 17883 of these options, specify '-mminimal-toc' instead. This option 17884 causes GCC to make only one TOC entry for every file. When you 17885 specify this option, GCC produces code that is slower and larger 17886 but which uses extremely little TOC space. You may wish to use 17887 this option only on files that contain less frequently-executed 17888 code. 17889 17890'-maix64' 17891'-maix32' 17892 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 17893 64-bit 'long' type, and the infrastructure needed to support them. 17894 Specifying '-maix64' implies '-mpowerpc64', while '-maix32' 17895 disables the 64-bit ABI and implies '-mno-powerpc64'. GCC defaults 17896 to '-maix32'. 17897 17898'-mxl-compat' 17899'-mno-xl-compat' 17900 Produce code that conforms more closely to IBM XL compiler 17901 semantics when using AIX-compatible ABI. Pass floating-point 17902 arguments to prototyped functions beyond the register save area 17903 (RSA) on the stack in addition to argument FPRs. Do not assume 17904 that most significant double in 128-bit long double value is 17905 properly rounded when comparing values and converting to double. 17906 Use XL symbol names for long double support routines. 17907 17908 The AIX calling convention was extended but not initially 17909 documented to handle an obscure K&R C case of calling a function 17910 that takes the address of its arguments with fewer arguments than 17911 declared. IBM XL compilers access floating-point arguments that do 17912 not fit in the RSA from the stack when a subroutine is compiled 17913 without optimization. Because always storing floating-point 17914 arguments on the stack is inefficient and rarely needed, this 17915 option is not enabled by default and only is necessary when calling 17916 subroutines compiled by IBM XL compilers without optimization. 17917 17918'-mpe' 17919 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 17920 application written to use message passing with special startup 17921 code to enable the application to run. The system must have PE 17922 installed in the standard location ('/usr/lpp/ppe.poe/'), or the 17923 'specs' file must be overridden with the '-specs=' option to 17924 specify the appropriate directory location. The Parallel 17925 Environment does not support threads, so the '-mpe' option and the 17926 '-pthread' option are incompatible. 17927 17928'-malign-natural' 17929'-malign-power' 17930 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 17931 '-malign-natural' overrides the ABI-defined alignment of larger 17932 types, such as floating-point doubles, on their natural size-based 17933 boundary. The option '-malign-power' instructs GCC to follow the 17934 ABI-specified alignment rules. GCC defaults to the standard 17935 alignment defined in the ABI. 17936 17937 On 64-bit Darwin, natural alignment is the default, and 17938 '-malign-power' is not supported. 17939 17940'-msoft-float' 17941'-mhard-float' 17942 Generate code that does not use (uses) the floating-point register 17943 set. Software floating-point emulation is provided if you use the 17944 '-msoft-float' option, and pass the option to GCC when linking. 17945 17946'-msingle-float' 17947'-mdouble-float' 17948 Generate code for single- or double-precision floating-point 17949 operations. '-mdouble-float' implies '-msingle-float'. 17950 17951'-msimple-fpu' 17952 Do not generate 'sqrt' and 'div' instructions for hardware 17953 floating-point unit. 17954 17955'-mfpu=NAME' 17956 Specify type of floating-point unit. Valid values for NAME are 17957 'sp_lite' (equivalent to '-msingle-float -msimple-fpu'), 'dp_lite' 17958 (equivalent to '-mdouble-float -msimple-fpu'), 'sp_full' 17959 (equivalent to '-msingle-float'), and 'dp_full' (equivalent to 17960 '-mdouble-float'). 17961 17962'-mxilinx-fpu' 17963 Perform optimizations for the floating-point unit on Xilinx PPC 17964 405/440. 17965 17966'-mmultiple' 17967'-mno-multiple' 17968 Generate code that uses (does not use) the load multiple word 17969 instructions and the store multiple word instructions. These 17970 instructions are generated by default on POWER systems, and not 17971 generated on PowerPC systems. Do not use '-mmultiple' on 17972 little-endian PowerPC systems, since those instructions do not work 17973 when the processor is in little-endian mode. The exceptions are 17974 PPC740 and PPC750 which permit these instructions in little-endian 17975 mode. 17976 17977'-mstring' 17978'-mno-string' 17979 Generate code that uses (does not use) the load string instructions 17980 and the store string word instructions to save multiple registers 17981 and do small block moves. These instructions are generated by 17982 default on POWER systems, and not generated on PowerPC systems. Do 17983 not use '-mstring' on little-endian PowerPC systems, since those 17984 instructions do not work when the processor is in little-endian 17985 mode. The exceptions are PPC740 and PPC750 which permit these 17986 instructions in little-endian mode. 17987 17988'-mupdate' 17989'-mno-update' 17990 Generate code that uses (does not use) the load or store 17991 instructions that update the base register to the address of the 17992 calculated memory location. These instructions are generated by 17993 default. If you use '-mno-update', there is a small window between 17994 the time that the stack pointer is updated and the address of the 17995 previous frame is stored, which means code that walks the stack 17996 frame across interrupts or signals may get corrupted data. 17997 17998'-mavoid-indexed-addresses' 17999'-mno-avoid-indexed-addresses' 18000 Generate code that tries to avoid (not avoid) the use of indexed 18001 load or store instructions. These instructions can incur a 18002 performance penalty on Power6 processors in certain situations, 18003 such as when stepping through large arrays that cross a 16M 18004 boundary. This option is enabled by default when targeting Power6 18005 and disabled otherwise. 18006 18007'-mfused-madd' 18008'-mno-fused-madd' 18009 Generate code that uses (does not use) the floating-point multiply 18010 and accumulate instructions. These instructions are generated by 18011 default if hardware floating point is used. The machine-dependent 18012 '-mfused-madd' option is now mapped to the machine-independent 18013 '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to 18014 '-ffp-contract=off'. 18015 18016'-mmulhw' 18017'-mno-mulhw' 18018 Generate code that uses (does not use) the half-word multiply and 18019 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 18020 processors. These instructions are generated by default when 18021 targeting those processors. 18022 18023'-mdlmzb' 18024'-mno-dlmzb' 18025 Generate code that uses (does not use) the string-search 'dlmzb' 18026 instruction on the IBM 405, 440, 464 and 476 processors. This 18027 instruction is generated by default when targeting those 18028 processors. 18029 18030'-mno-bit-align' 18031'-mbit-align' 18032 On System V.4 and embedded PowerPC systems do not (do) force 18033 structures and unions that contain bit-fields to be aligned to the 18034 base type of the bit-field. 18035 18036 For example, by default a structure containing nothing but 8 18037 'unsigned' bit-fields of length 1 is aligned to a 4-byte boundary 18038 and has a size of 4 bytes. By using '-mno-bit-align', the 18039 structure is aligned to a 1-byte boundary and is 1 byte in size. 18040 18041'-mno-strict-align' 18042'-mstrict-align' 18043 On System V.4 and embedded PowerPC systems do not (do) assume that 18044 unaligned memory references are handled by the system. 18045 18046'-mrelocatable' 18047'-mno-relocatable' 18048 Generate code that allows (does not allow) a static executable to 18049 be relocated to a different address at run time. A simple embedded 18050 PowerPC system loader should relocate the entire contents of 18051 '.got2' and 4-byte locations listed in the '.fixup' section, a 18052 table of 32-bit addresses generated by this option. For this to 18053 work, all objects linked together must be compiled with 18054 '-mrelocatable' or '-mrelocatable-lib'. '-mrelocatable' code 18055 aligns the stack to an 8-byte boundary. 18056 18057'-mrelocatable-lib' 18058'-mno-relocatable-lib' 18059 Like '-mrelocatable', '-mrelocatable-lib' generates a '.fixup' 18060 section to allow static executables to be relocated at run time, 18061 but '-mrelocatable-lib' does not use the smaller stack alignment of 18062 '-mrelocatable'. Objects compiled with '-mrelocatable-lib' may be 18063 linked with objects compiled with any combination of the 18064 '-mrelocatable' options. 18065 18066'-mno-toc' 18067'-mtoc' 18068 On System V.4 and embedded PowerPC systems do not (do) assume that 18069 register 2 contains a pointer to a global area pointing to the 18070 addresses used in the program. 18071 18072'-mlittle' 18073'-mlittle-endian' 18074 On System V.4 and embedded PowerPC systems compile code for the 18075 processor in little-endian mode. The '-mlittle-endian' option is 18076 the same as '-mlittle'. 18077 18078'-mbig' 18079'-mbig-endian' 18080 On System V.4 and embedded PowerPC systems compile code for the 18081 processor in big-endian mode. The '-mbig-endian' option is the 18082 same as '-mbig'. 18083 18084'-mdynamic-no-pic' 18085 On Darwin and Mac OS X systems, compile code so that it is not 18086 relocatable, but that its external references are relocatable. The 18087 resulting code is suitable for applications, but not shared 18088 libraries. 18089 18090'-msingle-pic-base' 18091 Treat the register used for PIC addressing as read-only, rather 18092 than loading it in the prologue for each function. The runtime 18093 system is responsible for initializing this register with an 18094 appropriate value before execution begins. 18095 18096'-mprioritize-restricted-insns=PRIORITY' 18097 This option controls the priority that is assigned to dispatch-slot 18098 restricted instructions during the second scheduling pass. The 18099 argument PRIORITY takes the value '0', '1', or '2' to assign no, 18100 highest, or second-highest (respectively) priority to dispatch-slot 18101 restricted instructions. 18102 18103'-msched-costly-dep=DEPENDENCE_TYPE' 18104 This option controls which dependences are considered costly by the 18105 target during instruction scheduling. The argument DEPENDENCE_TYPE 18106 takes one of the following values: 18107 18108 'no' 18109 No dependence is costly. 18110 18111 'all' 18112 All dependences are costly. 18113 18114 'true_store_to_load' 18115 A true dependence from store to load is costly. 18116 18117 'store_to_load' 18118 Any dependence from store to load is costly. 18119 18120 NUMBER 18121 Any dependence for which the latency is greater than or equal 18122 to NUMBER is costly. 18123 18124'-minsert-sched-nops=SCHEME' 18125 This option controls which NOP insertion scheme is used during the 18126 second scheduling pass. The argument SCHEME takes one of the 18127 following values: 18128 18129 'no' 18130 Don't insert NOPs. 18131 18132 'pad' 18133 Pad with NOPs any dispatch group that has vacant issue slots, 18134 according to the scheduler's grouping. 18135 18136 'regroup_exact' 18137 Insert NOPs to force costly dependent insns into separate 18138 groups. Insert exactly as many NOPs as needed to force an 18139 insn to a new group, according to the estimated processor 18140 grouping. 18141 18142 NUMBER 18143 Insert NOPs to force costly dependent insns into separate 18144 groups. Insert NUMBER NOPs to force an insn to a new group. 18145 18146'-mcall-sysv' 18147 On System V.4 and embedded PowerPC systems compile code using 18148 calling conventions that adhere to the March 1995 draft of the 18149 System V Application Binary Interface, PowerPC processor 18150 supplement. This is the default unless you configured GCC using 18151 'powerpc-*-eabiaix'. 18152 18153'-mcall-sysv-eabi' 18154'-mcall-eabi' 18155 Specify both '-mcall-sysv' and '-meabi' options. 18156 18157'-mcall-sysv-noeabi' 18158 Specify both '-mcall-sysv' and '-mno-eabi' options. 18159 18160'-mcall-aixdesc' 18161 On System V.4 and embedded PowerPC systems compile code for the AIX 18162 operating system. 18163 18164'-mcall-linux' 18165 On System V.4 and embedded PowerPC systems compile code for the 18166 Linux-based GNU system. 18167 18168'-mcall-freebsd' 18169 On System V.4 and embedded PowerPC systems compile code for the 18170 FreeBSD operating system. 18171 18172'-mcall-netbsd' 18173 On System V.4 and embedded PowerPC systems compile code for the 18174 NetBSD operating system. 18175 18176'-mcall-openbsd' 18177 On System V.4 and embedded PowerPC systems compile code for the 18178 OpenBSD operating system. 18179 18180'-maix-struct-return' 18181 Return all structures in memory (as specified by the AIX ABI). 18182 18183'-msvr4-struct-return' 18184 Return structures smaller than 8 bytes in registers (as specified 18185 by the SVR4 ABI). 18186 18187'-mabi=ABI-TYPE' 18188 Extend the current ABI with a particular extension, or remove such 18189 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 18190 IBMLONGDOUBLE, IEEELONGDOUBLE, ELFV1, ELFV2. 18191 18192'-mabi=spe' 18193 Extend the current ABI with SPE ABI extensions. This does not 18194 change the default ABI, instead it adds the SPE ABI extensions to 18195 the current ABI. 18196 18197'-mabi=no-spe' 18198 Disable Book-E SPE ABI extensions for the current ABI. 18199 18200'-mabi=ibmlongdouble' 18201 Change the current ABI to use IBM extended-precision long double. 18202 This is a PowerPC 32-bit SYSV ABI option. 18203 18204'-mabi=ieeelongdouble' 18205 Change the current ABI to use IEEE extended-precision long double. 18206 This is a PowerPC 32-bit Linux ABI option. 18207 18208'-mabi=elfv1' 18209 Change the current ABI to use the ELFv1 ABI. This is the default 18210 ABI for big-endian PowerPC 64-bit Linux. Overriding the default 18211 ABI requires special system support and is likely to fail in 18212 spectacular ways. 18213 18214'-mabi=elfv2' 18215 Change the current ABI to use the ELFv2 ABI. This is the default 18216 ABI for little-endian PowerPC 64-bit Linux. Overriding the default 18217 ABI requires special system support and is likely to fail in 18218 spectacular ways. 18219 18220'-mprototype' 18221'-mno-prototype' 18222 On System V.4 and embedded PowerPC systems assume that all calls to 18223 variable argument functions are properly prototyped. Otherwise, 18224 the compiler must insert an instruction before every non-prototyped 18225 call to set or clear bit 6 of the condition code register (CR) to 18226 indicate whether floating-point values are passed in the 18227 floating-point registers in case the function takes variable 18228 arguments. With '-mprototype', only calls to prototyped variable 18229 argument functions set or clear the bit. 18230 18231'-msim' 18232 On embedded PowerPC systems, assume that the startup module is 18233 called 'sim-crt0.o' and that the standard C libraries are 18234 'libsim.a' and 'libc.a'. This is the default for 18235 'powerpc-*-eabisim' configurations. 18236 18237'-mmvme' 18238 On embedded PowerPC systems, assume that the startup module is 18239 called 'crt0.o' and the standard C libraries are 'libmvme.a' and 18240 'libc.a'. 18241 18242'-mads' 18243 On embedded PowerPC systems, assume that the startup module is 18244 called 'crt0.o' and the standard C libraries are 'libads.a' and 18245 'libc.a'. 18246 18247'-myellowknife' 18248 On embedded PowerPC systems, assume that the startup module is 18249 called 'crt0.o' and the standard C libraries are 'libyk.a' and 18250 'libc.a'. 18251 18252'-mvxworks' 18253 On System V.4 and embedded PowerPC systems, specify that you are 18254 compiling for a VxWorks system. 18255 18256'-memb' 18257 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 18258 header to indicate that 'eabi' extended relocations are used. 18259 18260'-meabi' 18261'-mno-eabi' 18262 On System V.4 and embedded PowerPC systems do (do not) adhere to 18263 the Embedded Applications Binary Interface (EABI), which is a set 18264 of modifications to the System V.4 specifications. Selecting 18265 '-meabi' means that the stack is aligned to an 8-byte boundary, a 18266 function '__eabi' is called from 'main' to set up the EABI 18267 environment, and the '-msdata' option can use both 'r2' and 'r13' 18268 to point to two separate small data areas. Selecting '-mno-eabi' 18269 means that the stack is aligned to a 16-byte boundary, no EABI 18270 initialization function is called from 'main', and the '-msdata' 18271 option only uses 'r13' to point to a single small data area. The 18272 '-meabi' option is on by default if you configured GCC using one of 18273 the 'powerpc*-*-eabi*' options. 18274 18275'-msdata=eabi' 18276 On System V.4 and embedded PowerPC systems, put small initialized 18277 'const' global and static data in the '.sdata2' section, which is 18278 pointed to by register 'r2'. Put small initialized non-'const' 18279 global and static data in the '.sdata' section, which is pointed to 18280 by register 'r13'. Put small uninitialized global and static data 18281 in the '.sbss' section, which is adjacent to the '.sdata' section. 18282 The '-msdata=eabi' option is incompatible with the '-mrelocatable' 18283 option. The '-msdata=eabi' option also sets the '-memb' option. 18284 18285'-msdata=sysv' 18286 On System V.4 and embedded PowerPC systems, put small global and 18287 static data in the '.sdata' section, which is pointed to by 18288 register 'r13'. Put small uninitialized global and static data in 18289 the '.sbss' section, which is adjacent to the '.sdata' section. 18290 The '-msdata=sysv' option is incompatible with the '-mrelocatable' 18291 option. 18292 18293'-msdata=default' 18294'-msdata' 18295 On System V.4 and embedded PowerPC systems, if '-meabi' is used, 18296 compile code the same as '-msdata=eabi', otherwise compile code the 18297 same as '-msdata=sysv'. 18298 18299'-msdata=data' 18300 On System V.4 and embedded PowerPC systems, put small global data 18301 in the '.sdata' section. Put small uninitialized global data in 18302 the '.sbss' section. Do not use register 'r13' to address small 18303 data however. This is the default behavior unless other '-msdata' 18304 options are used. 18305 18306'-msdata=none' 18307'-mno-sdata' 18308 On embedded PowerPC systems, put all initialized global and static 18309 data in the '.data' section, and all uninitialized data in the 18310 '.bss' section. 18311 18312'-mblock-move-inline-limit=NUM' 18313 Inline all block moves (such as calls to 'memcpy' or structure 18314 copies) less than or equal to NUM bytes. The minimum value for NUM 18315 is 32 bytes on 32-bit targets and 64 bytes on 64-bit targets. The 18316 default value is target-specific. 18317 18318'-G NUM' 18319 On embedded PowerPC systems, put global and static items less than 18320 or equal to NUM bytes into the small data or BSS sections instead 18321 of the normal data or BSS section. By default, NUM is 8. The '-G 18322 NUM' switch is also passed to the linker. All modules should be 18323 compiled with the same '-G NUM' value. 18324 18325'-mregnames' 18326'-mno-regnames' 18327 On System V.4 and embedded PowerPC systems do (do not) emit 18328 register names in the assembly language output using symbolic 18329 forms. 18330 18331'-mlongcall' 18332'-mno-longcall' 18333 By default assume that all calls are far away so that a longer and 18334 more expensive calling sequence is required. This is required for 18335 calls farther than 32 megabytes (33,554,432 bytes) from the current 18336 location. A short call is generated if the compiler knows the call 18337 cannot be that far away. This setting can be overridden by the 18338 'shortcall' function attribute, or by '#pragma longcall(0)'. 18339 18340 Some linkers are capable of detecting out-of-range calls and 18341 generating glue code on the fly. On these systems, long calls are 18342 unnecessary and generate slower code. As of this writing, the AIX 18343 linker can do this, as can the GNU linker for PowerPC/64. It is 18344 planned to add this feature to the GNU linker for 32-bit PowerPC 18345 systems as well. 18346 18347 On Darwin/PPC systems, '#pragma longcall' generates 'jbsr callee, 18348 L42', plus a "branch island" (glue code). The two target addresses 18349 represent the callee and the branch island. The Darwin/PPC linker 18350 prefers the first address and generates a 'bl callee' if the PPC 18351 'bl' instruction reaches the callee directly; otherwise, the linker 18352 generates 'bl L42' to call the branch island. The branch island is 18353 appended to the body of the calling function; it computes the full 18354 32-bit address of the callee and jumps to it. 18355 18356 On Mach-O (Darwin) systems, this option directs the compiler emit 18357 to the glue for every direct call, and the Darwin linker decides 18358 whether to use or discard it. 18359 18360 In the future, GCC may ignore all longcall specifications when the 18361 linker is known to generate glue. 18362 18363'-mtls-markers' 18364'-mno-tls-markers' 18365 Mark (do not mark) calls to '__tls_get_addr' with a relocation 18366 specifying the function argument. The relocation allows the linker 18367 to reliably associate function call with argument setup 18368 instructions for TLS optimization, which in turn allows GCC to 18369 better schedule the sequence. 18370 18371'-pthread' 18372 Adds support for multithreading with the "pthreads" library. This 18373 option sets flags for both the preprocessor and linker. 18374 18375'-mrecip' 18376'-mno-recip' 18377 This option enables use of the reciprocal estimate and reciprocal 18378 square root estimate instructions with additional Newton-Raphson 18379 steps to increase precision instead of doing a divide or square 18380 root and divide for floating-point arguments. You should use the 18381 '-ffast-math' option when using '-mrecip' (or at least 18382 '-funsafe-math-optimizations', '-finite-math-only', 18383 '-freciprocal-math' and '-fno-trapping-math'). Note that while the 18384 throughput of the sequence is generally higher than the throughput 18385 of the non-reciprocal instruction, the precision of the sequence 18386 can be decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 18387 0.99999994) for reciprocal square roots. 18388 18389'-mrecip=OPT' 18390 This option controls which reciprocal estimate instructions may be 18391 used. OPT is a comma-separated list of options, which may be 18392 preceded by a '!' to invert the option: 'all': enable all estimate 18393 instructions, 'default': enable the default instructions, 18394 equivalent to '-mrecip', 'none': disable all estimate instructions, 18395 equivalent to '-mno-recip'; 'div': enable the reciprocal 18396 approximation instructions for both single and double precision; 18397 'divf': enable the single-precision reciprocal approximation 18398 instructions; 'divd': enable the double-precision reciprocal 18399 approximation instructions; 'rsqrt': enable the reciprocal square 18400 root approximation instructions for both single and double 18401 precision; 'rsqrtf': enable the single-precision reciprocal square 18402 root approximation instructions; 'rsqrtd': enable the 18403 double-precision reciprocal square root approximation instructions; 18404 18405 So, for example, '-mrecip=all,!rsqrtd' enables all of the 18406 reciprocal estimate instructions, except for the 'FRSQRTE', 18407 'XSRSQRTEDP', and 'XVRSQRTEDP' instructions which handle the 18408 double-precision reciprocal square root calculations. 18409 18410'-mrecip-precision' 18411'-mno-recip-precision' 18412 Assume (do not assume) that the reciprocal estimate instructions 18413 provide higher-precision estimates than is mandated by the PowerPC 18414 ABI. Selecting '-mcpu=power6', '-mcpu=power7' or '-mcpu=power8' 18415 automatically selects '-mrecip-precision'. The double-precision 18416 square root estimate instructions are not generated by default on 18417 low-precision machines, since they do not provide an estimate that 18418 converges after three steps. 18419 18420'-mveclibabi=TYPE' 18421 Specifies the ABI type to use for vectorizing intrinsics using an 18422 external library. The only type supported at present is 'mass', 18423 which specifies to use IBM's Mathematical Acceleration Subsystem 18424 (MASS) libraries for vectorizing intrinsics using external 18425 libraries. GCC currently emits calls to 'acosd2', 'acosf4', 18426 'acoshd2', 'acoshf4', 'asind2', 'asinf4', 'asinhd2', 'asinhf4', 18427 'atan2d2', 'atan2f4', 'atand2', 'atanf4', 'atanhd2', 'atanhf4', 18428 'cbrtd2', 'cbrtf4', 'cosd2', 'cosf4', 'coshd2', 'coshf4', 'erfcd2', 18429 'erfcf4', 'erfd2', 'erff4', 'exp2d2', 'exp2f4', 'expd2', 'expf4', 18430 'expm1d2', 'expm1f4', 'hypotd2', 'hypotf4', 'lgammad2', 'lgammaf4', 18431 'log10d2', 'log10f4', 'log1pd2', 'log1pf4', 'log2d2', 'log2f4', 18432 'logd2', 'logf4', 'powd2', 'powf4', 'sind2', 'sinf4', 'sinhd2', 18433 'sinhf4', 'sqrtd2', 'sqrtf4', 'tand2', 'tanf4', 'tanhd2', and 18434 'tanhf4' when generating code for power7. Both '-ftree-vectorize' 18435 and '-funsafe-math-optimizations' must also be enabled. The MASS 18436 libraries must be specified at link time. 18437 18438'-mfriz' 18439'-mno-friz' 18440 Generate (do not generate) the 'friz' instruction when the 18441 '-funsafe-math-optimizations' option is used to optimize rounding 18442 of floating-point values to 64-bit integer and back to floating 18443 point. The 'friz' instruction does not return the same value if 18444 the floating-point number is too large to fit in an integer. 18445 18446'-mpointers-to-nested-functions' 18447'-mno-pointers-to-nested-functions' 18448 Generate (do not generate) code to load up the static chain 18449 register (R11) when calling through a pointer on AIX and 64-bit 18450 Linux systems where a function pointer points to a 3-word 18451 descriptor giving the function address, TOC value to be loaded in 18452 register R2, and static chain value to be loaded in register R11. 18453 The '-mpointers-to-nested-functions' is on by default. You cannot 18454 call through pointers to nested functions or pointers to functions 18455 compiled in other languages that use the static chain if you use 18456 the '-mno-pointers-to-nested-functions'. 18457 18458'-msave-toc-indirect' 18459'-mno-save-toc-indirect' 18460 Generate (do not generate) code to save the TOC value in the 18461 reserved stack location in the function prologue if the function 18462 calls through a pointer on AIX and 64-bit Linux systems. If the 18463 TOC value is not saved in the prologue, it is saved just before the 18464 call through the pointer. The '-mno-save-toc-indirect' option is 18465 the default. 18466 18467'-mcompat-align-parm' 18468'-mno-compat-align-parm' 18469 Generate (do not generate) code to pass structure parameters with a 18470 maximum alignment of 64 bits, for compatibility with older versions 18471 of GCC. 18472 18473 Older versions of GCC (prior to 4.9.0) incorrectly did not align a 18474 structure parameter on a 128-bit boundary when that structure 18475 contained a member requiring 128-bit alignment. This is corrected 18476 in more recent versions of GCC. This option may be used to generate 18477 code that is compatible with functions compiled with older versions 18478 of GCC. 18479 18480 The '-mno-compat-align-parm' option is the default. 18481 18482 18483File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 18484 184853.17.39 RX Options 18486------------------ 18487 18488These command-line options are defined for RX targets: 18489 18490'-m64bit-doubles' 18491'-m32bit-doubles' 18492 Make the 'double' data type be 64 bits ('-m64bit-doubles') or 32 18493 bits ('-m32bit-doubles') in size. The default is 18494 '-m32bit-doubles'. _Note_ RX floating-point hardware only works on 18495 32-bit values, which is why the default is '-m32bit-doubles'. 18496 18497'-fpu' 18498'-nofpu' 18499 Enables ('-fpu') or disables ('-nofpu') the use of RX 18500 floating-point hardware. The default is enabled for the RX600 18501 series and disabled for the RX200 series. 18502 18503 Floating-point instructions are only generated for 32-bit 18504 floating-point values, however, so the FPU hardware is not used for 18505 doubles if the '-m64bit-doubles' option is used. 18506 18507 _Note_ If the '-fpu' option is enabled then 18508 '-funsafe-math-optimizations' is also enabled automatically. This 18509 is because the RX FPU instructions are themselves unsafe. 18510 18511'-mcpu=NAME' 18512 Selects the type of RX CPU to be targeted. Currently three types 18513 are supported, the generic RX600 and RX200 series hardware and the 18514 specific RX610 CPU. The default is RX600. 18515 18516 The only difference between RX600 and RX610 is that the RX610 does 18517 not support the 'MVTIPL' instruction. 18518 18519 The RX200 series does not have a hardware floating-point unit and 18520 so '-nofpu' is enabled by default when this type is selected. 18521 18522'-mbig-endian-data' 18523'-mlittle-endian-data' 18524 Store data (but not code) in the big-endian format. The default is 18525 '-mlittle-endian-data', i.e. to store data in the little-endian 18526 format. 18527 18528'-msmall-data-limit=N' 18529 Specifies the maximum size in bytes of global and static variables 18530 which can be placed into the small data area. Using the small data 18531 area can lead to smaller and faster code, but the size of area is 18532 limited and it is up to the programmer to ensure that the area does 18533 not overflow. Also when the small data area is used one of the 18534 RX's registers (usually 'r13') is reserved for use pointing to this 18535 area, so it is no longer available for use by the compiler. This 18536 could result in slower and/or larger code if variables are pushed 18537 onto the stack instead of being held in this register. 18538 18539 Note, common variables (variables that have not been initialized) 18540 and constants are not placed into the small data area as they are 18541 assigned to other sections in the output executable. 18542 18543 The default value is zero, which disables this feature. Note, this 18544 feature is not enabled by default with higher optimization levels 18545 ('-O2' etc) because of the potentially detrimental effects of 18546 reserving a register. It is up to the programmer to experiment and 18547 discover whether this feature is of benefit to their program. See 18548 the description of the '-mpid' option for a description of how the 18549 actual register to hold the small data area pointer is chosen. 18550 18551'-msim' 18552'-mno-sim' 18553 Use the simulator runtime. The default is to use the libgloss 18554 board-specific runtime. 18555 18556'-mas100-syntax' 18557'-mno-as100-syntax' 18558 When generating assembler output use a syntax that is compatible 18559 with Renesas's AS100 assembler. This syntax can also be handled by 18560 the GAS assembler, but it has some restrictions so it is not 18561 generated by default. 18562 18563'-mmax-constant-size=N' 18564 Specifies the maximum size, in bytes, of a constant that can be 18565 used as an operand in a RX instruction. Although the RX 18566 instruction set does allow constants of up to 4 bytes in length to 18567 be used in instructions, a longer value equates to a longer 18568 instruction. Thus in some circumstances it can be beneficial to 18569 restrict the size of constants that are used in instructions. 18570 Constants that are too big are instead placed into a constant pool 18571 and referenced via register indirection. 18572 18573 The value N can be between 0 and 4. A value of 0 (the default) or 18574 4 means that constants of any size are allowed. 18575 18576'-mrelax' 18577 Enable linker relaxation. Linker relaxation is a process whereby 18578 the linker attempts to reduce the size of a program by finding 18579 shorter versions of various instructions. Disabled by default. 18580 18581'-mint-register=N' 18582 Specify the number of registers to reserve for fast interrupt 18583 handler functions. The value N can be between 0 and 4. A value of 18584 1 means that register 'r13' is reserved for the exclusive use of 18585 fast interrupt handlers. A value of 2 reserves 'r13' and 'r12'. A 18586 value of 3 reserves 'r13', 'r12' and 'r11', and a value of 4 18587 reserves 'r13' through 'r10'. A value of 0, the default, does not 18588 reserve any registers. 18589 18590'-msave-acc-in-interrupts' 18591 Specifies that interrupt handler functions should preserve the 18592 accumulator register. This is only necessary if normal code might 18593 use the accumulator register, for example because it performs 18594 64-bit multiplications. The default is to ignore the accumulator 18595 as this makes the interrupt handlers faster. 18596 18597'-mpid' 18598'-mno-pid' 18599 Enables the generation of position independent data. When enabled 18600 any access to constant data is done via an offset from a base 18601 address held in a register. This allows the location of constant 18602 data to be determined at run time without requiring the executable 18603 to be relocated, which is a benefit to embedded applications with 18604 tight memory constraints. Data that can be modified is not 18605 affected by this option. 18606 18607 Note, using this feature reserves a register, usually 'r13', for 18608 the constant data base address. This can result in slower and/or 18609 larger code, especially in complicated functions. 18610 18611 The actual register chosen to hold the constant data base address 18612 depends upon whether the '-msmall-data-limit' and/or the 18613 '-mint-register' command-line options are enabled. Starting with 18614 register 'r13' and proceeding downwards, registers are allocated 18615 first to satisfy the requirements of '-mint-register', then '-mpid' 18616 and finally '-msmall-data-limit'. Thus it is possible for the 18617 small data area register to be 'r8' if both '-mint-register=4' and 18618 '-mpid' are specified on the command line. 18619 18620 By default this feature is not enabled. The default can be 18621 restored via the '-mno-pid' command-line option. 18622 18623'-mno-warn-multiple-fast-interrupts' 18624'-mwarn-multiple-fast-interrupts' 18625 Prevents GCC from issuing a warning message if it finds more than 18626 one fast interrupt handler when it is compiling a file. The 18627 default is to issue a warning for each extra fast interrupt handler 18628 found, as the RX only supports one such interrupt. 18629 18630 _Note:_ The generic GCC command-line option '-ffixed-REG' has special 18631significance to the RX port when used with the 'interrupt' function 18632attribute. This attribute indicates a function intended to process fast 18633interrupts. GCC ensures that it only uses the registers 'r10', 'r11', 18634'r12' and/or 'r13' and only provided that the normal use of the 18635corresponding registers have been restricted via the '-ffixed-REG' or 18636'-mint-register' command-line options. 18637 18638 18639File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 18640 186413.17.40 S/390 and zSeries Options 18642--------------------------------- 18643 18644These are the '-m' options defined for the S/390 and zSeries 18645architecture. 18646 18647'-mhard-float' 18648'-msoft-float' 18649 Use (do not use) the hardware floating-point instructions and 18650 registers for floating-point operations. When '-msoft-float' is 18651 specified, functions in 'libgcc.a' are used to perform 18652 floating-point operations. When '-mhard-float' is specified, the 18653 compiler generates IEEE floating-point instructions. This is the 18654 default. 18655 18656'-mhard-dfp' 18657'-mno-hard-dfp' 18658 Use (do not use) the hardware decimal-floating-point instructions 18659 for decimal-floating-point operations. When '-mno-hard-dfp' is 18660 specified, functions in 'libgcc.a' are used to perform 18661 decimal-floating-point operations. When '-mhard-dfp' is specified, 18662 the compiler generates decimal-floating-point hardware 18663 instructions. This is the default for '-march=z9-ec' or higher. 18664 18665'-mlong-double-64' 18666'-mlong-double-128' 18667 These switches control the size of 'long double' type. A size of 18668 64 bits makes the 'long double' type equivalent to the 'double' 18669 type. This is the default. 18670 18671'-mbackchain' 18672'-mno-backchain' 18673 Store (do not store) the address of the caller's frame as backchain 18674 pointer into the callee's stack frame. A backchain may be needed 18675 to allow debugging using tools that do not understand DWARF 2 call 18676 frame information. When '-mno-packed-stack' is in effect, the 18677 backchain pointer is stored at the bottom of the stack frame; when 18678 '-mpacked-stack' is in effect, the backchain is placed into the 18679 topmost word of the 96/160 byte register save area. 18680 18681 In general, code compiled with '-mbackchain' is call-compatible 18682 with code compiled with '-mmo-backchain'; however, use of the 18683 backchain for debugging purposes usually requires that the whole 18684 binary is built with '-mbackchain'. Note that the combination of 18685 '-mbackchain', '-mpacked-stack' and '-mhard-float' is not 18686 supported. In order to build a linux kernel use '-msoft-float'. 18687 18688 The default is to not maintain the backchain. 18689 18690'-mpacked-stack' 18691'-mno-packed-stack' 18692 Use (do not use) the packed stack layout. When '-mno-packed-stack' 18693 is specified, the compiler uses the all fields of the 96/160 byte 18694 register save area only for their default purpose; unused fields 18695 still take up stack space. When '-mpacked-stack' is specified, 18696 register save slots are densely packed at the top of the register 18697 save area; unused space is reused for other purposes, allowing for 18698 more efficient use of the available stack space. However, when 18699 '-mbackchain' is also in effect, the topmost word of the save area 18700 is always used to store the backchain, and the return address 18701 register is always saved two words below the backchain. 18702 18703 As long as the stack frame backchain is not used, code generated 18704 with '-mpacked-stack' is call-compatible with code generated with 18705 '-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 18706 for S/390 or zSeries generated code that uses the stack frame 18707 backchain at run time, not just for debugging purposes. Such code 18708 is not call-compatible with code compiled with '-mpacked-stack'. 18709 Also, note that the combination of '-mbackchain', '-mpacked-stack' 18710 and '-mhard-float' is not supported. In order to build a linux 18711 kernel use '-msoft-float'. 18712 18713 The default is to not use the packed stack layout. 18714 18715'-msmall-exec' 18716'-mno-small-exec' 18717 Generate (or do not generate) code using the 'bras' instruction to 18718 do subroutine calls. This only works reliably if the total 18719 executable size does not exceed 64k. The default is to use the 18720 'basr' instruction instead, which does not have this limitation. 18721 18722'-m64' 18723'-m31' 18724 When '-m31' is specified, generate code compliant to the GNU/Linux 18725 for S/390 ABI. When '-m64' is specified, generate code compliant 18726 to the GNU/Linux for zSeries ABI. This allows GCC in particular to 18727 generate 64-bit instructions. For the 's390' targets, the default 18728 is '-m31', while the 's390x' targets default to '-m64'. 18729 18730'-mzarch' 18731'-mesa' 18732 When '-mzarch' is specified, generate code using the instructions 18733 available on z/Architecture. When '-mesa' is specified, generate 18734 code using the instructions available on ESA/390. Note that 18735 '-mesa' is not possible with '-m64'. When generating code 18736 compliant to the GNU/Linux for S/390 ABI, the default is '-mesa'. 18737 When generating code compliant to the GNU/Linux for zSeries ABI, 18738 the default is '-mzarch'. 18739 18740'-mmvcle' 18741'-mno-mvcle' 18742 Generate (or do not generate) code using the 'mvcle' instruction to 18743 perform block moves. When '-mno-mvcle' is specified, use a 'mvc' 18744 loop instead. This is the default unless optimizing for size. 18745 18746'-mdebug' 18747'-mno-debug' 18748 Print (or do not print) additional debug information when 18749 compiling. The default is to not print debug information. 18750 18751'-march=CPU-TYPE' 18752 Generate code that runs on CPU-TYPE, which is the name of a system 18753 representing a certain processor type. Possible values for 18754 CPU-TYPE are 'g5', 'g6', 'z900', 'z990', 'z9-109', 'z9-ec' and 18755 'z10'. When generating code using the instructions available on 18756 z/Architecture, the default is '-march=z900'. Otherwise, the 18757 default is '-march=g5'. 18758 18759'-mtune=CPU-TYPE' 18760 Tune to CPU-TYPE everything applicable about the generated code, 18761 except for the ABI and the set of available instructions. The list 18762 of CPU-TYPE values is the same as for '-march'. The default is the 18763 value used for '-march'. 18764 18765'-mtpf-trace' 18766'-mno-tpf-trace' 18767 Generate code that adds (does not add) in TPF OS specific branches 18768 to trace routines in the operating system. This option is off by 18769 default, even when compiling for the TPF OS. 18770 18771'-mfused-madd' 18772'-mno-fused-madd' 18773 Generate code that uses (does not use) the floating-point multiply 18774 and accumulate instructions. These instructions are generated by 18775 default if hardware floating point is used. 18776 18777'-mwarn-framesize=FRAMESIZE' 18778 Emit a warning if the current function exceeds the given frame 18779 size. Because this is a compile-time check it doesn't need to be a 18780 real problem when the program runs. It is intended to identify 18781 functions that most probably cause a stack overflow. It is useful 18782 to be used in an environment with limited stack size e.g. the linux 18783 kernel. 18784 18785'-mwarn-dynamicstack' 18786 Emit a warning if the function calls 'alloca' or uses 18787 dynamically-sized arrays. This is generally a bad idea with a 18788 limited stack size. 18789 18790'-mstack-guard=STACK-GUARD' 18791'-mstack-size=STACK-SIZE' 18792 If these options are provided the S/390 back end emits additional 18793 instructions in the function prologue that trigger a trap if the 18794 stack size is STACK-GUARD bytes above the STACK-SIZE (remember that 18795 the stack on S/390 grows downward). If the STACK-GUARD option is 18796 omitted the smallest power of 2 larger than the frame size of the 18797 compiled function is chosen. These options are intended to be used 18798 to help debugging stack overflow problems. The additionally 18799 emitted code causes only little overhead and hence can also be used 18800 in production-like systems without greater performance degradation. 18801 The given values have to be exact powers of 2 and STACK-SIZE has to 18802 be greater than STACK-GUARD without exceeding 64k. In order to be 18803 efficient the extra code makes the assumption that the stack starts 18804 at an address aligned to the value given by STACK-SIZE. The 18805 STACK-GUARD option can only be used in conjunction with STACK-SIZE. 18806 18807'-mhotpatch[=HALFWORDS]' 18808'-mno-hotpatch' 18809 If the hotpatch option is enabled, a "hot-patching" function 18810 prologue is generated for all functions in the compilation unit. 18811 The funtion label is prepended with the given number of two-byte 18812 Nop instructions (HALFWORDS, maximum 1000000) or 12 Nop 18813 instructions if no argument is present. Functions with a 18814 hot-patching prologue are never inlined automatically, and a 18815 hot-patching prologue is never generated for functions functions 18816 that are explicitly inline. 18817 18818 This option can be overridden for individual functions with the 18819 'hotpatch' attribute. 18820 18821 18822File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 18823 188243.17.41 Score Options 18825--------------------- 18826 18827These options are defined for Score implementations: 18828 18829'-meb' 18830 Compile code for big-endian mode. This is the default. 18831 18832'-mel' 18833 Compile code for little-endian mode. 18834 18835'-mnhwloop' 18836 Disable generation of 'bcnz' instructions. 18837 18838'-muls' 18839 Enable generation of unaligned load and store instructions. 18840 18841'-mmac' 18842 Enable the use of multiply-accumulate instructions. Disabled by 18843 default. 18844 18845'-mscore5' 18846 Specify the SCORE5 as the target architecture. 18847 18848'-mscore5u' 18849 Specify the SCORE5U of the target architecture. 18850 18851'-mscore7' 18852 Specify the SCORE7 as the target architecture. This is the 18853 default. 18854 18855'-mscore7d' 18856 Specify the SCORE7D as the target architecture. 18857 18858 18859File: gcc.info, Node: SH Options, Next: Solaris 2 Options, Prev: Score Options, Up: Submodel Options 18860 188613.17.42 SH Options 18862------------------ 18863 18864These '-m' options are defined for the SH implementations: 18865 18866'-m1' 18867 Generate code for the SH1. 18868 18869'-m2' 18870 Generate code for the SH2. 18871 18872'-m2e' 18873 Generate code for the SH2e. 18874 18875'-m2a-nofpu' 18876 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a 18877 way that the floating-point unit is not used. 18878 18879'-m2a-single-only' 18880 Generate code for the SH2a-FPU, in such a way that no 18881 double-precision floating-point operations are used. 18882 18883'-m2a-single' 18884 Generate code for the SH2a-FPU assuming the floating-point unit is 18885 in single-precision mode by default. 18886 18887'-m2a' 18888 Generate code for the SH2a-FPU assuming the floating-point unit is 18889 in double-precision mode by default. 18890 18891'-m3' 18892 Generate code for the SH3. 18893 18894'-m3e' 18895 Generate code for the SH3e. 18896 18897'-m4-nofpu' 18898 Generate code for the SH4 without a floating-point unit. 18899 18900'-m4-single-only' 18901 Generate code for the SH4 with a floating-point unit that only 18902 supports single-precision arithmetic. 18903 18904'-m4-single' 18905 Generate code for the SH4 assuming the floating-point unit is in 18906 single-precision mode by default. 18907 18908'-m4' 18909 Generate code for the SH4. 18910 18911'-m4-100' 18912 Generate code for SH4-100. 18913 18914'-m4-100-nofpu' 18915 Generate code for SH4-100 in such a way that the floating-point 18916 unit is not used. 18917 18918'-m4-100-single' 18919 Generate code for SH4-100 assuming the floating-point unit is in 18920 single-precision mode by default. 18921 18922'-m4-100-single-only' 18923 Generate code for SH4-100 in such a way that no double-precision 18924 floating-point operations are used. 18925 18926'-m4-200' 18927 Generate code for SH4-200. 18928 18929'-m4-200-nofpu' 18930 Generate code for SH4-200 without in such a way that the 18931 floating-point unit is not used. 18932 18933'-m4-200-single' 18934 Generate code for SH4-200 assuming the floating-point unit is in 18935 single-precision mode by default. 18936 18937'-m4-200-single-only' 18938 Generate code for SH4-200 in such a way that no double-precision 18939 floating-point operations are used. 18940 18941'-m4-300' 18942 Generate code for SH4-300. 18943 18944'-m4-300-nofpu' 18945 Generate code for SH4-300 without in such a way that the 18946 floating-point unit is not used. 18947 18948'-m4-300-single' 18949 Generate code for SH4-300 in such a way that no double-precision 18950 floating-point operations are used. 18951 18952'-m4-300-single-only' 18953 Generate code for SH4-300 in such a way that no double-precision 18954 floating-point operations are used. 18955 18956'-m4-340' 18957 Generate code for SH4-340 (no MMU, no FPU). 18958 18959'-m4-500' 18960 Generate code for SH4-500 (no FPU). Passes '-isa=sh4-nofpu' to the 18961 assembler. 18962 18963'-m4a-nofpu' 18964 Generate code for the SH4al-dsp, or for a SH4a in such a way that 18965 the floating-point unit is not used. 18966 18967'-m4a-single-only' 18968 Generate code for the SH4a, in such a way that no double-precision 18969 floating-point operations are used. 18970 18971'-m4a-single' 18972 Generate code for the SH4a assuming the floating-point unit is in 18973 single-precision mode by default. 18974 18975'-m4a' 18976 Generate code for the SH4a. 18977 18978'-m4al' 18979 Same as '-m4a-nofpu', except that it implicitly passes '-dsp' to 18980 the assembler. GCC doesn't generate any DSP instructions at the 18981 moment. 18982 18983'-m5-32media' 18984 Generate 32-bit code for SHmedia. 18985 18986'-m5-32media-nofpu' 18987 Generate 32-bit code for SHmedia in such a way that the 18988 floating-point unit is not used. 18989 18990'-m5-64media' 18991 Generate 64-bit code for SHmedia. 18992 18993'-m5-64media-nofpu' 18994 Generate 64-bit code for SHmedia in such a way that the 18995 floating-point unit is not used. 18996 18997'-m5-compact' 18998 Generate code for SHcompact. 18999 19000'-m5-compact-nofpu' 19001 Generate code for SHcompact in such a way that the floating-point 19002 unit is not used. 19003 19004'-mb' 19005 Compile code for the processor in big-endian mode. 19006 19007'-ml' 19008 Compile code for the processor in little-endian mode. 19009 19010'-mdalign' 19011 Align doubles at 64-bit boundaries. Note that this changes the 19012 calling conventions, and thus some functions from the standard C 19013 library do not work unless you recompile it first with '-mdalign'. 19014 19015'-mrelax' 19016 Shorten some address references at link time, when possible; uses 19017 the linker option '-relax'. 19018 19019'-mbigtable' 19020 Use 32-bit offsets in 'switch' tables. The default is to use 19021 16-bit offsets. 19022 19023'-mbitops' 19024 Enable the use of bit manipulation instructions on SH2A. 19025 19026'-mfmovd' 19027 Enable the use of the instruction 'fmovd'. Check '-mdalign' for 19028 alignment constraints. 19029 19030'-mrenesas' 19031 Comply with the calling conventions defined by Renesas. 19032 19033'-mno-renesas' 19034 Comply with the calling conventions defined for GCC before the 19035 Renesas conventions were available. This option is the default for 19036 all targets of the SH toolchain. 19037 19038'-mnomacsave' 19039 Mark the 'MAC' register as call-clobbered, even if '-mrenesas' is 19040 given. 19041 19042'-mieee' 19043'-mno-ieee' 19044 Control the IEEE compliance of floating-point comparisons, which 19045 affects the handling of cases where the result of a comparison is 19046 unordered. By default '-mieee' is implicitly enabled. If 19047 '-ffinite-math-only' is enabled '-mno-ieee' is implicitly set, 19048 which results in faster floating-point greater-equal and less-equal 19049 comparisons. The implcit settings can be overridden by specifying 19050 either '-mieee' or '-mno-ieee'. 19051 19052'-minline-ic_invalidate' 19053 Inline code to invalidate instruction cache entries after setting 19054 up nested function trampolines. This option has no effect if 19055 '-musermode' is in effect and the selected code generation option 19056 (e.g. '-m4') does not allow the use of the 'icbi' instruction. If 19057 the selected code generation option does not allow the use of the 19058 'icbi' instruction, and '-musermode' is not in effect, the inlined 19059 code manipulates the instruction cache address array directly with 19060 an associative write. This not only requires privileged mode at 19061 run time, but it also fails if the cache line had been mapped via 19062 the TLB and has become unmapped. 19063 19064'-misize' 19065 Dump instruction size and location in the assembly code. 19066 19067'-mpadstruct' 19068 This option is deprecated. It pads structures to multiple of 4 19069 bytes, which is incompatible with the SH ABI. 19070 19071'-matomic-model=MODEL' 19072 Sets the model of atomic operations and additional parameters as a 19073 comma separated list. For details on the atomic built-in functions 19074 see *note __atomic Builtins::. The following models and parameters 19075 are supported: 19076 19077 'none' 19078 Disable compiler generated atomic sequences and emit library 19079 calls for atomic operations. This is the default if the 19080 target is not 'sh*-*-linux*'. 19081 19082 'soft-gusa' 19083 Generate GNU/Linux compatible gUSA software atomic sequences 19084 for the atomic built-in functions. The generated atomic 19085 sequences require additional support from the 19086 interrupt/exception handling code of the system and are only 19087 suitable for SH3* and SH4* single-core systems. This option 19088 is enabled by default when the target is 'sh*-*-linux*' and 19089 SH3* or SH4*. When the target is SH4A, this option will also 19090 partially utilize the hardware atomic instructions 'movli.l' 19091 and 'movco.l' to create more efficient code, unless 'strict' 19092 is specified. 19093 19094 'soft-tcb' 19095 Generate software atomic sequences that use a variable in the 19096 thread control block. This is a variation of the gUSA 19097 sequences which can also be used on SH1* and SH2* targets. 19098 The generated atomic sequences require additional support from 19099 the interrupt/exception handling code of the system and are 19100 only suitable for single-core systems. When using this model, 19101 the 'gbr-offset=' parameter has to be specified as well. 19102 19103 'soft-imask' 19104 Generate software atomic sequences that temporarily disable 19105 interrupts by setting 'SR.IMASK = 1111'. This model works 19106 only when the program runs in privileged mode and is only 19107 suitable for single-core systems. Additional support from the 19108 interrupt/exception handling code of the system is not 19109 required. This model is enabled by default when the target is 19110 'sh*-*-linux*' and SH1* or SH2*. 19111 19112 'hard-llcs' 19113 Generate hardware atomic sequences using the 'movli.l' and 19114 'movco.l' instructions only. This is only available on SH4A 19115 and is suitable for multi-core systems. Since the hardware 19116 instructions support only 32 bit atomic variables access to 8 19117 or 16 bit variables is emulated with 32 bit accesses. Code 19118 compiled with this option will also be compatible with other 19119 software atomic model interrupt/exception handling systems if 19120 executed on an SH4A system. Additional support from the 19121 interrupt/exception handling code of the system is not 19122 required for this model. 19123 19124 'gbr-offset=' 19125 This parameter specifies the offset in bytes of the variable 19126 in the thread control block structure that should be used by 19127 the generated atomic sequences when the 'soft-tcb' model has 19128 been selected. For other models this parameter is ignored. 19129 The specified value must be an integer multiple of four and in 19130 the range 0-1020. 19131 19132 'strict' 19133 This parameter prevents mixed usage of multiple atomic models, 19134 even though they would be compatible, and will make the 19135 compiler generate atomic sequences of the specified model 19136 only. 19137 19138'-mtas' 19139 Generate the 'tas.b' opcode for '__atomic_test_and_set'. Notice 19140 that depending on the particular hardware and software 19141 configuration this can degrade overall performance due to the 19142 operand cache line flushes that are implied by the 'tas.b' 19143 instruction. On multi-core SH4A processors the 'tas.b' instruction 19144 must be used with caution since it can result in data corruption 19145 for certain cache configurations. 19146 19147'-mprefergot' 19148 When generating position-independent code, emit function calls 19149 using the Global Offset Table instead of the Procedure Linkage 19150 Table. 19151 19152'-musermode' 19153'-mno-usermode' 19154 Don't allow (allow) the compiler generating privileged mode code. 19155 Specifying '-musermode' also implies '-mno-inline-ic_invalidate' if 19156 the inlined code would not work in user mode. '-musermode' is the 19157 default when the target is 'sh*-*-linux*'. If the target is SH1* 19158 or SH2* '-musermode' has no effect, since there is no user mode. 19159 19160'-multcost=NUMBER' 19161 Set the cost to assume for a multiply insn. 19162 19163'-mdiv=STRATEGY' 19164 Set the division strategy to be used for integer division 19165 operations. For SHmedia STRATEGY can be one of: 19166 19167 'fp' 19168 Performs the operation in floating point. This has a very 19169 high latency, but needs only a few instructions, so it might 19170 be a good choice if your code has enough easily-exploitable 19171 ILP to allow the compiler to schedule the floating-point 19172 instructions together with other instructions. Division by 19173 zero causes a floating-point exception. 19174 19175 'inv' 19176 Uses integer operations to calculate the inverse of the 19177 divisor, and then multiplies the dividend with the inverse. 19178 This strategy allows CSE and hoisting of the inverse 19179 calculation. Division by zero calculates an unspecified 19180 result, but does not trap. 19181 19182 'inv:minlat' 19183 A variant of 'inv' where, if no CSE or hoisting opportunities 19184 have been found, or if the entire operation has been hoisted 19185 to the same place, the last stages of the inverse calculation 19186 are intertwined with the final multiply to reduce the overall 19187 latency, at the expense of using a few more instructions, and 19188 thus offering fewer scheduling opportunities with other code. 19189 19190 'call' 19191 Calls a library function that usually implements the 19192 'inv:minlat' strategy. This gives high code density for 19193 'm5-*media-nofpu' compilations. 19194 19195 'call2' 19196 Uses a different entry point of the same library function, 19197 where it assumes that a pointer to a lookup table has already 19198 been set up, which exposes the pointer load to CSE and code 19199 hoisting optimizations. 19200 19201 'inv:call' 19202 'inv:call2' 19203 'inv:fp' 19204 Use the 'inv' algorithm for initial code generation, but if 19205 the code stays unoptimized, revert to the 'call', 'call2', or 19206 'fp' strategies, respectively. Note that the 19207 potentially-trapping side effect of division by zero is 19208 carried by a separate instruction, so it is possible that all 19209 the integer instructions are hoisted out, but the marker for 19210 the side effect stays where it is. A recombination to 19211 floating-point operations or a call is not possible in that 19212 case. 19213 19214 'inv20u' 19215 'inv20l' 19216 Variants of the 'inv:minlat' strategy. In the case that the 19217 inverse calculation is not separated from the multiply, they 19218 speed up division where the dividend fits into 20 bits (plus 19219 sign where applicable) by inserting a test to skip a number of 19220 operations in this case; this test slows down the case of 19221 larger dividends. 'inv20u' assumes the case of a such a small 19222 dividend to be unlikely, and 'inv20l' assumes it to be likely. 19223 19224 For targets other than SHmedia STRATEGY can be one of: 19225 19226 'call-div1' 19227 Calls a library function that uses the single-step division 19228 instruction 'div1' to perform the operation. Division by zero 19229 calculates an unspecified result and does not trap. This is 19230 the default except for SH4, SH2A and SHcompact. 19231 19232 'call-fp' 19233 Calls a library function that performs the operation in double 19234 precision floating point. Division by zero causes a 19235 floating-point exception. This is the default for SHcompact 19236 with FPU. Specifying this for targets that do not have a 19237 double precision FPU will default to 'call-div1'. 19238 19239 'call-table' 19240 Calls a library function that uses a lookup table for small 19241 divisors and the 'div1' instruction with case distinction for 19242 larger divisors. Division by zero calculates an unspecified 19243 result and does not trap. This is the default for SH4. 19244 Specifying this for targets that do not have dynamic shift 19245 instructions will default to 'call-div1'. 19246 19247 When a division strategy has not been specified the default 19248 strategy will be selected based on the current target. For SH2A 19249 the default strategy is to use the 'divs' and 'divu' instructions 19250 instead of library function calls. 19251 19252'-maccumulate-outgoing-args' 19253 Reserve space once for outgoing arguments in the function prologue 19254 rather than around each call. Generally beneficial for performance 19255 and size. Also needed for unwinding to avoid changing the stack 19256 frame around conditional code. 19257 19258'-mdivsi3_libfunc=NAME' 19259 Set the name of the library function used for 32-bit signed 19260 division to NAME. This only affects the name used in the 'call' 19261 and 'inv:call' division strategies, and the compiler still expects 19262 the same sets of input/output/clobbered registers as if this option 19263 were not present. 19264 19265'-mfixed-range=REGISTER-RANGE' 19266 Generate code treating the given register range as fixed registers. 19267 A fixed register is one that the register allocator can not use. 19268 This is useful when compiling kernel code. A register range is 19269 specified as two registers separated by a dash. Multiple register 19270 ranges can be specified separated by a comma. 19271 19272'-mindexed-addressing' 19273 Enable the use of the indexed addressing mode for 19274 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 19275 implement 32-bit wrap-around semantics for the indexed addressing 19276 mode. The architecture allows the implementation of processors 19277 with 64-bit MMU, which the OS could use to get 32-bit addressing, 19278 but since no current hardware implementation supports this or any 19279 other way to make the indexed addressing mode safe to use in the 19280 32-bit ABI, the default is '-mno-indexed-addressing'. 19281 19282'-mgettrcost=NUMBER' 19283 Set the cost assumed for the 'gettr' instruction to NUMBER. The 19284 default is 2 if '-mpt-fixed' is in effect, 100 otherwise. 19285 19286'-mpt-fixed' 19287 Assume 'pt*' instructions won't trap. This generally generates 19288 better-scheduled code, but is unsafe on current hardware. The 19289 current architecture definition says that 'ptabs' and 'ptrel' trap 19290 when the target anded with 3 is 3. This has the unintentional 19291 effect of making it unsafe to schedule these instructions before a 19292 branch, or hoist them out of a loop. For example, 19293 '__do_global_ctors', a part of 'libgcc' that runs constructors at 19294 program startup, calls functions in a list which is delimited by 19295 -1. With the '-mpt-fixed' option, the 'ptabs' is done before 19296 testing against -1. That means that all the constructors run a bit 19297 more quickly, but when the loop comes to the end of the list, the 19298 program crashes because 'ptabs' loads -1 into a target register. 19299 19300 Since this option is unsafe for any hardware implementing the 19301 current architecture specification, the default is '-mno-pt-fixed'. 19302 Unless specified explicitly with '-mgettrcost', '-mno-pt-fixed' 19303 also implies '-mgettrcost=100'; this deters register allocation 19304 from using target registers for storing ordinary integers. 19305 19306'-minvalid-symbols' 19307 Assume symbols might be invalid. Ordinary function symbols 19308 generated by the compiler are always valid to load with 19309 'movi'/'shori'/'ptabs' or 'movi'/'shori'/'ptrel', but with 19310 assembler and/or linker tricks it is possible to generate symbols 19311 that cause 'ptabs' or 'ptrel' to trap. This option is only 19312 meaningful when '-mno-pt-fixed' is in effect. It prevents 19313 cross-basic-block CSE, hoisting and most scheduling of symbol 19314 loads. The default is '-mno-invalid-symbols'. 19315 19316'-mbranch-cost=NUM' 19317 Assume NUM to be the cost for a branch instruction. Higher numbers 19318 make the compiler try to generate more branch-free code if 19319 possible. If not specified the value is selected depending on the 19320 processor type that is being compiled for. 19321 19322'-mzdcbranch' 19323'-mno-zdcbranch' 19324 Assume (do not assume) that zero displacement conditional branch 19325 instructions 'bt' and 'bf' are fast. If '-mzdcbranch' is 19326 specified, the compiler will try to prefer zero displacement branch 19327 code sequences. This is enabled by default when generating code 19328 for SH4 and SH4A. It can be explicitly disabled by specifying 19329 '-mno-zdcbranch'. 19330 19331'-mfused-madd' 19332'-mno-fused-madd' 19333 Generate code that uses (does not use) the floating-point multiply 19334 and accumulate instructions. These instructions are generated by 19335 default if hardware floating point is used. The machine-dependent 19336 '-mfused-madd' option is now mapped to the machine-independent 19337 '-ffp-contract=fast' option, and '-mno-fused-madd' is mapped to 19338 '-ffp-contract=off'. 19339 19340'-mfsca' 19341'-mno-fsca' 19342 Allow or disallow the compiler to emit the 'fsca' instruction for 19343 sine and cosine approximations. The option '-mfsca' must be used 19344 in combination with '-funsafe-math-optimizations'. It is enabled 19345 by default when generating code for SH4A. Using '-mno-fsca' 19346 disables sine and cosine approximations even if 19347 '-funsafe-math-optimizations' is in effect. 19348 19349'-mfsrra' 19350'-mno-fsrra' 19351 Allow or disallow the compiler to emit the 'fsrra' instruction for 19352 reciprocal square root approximations. The option '-mfsrra' must 19353 be used in combination with '-funsafe-math-optimizations' and 19354 '-ffinite-math-only'. It is enabled by default when generating 19355 code for SH4A. Using '-mno-fsrra' disables reciprocal square root 19356 approximations even if '-funsafe-math-optimizations' and 19357 '-ffinite-math-only' are in effect. 19358 19359'-mpretend-cmove' 19360 Prefer zero-displacement conditional branches for conditional move 19361 instruction patterns. This can result in faster code on the SH4 19362 processor. 19363 19364 19365File: gcc.info, Node: Solaris 2 Options, Next: SPARC Options, Prev: SH Options, Up: Submodel Options 19366 193673.17.43 Solaris 2 Options 19368------------------------- 19369 19370These '-m' options are supported on Solaris 2: 19371 19372'-mclear-hwcap' 19373 '-mclear-hwcap' tells the compiler to remove the hardware 19374 capabilities generated by the Solaris assembler. This is only 19375 necessary when object files use ISA extensions not supported by the 19376 current machine, but check at runtime whether or not to use them. 19377 19378'-mimpure-text' 19379 '-mimpure-text', used in addition to '-shared', tells the compiler 19380 to not pass '-z text' to the linker when linking a shared object. 19381 Using this option, you can link position-dependent code into a 19382 shared object. 19383 19384 '-mimpure-text' suppresses the "relocations remain against 19385 allocatable but non-writable sections" linker error message. 19386 However, the necessary relocations trigger copy-on-write, and the 19387 shared object is not actually shared across processes. Instead of 19388 using '-mimpure-text', you should compile all source code with 19389 '-fpic' or '-fPIC'. 19390 19391 These switches are supported in addition to the above on Solaris 2: 19392 19393'-pthreads' 19394 Add support for multithreading using the POSIX threads library. 19395 This option sets flags for both the preprocessor and linker. This 19396 option does not affect the thread safety of object code produced by 19397 the compiler or that of libraries supplied with it. 19398 19399'-pthread' 19400 This is a synonym for '-pthreads'. 19401 19402 19403File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: Solaris 2 Options, Up: Submodel Options 19404 194053.17.44 SPARC Options 19406--------------------- 19407 19408These '-m' options are supported on the SPARC: 19409 19410'-mno-app-regs' 19411'-mapp-regs' 19412 Specify '-mapp-regs' to generate output using the global registers 19413 2 through 4, which the SPARC SVR4 ABI reserves for applications. 19414 Like the global register 1, each global register 2 through 4 is 19415 then treated as an allocable register that is clobbered by function 19416 calls. This is the default. 19417 19418 To be fully SVR4 ABI-compliant at the cost of some performance 19419 loss, specify '-mno-app-regs'. You should compile libraries and 19420 system software with this option. 19421 19422'-mflat' 19423'-mno-flat' 19424 With '-mflat', the compiler does not generate save/restore 19425 instructions and uses a "flat" or single register window model. 19426 This model is compatible with the regular register window model. 19427 The local registers and the input registers (0-5) are still treated 19428 as "call-saved" registers and are saved on the stack as needed. 19429 19430 With '-mno-flat' (the default), the compiler generates save/restore 19431 instructions (except for leaf functions). This is the normal 19432 operating mode. 19433 19434'-mfpu' 19435'-mhard-float' 19436 Generate output containing floating-point instructions. This is 19437 the default. 19438 19439'-mno-fpu' 19440'-msoft-float' 19441 Generate output containing library calls for floating point. 19442 *Warning:* the requisite libraries are not available for all SPARC 19443 targets. Normally the facilities of the machine's usual C compiler 19444 are used, but this cannot be done directly in cross-compilation. 19445 You must make your own arrangements to provide suitable library 19446 functions for cross-compilation. The embedded targets 19447 'sparc-*-aout' and 'sparclite-*-*' do provide software 19448 floating-point support. 19449 19450 '-msoft-float' changes the calling convention in the output file; 19451 therefore, it is only useful if you compile _all_ of a program with 19452 this option. In particular, you need to compile 'libgcc.a', the 19453 library that comes with GCC, with '-msoft-float' in order for this 19454 to work. 19455 19456'-mhard-quad-float' 19457 Generate output containing quad-word (long double) floating-point 19458 instructions. 19459 19460'-msoft-quad-float' 19461 Generate output containing library calls for quad-word (long 19462 double) floating-point instructions. The functions called are 19463 those specified in the SPARC ABI. This is the default. 19464 19465 As of this writing, there are no SPARC implementations that have 19466 hardware support for the quad-word floating-point instructions. 19467 They all invoke a trap handler for one of these instructions, and 19468 then the trap handler emulates the effect of the instruction. 19469 Because of the trap handler overhead, this is much slower than 19470 calling the ABI library routines. Thus the '-msoft-quad-float' 19471 option is the default. 19472 19473'-mno-unaligned-doubles' 19474'-munaligned-doubles' 19475 Assume that doubles have 8-byte alignment. This is the default. 19476 19477 With '-munaligned-doubles', GCC assumes that doubles have 8-byte 19478 alignment only if they are contained in another type, or if they 19479 have an absolute address. Otherwise, it assumes they have 4-byte 19480 alignment. Specifying this option avoids some rare compatibility 19481 problems with code generated by other compilers. It is not the 19482 default because it results in a performance loss, especially for 19483 floating-point code. 19484 19485'-muser-mode' 19486'-mno-user-mode' 19487 Do not generate code that can only run in supervisor mode. This is 19488 relevant only for the 'casa' instruction emitted for the LEON3 19489 processor. The default is '-mno-user-mode'. 19490 19491'-mno-faster-structs' 19492'-mfaster-structs' 19493 With '-mfaster-structs', the compiler assumes that structures 19494 should have 8-byte alignment. This enables the use of pairs of 19495 'ldd' and 'std' instructions for copies in structure assignment, in 19496 place of twice as many 'ld' and 'st' pairs. However, the use of 19497 this changed alignment directly violates the SPARC ABI. Thus, it's 19498 intended only for use on targets where the developer acknowledges 19499 that their resulting code is not directly in line with the rules of 19500 the ABI. 19501 19502'-mcpu=CPU_TYPE' 19503 Set the instruction set, register set, and instruction scheduling 19504 parameters for machine type CPU_TYPE. Supported values for 19505 CPU_TYPE are 'v7', 'cypress', 'v8', 'supersparc', 'hypersparc', 19506 'leon', 'leon3', 'sparclite', 'f930', 'f934', 'sparclite86x', 19507 'sparclet', 'tsc701', 'v9', 'ultrasparc', 'ultrasparc3', 'niagara', 19508 'niagara2', 'niagara3' and 'niagara4'. 19509 19510 Native Solaris and GNU/Linux toolchains also support the value 19511 'native', which selects the best architecture option for the host 19512 processor. '-mcpu=native' has no effect if GCC does not recognize 19513 the processor. 19514 19515 Default instruction scheduling parameters are used for values that 19516 select an architecture and not an implementation. These are 'v7', 19517 'v8', 'sparclite', 'sparclet', 'v9'. 19518 19519 Here is a list of each supported architecture and their supported 19520 implementations. 19521 19522 v7 19523 cypress 19524 19525 v8 19526 supersparc, hypersparc, leon, leon3 19527 19528 sparclite 19529 f930, f934, sparclite86x 19530 19531 sparclet 19532 tsc701 19533 19534 v9 19535 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4 19536 19537 By default (unless configured otherwise), GCC generates code for 19538 the V7 variant of the SPARC architecture. With '-mcpu=cypress', 19539 the compiler additionally optimizes it for the Cypress CY7C602 19540 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 19541 also appropriate for the older SPARCStation 1, 2, IPX etc. 19542 19543 With '-mcpu=v8', GCC generates code for the V8 variant of the SPARC 19544 architecture. The only difference from V7 code is that the 19545 compiler emits the integer multiply and integer divide instructions 19546 which exist in SPARC-V8 but not in SPARC-V7. With 19547 '-mcpu=supersparc', the compiler additionally optimizes it for the 19548 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 19549 series. 19550 19551 With '-mcpu=sparclite', GCC generates code for the SPARClite 19552 variant of the SPARC architecture. This adds the integer multiply, 19553 integer divide step and scan ('ffs') instructions which exist in 19554 SPARClite but not in SPARC-V7. With '-mcpu=f930', the compiler 19555 additionally optimizes it for the Fujitsu MB86930 chip, which is 19556 the original SPARClite, with no FPU. With '-mcpu=f934', the 19557 compiler additionally optimizes it for the Fujitsu MB86934 chip, 19558 which is the more recent SPARClite with FPU. 19559 19560 With '-mcpu=sparclet', GCC generates code for the SPARClet variant 19561 of the SPARC architecture. This adds the integer multiply, 19562 multiply/accumulate, integer divide step and scan ('ffs') 19563 instructions which exist in SPARClet but not in SPARC-V7. With 19564 '-mcpu=tsc701', the compiler additionally optimizes it for the 19565 TEMIC SPARClet chip. 19566 19567 With '-mcpu=v9', GCC generates code for the V9 variant of the SPARC 19568 architecture. This adds 64-bit integer and floating-point move 19569 instructions, 3 additional floating-point condition code registers 19570 and conditional move instructions. With '-mcpu=ultrasparc', the 19571 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 19572 chips. With '-mcpu=ultrasparc3', the compiler additionally 19573 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 19574 chips. With '-mcpu=niagara', the compiler additionally optimizes 19575 it for Sun UltraSPARC T1 chips. With '-mcpu=niagara2', the 19576 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 19577 With '-mcpu=niagara3', the compiler additionally optimizes it for 19578 Sun UltraSPARC T3 chips. With '-mcpu=niagara4', the compiler 19579 additionally optimizes it for Sun UltraSPARC T4 chips. 19580 19581'-mtune=CPU_TYPE' 19582 Set the instruction scheduling parameters for machine type 19583 CPU_TYPE, but do not set the instruction set or register set that 19584 the option '-mcpu=CPU_TYPE' does. 19585 19586 The same values for '-mcpu=CPU_TYPE' can be used for 19587 '-mtune=CPU_TYPE', but the only useful values are those that select 19588 a particular CPU implementation. Those are 'cypress', 19589 'supersparc', 'hypersparc', 'leon', 'leon3', 'f930', 'f934', 19590 'sparclite86x', 'tsc701', 'ultrasparc', 'ultrasparc3', 'niagara', 19591 'niagara2', 'niagara3' and 'niagara4'. With native Solaris and 19592 GNU/Linux toolchains, 'native' can also be used. 19593 19594'-mv8plus' 19595'-mno-v8plus' 19596 With '-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 19597 difference from the V8 ABI is that the global and out registers are 19598 considered 64 bits wide. This is enabled by default on Solaris in 19599 32-bit mode for all SPARC-V9 processors. 19600 19601'-mvis' 19602'-mno-vis' 19603 With '-mvis', GCC generates code that takes advantage of the 19604 UltraSPARC Visual Instruction Set extensions. The default is 19605 '-mno-vis'. 19606 19607'-mvis2' 19608'-mno-vis2' 19609 With '-mvis2', GCC generates code that takes advantage of version 19610 2.0 of the UltraSPARC Visual Instruction Set extensions. The 19611 default is '-mvis2' when targeting a cpu that supports such 19612 instructions, such as UltraSPARC-III and later. Setting '-mvis2' 19613 also sets '-mvis'. 19614 19615'-mvis3' 19616'-mno-vis3' 19617 With '-mvis3', GCC generates code that takes advantage of version 19618 3.0 of the UltraSPARC Visual Instruction Set extensions. The 19619 default is '-mvis3' when targeting a cpu that supports such 19620 instructions, such as niagara-3 and later. Setting '-mvis3' also 19621 sets '-mvis2' and '-mvis'. 19622 19623'-mcbcond' 19624'-mno-cbcond' 19625 With '-mcbcond', GCC generates code that takes advantage of 19626 compare-and-branch instructions, as defined in the Sparc 19627 Architecture 2011. The default is '-mcbcond' when targeting a cpu 19628 that supports such instructions, such as niagara-4 and later. 19629 19630'-mpopc' 19631'-mno-popc' 19632 With '-mpopc', GCC generates code that takes advantage of the 19633 UltraSPARC population count instruction. The default is '-mpopc' 19634 when targeting a cpu that supports such instructions, such as 19635 Niagara-2 and later. 19636 19637'-mfmaf' 19638'-mno-fmaf' 19639 With '-mfmaf', GCC generates code that takes advantage of the 19640 UltraSPARC Fused Multiply-Add Floating-point extensions. The 19641 default is '-mfmaf' when targeting a cpu that supports such 19642 instructions, such as Niagara-3 and later. 19643 19644'-mfix-at697f' 19645 Enable the documented workaround for the single erratum of the 19646 Atmel AT697F processor (which corresponds to erratum #13 of the 19647 AT697E processor). 19648 19649'-mfix-ut699' 19650 Enable the documented workarounds for the floating-point errata and 19651 the data cache nullify errata of the UT699 processor. 19652 19653 These '-m' options are supported in addition to the above on SPARC-V9 19654processors in 64-bit environments: 19655 19656'-m32' 19657'-m64' 19658 Generate code for a 32-bit or 64-bit environment. The 32-bit 19659 environment sets int, long and pointer to 32 bits. The 64-bit 19660 environment sets int to 32 bits and long and pointer to 64 bits. 19661 19662'-mcmodel=WHICH' 19663 Set the code model to one of 19664 19665 'medlow' 19666 The Medium/Low code model: 64-bit addresses, programs must be 19667 linked in the low 32 bits of memory. Programs can be 19668 statically or dynamically linked. 19669 19670 'medmid' 19671 The Medium/Middle code model: 64-bit addresses, programs must 19672 be linked in the low 44 bits of memory, the text and data 19673 segments must be less than 2GB in size and the data segment 19674 must be located within 2GB of the text segment. 19675 19676 'medany' 19677 The Medium/Anywhere code model: 64-bit addresses, programs may 19678 be linked anywhere in memory, the text and data segments must 19679 be less than 2GB in size and the data segment must be located 19680 within 2GB of the text segment. 19681 19682 'embmedany' 19683 The Medium/Anywhere code model for embedded systems: 64-bit 19684 addresses, the text and data segments must be less than 2GB in 19685 size, both starting anywhere in memory (determined at link 19686 time). The global register %g4 points to the base of the data 19687 segment. Programs are statically linked and PIC is not 19688 supported. 19689 19690'-mmemory-model=MEM-MODEL' 19691 Set the memory model in force on the processor to one of 19692 19693 'default' 19694 The default memory model for the processor and operating 19695 system. 19696 19697 'rmo' 19698 Relaxed Memory Order 19699 19700 'pso' 19701 Partial Store Order 19702 19703 'tso' 19704 Total Store Order 19705 19706 'sc' 19707 Sequential Consistency 19708 19709 These memory models are formally defined in Appendix D of the Sparc 19710 V9 architecture manual, as set in the processor's 'PSTATE.MM' 19711 field. 19712 19713'-mstack-bias' 19714'-mno-stack-bias' 19715 With '-mstack-bias', GCC assumes that the stack pointer, and frame 19716 pointer if present, are offset by -2047 which must be added back 19717 when making stack frame references. This is the default in 64-bit 19718 mode. Otherwise, assume no such offset is present. 19719 19720 19721File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 19722 197233.17.45 SPU Options 19724------------------- 19725 19726These '-m' options are supported on the SPU: 19727 19728'-mwarn-reloc' 19729'-merror-reloc' 19730 19731 The loader for SPU does not handle dynamic relocations. By 19732 default, GCC gives an error when it generates code that requires a 19733 dynamic relocation. '-mno-error-reloc' disables the error, 19734 '-mwarn-reloc' generates a warning instead. 19735 19736'-msafe-dma' 19737'-munsafe-dma' 19738 19739 Instructions that initiate or test completion of DMA must not be 19740 reordered with respect to loads and stores of the memory that is 19741 being accessed. With '-munsafe-dma' you must use the 'volatile' 19742 keyword to protect memory accesses, but that can lead to 19743 inefficient code in places where the memory is known to not change. 19744 Rather than mark the memory as volatile, you can use '-msafe-dma' 19745 to tell the compiler to treat the DMA instructions as potentially 19746 affecting all memory. 19747 19748'-mbranch-hints' 19749 19750 By default, GCC generates a branch hint instruction to avoid 19751 pipeline stalls for always-taken or probably-taken branches. A 19752 hint is not generated closer than 8 instructions away from its 19753 branch. There is little reason to disable them, except for 19754 debugging purposes, or to make an object a little bit smaller. 19755 19756'-msmall-mem' 19757'-mlarge-mem' 19758 19759 By default, GCC generates code assuming that addresses are never 19760 larger than 18 bits. With '-mlarge-mem' code is generated that 19761 assumes a full 32-bit address. 19762 19763'-mstdmain' 19764 19765 By default, GCC links against startup code that assumes the 19766 SPU-style main function interface (which has an unconventional 19767 parameter list). With '-mstdmain', GCC links your program against 19768 startup code that assumes a C99-style interface to 'main', 19769 including a local copy of 'argv' strings. 19770 19771'-mfixed-range=REGISTER-RANGE' 19772 Generate code treating the given register range as fixed registers. 19773 A fixed register is one that the register allocator cannot use. 19774 This is useful when compiling kernel code. A register range is 19775 specified as two registers separated by a dash. Multiple register 19776 ranges can be specified separated by a comma. 19777 19778'-mea32' 19779'-mea64' 19780 Compile code assuming that pointers to the PPU address space 19781 accessed via the '__ea' named address space qualifier are either 32 19782 or 64 bits wide. The default is 32 bits. As this is an 19783 ABI-changing option, all object code in an executable must be 19784 compiled with the same setting. 19785 19786'-maddress-space-conversion' 19787'-mno-address-space-conversion' 19788 Allow/disallow treating the '__ea' address space as superset of the 19789 generic address space. This enables explicit type casts between 19790 '__ea' and generic pointer as well as implicit conversions of 19791 generic pointers to '__ea' pointers. The default is to allow 19792 address space pointer conversions. 19793 19794'-mcache-size=CACHE-SIZE' 19795 This option controls the version of libgcc that the compiler links 19796 to an executable and selects a software-managed cache for accessing 19797 variables in the '__ea' address space with a particular cache size. 19798 Possible options for CACHE-SIZE are '8', '16', '32', '64' and 19799 '128'. The default cache size is 64KB. 19800 19801'-matomic-updates' 19802'-mno-atomic-updates' 19803 This option controls the version of libgcc that the compiler links 19804 to an executable and selects whether atomic updates to the 19805 software-managed cache of PPU-side variables are used. If you use 19806 atomic updates, changes to a PPU variable from SPU code using the 19807 '__ea' named address space qualifier do not interfere with changes 19808 to other PPU variables residing in the same cache line from PPU 19809 code. If you do not use atomic updates, such interference may 19810 occur; however, writing back cache lines is more efficient. The 19811 default behavior is to use atomic updates. 19812 19813'-mdual-nops' 19814'-mdual-nops=N' 19815 By default, GCC inserts nops to increase dual issue when it expects 19816 it to increase performance. N can be a value from 0 to 10. A 19817 smaller N inserts fewer nops. 10 is the default, 0 is the same as 19818 '-mno-dual-nops'. Disabled with '-Os'. 19819 19820'-mhint-max-nops=N' 19821 Maximum number of nops to insert for a branch hint. A branch hint 19822 must be at least 8 instructions away from the branch it is 19823 affecting. GCC inserts up to N nops to enforce this, otherwise it 19824 does not generate the branch hint. 19825 19826'-mhint-max-distance=N' 19827 The encoding of the branch hint instruction limits the hint to be 19828 within 256 instructions of the branch it is affecting. By default, 19829 GCC makes sure it is within 125. 19830 19831'-msafe-hints' 19832 Work around a hardware bug that causes the SPU to stall 19833 indefinitely. By default, GCC inserts the 'hbrp' instruction to 19834 make sure this stall won't happen. 19835 19836 19837File: gcc.info, Node: System V Options, Next: TILE-Gx Options, Prev: SPU Options, Up: Submodel Options 19838 198393.17.46 Options for System V 19840---------------------------- 19841 19842These additional options are available on System V Release 4 for 19843compatibility with other compilers on those systems: 19844 19845'-G' 19846 Create a shared object. It is recommended that '-symbolic' or 19847 '-shared' be used instead. 19848 19849'-Qy' 19850 Identify the versions of each tool used by the compiler, in a 19851 '.ident' assembler directive in the output. 19852 19853'-Qn' 19854 Refrain from adding '.ident' directives to the output file (this is 19855 the default). 19856 19857'-YP,DIRS' 19858 Search the directories DIRS, and no others, for libraries specified 19859 with '-l'. 19860 19861'-Ym,DIR' 19862 Look in the directory DIR to find the M4 preprocessor. The 19863 assembler uses this option. 19864 19865 19866File: gcc.info, Node: TILE-Gx Options, Next: TILEPro Options, Prev: System V Options, Up: Submodel Options 19867 198683.17.47 TILE-Gx Options 19869----------------------- 19870 19871These '-m' options are supported on the TILE-Gx: 19872 19873'-mcmodel=small' 19874 Generate code for the small model. The distance for direct calls 19875 is limited to 500M in either direction. PC-relative addresses are 19876 32 bits. Absolute addresses support the full address range. 19877 19878'-mcmodel=large' 19879 Generate code for the large model. There is no limitation on call 19880 distance, pc-relative addresses, or absolute addresses. 19881 19882'-mcpu=NAME' 19883 Selects the type of CPU to be targeted. Currently the only 19884 supported type is 'tilegx'. 19885 19886'-m32' 19887'-m64' 19888 Generate code for a 32-bit or 64-bit environment. The 32-bit 19889 environment sets int, long, and pointer to 32 bits. The 64-bit 19890 environment sets int to 32 bits and long and pointer to 64 bits. 19891 19892'-mbig-endian' 19893'-mlittle-endian' 19894 Generate code in big/little endian mode, respectively. 19895 19896 19897File: gcc.info, Node: TILEPro Options, Next: V850 Options, Prev: TILE-Gx Options, Up: Submodel Options 19898 198993.17.48 TILEPro Options 19900----------------------- 19901 19902These '-m' options are supported on the TILEPro: 19903 19904'-mcpu=NAME' 19905 Selects the type of CPU to be targeted. Currently the only 19906 supported type is 'tilepro'. 19907 19908'-m32' 19909 Generate code for a 32-bit environment, which sets int, long, and 19910 pointer to 32 bits. This is the only supported behavior so the 19911 flag is essentially ignored. 19912 19913 19914File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TILEPro Options, Up: Submodel Options 19915 199163.17.49 V850 Options 19917-------------------- 19918 19919These '-m' options are defined for V850 implementations: 19920 19921'-mlong-calls' 19922'-mno-long-calls' 19923 Treat all calls as being far away (near). If calls are assumed to 19924 be far away, the compiler always loads the function's address into 19925 a register, and calls indirect through the pointer. 19926 19927'-mno-ep' 19928'-mep' 19929 Do not optimize (do optimize) basic blocks that use the same index 19930 pointer 4 or more times to copy pointer into the 'ep' register, and 19931 use the shorter 'sld' and 'sst' instructions. The '-mep' option is 19932 on by default if you optimize. 19933 19934'-mno-prolog-function' 19935'-mprolog-function' 19936 Do not use (do use) external functions to save and restore 19937 registers at the prologue and epilogue of a function. The external 19938 functions are slower, but use less code space if more than one 19939 function saves the same number of registers. The 19940 '-mprolog-function' option is on by default if you optimize. 19941 19942'-mspace' 19943 Try to make the code as small as possible. At present, this just 19944 turns on the '-mep' and '-mprolog-function' options. 19945 19946'-mtda=N' 19947 Put static or global variables whose size is N bytes or less into 19948 the tiny data area that register 'ep' points to. The tiny data 19949 area can hold up to 256 bytes in total (128 bytes for byte 19950 references). 19951 19952'-msda=N' 19953 Put static or global variables whose size is N bytes or less into 19954 the small data area that register 'gp' points to. The small data 19955 area can hold up to 64 kilobytes. 19956 19957'-mzda=N' 19958 Put static or global variables whose size is N bytes or less into 19959 the first 32 kilobytes of memory. 19960 19961'-mv850' 19962 Specify that the target processor is the V850. 19963 19964'-mv850e3v5' 19965 Specify that the target processor is the V850E3V5. The 19966 preprocessor constant '__v850e3v5__' is defined if this option is 19967 used. 19968 19969'-mv850e2v4' 19970 Specify that the target processor is the V850E3V5. This is an 19971 alias for the '-mv850e3v5' option. 19972 19973'-mv850e2v3' 19974 Specify that the target processor is the V850E2V3. The 19975 preprocessor constant '__v850e2v3__' is defined if this option is 19976 used. 19977 19978'-mv850e2' 19979 Specify that the target processor is the V850E2. The preprocessor 19980 constant '__v850e2__' is defined if this option is used. 19981 19982'-mv850e1' 19983 Specify that the target processor is the V850E1. The preprocessor 19984 constants '__v850e1__' and '__v850e__' are defined if this option 19985 is used. 19986 19987'-mv850es' 19988 Specify that the target processor is the V850ES. This is an alias 19989 for the '-mv850e1' option. 19990 19991'-mv850e' 19992 Specify that the target processor is the V850E. The preprocessor 19993 constant '__v850e__' is defined if this option is used. 19994 19995 If neither '-mv850' nor '-mv850e' nor '-mv850e1' nor '-mv850e2' nor 19996 '-mv850e2v3' nor '-mv850e3v5' are defined then a default target 19997 processor is chosen and the relevant '__v850*__' preprocessor 19998 constant is defined. 19999 20000 The preprocessor constants '__v850' and '__v851__' are always 20001 defined, regardless of which processor variant is the target. 20002 20003'-mdisable-callt' 20004'-mno-disable-callt' 20005 This option suppresses generation of the 'CALLT' instruction for 20006 the v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the 20007 v850 architecture. 20008 20009 This option is enabled by default when the RH850 ABI is in use (see 20010 '-mrh850-abi'), and disabled by default when the GCC ABI is in use. 20011 If 'CALLT' instructions are being generated then the C preprocessor 20012 symbol '__V850_CALLT__' will be defined. 20013 20014'-mrelax' 20015'-mno-relax' 20016 Pass on (or do not pass on) the '-mrelax' command line option to 20017 the assembler. 20018 20019'-mlong-jumps' 20020'-mno-long-jumps' 20021 Disable (or re-enable) the generation of PC-relative jump 20022 instructions. 20023 20024'-msoft-float' 20025'-mhard-float' 20026 Disable (or re-enable) the generation of hardware floating point 20027 instructions. This option is only significant when the target 20028 architecture is 'V850E2V3' or higher. If hardware floating point 20029 instructions are being generated then the C preprocessor symbol 20030 '__FPU_OK__' will be defined, otherwise the symbol '__NO_FPU__' 20031 will be defined. 20032 20033'-mloop' 20034 Enables the use of the e3v5 LOOP instruction. The use of this 20035 instruction is not enabled by default when the e3v5 architecture is 20036 selected because its use is still experimental. 20037 20038'-mrh850-abi' 20039'-mghs' 20040 Enables support for the RH850 version of the V850 ABI. This is the 20041 default. With this version of the ABI the following rules apply: 20042 20043 * Integer sized structures and unions are returned via a memory 20044 pointer rather than a register. 20045 20046 * Large structures and unions (more than 8 bytes in size) are 20047 passed by value. 20048 20049 * Functions are aligned to 16-bit boundaries. 20050 20051 * The '-m8byte-align' command line option is supported. 20052 20053 * The '-mdisable-callt' command line option is enabled by 20054 default. The '-mno-disable-callt' command line option is not 20055 supported. 20056 20057 When this version of the ABI is enabled the C preprocessor symbol 20058 '__V850_RH850_ABI__' is defined. 20059 20060'-mgcc-abi' 20061 Enables support for the old GCC version of the V850 ABI. With this 20062 version of the ABI the following rules apply: 20063 20064 * Integer sized structures and unions are returned in register 20065 'r10'. 20066 20067 * Large structures and unions (more than 8 bytes in size) are 20068 passed by reference. 20069 20070 * Functions are aligned to 32-bit boundaries, unless optimizing 20071 for size. 20072 20073 * The '-m8byte-align' command line option is not supported. 20074 20075 * The '-mdisable-callt' command line option is supported but not 20076 enabled by default. 20077 20078 When this version of the ABI is enabled the C preprocessor symbol 20079 '__V850_GCC_ABI__' is defined. 20080 20081'-m8byte-align' 20082'-mno-8byte-align' 20083 Enables support for 'doubles' and 'long long' types to be aligned 20084 on 8-byte boundaries. The default is to restrict the alignment of 20085 all objects to at most 4-bytes. When '-m8byte-align' is in effect 20086 the C preprocessor symbol '__V850_8BYTE_ALIGN__' will be defined. 20087 20088'-mbig-switch' 20089 Generate code suitable for big switch tables. Use this option only 20090 if the assembler/linker complain about out of range branches within 20091 a switch table. 20092 20093'-mapp-regs' 20094 This option causes r2 and r5 to be used in the code generated by 20095 the compiler. This setting is the default. 20096 20097'-mno-app-regs' 20098 This option causes r2 and r5 to be treated as fixed registers. 20099 20100 20101File: gcc.info, Node: VAX Options, Next: VMS Options, Prev: V850 Options, Up: Submodel Options 20102 201033.17.50 VAX Options 20104------------------- 20105 20106These '-m' options are defined for the VAX: 20107 20108'-munix' 20109 Do not output certain jump instructions ('aobleq' and so on) that 20110 the Unix assembler for the VAX cannot handle across long ranges. 20111 20112'-mgnu' 20113 Do output those jump instructions, on the assumption that the GNU 20114 assembler is being used. 20115 20116'-mg' 20117 Output code for G-format floating-point numbers instead of 20118 D-format. 20119 20120 20121File: gcc.info, Node: VMS Options, Next: VxWorks Options, Prev: VAX Options, Up: Submodel Options 20122 201233.17.51 VMS Options 20124------------------- 20125 20126These '-m' options are defined for the VMS implementations: 20127 20128'-mvms-return-codes' 20129 Return VMS condition codes from 'main'. The default is to return 20130 POSIX-style condition (e.g. error) codes. 20131 20132'-mdebug-main=PREFIX' 20133 Flag the first routine whose name starts with PREFIX as the main 20134 routine for the debugger. 20135 20136'-mmalloc64' 20137 Default to 64-bit memory allocation routines. 20138 20139'-mpointer-size=SIZE' 20140 Set the default size of pointers. Possible options for SIZE are 20141 '32' or 'short' for 32 bit pointers, '64' or 'long' for 64 bit 20142 pointers, and 'no' for supporting only 32 bit pointers. The later 20143 option disables 'pragma pointer_size'. 20144 20145 20146File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VMS Options, Up: Submodel Options 20147 201483.17.52 VxWorks Options 20149----------------------- 20150 20151The options in this section are defined for all VxWorks targets. 20152Options specific to the target hardware are listed with the other 20153options for that target. 20154 20155'-mrtp' 20156 GCC can generate code for both VxWorks kernels and real time 20157 processes (RTPs). This option switches from the former to the 20158 latter. It also defines the preprocessor macro '__RTP__'. 20159 20160'-non-static' 20161 Link an RTP executable against shared libraries rather than static 20162 libraries. The options '-static' and '-shared' can also be used 20163 for RTPs (*note Link Options::); '-static' is the default. 20164 20165'-Bstatic' 20166'-Bdynamic' 20167 These options are passed down to the linker. They are defined for 20168 compatibility with Diab. 20169 20170'-Xbind-lazy' 20171 Enable lazy binding of function calls. This option is equivalent 20172 to '-Wl,-z,now' and is defined for compatibility with Diab. 20173 20174'-Xbind-now' 20175 Disable lazy binding of function calls. This option is the default 20176 and is defined for compatibility with Diab. 20177 20178 20179File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 20180 201813.17.53 x86-64 Options 20182---------------------- 20183 20184These are listed under *Note i386 and x86-64 Options::. 20185 20186 20187File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 20188 201893.17.54 Xstormy16 Options 20190------------------------- 20191 20192These options are defined for Xstormy16: 20193 20194'-msim' 20195 Choose startup files and linker script suitable for the simulator. 20196 20197 20198File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 20199 202003.17.55 Xtensa Options 20201---------------------- 20202 20203These options are supported for Xtensa targets: 20204 20205'-mconst16' 20206'-mno-const16' 20207 Enable or disable use of 'CONST16' instructions for loading 20208 constant values. The 'CONST16' instruction is currently not a 20209 standard option from Tensilica. When enabled, 'CONST16' 20210 instructions are always used in place of the standard 'L32R' 20211 instructions. The use of 'CONST16' is enabled by default only if 20212 the 'L32R' instruction is not available. 20213 20214'-mfused-madd' 20215'-mno-fused-madd' 20216 Enable or disable use of fused multiply/add and multiply/subtract 20217 instructions in the floating-point option. This has no effect if 20218 the floating-point option is not also enabled. Disabling fused 20219 multiply/add and multiply/subtract instructions forces the compiler 20220 to use separate instructions for the multiply and add/subtract 20221 operations. This may be desirable in some cases where strict IEEE 20222 754-compliant results are required: the fused multiply add/subtract 20223 instructions do not round the intermediate result, thereby 20224 producing results with _more_ bits of precision than specified by 20225 the IEEE standard. Disabling fused multiply add/subtract 20226 instructions also ensures that the program output is not sensitive 20227 to the compiler's ability to combine multiply and add/subtract 20228 operations. 20229 20230'-mserialize-volatile' 20231'-mno-serialize-volatile' 20232 When this option is enabled, GCC inserts 'MEMW' instructions before 20233 'volatile' memory references to guarantee sequential consistency. 20234 The default is '-mserialize-volatile'. Use 20235 '-mno-serialize-volatile' to omit the 'MEMW' instructions. 20236 20237'-mforce-no-pic' 20238 For targets, like GNU/Linux, where all user-mode Xtensa code must 20239 be position-independent code (PIC), this option disables PIC for 20240 compiling kernel code. 20241 20242'-mtext-section-literals' 20243'-mno-text-section-literals' 20244 Control the treatment of literal pools. The default is 20245 '-mno-text-section-literals', which places literals in a separate 20246 section in the output file. This allows the literal pool to be 20247 placed in a data RAM/ROM, and it also allows the linker to combine 20248 literal pools from separate object files to remove redundant 20249 literals and improve code size. With '-mtext-section-literals', 20250 the literals are interspersed in the text section in order to keep 20251 them as close as possible to their references. This may be 20252 necessary for large assembly files. 20253 20254'-mtarget-align' 20255'-mno-target-align' 20256 When this option is enabled, GCC instructs the assembler to 20257 automatically align instructions to reduce branch penalties at the 20258 expense of some code density. The assembler attempts to widen 20259 density instructions to align branch targets and the instructions 20260 following call instructions. If there are not enough preceding 20261 safe density instructions to align a target, no widening is 20262 performed. The default is '-mtarget-align'. These options do not 20263 affect the treatment of auto-aligned instructions like 'LOOP', 20264 which the assembler always aligns, either by widening density 20265 instructions or by inserting NOP instructions. 20266 20267'-mlongcalls' 20268'-mno-longcalls' 20269 When this option is enabled, GCC instructs the assembler to 20270 translate direct calls to indirect calls unless it can determine 20271 that the target of a direct call is in the range allowed by the 20272 call instruction. This translation typically occurs for calls to 20273 functions in other source files. Specifically, the assembler 20274 translates a direct 'CALL' instruction into an 'L32R' followed by a 20275 'CALLX' instruction. The default is '-mno-longcalls'. This option 20276 should be used in programs where the call target can potentially be 20277 out of range. This option is implemented in the assembler, not the 20278 compiler, so the assembly code generated by GCC still shows direct 20279 call instructions--look at the disassembled object code to see the 20280 actual instructions. Note that the assembler uses an indirect call 20281 for every cross-file call, not just those that really are out of 20282 range. 20283 20284 20285File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 20286 202873.17.56 zSeries Options 20288----------------------- 20289 20290These are listed under *Note S/390 and zSeries Options::. 20291 20292 20293File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 20294 202953.18 Options for Code Generation Conventions 20296============================================ 20297 20298These machine-independent options control the interface conventions used 20299in code generation. 20300 20301 Most of them have both positive and negative forms; the negative form 20302of '-ffoo' is '-fno-foo'. In the table below, only one of the forms is 20303listed--the one that is not the default. You can figure out the other 20304form by either removing 'no-' or adding it. 20305 20306'-fbounds-check' 20307 For front ends that support it, generate additional code to check 20308 that indices used to access arrays are within the declared range. 20309 This is currently only supported by the Java and Fortran front 20310 ends, where this option defaults to true and false respectively. 20311 20312'-fstack-reuse=REUSE-LEVEL' 20313 This option controls stack space reuse for user declared local/auto 20314 variables and compiler generated temporaries. REUSE_LEVEL can be 20315 'all', 'named_vars', or 'none'. 'all' enables stack reuse for all 20316 local variables and temporaries, 'named_vars' enables the reuse 20317 only for user defined local variables with names, and 'none' 20318 disables stack reuse completely. The default value is 'all'. The 20319 option is needed when the program extends the lifetime of a scoped 20320 local variable or a compiler generated temporary beyond the end 20321 point defined by the language. When a lifetime of a variable ends, 20322 and if the variable lives in memory, the optimizing compiler has 20323 the freedom to reuse its stack space with other temporaries or 20324 scoped local variables whose live range does not overlap with it. 20325 Legacy code extending local lifetime will likely to break with the 20326 stack reuse optimization. 20327 20328 For example, 20329 20330 int *p; 20331 { 20332 int local1; 20333 20334 p = &local1; 20335 local1 = 10; 20336 .... 20337 } 20338 { 20339 int local2; 20340 local2 = 20; 20341 ... 20342 } 20343 20344 if (*p == 10) // out of scope use of local1 20345 { 20346 20347 } 20348 20349 Another example: 20350 20351 struct A 20352 { 20353 A(int k) : i(k), j(k) { } 20354 int i; 20355 int j; 20356 }; 20357 20358 A *ap; 20359 20360 void foo(const A& ar) 20361 { 20362 ap = &ar; 20363 } 20364 20365 void bar() 20366 { 20367 foo(A(10)); // temp object's lifetime ends when foo returns 20368 20369 { 20370 A a(20); 20371 .... 20372 } 20373 ap->i+= 10; // ap references out of scope temp whose space 20374 // is reused with a. What is the value of ap->i? 20375 } 20376 20377 20378 The lifetime of a compiler generated temporary is well defined by 20379 the C++ standard. When a lifetime of a temporary ends, and if the 20380 temporary lives in memory, the optimizing compiler has the freedom 20381 to reuse its stack space with other temporaries or scoped local 20382 variables whose live range does not overlap with it. However some 20383 of the legacy code relies on the behavior of older compilers in 20384 which temporaries' stack space is not reused, the aggressive stack 20385 reuse can lead to runtime errors. This option is used to control 20386 the temporary stack reuse optimization. 20387 20388'-ftrapv' 20389 This option generates traps for signed overflow on addition, 20390 subtraction, multiplication operations. 20391 20392'-fwrapv' 20393 This option instructs the compiler to assume that signed arithmetic 20394 overflow of addition, subtraction and multiplication wraps around 20395 using twos-complement representation. This flag enables some 20396 optimizations and disables others. This option is enabled by 20397 default for the Java front end, as required by the Java language 20398 specification. 20399 20400'-fexceptions' 20401 Enable exception handling. Generates extra code needed to 20402 propagate exceptions. For some targets, this implies GCC generates 20403 frame unwind information for all functions, which can produce 20404 significant data size overhead, although it does not affect 20405 execution. If you do not specify this option, GCC enables it by 20406 default for languages like C++ that normally require exception 20407 handling, and disables it for languages like C that do not normally 20408 require it. However, you may need to enable this option when 20409 compiling C code that needs to interoperate properly with exception 20410 handlers written in C++. You may also wish to disable this option 20411 if you are compiling older C++ programs that don't use exception 20412 handling. 20413 20414'-fnon-call-exceptions' 20415 Generate code that allows trapping instructions to throw 20416 exceptions. Note that this requires platform-specific runtime 20417 support that does not exist everywhere. Moreover, it only allows 20418 _trapping_ instructions to throw exceptions, i.e. memory references 20419 or floating-point instructions. It does not allow exceptions to be 20420 thrown from arbitrary signal handlers such as 'SIGALRM'. 20421 20422'-fdelete-dead-exceptions' 20423 Consider that instructions that may throw exceptions but don't 20424 otherwise contribute to the execution of the program can be 20425 optimized away. This option is enabled by default for the Ada 20426 front end, as permitted by the Ada language specification. 20427 Optimization passes that cause dead exceptions to be removed are 20428 enabled independently at different optimization levels. 20429 20430'-funwind-tables' 20431 Similar to '-fexceptions', except that it just generates any needed 20432 static data, but does not affect the generated code in any other 20433 way. You normally do not need to enable this option; instead, a 20434 language processor that needs this handling enables it on your 20435 behalf. 20436 20437'-fasynchronous-unwind-tables' 20438 Generate unwind table in DWARF 2 format, if supported by target 20439 machine. The table is exact at each instruction boundary, so it 20440 can be used for stack unwinding from asynchronous events (such as 20441 debugger or garbage collector). 20442 20443'-fno-gnu-unique' 20444 On systems with recent GNU assembler and C library, the C++ 20445 compiler uses the 'STB_GNU_UNIQUE' binding to make sure that 20446 definitions of template static data members and static local 20447 variables in inline functions are unique even in the presence of 20448 'RTLD_LOCAL'; this is necessary to avoid problems with a library 20449 used by two different 'RTLD_LOCAL' plugins depending on a 20450 definition in one of them and therefore disagreeing with the other 20451 one about the binding of the symbol. But this causes 'dlclose' to 20452 be ignored for affected DSOs; if your program relies on 20453 reinitialization of a DSO via 'dlclose' and 'dlopen', you can use 20454 '-fno-gnu-unique'. 20455 20456'-fpcc-struct-return' 20457 Return "short" 'struct' and 'union' values in memory like longer 20458 ones, rather than in registers. This convention is less efficient, 20459 but it has the advantage of allowing intercallability between 20460 GCC-compiled files and files compiled with other compilers, 20461 particularly the Portable C Compiler (pcc). 20462 20463 The precise convention for returning structures in memory depends 20464 on the target configuration macros. 20465 20466 Short structures and unions are those whose size and alignment 20467 match that of some integer type. 20468 20469 *Warning:* code compiled with the '-fpcc-struct-return' switch is 20470 not binary compatible with code compiled with the 20471 '-freg-struct-return' switch. Use it to conform to a non-default 20472 application binary interface. 20473 20474'-freg-struct-return' 20475 Return 'struct' and 'union' values in registers when possible. 20476 This is more efficient for small structures than 20477 '-fpcc-struct-return'. 20478 20479 If you specify neither '-fpcc-struct-return' nor 20480 '-freg-struct-return', GCC defaults to whichever convention is 20481 standard for the target. If there is no standard convention, GCC 20482 defaults to '-fpcc-struct-return', except on targets where GCC is 20483 the principal compiler. In those cases, we can choose the 20484 standard, and we chose the more efficient register return 20485 alternative. 20486 20487 *Warning:* code compiled with the '-freg-struct-return' switch is 20488 not binary compatible with code compiled with the 20489 '-fpcc-struct-return' switch. Use it to conform to a non-default 20490 application binary interface. 20491 20492'-fshort-enums' 20493 Allocate to an 'enum' type only as many bytes as it needs for the 20494 declared range of possible values. Specifically, the 'enum' type 20495 is equivalent to the smallest integer type that has enough room. 20496 20497 *Warning:* the '-fshort-enums' switch causes GCC to generate code 20498 that is not binary compatible with code generated without that 20499 switch. Use it to conform to a non-default application binary 20500 interface. 20501 20502'-fshort-double' 20503 Use the same size for 'double' as for 'float'. 20504 20505 *Warning:* the '-fshort-double' switch causes GCC to generate code 20506 that is not binary compatible with code generated without that 20507 switch. Use it to conform to a non-default application binary 20508 interface. 20509 20510'-fshort-wchar' 20511 Override the underlying type for 'wchar_t' to be 'short unsigned 20512 int' instead of the default for the target. This option is useful 20513 for building programs to run under WINE. 20514 20515 *Warning:* the '-fshort-wchar' switch causes GCC to generate code 20516 that is not binary compatible with code generated without that 20517 switch. Use it to conform to a non-default application binary 20518 interface. 20519 20520'-fno-common' 20521 In C code, controls the placement of uninitialized global 20522 variables. Unix C compilers have traditionally permitted multiple 20523 definitions of such variables in different compilation units by 20524 placing the variables in a common block. This is the behavior 20525 specified by '-fcommon', and is the default for GCC on most 20526 targets. On the other hand, this behavior is not required by ISO 20527 C, and on some targets may carry a speed or code size penalty on 20528 variable references. The '-fno-common' option specifies that the 20529 compiler should place uninitialized global variables in the data 20530 section of the object file, rather than generating them as common 20531 blocks. This has the effect that if the same variable is declared 20532 (without 'extern') in two different compilations, you get a 20533 multiple-definition error when you link them. In this case, you 20534 must compile with '-fcommon' instead. Compiling with '-fno-common' 20535 is useful on targets for which it provides better performance, or 20536 if you wish to verify that the program will work on other systems 20537 that always treat uninitialized variable declarations this way. 20538 20539'-fno-ident' 20540 Ignore the '#ident' directive. 20541 20542'-finhibit-size-directive' 20543 Don't output a '.size' assembler directive, or anything else that 20544 would cause trouble if the function is split in the middle, and the 20545 two halves are placed at locations far apart in memory. This 20546 option is used when compiling 'crtstuff.c'; you should not need to 20547 use it for anything else. 20548 20549'-fverbose-asm' 20550 Put extra commentary information in the generated assembly code to 20551 make it more readable. This option is generally only of use to 20552 those who actually need to read the generated assembly code 20553 (perhaps while debugging the compiler itself). 20554 20555 '-fno-verbose-asm', the default, causes the extra information to be 20556 omitted and is useful when comparing two assembler files. 20557 20558'-frecord-gcc-switches' 20559 This switch causes the command line used to invoke the compiler to 20560 be recorded into the object file that is being created. This 20561 switch is only implemented on some targets and the exact format of 20562 the recording is target and binary file format dependent, but it 20563 usually takes the form of a section containing ASCII text. This 20564 switch is related to the '-fverbose-asm' switch, but that switch 20565 only records information in the assembler output file as comments, 20566 so it never reaches the object file. See also 20567 '-grecord-gcc-switches' for another way of storing compiler options 20568 into the object file. 20569 20570'-fpic' 20571 Generate position-independent code (PIC) suitable for use in a 20572 shared library, if supported for the target machine. Such code 20573 accesses all constant addresses through a global offset table 20574 (GOT). The dynamic loader resolves the GOT entries when the 20575 program starts (the dynamic loader is not part of GCC; it is part 20576 of the operating system). If the GOT size for the linked 20577 executable exceeds a machine-specific maximum size, you get an 20578 error message from the linker indicating that '-fpic' does not 20579 work; in that case, recompile with '-fPIC' instead. (These 20580 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 20581 386 has no such limit.) 20582 20583 Position-independent code requires special support, and therefore 20584 works only on certain machines. For the 386, GCC supports PIC for 20585 System V but not for the Sun 386i. Code generated for the IBM 20586 RS/6000 is always position-independent. 20587 20588 When this flag is set, the macros '__pic__' and '__PIC__' are 20589 defined to 1. 20590 20591'-fPIC' 20592 If supported for the target machine, emit position-independent 20593 code, suitable for dynamic linking and avoiding any limit on the 20594 size of the global offset table. This option makes a difference on 20595 the m68k, PowerPC and SPARC. 20596 20597 Position-independent code requires special support, and therefore 20598 works only on certain machines. 20599 20600 When this flag is set, the macros '__pic__' and '__PIC__' are 20601 defined to 2. 20602 20603'-fpie' 20604'-fPIE' 20605 These options are similar to '-fpic' and '-fPIC', but generated 20606 position independent code can be only linked into executables. 20607 Usually these options are used when '-pie' GCC option is used 20608 during linking. 20609 20610 '-fpie' and '-fPIE' both define the macros '__pie__' and '__PIE__'. 20611 The macros have the value 1 for '-fpie' and 2 for '-fPIE'. 20612 20613'-fno-jump-tables' 20614 Do not use jump tables for switch statements even where it would be 20615 more efficient than other code generation strategies. This option 20616 is of use in conjunction with '-fpic' or '-fPIC' for building code 20617 that forms part of a dynamic linker and cannot reference the 20618 address of a jump table. On some targets, jump tables do not 20619 require a GOT and this option is not needed. 20620 20621'-ffixed-REG' 20622 Treat the register named REG as a fixed register; generated code 20623 should never refer to it (except perhaps as a stack pointer, frame 20624 pointer or in some other fixed role). 20625 20626 REG must be the name of a register. The register names accepted 20627 are machine-specific and are defined in the 'REGISTER_NAMES' macro 20628 in the machine description macro file. 20629 20630 This flag does not have a negative form, because it specifies a 20631 three-way choice. 20632 20633'-fcall-used-REG' 20634 Treat the register named REG as an allocable register that is 20635 clobbered by function calls. It may be allocated for temporaries 20636 or variables that do not live across a call. Functions compiled 20637 this way do not save and restore the register REG. 20638 20639 It is an error to use this flag with the frame pointer or stack 20640 pointer. Use of this flag for other registers that have fixed 20641 pervasive roles in the machine's execution model produces 20642 disastrous results. 20643 20644 This flag does not have a negative form, because it specifies a 20645 three-way choice. 20646 20647'-fcall-saved-REG' 20648 Treat the register named REG as an allocable register saved by 20649 functions. It may be allocated even for temporaries or variables 20650 that live across a call. Functions compiled this way save and 20651 restore the register REG if they use it. 20652 20653 It is an error to use this flag with the frame pointer or stack 20654 pointer. Use of this flag for other registers that have fixed 20655 pervasive roles in the machine's execution model produces 20656 disastrous results. 20657 20658 A different sort of disaster results from the use of this flag for 20659 a register in which function values may be returned. 20660 20661 This flag does not have a negative form, because it specifies a 20662 three-way choice. 20663 20664'-fpack-struct[=N]' 20665 Without a value specified, pack all structure members together 20666 without holes. When a value is specified (which must be a small 20667 power of two), pack structure members according to this value, 20668 representing the maximum alignment (that is, objects with default 20669 alignment requirements larger than this are output potentially 20670 unaligned at the next fitting location. 20671 20672 *Warning:* the '-fpack-struct' switch causes GCC to generate code 20673 that is not binary compatible with code generated without that 20674 switch. Additionally, it makes the code suboptimal. Use it to 20675 conform to a non-default application binary interface. 20676 20677'-finstrument-functions' 20678 Generate instrumentation calls for entry and exit to functions. 20679 Just after function entry and just before function exit, the 20680 following profiling functions are called with the address of the 20681 current function and its call site. (On some platforms, 20682 '__builtin_return_address' does not work beyond the current 20683 function, so the call site information may not be available to the 20684 profiling functions otherwise.) 20685 20686 void __cyg_profile_func_enter (void *this_fn, 20687 void *call_site); 20688 void __cyg_profile_func_exit (void *this_fn, 20689 void *call_site); 20690 20691 The first argument is the address of the start of the current 20692 function, which may be looked up exactly in the symbol table. 20693 20694 This instrumentation is also done for functions expanded inline in 20695 other functions. The profiling calls indicate where, conceptually, 20696 the inline function is entered and exited. This means that 20697 addressable versions of such functions must be available. If all 20698 your uses of a function are expanded inline, this may mean an 20699 additional expansion of code size. If you use 'extern inline' in 20700 your C code, an addressable version of such functions must be 20701 provided. (This is normally the case anyway, but if you get lucky 20702 and the optimizer always expands the functions inline, you might 20703 have gotten away without providing static copies.) 20704 20705 A function may be given the attribute 'no_instrument_function', in 20706 which case this instrumentation is not done. This can be used, for 20707 example, for the profiling functions listed above, high-priority 20708 interrupt routines, and any functions from which the profiling 20709 functions cannot safely be called (perhaps signal handlers, if the 20710 profiling routines generate output or allocate memory). 20711 20712'-finstrument-functions-exclude-file-list=FILE,FILE,...' 20713 20714 Set the list of functions that are excluded from instrumentation 20715 (see the description of '-finstrument-functions'). If the file 20716 that contains a function definition matches with one of FILE, then 20717 that function is not instrumented. The match is done on 20718 substrings: if the FILE parameter is a substring of the file name, 20719 it is considered to be a match. 20720 20721 For example: 20722 20723 -finstrument-functions-exclude-file-list=/bits/stl,include/sys 20724 20725 excludes any inline function defined in files whose pathnames 20726 contain '/bits/stl' or 'include/sys'. 20727 20728 If, for some reason, you want to include letter '','' in one of 20729 SYM, write ''\,''. For example, 20730 '-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 20731 single quote surrounding the option). 20732 20733'-finstrument-functions-exclude-function-list=SYM,SYM,...' 20734 20735 This is similar to '-finstrument-functions-exclude-file-list', but 20736 this option sets the list of function names to be excluded from 20737 instrumentation. The function name to be matched is its 20738 user-visible name, such as 'vector<int> blah(const vector<int> &)', 20739 not the internal mangled name (e.g., '_Z4blahRSt6vectorIiSaIiEE'). 20740 The match is done on substrings: if the SYM parameter is a 20741 substring of the function name, it is considered to be a match. 20742 For C99 and C++ extended identifiers, the function name must be 20743 given in UTF-8, not using universal character names. 20744 20745'-fstack-check' 20746 Generate code to verify that you do not go beyond the boundary of 20747 the stack. You should specify this flag if you are running in an 20748 environment with multiple threads, but you only rarely need to 20749 specify it in a single-threaded environment since stack overflow is 20750 automatically detected on nearly all systems if there is only one 20751 stack. 20752 20753 Note that this switch does not actually cause checking to be done; 20754 the operating system or the language runtime must do that. The 20755 switch causes generation of code to ensure that they see the stack 20756 being extended. 20757 20758 You can additionally specify a string parameter: 'no' means no 20759 checking, 'generic' means force the use of old-style checking, 20760 'specific' means use the best checking method and is equivalent to 20761 bare '-fstack-check'. 20762 20763 Old-style checking is a generic mechanism that requires no specific 20764 target support in the compiler but comes with the following 20765 drawbacks: 20766 20767 1. Modified allocation strategy for large objects: they are 20768 always allocated dynamically if their size exceeds a fixed 20769 threshold. 20770 20771 2. Fixed limit on the size of the static frame of functions: when 20772 it is topped by a particular function, stack checking is not 20773 reliable and a warning is issued by the compiler. 20774 20775 3. Inefficiency: because of both the modified allocation strategy 20776 and the generic implementation, code performance is hampered. 20777 20778 Note that old-style stack checking is also the fallback method for 20779 'specific' if no target support has been added in the compiler. 20780 20781'-fstack-limit-register=REG' 20782'-fstack-limit-symbol=SYM' 20783'-fno-stack-limit' 20784 Generate code to ensure that the stack does not grow beyond a 20785 certain value, either the value of a register or the address of a 20786 symbol. If a larger stack is required, a signal is raised at run 20787 time. For most targets, the signal is raised before the stack 20788 overruns the boundary, so it is possible to catch the signal 20789 without taking special precautions. 20790 20791 For instance, if the stack starts at absolute address '0x80000000' 20792 and grows downwards, you can use the flags 20793 '-fstack-limit-symbol=__stack_limit' and 20794 '-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit of 20795 128KB. Note that this may only work with the GNU linker. 20796 20797'-fsplit-stack' 20798 Generate code to automatically split the stack before it overflows. 20799 The resulting program has a discontiguous stack which can only 20800 overflow if the program is unable to allocate any more memory. 20801 This is most useful when running threaded programs, as it is no 20802 longer necessary to calculate a good stack size to use for each 20803 thread. This is currently only implemented for the i386 and x86_64 20804 back ends running GNU/Linux. 20805 20806 When code compiled with '-fsplit-stack' calls code compiled without 20807 '-fsplit-stack', there may not be much stack space available for 20808 the latter code to run. If compiling all code, including library 20809 code, with '-fsplit-stack' is not an option, then the linker can 20810 fix up these calls so that the code compiled without 20811 '-fsplit-stack' always has a large stack. Support for this is 20812 implemented in the gold linker in GNU binutils release 2.21 and 20813 later. 20814 20815'-fleading-underscore' 20816 This option and its counterpart, '-fno-leading-underscore', 20817 forcibly change the way C symbols are represented in the object 20818 file. One use is to help link with legacy assembly code. 20819 20820 *Warning:* the '-fleading-underscore' switch causes GCC to generate 20821 code that is not binary compatible with code generated without that 20822 switch. Use it to conform to a non-default application binary 20823 interface. Not all targets provide complete support for this 20824 switch. 20825 20826'-ftls-model=MODEL' 20827 Alter the thread-local storage model to be used (*note 20828 Thread-Local::). The MODEL argument should be one of 20829 'global-dynamic', 'local-dynamic', 'initial-exec' or 'local-exec'. 20830 Note that the choice is subject to optimization: the compiler may 20831 use a more efficient model for symbols not visible outside of the 20832 translation unit, or if '-fpic' is not given on the command line. 20833 20834 The default without '-fpic' is 'initial-exec'; with '-fpic' the 20835 default is 'global-dynamic'. 20836 20837'-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 20838 Set the default ELF image symbol visibility to the specified 20839 option--all symbols are marked with this unless overridden within 20840 the code. Using this feature can very substantially improve 20841 linking and load times of shared object libraries, produce more 20842 optimized code, provide near-perfect API export and prevent symbol 20843 clashes. It is *strongly* recommended that you use this in any 20844 shared objects you distribute. 20845 20846 Despite the nomenclature, 'default' always means public; i.e., 20847 available to be linked against from outside the shared object. 20848 'protected' and 'internal' are pretty useless in real-world usage 20849 so the only other commonly used option is 'hidden'. The default if 20850 '-fvisibility' isn't specified is 'default', i.e., make every 20851 symbol public--this causes the same behavior as previous versions 20852 of GCC. 20853 20854 A good explanation of the benefits offered by ensuring ELF symbols 20855 have the correct visibility is given by "How To Write Shared 20856 Libraries" by Ulrich Drepper (which can be found at 20857 <http://people.redhat.com/~drepper/>)--however a superior solution 20858 made possible by this option to marking things hidden when the 20859 default is public is to make the default hidden and mark things 20860 public. This is the norm with DLLs on Windows and with 20861 '-fvisibility=hidden' and '__attribute__ ((visibility("default")))' 20862 instead of '__declspec(dllexport)' you get almost identical 20863 semantics with identical syntax. This is a great boon to those 20864 working with cross-platform projects. 20865 20866 For those adding visibility support to existing code, you may find 20867 '#pragma GCC visibility' of use. This works by you enclosing the 20868 declarations you wish to set visibility for with (for example) 20869 '#pragma GCC visibility push(hidden)' and '#pragma GCC visibility 20870 pop'. Bear in mind that symbol visibility should be viewed *as 20871 part of the API interface contract* and thus all new code should 20872 always specify visibility when it is not the default; i.e., 20873 declarations only for use within the local DSO should *always* be 20874 marked explicitly as hidden as so to avoid PLT indirection 20875 overheads--making this abundantly clear also aids readability and 20876 self-documentation of the code. Note that due to ISO C++ 20877 specification requirements, 'operator new' and 'operator delete' 20878 must always be of default visibility. 20879 20880 Be aware that headers from outside your project, in particular 20881 system headers and headers from any other library you use, may not 20882 be expecting to be compiled with visibility other than the default. 20883 You may need to explicitly say '#pragma GCC visibility 20884 push(default)' before including any such headers. 20885 20886 'extern' declarations are not affected by '-fvisibility', so a lot 20887 of code can be recompiled with '-fvisibility=hidden' with no 20888 modifications. However, this means that calls to 'extern' 20889 functions with no explicit visibility use the PLT, so it is more 20890 effective to use '__attribute ((visibility))' and/or '#pragma GCC 20891 visibility' to tell the compiler which 'extern' declarations should 20892 be treated as hidden. 20893 20894 Note that '-fvisibility' does affect C++ vague linkage entities. 20895 This means that, for instance, an exception class that is be thrown 20896 between DSOs must be explicitly marked with default visibility so 20897 that the 'type_info' nodes are unified between the DSOs. 20898 20899 An overview of these techniques, their benefits and how to use them 20900 is at <http://gcc.gnu.org/wiki/Visibility>. 20901 20902'-fstrict-volatile-bitfields' 20903 This option should be used if accesses to volatile bit-fields (or 20904 other structure fields, although the compiler usually honors those 20905 types anyway) should use a single access of the width of the 20906 field's type, aligned to a natural alignment if possible. For 20907 example, targets with memory-mapped peripheral registers might 20908 require all such accesses to be 16 bits wide; with this flag you 20909 can declare all peripheral bit-fields as 'unsigned short' (assuming 20910 short is 16 bits on these targets) to force GCC to use 16-bit 20911 accesses instead of, perhaps, a more efficient 32-bit access. 20912 20913 If this option is disabled, the compiler uses the most efficient 20914 instruction. In the previous example, that might be a 32-bit load 20915 instruction, even though that accesses bytes that do not contain 20916 any portion of the bit-field, or memory-mapped registers unrelated 20917 to the one being updated. 20918 20919 In some cases, such as when the 'packed' attribute is applied to a 20920 structure field, it may not be possible to access the field with a 20921 single read or write that is correctly aligned for the target 20922 machine. In this case GCC falls back to generating multiple 20923 accesses rather than code that will fault or truncate the result at 20924 run time. 20925 20926 Note: Due to restrictions of the C/C++11 memory model, write 20927 accesses are not allowed to touch non bit-field members. It is 20928 therefore recommended to define all bits of the field's type as 20929 bit-field members. 20930 20931 The default value of this option is determined by the application 20932 binary interface for the target processor. 20933 20934'-fsync-libcalls' 20935 This option controls whether any out-of-line instance of the 20936 '__sync' family of functions may be used to implement the C++11 20937 '__atomic' family of functions. 20938 20939 The default value of this option is enabled, thus the only useful 20940 form of the option is '-fno-sync-libcalls'. This option is used in 20941 the implementation of the 'libatomic' runtime library. 20942 20943 20944File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 20945 209463.19 Environment Variables Affecting GCC 20947======================================== 20948 20949This section describes several environment variables that affect how GCC 20950operates. Some of them work by specifying directories or prefixes to 20951use when searching for various kinds of files. Some are used to specify 20952other aspects of the compilation environment. 20953 20954 Note that you can also specify places to search using options such as 20955'-B', '-I' and '-L' (*note Directory Options::). These take precedence 20956over places specified using environment variables, which in turn take 20957precedence over those specified by the configuration of GCC. *Note 20958Controlling the Compilation Driver 'gcc': (gccint)Driver. 20959 20960'LANG' 20961'LC_CTYPE' 20962'LC_MESSAGES' 20963'LC_ALL' 20964 These environment variables control the way that GCC uses 20965 localization information which allows GCC to work with different 20966 national conventions. GCC inspects the locale categories 20967 'LC_CTYPE' and 'LC_MESSAGES' if it has been configured to do so. 20968 These locale categories can be set to any value supported by your 20969 installation. A typical value is 'en_GB.UTF-8' for English in the 20970 United Kingdom encoded in UTF-8. 20971 20972 The 'LC_CTYPE' environment variable specifies character 20973 classification. GCC uses it to determine the character boundaries 20974 in a string; this is needed for some multibyte encodings that 20975 contain quote and escape characters that are otherwise interpreted 20976 as a string end or escape. 20977 20978 The 'LC_MESSAGES' environment variable specifies the language to 20979 use in diagnostic messages. 20980 20981 If the 'LC_ALL' environment variable is set, it overrides the value 20982 of 'LC_CTYPE' and 'LC_MESSAGES'; otherwise, 'LC_CTYPE' and 20983 'LC_MESSAGES' default to the value of the 'LANG' environment 20984 variable. If none of these variables are set, GCC defaults to 20985 traditional C English behavior. 20986 20987'TMPDIR' 20988 If 'TMPDIR' is set, it specifies the directory to use for temporary 20989 files. GCC uses temporary files to hold the output of one stage of 20990 compilation which is to be used as input to the next stage: for 20991 example, the output of the preprocessor, which is the input to the 20992 compiler proper. 20993 20994'GCC_COMPARE_DEBUG' 20995 Setting 'GCC_COMPARE_DEBUG' is nearly equivalent to passing 20996 '-fcompare-debug' to the compiler driver. See the documentation of 20997 this option for more details. 20998 20999'GCC_EXEC_PREFIX' 21000 If 'GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 21001 names of the subprograms executed by the compiler. No slash is 21002 added when this prefix is combined with the name of a subprogram, 21003 but you can specify a prefix that ends with a slash if you wish. 21004 21005 If 'GCC_EXEC_PREFIX' is not set, GCC attempts to figure out an 21006 appropriate prefix to use based on the pathname it is invoked with. 21007 21008 If GCC cannot find the subprogram using the specified prefix, it 21009 tries looking in the usual places for the subprogram. 21010 21011 The default value of 'GCC_EXEC_PREFIX' is 'PREFIX/lib/gcc/' where 21012 PREFIX is the prefix to the installed compiler. In many cases 21013 PREFIX is the value of 'prefix' when you ran the 'configure' 21014 script. 21015 21016 Other prefixes specified with '-B' take precedence over this 21017 prefix. 21018 21019 This prefix is also used for finding files such as 'crt0.o' that 21020 are used for linking. 21021 21022 In addition, the prefix is used in an unusual way in finding the 21023 directories to search for header files. For each of the standard 21024 directories whose name normally begins with '/usr/local/lib/gcc' 21025 (more precisely, with the value of 'GCC_INCLUDE_DIR'), GCC tries 21026 replacing that beginning with the specified prefix to produce an 21027 alternate directory name. Thus, with '-Bfoo/', GCC searches 21028 'foo/bar' just before it searches the standard directory 21029 '/usr/local/lib/bar'. If a standard directory begins with the 21030 configured PREFIX then the value of PREFIX is replaced by 21031 'GCC_EXEC_PREFIX' when looking for header files. 21032 21033'COMPILER_PATH' 21034 The value of 'COMPILER_PATH' is a colon-separated list of 21035 directories, much like 'PATH'. GCC tries the directories thus 21036 specified when searching for subprograms, if it can't find the 21037 subprograms using 'GCC_EXEC_PREFIX'. 21038 21039'LIBRARY_PATH' 21040 The value of 'LIBRARY_PATH' is a colon-separated list of 21041 directories, much like 'PATH'. When configured as a native 21042 compiler, GCC tries the directories thus specified when searching 21043 for special linker files, if it can't find them using 21044 'GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 21045 when searching for ordinary libraries for the '-l' option (but 21046 directories specified with '-L' come first). 21047 21048'LANG' 21049 This variable is used to pass locale information to the compiler. 21050 One way in which this information is used is to determine the 21051 character set to be used when character literals, string literals 21052 and comments are parsed in C and C++. When the compiler is 21053 configured to allow multibyte characters, the following values for 21054 'LANG' are recognized: 21055 21056 'C-JIS' 21057 Recognize JIS characters. 21058 'C-SJIS' 21059 Recognize SJIS characters. 21060 'C-EUCJP' 21061 Recognize EUCJP characters. 21062 21063 If 'LANG' is not defined, or if it has some other value, then the 21064 compiler uses 'mblen' and 'mbtowc' as defined by the default locale 21065 to recognize and translate multibyte characters. 21066 21067Some additional environment variables affect the behavior of the 21068preprocessor. 21069 21070'CPATH' 21071'C_INCLUDE_PATH' 21072'CPLUS_INCLUDE_PATH' 21073'OBJC_INCLUDE_PATH' 21074 Each variable's value is a list of directories separated by a 21075 special character, much like 'PATH', in which to look for header 21076 files. The special character, 'PATH_SEPARATOR', is 21077 target-dependent and determined at GCC build time. For Microsoft 21078 Windows-based targets it is a semicolon, and for almost all other 21079 targets it is a colon. 21080 21081 'CPATH' specifies a list of directories to be searched as if 21082 specified with '-I', but after any paths given with '-I' options on 21083 the command line. This environment variable is used regardless of 21084 which language is being preprocessed. 21085 21086 The remaining environment variables apply only when preprocessing 21087 the particular language indicated. Each specifies a list of 21088 directories to be searched as if specified with '-isystem', but 21089 after any paths given with '-isystem' options on the command line. 21090 21091 In all these variables, an empty element instructs the compiler to 21092 search its current working directory. Empty elements can appear at 21093 the beginning or end of a path. For instance, if the value of 21094 'CPATH' is ':/special/include', that has the same effect as 21095 '-I. -I/special/include'. 21096 21097'DEPENDENCIES_OUTPUT' 21098 If this variable is set, its value specifies how to output 21099 dependencies for Make based on the non-system header files 21100 processed by the compiler. System header files are ignored in the 21101 dependency output. 21102 21103 The value of 'DEPENDENCIES_OUTPUT' can be just a file name, in 21104 which case the Make rules are written to that file, guessing the 21105 target name from the source file name. Or the value can have the 21106 form 'FILE TARGET', in which case the rules are written to file 21107 FILE using TARGET as the target name. 21108 21109 In other words, this environment variable is equivalent to 21110 combining the options '-MM' and '-MF' (*note Preprocessor 21111 Options::), with an optional '-MT' switch too. 21112 21113'SUNPRO_DEPENDENCIES' 21114 This variable is the same as 'DEPENDENCIES_OUTPUT' (see above), 21115 except that system header files are not ignored, so it implies '-M' 21116 rather than '-MM'. However, the dependence on the main input file 21117 is omitted. *Note Preprocessor Options::. 21118 21119 21120File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 21121 211223.20 Using Precompiled Headers 21123============================== 21124 21125Often large projects have many header files that are included in every 21126source file. The time the compiler takes to process these header files 21127over and over again can account for nearly all of the time required to 21128build the project. To make builds faster, GCC allows you to 21129"precompile" a header file. 21130 21131 To create a precompiled header file, simply compile it as you would any 21132other file, if necessary using the '-x' option to make the driver treat 21133it as a C or C++ header file. You may want to use a tool like 'make' to 21134keep the precompiled header up-to-date when the headers it contains 21135change. 21136 21137 A precompiled header file is searched for when '#include' is seen in 21138the compilation. As it searches for the included file (*note Search 21139Path: (cpp)Search Path.) the compiler looks for a precompiled header in 21140each directory just before it looks for the include file in that 21141directory. The name searched for is the name specified in the 21142'#include' with '.gch' appended. If the precompiled header file can't 21143be used, it is ignored. 21144 21145 For instance, if you have '#include "all.h"', and you have 'all.h.gch' 21146in the same directory as 'all.h', then the precompiled header file is 21147used if possible, and the original header is used otherwise. 21148 21149 Alternatively, you might decide to put the precompiled header file in a 21150directory and use '-I' to ensure that directory is searched before (or 21151instead of) the directory containing the original header. Then, if you 21152want to check that the precompiled header file is always used, you can 21153put a file of the same name as the original header in this directory 21154containing an '#error' command. 21155 21156 This also works with '-include'. So yet another way to use precompiled 21157headers, good for projects not designed with precompiled header files in 21158mind, is to simply take most of the header files used by a project, 21159include them from another header file, precompile that header file, and 21160'-include' the precompiled header. If the header files have guards 21161against multiple inclusion, they are skipped because they've already 21162been included (in the precompiled header). 21163 21164 If you need to precompile the same header file for different languages, 21165targets, or compiler options, you can instead make a _directory_ named 21166like 'all.h.gch', and put each precompiled header in the directory, 21167perhaps using '-o'. It doesn't matter what you call the files in the 21168directory; every precompiled header in the directory is considered. The 21169first precompiled header encountered in the directory that is valid for 21170this compilation is used; they're searched in no particular order. 21171 21172 There are many other possibilities, limited only by your imagination, 21173good sense, and the constraints of your build system. 21174 21175 A precompiled header file can be used only when these conditions apply: 21176 21177 * Only one precompiled header can be used in a particular 21178 compilation. 21179 21180 * A precompiled header can't be used once the first C token is seen. 21181 You can have preprocessor directives before a precompiled header; 21182 you cannot include a precompiled header from inside another header. 21183 21184 * The precompiled header file must be produced for the same language 21185 as the current compilation. You can't use a C precompiled header 21186 for a C++ compilation. 21187 21188 * The precompiled header file must have been produced by the same 21189 compiler binary as the current compilation is using. 21190 21191 * Any macros defined before the precompiled header is included must 21192 either be defined in the same way as when the precompiled header 21193 was generated, or must not affect the precompiled header, which 21194 usually means that they don't appear in the precompiled header at 21195 all. 21196 21197 The '-D' option is one way to define a macro before a precompiled 21198 header is included; using a '#define' can also do it. There are 21199 also some options that define macros implicitly, like '-O' and 21200 '-Wdeprecated'; the same rule applies to macros defined this way. 21201 21202 * If debugging information is output when using the precompiled 21203 header, using '-g' or similar, the same kind of debugging 21204 information must have been output when building the precompiled 21205 header. However, a precompiled header built using '-g' can be used 21206 in a compilation when no debugging information is being output. 21207 21208 * The same '-m' options must generally be used when building and 21209 using the precompiled header. *Note Submodel Options::, for any 21210 cases where this rule is relaxed. 21211 21212 * Each of the following options must be the same when building and 21213 using the precompiled header: 21214 21215 -fexceptions 21216 21217 * Some other command-line options starting with '-f', '-p', or '-O' 21218 must be defined in the same way as when the precompiled header was 21219 generated. At present, it's not clear which options are safe to 21220 change and which are not; the safest choice is to use exactly the 21221 same options when generating and using the precompiled header. The 21222 following are known to be safe: 21223 21224 -fmessage-length= -fpreprocessed -fsched-interblock 21225 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 21226 -fsched-verbose=NUMBER -fschedule-insns -fvisibility= 21227 -pedantic-errors 21228 21229 For all of these except the last, the compiler automatically ignores 21230the precompiled header if the conditions aren't met. If you find an 21231option combination that doesn't work and doesn't cause the precompiled 21232header to be ignored, please consider filing a bug report, see *note 21233Bugs::. 21234 21235 If you do use differing options when generating and using the 21236precompiled header, the actual behavior is a mixture of the behavior for 21237the options. For instance, if you use '-g' to generate the precompiled 21238header but not when using it, you may or may not get debugging 21239information for routines in the precompiled header. 21240 21241 21242File: gcc.info, Node: C Implementation, Next: C++ Implementation, Prev: Invoking GCC, Up: Top 21243 212444 C Implementation-defined behavior 21245*********************************** 21246 21247A conforming implementation of ISO C is required to document its choice 21248of behavior in each of the areas that are designated "implementation 21249defined". The following lists all such areas, along with the section 21250numbers from the ISO/IEC 9899:1990, ISO/IEC 9899:1999 and ISO/IEC 212519899:2011 standards. Some areas are only implementation-defined in one 21252version of the standard. 21253 21254 Some choices depend on the externally determined ABI for the platform 21255(including standard character encodings) which GCC follows; these are 21256listed as "determined by ABI" below. *Note Binary Compatibility: 21257Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are 21258documented in the preprocessor manual. *Note Implementation-defined 21259behavior: (cpp)Implementation-defined behavior. Some choices are made 21260by the library and operating system (or other environment when compiling 21261for a freestanding environment); refer to their documentation for 21262details. 21263 21264* Menu: 21265 21266* Translation implementation:: 21267* Environment implementation:: 21268* Identifiers implementation:: 21269* Characters implementation:: 21270* Integers implementation:: 21271* Floating point implementation:: 21272* Arrays and pointers implementation:: 21273* Hints implementation:: 21274* Structures unions enumerations and bit-fields implementation:: 21275* Qualifiers implementation:: 21276* Declarators implementation:: 21277* Statements implementation:: 21278* Preprocessing directives implementation:: 21279* Library functions implementation:: 21280* Architecture implementation:: 21281* Locale-specific behavior implementation:: 21282 21283 21284File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 21285 212864.1 Translation 21287=============== 21288 21289 * 'How a diagnostic is identified (C90 3.7, C99 and C11 3.10, C90, 21290 C99 and C11 5.1.1.3).' 21291 21292 Diagnostics consist of all the output sent to stderr by GCC. 21293 21294 * 'Whether each nonempty sequence of white-space characters other 21295 than new-line is retained or replaced by one space character in 21296 translation phase 3 (C90, C99 and C11 5.1.1.2).' 21297 21298 *Note Implementation-defined behavior: (cpp)Implementation-defined 21299 behavior. 21300 21301 21302File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 21303 213044.2 Environment 21305=============== 21306 21307The behavior of most of these points are dependent on the implementation 21308of the C library, and are not defined by GCC itself. 21309 21310 * 'The mapping between physical source file multibyte characters and 21311 the source character set in translation phase 1 (C90, C99 and C11 21312 5.1.1.2).' 21313 21314 *Note Implementation-defined behavior: (cpp)Implementation-defined 21315 behavior. 21316 21317 21318File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 21319 213204.3 Identifiers 21321=============== 21322 21323 * 'Which additional multibyte characters may appear in identifiers 21324 and their correspondence to universal character names (C99 and C11 21325 6.4.2).' 21326 21327 *Note Implementation-defined behavior: (cpp)Implementation-defined 21328 behavior. 21329 21330 * 'The number of significant initial characters in an identifier (C90 21331 6.1.2, C90, C99 and C11 5.2.4.1, C99 and C11 6.4.2).' 21332 21333 For internal names, all characters are significant. For external 21334 names, the number of significant characters are defined by the 21335 linker; for almost all targets, all characters are significant. 21336 21337 * 'Whether case distinctions are significant in an identifier with 21338 external linkage (C90 6.1.2).' 21339 21340 This is a property of the linker. C99 and C11 require that case 21341 distinctions are always significant in identifiers with external 21342 linkage and systems without this property are not supported by GCC. 21343 21344 21345File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 21346 213474.4 Characters 21348============== 21349 21350 * 'The number of bits in a byte (C90 3.4, C99 and C11 3.6).' 21351 21352 Determined by ABI. 21353 21354 * 'The values of the members of the execution character set (C90, C99 21355 and C11 5.2.1).' 21356 21357 Determined by ABI. 21358 21359 * 'The unique value of the member of the execution character set 21360 produced for each of the standard alphabetic escape sequences (C90, 21361 C99 and C11 5.2.2).' 21362 21363 Determined by ABI. 21364 21365 * 'The value of a 'char' object into which has been stored any 21366 character other than a member of the basic execution character set 21367 (C90 6.1.2.5, C99 and C11 6.2.5).' 21368 21369 Determined by ABI. 21370 21371 * 'Which of 'signed char' or 'unsigned char' has the same range, 21372 representation, and behavior as "plain" 'char' (C90 6.1.2.5, C90 21373 6.2.1.1, C99 and C11 6.2.5, C99 and C11 6.3.1.1).' 21374 21375 Determined by ABI. The options '-funsigned-char' and 21376 '-fsigned-char' change the default. *Note Options Controlling C 21377 Dialect: C Dialect Options. 21378 21379 * 'The mapping of members of the source character set (in character 21380 constants and string literals) to members of the execution 21381 character set (C90 6.1.3.4, C99 and C11 6.4.4.4, C90, C99 and C11 21382 5.1.1.2).' 21383 21384 Determined by ABI. 21385 21386 * 'The value of an integer character constant containing more than 21387 one character or containing a character or escape sequence that 21388 does not map to a single-byte execution character (C90 6.1.3.4, C99 21389 and C11 6.4.4.4).' 21390 21391 *Note Implementation-defined behavior: (cpp)Implementation-defined 21392 behavior. 21393 21394 * 'The value of a wide character constant containing more than one 21395 multibyte character or a single multibyte character that maps to 21396 multiple members of the extended execution character set, or 21397 containing a multibyte character or escape sequence not represented 21398 in the extended execution character set (C90 6.1.3.4, C99 and C11 21399 6.4.4.4).' 21400 21401 *Note Implementation-defined behavior: (cpp)Implementation-defined 21402 behavior. 21403 21404 * 'The current locale used to convert a wide character constant 21405 consisting of a single multibyte character that maps to a member of 21406 the extended execution character set into a corresponding wide 21407 character code (C90 6.1.3.4, C99 and C11 6.4.4.4).' 21408 21409 *Note Implementation-defined behavior: (cpp)Implementation-defined 21410 behavior. 21411 21412 * 'Whether differently-prefixed wide string literal tokens can be 21413 concatenated and, if so, the treatment of the resulting multibyte 21414 character sequence (C11 6.4.5).' 21415 21416 Such tokens may not be concatenated. 21417 21418 * 'The current locale used to convert a wide string literal into 21419 corresponding wide character codes (C90 6.1.4, C99 and C11 6.4.5).' 21420 21421 *Note Implementation-defined behavior: (cpp)Implementation-defined 21422 behavior. 21423 21424 * 'The value of a string literal containing a multibyte character or 21425 escape sequence not represented in the execution character set (C90 21426 6.1.4, C99 and C11 6.4.5).' 21427 21428 *Note Implementation-defined behavior: (cpp)Implementation-defined 21429 behavior. 21430 21431 * 'The encoding of any of 'wchar_t', 'char16_t', and 'char32_t' where 21432 the corresponding standard encoding macro ('__STDC_ISO_10646__', 21433 '__STDC_UTF_16__', or '__STDC_UTF_32__') is not defined (C11 21434 6.10.8.2).' 21435 21436 *Note Implementation-defined behavior: (cpp)Implementation-defined 21437 behavior. 'char16_t' and 'char32_t' literals are always encoded in 21438 UTF-16 and UTF-32 respectively. 21439 21440 21441File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 21442 214434.5 Integers 21444============ 21445 21446 * 'Any extended integer types that exist in the implementation (C99 21447 and C11 6.2.5).' 21448 21449 GCC does not support any extended integer types. 21450 21451 * 'Whether signed integer types are represented using sign and 21452 magnitude, two's complement, or one's complement, and whether the 21453 extraordinary value is a trap representation or an ordinary value 21454 (C99 and C11 6.2.6.2).' 21455 21456 GCC supports only two's complement integer types, and all bit 21457 patterns are ordinary values. 21458 21459 * 'The rank of any extended integer type relative to another extended 21460 integer type with the same precision (C99 and C11 6.3.1.1).' 21461 21462 GCC does not support any extended integer types. 21463 21464 * 'The result of, or the signal raised by, converting an integer to a 21465 signed integer type when the value cannot be represented in an 21466 object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).' 21467 21468 For conversion to a type of width N, the value is reduced modulo 21469 2^N to be within range of the type; no signal is raised. 21470 21471 * 'The results of some bitwise operations on signed integers (C90 21472 6.3, C99 and C11 6.5).' 21473 21474 Bitwise operators act on the representation of the value including 21475 both the sign and value bits, where the sign bit is considered 21476 immediately above the highest-value value bit. Signed '>>' acts on 21477 negative numbers by sign extension. 21478 21479 GCC does not use the latitude given in C99 and C11 only to treat 21480 certain aspects of signed '<<' as undefined, but this is subject to 21481 change. 21482 21483 * 'The sign of the remainder on integer division (C90 6.3.5).' 21484 21485 GCC always follows the C99 and C11 requirement that the result of 21486 division is truncated towards zero. 21487 21488 21489File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 21490 214914.6 Floating point 21492================== 21493 21494 * 'The accuracy of the floating-point operations and of the library 21495 functions in '<math.h>' and '<complex.h>' that return 21496 floating-point results (C90, C99 and C11 5.2.4.2.2).' 21497 21498 The accuracy is unknown. 21499 21500 * 'The rounding behaviors characterized by non-standard values of 21501 'FLT_ROUNDS' (C90, C99 and C11 5.2.4.2.2).' 21502 21503 GCC does not use such values. 21504 21505 * 'The evaluation methods characterized by non-standard negative 21506 values of 'FLT_EVAL_METHOD' (C99 and C11 5.2.4.2.2).' 21507 21508 GCC does not use such values. 21509 21510 * 'The direction of rounding when an integer is converted to a 21511 floating-point number that cannot exactly represent the original 21512 value (C90 6.2.1.3, C99 and C11 6.3.1.4).' 21513 21514 C99 Annex F is followed. 21515 21516 * 'The direction of rounding when a floating-point number is 21517 converted to a narrower floating-point number (C90 6.2.1.4, C99 and 21518 C11 6.3.1.5).' 21519 21520 C99 Annex F is followed. 21521 21522 * 'How the nearest representable value or the larger or smaller 21523 representable value immediately adjacent to the nearest 21524 representable value is chosen for certain floating constants (C90 21525 6.1.3.1, C99 and C11 6.4.4.2).' 21526 21527 C99 Annex F is followed. 21528 21529 * 'Whether and how floating expressions are contracted when not 21530 disallowed by the 'FP_CONTRACT' pragma (C99 and C11 6.5).' 21531 21532 Expressions are currently only contracted if '-ffp-contract=fast', 21533 '-funsafe-math-optimizations' or '-ffast-math' are used. This is 21534 subject to change. 21535 21536 * 'The default state for the 'FENV_ACCESS' pragma (C99 and C11 21537 7.6.1).' 21538 21539 This pragma is not implemented, but the default is to "off" unless 21540 '-frounding-math' is used in which case it is "on". 21541 21542 * 'Additional floating-point exceptions, rounding modes, 21543 environments, and classifications, and their macro names (C99 and 21544 C11 7.6, C99 and C11 7.12).' 21545 21546 This is dependent on the implementation of the C library, and is 21547 not defined by GCC itself. 21548 21549 * 'The default state for the 'FP_CONTRACT' pragma (C99 and C11 21550 7.12.2).' 21551 21552 This pragma is not implemented. Expressions are currently only 21553 contracted if '-ffp-contract=fast', '-funsafe-math-optimizations' 21554 or '-ffast-math' are used. This is subject to change. 21555 21556 * 'Whether the "inexact" floating-point exception can be raised when 21557 the rounded result actually does equal the mathematical result in 21558 an IEC 60559 conformant implementation (C99 F.9).' 21559 21560 This is dependent on the implementation of the C library, and is 21561 not defined by GCC itself. 21562 21563 * 'Whether the "underflow" (and "inexact") floating-point exception 21564 can be raised when a result is tiny but not inexact in an IEC 60559 21565 conformant implementation (C99 F.9).' 21566 21567 This is dependent on the implementation of the C library, and is 21568 not defined by GCC itself. 21569 21570 21571File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 21572 215734.7 Arrays and pointers 21574======================= 21575 21576 * 'The result of converting a pointer to an integer or vice versa 21577 (C90 6.3.4, C99 and C11 6.3.2.3).' 21578 21579 A cast from pointer to integer discards most-significant bits if 21580 the pointer representation is larger than the integer type, 21581 sign-extends(1) if the pointer representation is smaller than the 21582 integer type, otherwise the bits are unchanged. 21583 21584 A cast from integer to pointer discards most-significant bits if 21585 the pointer representation is smaller than the integer type, 21586 extends according to the signedness of the integer type if the 21587 pointer representation is larger than the integer type, otherwise 21588 the bits are unchanged. 21589 21590 When casting from pointer to integer and back again, the resulting 21591 pointer must reference the same object as the original pointer, 21592 otherwise the behavior is undefined. That is, one may not use 21593 integer arithmetic to avoid the undefined behavior of pointer 21594 arithmetic as proscribed in C99 and C11 6.5.6/8. 21595 21596 * 'The size of the result of subtracting two pointers to elements of 21597 the same array (C90 6.3.6, C99 and C11 6.5.6).' 21598 21599 The value is as specified in the standard and the type is 21600 determined by the ABI. 21601 21602 ---------- Footnotes ---------- 21603 21604 (1) Future versions of GCC may zero-extend, or use a target-defined 21605'ptr_extend' pattern. Do not rely on sign extension. 21606 21607 21608File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 21609 216104.8 Hints 21611========= 21612 21613 * 'The extent to which suggestions made by using the 'register' 21614 storage-class specifier are effective (C90 6.5.1, C99 and C11 21615 6.7.1).' 21616 21617 The 'register' specifier affects code generation only in these 21618 ways: 21619 21620 * When used as part of the register variable extension, see 21621 *note Explicit Reg Vars::. 21622 21623 * When '-O0' is in use, the compiler allocates distinct stack 21624 memory for all variables that do not have the 'register' 21625 storage-class specifier; if 'register' is specified, the 21626 variable may have a shorter lifespan than the code would 21627 indicate and may never be placed in memory. 21628 21629 * On some rare x86 targets, 'setjmp' doesn't save the registers 21630 in all circumstances. In those cases, GCC doesn't allocate 21631 any variables in registers unless they are marked 'register'. 21632 21633 * 'The extent to which suggestions made by using the inline function 21634 specifier are effective (C99 and C11 6.7.4).' 21635 21636 GCC will not inline any functions if the '-fno-inline' option is 21637 used or if '-O0' is used. Otherwise, GCC may still be unable to 21638 inline a function for many reasons; the '-Winline' option may be 21639 used to determine if a function has not been inlined and why not. 21640 21641 21642File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 21643 216444.9 Structures, unions, enumerations, and bit-fields 21645==================================================== 21646 21647 * 'A member of a union object is accessed using a member of a 21648 different type (C90 6.3.2.3).' 21649 21650 The relevant bytes of the representation of the object are treated 21651 as an object of the type used for the access. *Note 21652 Type-punning::. This may be a trap representation. 21653 21654 * 'Whether a "plain" 'int' bit-field is treated as a 'signed int' 21655 bit-field or as an 'unsigned int' bit-field (C90 6.5.2, C90 21656 6.5.2.1, C99 and C11 6.7.2, C99 and C11 6.7.2.1).' 21657 21658 By default it is treated as 'signed int' but this may be changed by 21659 the '-funsigned-bitfields' option. 21660 21661 * 'Allowable bit-field types other than '_Bool', 'signed int', and 21662 'unsigned int' (C99 and C11 6.7.2.1).' 21663 21664 Other integer types, such as 'long int', and enumerated types are 21665 permitted even in strictly conforming mode. 21666 21667 * 'Whether atomic types are permitted for bit-fields (C11 6.7.2.1).' 21668 21669 Atomic types are not permitted for bit-fields. 21670 21671 * 'Whether a bit-field can straddle a storage-unit boundary (C90 21672 6.5.2.1, C99 and C11 6.7.2.1).' 21673 21674 Determined by ABI. 21675 21676 * 'The order of allocation of bit-fields within a unit (C90 6.5.2.1, 21677 C99 and C11 6.7.2.1).' 21678 21679 Determined by ABI. 21680 21681 * 'The alignment of non-bit-field members of structures (C90 6.5.2.1, 21682 C99 and C11 6.7.2.1).' 21683 21684 Determined by ABI. 21685 21686 * 'The integer type compatible with each enumerated type (C90 21687 6.5.2.2, C99 and C11 6.7.2.2).' 21688 21689 Normally, the type is 'unsigned int' if there are no negative 21690 values in the enumeration, otherwise 'int'. If '-fshort-enums' is 21691 specified, then if there are negative values it is the first of 21692 'signed char', 'short' and 'int' that can represent all the values, 21693 otherwise it is the first of 'unsigned char', 'unsigned short' and 21694 'unsigned int' that can represent all the values. 21695 21696 On some targets, '-fshort-enums' is the default; this is determined 21697 by the ABI. 21698 21699 21700File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 21701 217024.10 Qualifiers 21703=============== 21704 21705 * 'What constitutes an access to an object that has 21706 volatile-qualified type (C90 6.5.3, C99 and C11 6.7.3).' 21707 21708 Such an object is normally accessed by pointers and used for 21709 accessing hardware. In most expressions, it is intuitively obvious 21710 what is a read and what is a write. For example 21711 21712 volatile int *dst = SOMEVALUE; 21713 volatile int *src = SOMEOTHERVALUE; 21714 *dst = *src; 21715 21716 will cause a read of the volatile object pointed to by SRC and 21717 store the value into the volatile object pointed to by DST. There 21718 is no guarantee that these reads and writes are atomic, especially 21719 for objects larger than 'int'. 21720 21721 However, if the volatile storage is not being modified, and the 21722 value of the volatile storage is not used, then the situation is 21723 less obvious. For example 21724 21725 volatile int *src = SOMEVALUE; 21726 *src; 21727 21728 According to the C standard, such an expression is an rvalue whose 21729 type is the unqualified version of its original type, i.e. 'int'. 21730 Whether GCC interprets this as a read of the volatile object being 21731 pointed to or only as a request to evaluate the expression for its 21732 side-effects depends on this type. 21733 21734 If it is a scalar type, or on most targets an aggregate type whose 21735 only member object is of a scalar type, or a union type whose 21736 member objects are of scalar types, the expression is interpreted 21737 by GCC as a read of the volatile object; in the other cases, the 21738 expression is only evaluated for its side-effects. 21739 21740 21741File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 21742 217434.11 Declarators 21744================ 21745 21746 * 'The maximum number of declarators that may modify an arithmetic, 21747 structure or union type (C90 6.5.4).' 21748 21749 GCC is only limited by available memory. 21750 21751 21752File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 21753 217544.12 Statements 21755=============== 21756 21757 * 'The maximum number of 'case' values in a 'switch' statement (C90 21758 6.6.4.2).' 21759 21760 GCC is only limited by available memory. 21761 21762 21763File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 21764 217654.13 Preprocessing directives 21766============================= 21767 21768*Note Implementation-defined behavior: (cpp)Implementation-defined 21769behavior, for details of these aspects of implementation-defined 21770behavior. 21771 21772 * 'The locations within '#pragma' directives where header name 21773 preprocessing tokens are recognized (C11 6.4, C11 6.4.7).' 21774 21775 * 'How sequences in both forms of header names are mapped to headers 21776 or external source file names (C90 6.1.7, C99 and C11 6.4.7).' 21777 21778 * 'Whether the value of a character constant in a constant expression 21779 that controls conditional inclusion matches the value of the same 21780 character constant in the execution character set (C90 6.8.1, C99 21781 and C11 6.10.1).' 21782 21783 * 'Whether the value of a single-character character constant in a 21784 constant expression that controls conditional inclusion may have a 21785 negative value (C90 6.8.1, C99 and C11 6.10.1).' 21786 21787 * 'The places that are searched for an included '<>' delimited 21788 header, and how the places are specified or the header is 21789 identified (C90 6.8.2, C99 and C11 6.10.2).' 21790 21791 * 'How the named source file is searched for in an included '""' 21792 delimited header (C90 6.8.2, C99 and C11 6.10.2).' 21793 21794 * 'The method by which preprocessing tokens (possibly resulting from 21795 macro expansion) in a '#include' directive are combined into a 21796 header name (C90 6.8.2, C99 and C11 6.10.2).' 21797 21798 * 'The nesting limit for '#include' processing (C90 6.8.2, C99 and 21799 C11 6.10.2).' 21800 21801 * 'Whether the '#' operator inserts a '\' character before the '\' 21802 character that begins a universal character name in a character 21803 constant or string literal (C99 and C11 6.10.3.2).' 21804 21805 * 'The behavior on each recognized non-'STDC #pragma' directive (C90 21806 6.8.6, C99 and C11 6.10.6).' 21807 21808 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by GCC 21809 on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 21810 details of target-specific pragmas. 21811 21812 * 'The definitions for '__DATE__' and '__TIME__' when respectively, 21813 the date and time of translation are not available (C90 6.8.8, C99 21814 6.10.8, C11 6.10.8.1).' 21815 21816 21817File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 21818 218194.14 Library functions 21820====================== 21821 21822The behavior of most of these points are dependent on the implementation 21823of the C library, and are not defined by GCC itself. 21824 21825 * 'The null pointer constant to which the macro 'NULL' expands (C90 21826 7.1.6, C99 7.17, C11 7.19).' 21827 21828 In '<stddef.h>', 'NULL' expands to '((void *)0)'. GCC does not 21829 provide the other headers which define 'NULL' and some library 21830 implementations may use other definitions in those headers. 21831 21832 21833File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 21834 218354.15 Architecture 21836================= 21837 21838 * 'The values or expressions assigned to the macros specified in the 21839 headers '<float.h>', '<limits.h>', and '<stdint.h>' (C90, C99 and 21840 C11 5.2.4.2, C99 7.18.2, C99 7.18.3, C11 7.20.2, C11 7.20.3).' 21841 21842 Determined by ABI. 21843 21844 * 'The result of attempting to indirectly access an object with 21845 automatic or thread storage duration from a thread other than the 21846 one with which it is associated (C11 6.2.4).' 21847 21848 Such accesses are supported, subject to the same requirements for 21849 synchronization for concurrent accesses as for concurrent accesses 21850 to any object. 21851 21852 * 'The number, order, and encoding of bytes in any object (when not 21853 explicitly specified in this International Standard) (C99 and C11 21854 6.2.6.1).' 21855 21856 Determined by ABI. 21857 21858 * 'Whether any extended alignments are supported and the contexts in 21859 which they are supported (C11 6.2.8).' 21860 21861 Extended alignments up to 2^{28} (bytes) are supported for objects 21862 of automatic storage duration. Alignments supported for objects of 21863 static and thread storage duration are determined by the ABI. 21864 21865 * 'Valid alignment values other than those returned by an _Alignof 21866 expression for fundamental types, if any (C11 6.2.8).' 21867 21868 Valid alignments are powers of 2 up to and including 2^{28}. 21869 21870 * 'The value of the result of the 'sizeof' and '_Alignof' operators 21871 (C90 6.3.3.4, C99 and C11 6.5.3.4).' 21872 21873 Determined by ABI. 21874 21875 21876File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 21877 218784.16 Locale-specific behavior 21879============================= 21880 21881The behavior of these points are dependent on the implementation of the 21882C library, and are not defined by GCC itself. 21883 21884 21885File: gcc.info, Node: C++ Implementation, Next: C Extensions, Prev: C Implementation, Up: Top 21886 218875 C++ Implementation-defined behavior 21888************************************* 21889 21890A conforming implementation of ISO C++ is required to document its 21891choice of behavior in each of the areas that are designated 21892"implementation defined". The following lists all such areas, along 21893with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 2189414882:2003 standards. Some areas are only implementation-defined in one 21895version of the standard. 21896 21897 Some choices depend on the externally determined ABI for the platform 21898(including standard character encodings) which GCC follows; these are 21899listed as "determined by ABI" below. *Note Binary Compatibility: 21900Compatibility, and <http://gcc.gnu.org/readings.html>. Some choices are 21901documented in the preprocessor manual. *Note Implementation-defined 21902behavior: (cpp)Implementation-defined behavior. Some choices are 21903documented in the corresponding document for the C language. *Note C 21904Implementation::. Some choices are made by the library and operating 21905system (or other environment when compiling for a freestanding 21906environment); refer to their documentation for details. 21907 21908* Menu: 21909 21910* Conditionally-supported behavior:: 21911* Exception handling:: 21912 21913 21914File: gcc.info, Node: Conditionally-supported behavior, Next: Exception handling, Up: C++ Implementation 21915 219165.1 Conditionally-supported behavior 21917==================================== 21918 21919'Each implementation shall include documentation that identifies all 21920conditionally-supported constructs that it does not support (C++0x 219211.4).' 21922 21923 * 'Whether an argument of class type with a non-trivial copy 21924 constructor or destructor can be passed to ... (C++0x 5.2.2).' 21925 21926 Such argument passing is not supported. 21927 21928 21929File: gcc.info, Node: Exception handling, Prev: Conditionally-supported behavior, Up: C++ Implementation 21930 219315.2 Exception handling 21932====================== 21933 21934 * 'In the situation where no matching handler is found, it is 21935 implementation-defined whether or not the stack is unwound before 21936 std::terminate() is called (C++98 15.5.1).' 21937 21938 The stack is not unwound before std::terminate is called. 21939 21940 21941File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C++ Implementation, Up: Top 21942 219436 Extensions to the C Language Family 21944************************************* 21945 21946GNU C provides several language features not found in ISO standard C. 21947(The '-pedantic' option directs GCC to print a warning message if any of 21948these features is used.) To test for the availability of these features 21949in conditional compilation, check for a predefined macro '__GNUC__', 21950which is always defined under GCC. 21951 21952 These extensions are available in C and Objective-C. Most of them are 21953also available in C++. *Note Extensions to the C++ Language: C++ 21954Extensions, for extensions that apply _only_ to C++. 21955 21956 Some features that are in ISO C99 but not C90 or C++ are also, as 21957extensions, accepted by GCC in C90 mode and in C++. 21958 21959* Menu: 21960 21961* Statement Exprs:: Putting statements and declarations inside expressions. 21962* Local Labels:: Labels local to a block. 21963* Labels as Values:: Getting pointers to labels, and computed gotos. 21964* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 21965* Constructing Calls:: Dispatching a call to another function. 21966* Typeof:: 'typeof': referring to the type of an expression. 21967* Conditionals:: Omitting the middle operand of a '?:' expression. 21968* __int128:: 128-bit integers--'__int128'. 21969* Long Long:: Double-word integers--'long long int'. 21970* Complex:: Data types for complex numbers. 21971* Floating Types:: Additional Floating Types. 21972* Half-Precision:: Half-Precision Floating Point. 21973* Decimal Float:: Decimal Floating Types. 21974* Hex Floats:: Hexadecimal floating-point constants. 21975* Fixed-Point:: Fixed-Point Types. 21976* Named Address Spaces::Named address spaces. 21977* Zero Length:: Zero-length arrays. 21978* Empty Structures:: Structures with no members. 21979* Variable Length:: Arrays whose length is computed at run time. 21980* Variadic Macros:: Macros with a variable number of arguments. 21981* Escaped Newlines:: Slightly looser rules for escaped newlines. 21982* Subscripting:: Any array can be subscripted, even if not an lvalue. 21983* Pointer Arith:: Arithmetic on 'void'-pointers and function pointers. 21984* Initializers:: Non-constant initializers. 21985* Compound Literals:: Compound literals give structures, unions 21986 or arrays as values. 21987* Designated Inits:: Labeling elements of initializers. 21988* Case Ranges:: 'case 1 ... 9' and such. 21989* Cast to Union:: Casting to union type from any member of the union. 21990* Mixed Declarations:: Mixing declarations and code. 21991* Function Attributes:: Declaring that functions have no side effects, 21992 or that they can never return. 21993* Attribute Syntax:: Formal syntax for attributes. 21994* Function Prototypes:: Prototype declarations and old-style definitions. 21995* C++ Comments:: C++ comments are recognized. 21996* Dollar Signs:: Dollar sign is allowed in identifiers. 21997* Character Escapes:: '\e' stands for the character <ESC>. 21998* Variable Attributes:: Specifying attributes of variables. 21999* Type Attributes:: Specifying attributes of types. 22000* Alignment:: Inquiring about the alignment of a type or variable. 22001* Inline:: Defining inline functions (as fast as macros). 22002* Volatiles:: What constitutes an access to a volatile object. 22003* Extended Asm:: Assembler instructions with C expressions as operands. 22004 (With them you can define "built-in" functions.) 22005* Constraints:: Constraints for asm operands 22006* Asm Labels:: Specifying the assembler name to use for a C symbol. 22007* Explicit Reg Vars:: Defining variables residing in specified registers. 22008* Alternate Keywords:: '__const__', '__asm__', etc., for header files. 22009* Incomplete Enums:: 'enum foo;', with details to follow. 22010* Function Names:: Printable strings which are the name of the current 22011 function. 22012* Return Address:: Getting the return or frame address of a function. 22013* Vector Extensions:: Using vector instructions through built-in functions. 22014* Offsetof:: Special syntax for implementing 'offsetof'. 22015* __sync Builtins:: Legacy built-in functions for atomic memory access. 22016* __atomic Builtins:: Atomic built-in functions with memory model. 22017* x86 specific memory model extensions for transactional memory:: x86 memory models. 22018* Object Size Checking:: Built-in functions for limited buffer overflow 22019 checking. 22020* Cilk Plus Builtins:: Built-in functions for the Cilk Plus language extension. 22021* Other Builtins:: Other built-in functions. 22022* Target Builtins:: Built-in functions specific to particular targets. 22023* Target Format Checks:: Format checks specific to particular targets. 22024* Pragmas:: Pragmas accepted by GCC. 22025* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 22026* Thread-Local:: Per-thread variables. 22027* Binary constants:: Binary constants using the '0b' prefix. 22028 22029 22030File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 22031 220326.1 Statements and Declarations in Expressions 22033============================================== 22034 22035A compound statement enclosed in parentheses may appear as an expression 22036in GNU C. This allows you to use loops, switches, and local variables 22037within an expression. 22038 22039 Recall that a compound statement is a sequence of statements surrounded 22040by braces; in this construct, parentheses go around the braces. For 22041example: 22042 22043 ({ int y = foo (); int z; 22044 if (y > 0) z = y; 22045 else z = - y; 22046 z; }) 22047 22048is a valid (though slightly more complex than necessary) expression for 22049the absolute value of 'foo ()'. 22050 22051 The last thing in the compound statement should be an expression 22052followed by a semicolon; the value of this subexpression serves as the 22053value of the entire construct. (If you use some other kind of statement 22054last within the braces, the construct has type 'void', and thus 22055effectively no value.) 22056 22057 This feature is especially useful in making macro definitions "safe" 22058(so that they evaluate each operand exactly once). For example, the 22059"maximum" function is commonly defined as a macro in standard C as 22060follows: 22061 22062 #define max(a,b) ((a) > (b) ? (a) : (b)) 22063 22064But this definition computes either A or B twice, with bad results if 22065the operand has side effects. In GNU C, if you know the type of the 22066operands (here taken as 'int'), you can define the macro safely as 22067follows: 22068 22069 #define maxint(a,b) \ 22070 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 22071 22072 Embedded statements are not allowed in constant expressions, such as 22073the value of an enumeration constant, the width of a bit-field, or the 22074initial value of a static variable. 22075 22076 If you don't know the type of the operand, you can still do this, but 22077you must use 'typeof' or '__auto_type' (*note Typeof::). 22078 22079 In G++, the result value of a statement expression undergoes array and 22080function pointer decay, and is returned by value to the enclosing 22081expression. For instance, if 'A' is a class, then 22082 22083 A a; 22084 22085 ({a;}).Foo () 22086 22087constructs a temporary 'A' object to hold the result of the statement 22088expression, and that is used to invoke 'Foo'. Therefore the 'this' 22089pointer observed by 'Foo' is not the address of 'a'. 22090 22091 In a statement expression, any temporaries created within a statement 22092are destroyed at that statement's end. This makes statement expressions 22093inside macros slightly different from function calls. In the latter 22094case temporaries introduced during argument evaluation are destroyed at 22095the end of the statement that includes the function call. In the 22096statement expression case they are destroyed during the statement 22097expression. For instance, 22098 22099 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 22100 template<typename T> T function(T a) { T b = a; return b + 3; } 22101 22102 void foo () 22103 { 22104 macro (X ()); 22105 function (X ()); 22106 } 22107 22108has different places where temporaries are destroyed. For the 'macro' 22109case, the temporary 'X' is destroyed just after the initialization of 22110'b'. In the 'function' case that temporary is destroyed when the 22111function returns. 22112 22113 These considerations mean that it is probably a bad idea to use 22114statement expressions of this form in header files that are designed to 22115work with C++. (Note that some versions of the GNU C Library contained 22116header files using statement expressions that lead to precisely this 22117bug.) 22118 22119 Jumping into a statement expression with 'goto' or using a 'switch' 22120statement outside the statement expression with a 'case' or 'default' 22121label inside the statement expression is not permitted. Jumping into a 22122statement expression with a computed 'goto' (*note Labels as Values::) 22123has undefined behavior. Jumping out of a statement expression is 22124permitted, but if the statement expression is part of a larger 22125expression then it is unspecified which other subexpressions of that 22126expression have been evaluated except where the language definition 22127requires certain subexpressions to be evaluated before or after the 22128statement expression. In any case, as with a function call, the 22129evaluation of a statement expression is not interleaved with the 22130evaluation of other parts of the containing expression. For example, 22131 22132 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 22133 22134calls 'foo' and 'bar1' and does not call 'baz' but may or may not call 22135'bar2'. If 'bar2' is called, it is called after 'foo' and before 22136'bar1'. 22137 22138 22139File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 22140 221416.2 Locally Declared Labels 22142=========================== 22143 22144GCC allows you to declare "local labels" in any nested block scope. A 22145local label is just like an ordinary label, but you can only reference 22146it (with a 'goto' statement, or by taking its address) within the block 22147in which it is declared. 22148 22149 A local label declaration looks like this: 22150 22151 __label__ LABEL; 22152 22153or 22154 22155 __label__ LABEL1, LABEL2, /* ... */; 22156 22157 Local label declarations must come at the beginning of the block, 22158before any ordinary declarations or statements. 22159 22160 The label declaration defines the label _name_, but does not define the 22161label itself. You must do this in the usual way, with 'LABEL:', within 22162the statements of the statement expression. 22163 22164 The local label feature is useful for complex macros. If a macro 22165contains nested loops, a 'goto' can be useful for breaking out of them. 22166However, an ordinary label whose scope is the whole function cannot be 22167used: if the macro can be expanded several times in one function, the 22168label is multiply defined in that function. A local label avoids this 22169problem. For example: 22170 22171 #define SEARCH(value, array, target) \ 22172 do { \ 22173 __label__ found; \ 22174 typeof (target) _SEARCH_target = (target); \ 22175 typeof (*(array)) *_SEARCH_array = (array); \ 22176 int i, j; \ 22177 int value; \ 22178 for (i = 0; i < max; i++) \ 22179 for (j = 0; j < max; j++) \ 22180 if (_SEARCH_array[i][j] == _SEARCH_target) \ 22181 { (value) = i; goto found; } \ 22182 (value) = -1; \ 22183 found:; \ 22184 } while (0) 22185 22186 This could also be written using a statement expression: 22187 22188 #define SEARCH(array, target) \ 22189 ({ \ 22190 __label__ found; \ 22191 typeof (target) _SEARCH_target = (target); \ 22192 typeof (*(array)) *_SEARCH_array = (array); \ 22193 int i, j; \ 22194 int value; \ 22195 for (i = 0; i < max; i++) \ 22196 for (j = 0; j < max; j++) \ 22197 if (_SEARCH_array[i][j] == _SEARCH_target) \ 22198 { value = i; goto found; } \ 22199 value = -1; \ 22200 found: \ 22201 value; \ 22202 }) 22203 22204 Local label declarations also make the labels they declare visible to 22205nested functions, if there are any. *Note Nested Functions::, for 22206details. 22207 22208 22209File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 22210 222116.3 Labels as Values 22212==================== 22213 22214You can get the address of a label defined in the current function (or a 22215containing function) with the unary operator '&&'. The value has type 22216'void *'. This value is a constant and can be used wherever a constant 22217of that type is valid. For example: 22218 22219 void *ptr; 22220 /* ... */ 22221 ptr = &&foo; 22222 22223 To use these values, you need to be able to jump to one. This is done 22224with the computed goto statement(1), 'goto *EXP;'. For example, 22225 22226 goto *ptr; 22227 22228Any expression of type 'void *' is allowed. 22229 22230 One way of using these constants is in initializing a static array that 22231serves as a jump table: 22232 22233 static void *array[] = { &&foo, &&bar, &&hack }; 22234 22235Then you can select a label with indexing, like this: 22236 22237 goto *array[i]; 22238 22239Note that this does not check whether the subscript is in bounds--array 22240indexing in C never does that. 22241 22242 Such an array of label values serves a purpose much like that of the 22243'switch' statement. The 'switch' statement is cleaner, so use that 22244rather than an array unless the problem does not fit a 'switch' 22245statement very well. 22246 22247 Another use of label values is in an interpreter for threaded code. 22248The labels within the interpreter function can be stored in the threaded 22249code for super-fast dispatching. 22250 22251 You may not use this mechanism to jump to code in a different function. 22252If you do that, totally unpredictable things happen. The best way to 22253avoid this is to store the label address only in automatic variables and 22254never pass it as an argument. 22255 22256 An alternate way to write the above example is 22257 22258 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 22259 &&hack - &&foo }; 22260 goto *(&&foo + array[i]); 22261 22262This is more friendly to code living in shared libraries, as it reduces 22263the number of dynamic relocations that are needed, and by consequence, 22264allows the data to be read-only. This alternative with label 22265differences is not supported for the AVR target, please use the first 22266approach for AVR programs. 22267 22268 The '&&foo' expressions for the same label might have different values 22269if the containing function is inlined or cloned. If a program relies on 22270them being always the same, '__attribute__((__noinline__,__noclone__))' 22271should be used to prevent inlining and cloning. If '&&foo' is used in a 22272static variable initializer, inlining and cloning is forbidden. 22273 22274 ---------- Footnotes ---------- 22275 22276 (1) The analogous feature in Fortran is called an assigned goto, but 22277that name seems inappropriate in C, where one can do more than simply 22278store label addresses in label variables. 22279 22280 22281File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 22282 222836.4 Nested Functions 22284==================== 22285 22286A "nested function" is a function defined inside another function. 22287Nested functions are supported as an extension in GNU C, but are not 22288supported by GNU C++. 22289 22290 The nested function's name is local to the block where it is defined. 22291For example, here we define a nested function named 'square', and call 22292it twice: 22293 22294 foo (double a, double b) 22295 { 22296 double square (double z) { return z * z; } 22297 22298 return square (a) + square (b); 22299 } 22300 22301 The nested function can access all the variables of the containing 22302function that are visible at the point of its definition. This is 22303called "lexical scoping". For example, here we show a nested function 22304which uses an inherited variable named 'offset': 22305 22306 bar (int *array, int offset, int size) 22307 { 22308 int access (int *array, int index) 22309 { return array[index + offset]; } 22310 int i; 22311 /* ... */ 22312 for (i = 0; i < size; i++) 22313 /* ... */ access (array, i) /* ... */ 22314 } 22315 22316 Nested function definitions are permitted within functions in the 22317places where variable definitions are allowed; that is, in any block, 22318mixed with the other declarations and statements in the block. 22319 22320 It is possible to call the nested function from outside the scope of 22321its name by storing its address or passing the address to another 22322function: 22323 22324 hack (int *array, int size) 22325 { 22326 void store (int index, int value) 22327 { array[index] = value; } 22328 22329 intermediate (store, size); 22330 } 22331 22332 Here, the function 'intermediate' receives the address of 'store' as an 22333argument. If 'intermediate' calls 'store', the arguments given to 22334'store' are used to store into 'array'. But this technique works only 22335so long as the containing function ('hack', in this example) does not 22336exit. 22337 22338 If you try to call the nested function through its address after the 22339containing function exits, all hell breaks loose. If you try to call it 22340after a containing scope level exits, and if it refers to some of the 22341variables that are no longer in scope, you may be lucky, but it's not 22342wise to take the risk. If, however, the nested function does not refer 22343to anything that has gone out of scope, you should be safe. 22344 22345 GCC implements taking the address of a nested function using a 22346technique called "trampolines". This technique was described in 22347'Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 22348Proceedings, October 17-21, 1988). 22349 22350 A nested function can jump to a label inherited from a containing 22351function, provided the label is explicitly declared in the containing 22352function (*note Local Labels::). Such a jump returns instantly to the 22353containing function, exiting the nested function that did the 'goto' and 22354any intermediate functions as well. Here is an example: 22355 22356 bar (int *array, int offset, int size) 22357 { 22358 __label__ failure; 22359 int access (int *array, int index) 22360 { 22361 if (index > size) 22362 goto failure; 22363 return array[index + offset]; 22364 } 22365 int i; 22366 /* ... */ 22367 for (i = 0; i < size; i++) 22368 /* ... */ access (array, i) /* ... */ 22369 /* ... */ 22370 return 0; 22371 22372 /* Control comes here from 'access' 22373 if it detects an error. */ 22374 failure: 22375 return -1; 22376 } 22377 22378 A nested function always has no linkage. Declaring one with 'extern' 22379or 'static' is erroneous. If you need to declare the nested function 22380before its definition, use 'auto' (which is otherwise meaningless for 22381function declarations). 22382 22383 bar (int *array, int offset, int size) 22384 { 22385 __label__ failure; 22386 auto int access (int *, int); 22387 /* ... */ 22388 int access (int *array, int index) 22389 { 22390 if (index > size) 22391 goto failure; 22392 return array[index + offset]; 22393 } 22394 /* ... */ 22395 } 22396 22397 22398File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 22399 224006.5 Constructing Function Calls 22401=============================== 22402 22403Using the built-in functions described below, you can record the 22404arguments a function received, and call another function with the same 22405arguments, without knowing the number or types of the arguments. 22406 22407 You can also record the return value of that function call, and later 22408return that value, without knowing what data type the function tried to 22409return (as long as your caller expects that data type). 22410 22411 However, these built-in functions may interact badly with some 22412sophisticated features or other extensions of the language. It is, 22413therefore, not recommended to use them outside very simple functions 22414acting as mere forwarders for their arguments. 22415 22416 -- Built-in Function: void * __builtin_apply_args () 22417 This built-in function returns a pointer to data describing how to 22418 perform a call with the same arguments as are passed to the current 22419 function. 22420 22421 The function saves the arg pointer register, structure value 22422 address, and all registers that might be used to pass arguments to 22423 a function into a block of memory allocated on the stack. Then it 22424 returns the address of that block. 22425 22426 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 22427 *ARGUMENTS, size_t SIZE) 22428 This built-in function invokes FUNCTION with a copy of the 22429 parameters described by ARGUMENTS and SIZE. 22430 22431 The value of ARGUMENTS should be the value returned by 22432 '__builtin_apply_args'. The argument SIZE specifies the size of 22433 the stack argument data, in bytes. 22434 22435 This function returns a pointer to data describing how to return 22436 whatever value is returned by FUNCTION. The data is saved in a 22437 block of memory allocated on the stack. 22438 22439 It is not always simple to compute the proper value for SIZE. The 22440 value is used by '__builtin_apply' to compute the amount of data 22441 that should be pushed on the stack and copied from the incoming 22442 argument area. 22443 22444 -- Built-in Function: void __builtin_return (void *RESULT) 22445 This built-in function returns the value described by RESULT from 22446 the containing function. You should specify, for RESULT, a value 22447 returned by '__builtin_apply'. 22448 22449 -- Built-in Function: __builtin_va_arg_pack () 22450 This built-in function represents all anonymous arguments of an 22451 inline function. It can be used only in inline functions that are 22452 always inlined, never compiled as a separate function, such as 22453 those using '__attribute__ ((__always_inline__))' or '__attribute__ 22454 ((__gnu_inline__))' extern inline functions. It must be only 22455 passed as last argument to some other function with variable 22456 arguments. This is useful for writing small wrapper inlines for 22457 variable argument functions, when using preprocessor macros is 22458 undesirable. For example: 22459 extern int myprintf (FILE *f, const char *format, ...); 22460 extern inline __attribute__ ((__gnu_inline__)) int 22461 myprintf (FILE *f, const char *format, ...) 22462 { 22463 int r = fprintf (f, "myprintf: "); 22464 if (r < 0) 22465 return r; 22466 int s = fprintf (f, format, __builtin_va_arg_pack ()); 22467 if (s < 0) 22468 return s; 22469 return r + s; 22470 } 22471 22472 -- Built-in Function: size_t __builtin_va_arg_pack_len () 22473 This built-in function returns the number of anonymous arguments of 22474 an inline function. It can be used only in inline functions that 22475 are always inlined, never compiled as a separate function, such as 22476 those using '__attribute__ ((__always_inline__))' or '__attribute__ 22477 ((__gnu_inline__))' extern inline functions. For example following 22478 does link- or run-time checking of open arguments for optimized 22479 code: 22480 #ifdef __OPTIMIZE__ 22481 extern inline __attribute__((__gnu_inline__)) int 22482 myopen (const char *path, int oflag, ...) 22483 { 22484 if (__builtin_va_arg_pack_len () > 1) 22485 warn_open_too_many_arguments (); 22486 22487 if (__builtin_constant_p (oflag)) 22488 { 22489 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 22490 { 22491 warn_open_missing_mode (); 22492 return __open_2 (path, oflag); 22493 } 22494 return open (path, oflag, __builtin_va_arg_pack ()); 22495 } 22496 22497 if (__builtin_va_arg_pack_len () < 1) 22498 return __open_2 (path, oflag); 22499 22500 return open (path, oflag, __builtin_va_arg_pack ()); 22501 } 22502 #endif 22503 22504 22505File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 22506 225076.6 Referring to a Type with 'typeof' 22508===================================== 22509 22510Another way to refer to the type of an expression is with 'typeof'. The 22511syntax of using of this keyword looks like 'sizeof', but the construct 22512acts semantically like a type name defined with 'typedef'. 22513 22514 There are two ways of writing the argument to 'typeof': with an 22515expression or with a type. Here is an example with an expression: 22516 22517 typeof (x[0](1)) 22518 22519This assumes that 'x' is an array of pointers to functions; the type 22520described is that of the values of the functions. 22521 22522 Here is an example with a typename as the argument: 22523 22524 typeof (int *) 22525 22526Here the type described is that of pointers to 'int'. 22527 22528 If you are writing a header file that must work when included in ISO C 22529programs, write '__typeof__' instead of 'typeof'. *Note Alternate 22530Keywords::. 22531 22532 A 'typeof' construct can be used anywhere a typedef name can be used. 22533For example, you can use it in a declaration, in a cast, or inside of 22534'sizeof' or 'typeof'. 22535 22536 The operand of 'typeof' is evaluated for its side effects if and only 22537if it is an expression of variably modified type or the name of such a 22538type. 22539 22540 'typeof' is often useful in conjunction with statement expressions 22541(*note Statement Exprs::). Here is how the two together can be used to 22542define a safe "maximum" macro which operates on any arithmetic type and 22543evaluates each of its arguments exactly once: 22544 22545 #define max(a,b) \ 22546 ({ typeof (a) _a = (a); \ 22547 typeof (b) _b = (b); \ 22548 _a > _b ? _a : _b; }) 22549 22550 The reason for using names that start with underscores for the local 22551variables is to avoid conflicts with variable names that occur within 22552the expressions that are substituted for 'a' and 'b'. Eventually we 22553hope to design a new form of declaration syntax that allows you to 22554declare variables whose scopes start only after their initializers; this 22555will be a more reliable way to prevent such conflicts. 22556 22557Some more examples of the use of 'typeof': 22558 22559 * This declares 'y' with the type of what 'x' points to. 22560 22561 typeof (*x) y; 22562 22563 * This declares 'y' as an array of such values. 22564 22565 typeof (*x) y[4]; 22566 22567 * This declares 'y' as an array of pointers to characters: 22568 22569 typeof (typeof (char *)[4]) y; 22570 22571 It is equivalent to the following traditional C declaration: 22572 22573 char *y[4]; 22574 22575 To see the meaning of the declaration using 'typeof', and why it 22576 might be a useful way to write, rewrite it with these macros: 22577 22578 #define pointer(T) typeof(T *) 22579 #define array(T, N) typeof(T [N]) 22580 22581 Now the declaration can be rewritten this way: 22582 22583 array (pointer (char), 4) y; 22584 22585 Thus, 'array (pointer (char), 4)' is the type of arrays of 4 22586 pointers to 'char'. 22587 22588 In GNU C, but not GNU C++, you may also declare the type of a variable 22589as '__auto_type'. In that case, the declaration must declare only one 22590variable, whose declarator must just be an identifier, the declaration 22591must be initialized, and the type of the variable is determined by the 22592initializer; the name of the variable is not in scope until after the 22593initializer. (In C++, you should use C++11 'auto' for this purpose.) 22594Using '__auto_type', the "maximum" macro above could be written as: 22595 22596 #define max(a,b) \ 22597 ({ __auto_type _a = (a); \ 22598 __auto_type _b = (b); \ 22599 _a > _b ? _a : _b; }) 22600 22601 Using '__auto_type' instead of 'typeof' has two advantages: 22602 22603 * Each argument to the macro appears only once in the expansion of 22604 the macro. This prevents the size of the macro expansion growing 22605 exponentially when calls to such macros are nested inside arguments 22606 of such macros. 22607 22608 * If the argument to the macro has variably modified type, it is 22609 evaluated only once when using '__auto_type', but twice if 'typeof' 22610 is used. 22611 22612 _Compatibility Note:_ In addition to 'typeof', GCC 2 supported a more 22613limited extension that permitted one to write 22614 22615 typedef T = EXPR; 22616 22617with the effect of declaring T to have the type of the expression EXPR. 22618This extension does not work with GCC 3 (versions between 3.0 and 3.2 22619crash; 3.2.1 and later give an error). Code that relies on it should be 22620rewritten to use 'typeof': 22621 22622 typedef typeof(EXPR) T; 22623 22624This works with all versions of GCC. 22625 22626 22627File: gcc.info, Node: Conditionals, Next: __int128, Prev: Typeof, Up: C Extensions 22628 226296.7 Conditionals with Omitted Operands 22630====================================== 22631 22632The middle operand in a conditional expression may be omitted. Then if 22633the first operand is nonzero, its value is the value of the conditional 22634expression. 22635 22636 Therefore, the expression 22637 22638 x ? : y 22639 22640has the value of 'x' if that is nonzero; otherwise, the value of 'y'. 22641 22642 This example is perfectly equivalent to 22643 22644 x ? x : y 22645 22646In this simple case, the ability to omit the middle operand is not 22647especially useful. When it becomes useful is when the first operand 22648does, or may (if it is a macro argument), contain a side effect. Then 22649repeating the operand in the middle would perform the side effect twice. 22650Omitting the middle operand uses the value already computed without the 22651undesirable effects of recomputing it. 22652 22653 22654File: gcc.info, Node: __int128, Next: Long Long, Prev: Conditionals, Up: C Extensions 22655 226566.8 128-bit integers 22657==================== 22658 22659As an extension the integer scalar type '__int128' is supported for 22660targets which have an integer mode wide enough to hold 128 bits. Simply 22661write '__int128' for a signed 128-bit integer, or 'unsigned __int128' 22662for an unsigned 128-bit integer. There is no support in GCC for 22663expressing an integer constant of type '__int128' for targets with 'long 22664long' integer less than 128 bits wide. 22665 22666 22667File: gcc.info, Node: Long Long, Next: Complex, Prev: __int128, Up: C Extensions 22668 226696.9 Double-Word Integers 22670======================== 22671 22672ISO C99 supports data types for integers that are at least 64 bits wide, 22673and as an extension GCC supports them in C90 mode and in C++. Simply 22674write 'long long int' for a signed integer, or 'unsigned long long int' 22675for an unsigned integer. To make an integer constant of type 'long long 22676int', add the suffix 'LL' to the integer. To make an integer constant 22677of type 'unsigned long long int', add the suffix 'ULL' to the integer. 22678 22679 You can use these types in arithmetic like any other integer types. 22680Addition, subtraction, and bitwise boolean operations on these types are 22681open-coded on all types of machines. Multiplication is open-coded if 22682the machine supports a fullword-to-doubleword widening multiply 22683instruction. Division and shifts are open-coded only on machines that 22684provide special support. The operations that are not open-coded use 22685special library routines that come with GCC. 22686 22687 There may be pitfalls when you use 'long long' types for function 22688arguments without function prototypes. If a function expects type 'int' 22689for its argument, and you pass a value of type 'long long int', 22690confusion results because the caller and the subroutine disagree about 22691the number of bytes for the argument. Likewise, if the function expects 22692'long long int' and you pass 'int'. The best way to avoid such problems 22693is to use prototypes. 22694 22695 22696File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 22697 226986.10 Complex Numbers 22699==================== 22700 22701ISO C99 supports complex floating data types, and as an extension GCC 22702supports them in C90 mode and in C++. GCC also supports complex integer 22703data types which are not part of ISO C99. You can declare complex types 22704using the keyword '_Complex'. As an extension, the older GNU keyword 22705'__complex__' is also supported. 22706 22707 For example, '_Complex double x;' declares 'x' as a variable whose real 22708part and imaginary part are both of type 'double'. '_Complex short int 22709y;' declares 'y' to have real and imaginary parts of type 'short int'; 22710this is not likely to be useful, but it shows that the set of complex 22711types is complete. 22712 22713 To write a constant with a complex data type, use the suffix 'i' or 'j' 22714(either one; they are equivalent). For example, '2.5fi' has type 22715'_Complex float' and '3i' has type '_Complex int'. Such a constant 22716always has a pure imaginary value, but you can form any complex value 22717you like by adding one to a real constant. This is a GNU extension; if 22718you have an ISO C99 conforming C library (such as the GNU C Library), 22719and want to construct complex constants of floating type, you should 22720include '<complex.h>' and use the macros 'I' or '_Complex_I' instead. 22721 22722 To extract the real part of a complex-valued expression EXP, write 22723'__real__ EXP'. Likewise, use '__imag__' to extract the imaginary part. 22724This is a GNU extension; for values of floating type, you should use the 22725ISO C99 functions 'crealf', 'creal', 'creall', 'cimagf', 'cimag' and 22726'cimagl', declared in '<complex.h>' and also provided as built-in 22727functions by GCC. 22728 22729 The operator '~' performs complex conjugation when used on a value with 22730a complex type. This is a GNU extension; for values of floating type, 22731you should use the ISO C99 functions 'conjf', 'conj' and 'conjl', 22732declared in '<complex.h>' and also provided as built-in functions by 22733GCC. 22734 22735 GCC can allocate complex automatic variables in a noncontiguous 22736fashion; it's even possible for the real part to be in a register while 22737the imaginary part is on the stack (or vice versa). Only the DWARF 2 22738debug info format can represent this, so use of DWARF 2 is recommended. 22739If you are using the stabs debug info format, GCC describes a 22740noncontiguous complex variable as if it were two separate variables of 22741noncomplex type. If the variable's actual name is 'foo', the two 22742fictitious variables are named 'foo$real' and 'foo$imag'. You can 22743examine and set these two fictitious variables with your debugger. 22744 22745 22746File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 22747 227486.11 Additional Floating Types 22749============================== 22750 22751As an extension, GNU C supports additional floating types, '__float80' 22752and '__float128' to support 80-bit ('XFmode') and 128-bit ('TFmode') 22753floating types. Support for additional types includes the arithmetic 22754operators: add, subtract, multiply, divide; unary arithmetic operators; 22755relational operators; equality operators; and conversions to and from 22756integer and other floating types. Use a suffix 'w' or 'W' in a literal 22757constant of type '__float80' and 'q' or 'Q' for '_float128'. You can 22758declare complex types using the corresponding internal complex type, 22759'XCmode' for '__float80' type and 'TCmode' for '__float128' type: 22760 22761 typedef _Complex float __attribute__((mode(TC))) _Complex128; 22762 typedef _Complex float __attribute__((mode(XC))) _Complex80; 22763 22764 Not all targets support additional floating-point types. '__float80' 22765and '__float128' types are supported on i386, x86_64 and IA-64 targets. 22766The '__float128' type is supported on hppa HP-UX targets. 22767 22768 22769File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 22770 227716.12 Half-Precision Floating Point 22772================================== 22773 22774On ARM targets, GCC supports half-precision (16-bit) floating point via 22775the '__fp16' type. You must enable this type explicitly with the 22776'-mfp16-format' command-line option in order to use it. 22777 22778 ARM supports two incompatible representations for half-precision 22779floating-point values. You must choose one of the representations and 22780use it consistently in your program. 22781 22782 Specifying '-mfp16-format=ieee' selects the IEEE 754-2008 format. This 22783format can represent normalized values in the range of 2^{-14} to 65504. 22784There are 11 bits of significand precision, approximately 3 decimal 22785digits. 22786 22787 Specifying '-mfp16-format=alternative' selects the ARM alternative 22788format. This representation is similar to the IEEE format, but does not 22789support infinities or NaNs. Instead, the range of exponents is 22790extended, so that this format can represent normalized values in the 22791range of 2^{-14} to 131008. 22792 22793 The '__fp16' type is a storage format only. For purposes of arithmetic 22794and other operations, '__fp16' values in C or C++ expressions are 22795automatically promoted to 'float'. In addition, you cannot declare a 22796function with a return value or parameters of type '__fp16'. 22797 22798 Note that conversions from 'double' to '__fp16' involve an intermediate 22799conversion to 'float'. Because of rounding, this can sometimes produce 22800a different result than a direct conversion. 22801 22802 ARM provides hardware support for conversions between '__fp16' and 22803'float' values as an extension to VFP and NEON (Advanced SIMD). GCC 22804generates code using these hardware instructions if you compile with 22805options to select an FPU that provides them; for example, 22806'-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the '-mfp16-format' 22807option to select a half-precision format. 22808 22809 Language-level support for the '__fp16' data type is independent of 22810whether GCC generates code using hardware floating-point instructions. 22811In cases where hardware support is not specified, GCC implements 22812conversions between '__fp16' and 'float' values as library calls. 22813 22814 22815File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 22816 228176.13 Decimal Floating Types 22818=========================== 22819 22820As an extension, GNU C supports decimal floating types as defined in the 22821N1312 draft of ISO/IEC WDTR24732. Support for decimal floating types in 22822GCC will evolve as the draft technical report changes. Calling 22823conventions for any target might also change. Not all targets support 22824decimal floating types. 22825 22826 The decimal floating types are '_Decimal32', '_Decimal64', and 22827'_Decimal128'. They use a radix of ten, unlike the floating types 22828'float', 'double', and 'long double' whose radix is not specified by the 22829C standard but is usually two. 22830 22831 Support for decimal floating types includes the arithmetic operators 22832add, subtract, multiply, divide; unary arithmetic operators; relational 22833operators; equality operators; and conversions to and from integer and 22834other floating types. Use a suffix 'df' or 'DF' in a literal constant 22835of type '_Decimal32', 'dd' or 'DD' for '_Decimal64', and 'dl' or 'DL' 22836for '_Decimal128'. 22837 22838 GCC support of decimal float as specified by the draft technical report 22839is incomplete: 22840 22841 * When the value of a decimal floating type cannot be represented in 22842 the integer type to which it is being converted, the result is 22843 undefined rather than the result value specified by the draft 22844 technical report. 22845 22846 * GCC does not provide the C library functionality associated with 22847 'math.h', 'fenv.h', 'stdio.h', 'stdlib.h', and 'wchar.h', which 22848 must come from a separate C library implementation. Because of 22849 this the GNU C compiler does not define macro '__STDC_DEC_FP__' to 22850 indicate that the implementation conforms to the technical report. 22851 22852 Types '_Decimal32', '_Decimal64', and '_Decimal128' are supported by 22853the DWARF 2 debug information format. 22854 22855 22856File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 22857 228586.14 Hex Floats 22859=============== 22860 22861ISO C99 supports floating-point numbers written not only in the usual 22862decimal notation, such as '1.55e1', but also numbers such as '0x1.fp3' 22863written in hexadecimal format. As a GNU extension, GCC supports this in 22864C90 mode (except in some cases when strictly conforming) and in C++. In 22865that format the '0x' hex introducer and the 'p' or 'P' exponent field 22866are mandatory. The exponent is a decimal number that indicates the 22867power of 2 by which the significant part is multiplied. Thus '0x1.f' is 228681 15/16, 'p3' multiplies it by 8, and the value of '0x1.fp3' is the same 22869as '1.55e1'. 22870 22871 Unlike for floating-point numbers in the decimal notation the exponent 22872is always required in the hexadecimal notation. Otherwise the compiler 22873would not be able to resolve the ambiguity of, e.g., '0x1.f'. This 22874could mean '1.0f' or '1.9375' since 'f' is also the extension for 22875floating-point constants of type 'float'. 22876 22877 22878File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 22879 228806.15 Fixed-Point Types 22881====================== 22882 22883As an extension, GNU C supports fixed-point types as defined in the 22884N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC 22885will evolve as the draft technical report changes. Calling conventions 22886for any target might also change. Not all targets support fixed-point 22887types. 22888 22889 The fixed-point types are 'short _Fract', '_Fract', 'long _Fract', 22890'long long _Fract', 'unsigned short _Fract', 'unsigned _Fract', 22891'unsigned long _Fract', 'unsigned long long _Fract', '_Sat short 22892_Fract', '_Sat _Fract', '_Sat long _Fract', '_Sat long long _Fract', 22893'_Sat unsigned short _Fract', '_Sat unsigned _Fract', '_Sat unsigned 22894long _Fract', '_Sat unsigned long long _Fract', 'short _Accum', 22895'_Accum', 'long _Accum', 'long long _Accum', 'unsigned short _Accum', 22896'unsigned _Accum', 'unsigned long _Accum', 'unsigned long long _Accum', 22897'_Sat short _Accum', '_Sat _Accum', '_Sat long _Accum', '_Sat long long 22898_Accum', '_Sat unsigned short _Accum', '_Sat unsigned _Accum', '_Sat 22899unsigned long _Accum', '_Sat unsigned long long _Accum'. 22900 22901 Fixed-point data values contain fractional and optional integral parts. 22902The format of fixed-point data varies and depends on the target machine. 22903 22904 Support for fixed-point types includes: 22905 * prefix and postfix increment and decrement operators ('++', '--') 22906 * unary arithmetic operators ('+', '-', '!') 22907 * binary arithmetic operators ('+', '-', '*', '/') 22908 * binary shift operators ('<<', '>>') 22909 * relational operators ('<', '<=', '>=', '>') 22910 * equality operators ('==', '!=') 22911 * assignment operators ('+=', '-=', '*=', '/=', '<<=', '>>=') 22912 * conversions to and from integer, floating-point, or fixed-point 22913 types 22914 22915 Use a suffix in a fixed-point literal constant: 22916 * 'hr' or 'HR' for 'short _Fract' and '_Sat short _Fract' 22917 * 'r' or 'R' for '_Fract' and '_Sat _Fract' 22918 * 'lr' or 'LR' for 'long _Fract' and '_Sat long _Fract' 22919 * 'llr' or 'LLR' for 'long long _Fract' and '_Sat long long _Fract' 22920 * 'uhr' or 'UHR' for 'unsigned short _Fract' and '_Sat unsigned short 22921 _Fract' 22922 * 'ur' or 'UR' for 'unsigned _Fract' and '_Sat unsigned _Fract' 22923 * 'ulr' or 'ULR' for 'unsigned long _Fract' and '_Sat unsigned long 22924 _Fract' 22925 * 'ullr' or 'ULLR' for 'unsigned long long _Fract' and '_Sat unsigned 22926 long long _Fract' 22927 * 'hk' or 'HK' for 'short _Accum' and '_Sat short _Accum' 22928 * 'k' or 'K' for '_Accum' and '_Sat _Accum' 22929 * 'lk' or 'LK' for 'long _Accum' and '_Sat long _Accum' 22930 * 'llk' or 'LLK' for 'long long _Accum' and '_Sat long long _Accum' 22931 * 'uhk' or 'UHK' for 'unsigned short _Accum' and '_Sat unsigned short 22932 _Accum' 22933 * 'uk' or 'UK' for 'unsigned _Accum' and '_Sat unsigned _Accum' 22934 * 'ulk' or 'ULK' for 'unsigned long _Accum' and '_Sat unsigned long 22935 _Accum' 22936 * 'ullk' or 'ULLK' for 'unsigned long long _Accum' and '_Sat unsigned 22937 long long _Accum' 22938 22939 GCC support of fixed-point types as specified by the draft technical 22940report is incomplete: 22941 22942 * Pragmas to control overflow and rounding behaviors are not 22943 implemented. 22944 22945 Fixed-point types are supported by the DWARF 2 debug information 22946format. 22947 22948 22949File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 22950 229516.16 Named Address Spaces 22952========================= 22953 22954As an extension, GNU C supports named address spaces as defined in the 22955N1275 draft of ISO/IEC DTR 18037. Support for named address spaces in 22956GCC will evolve as the draft technical report changes. Calling 22957conventions for any target might also change. At present, only the AVR, 22958SPU, M32C, and RL78 targets support address spaces other than the 22959generic address space. 22960 22961 Address space identifiers may be used exactly like any other C type 22962qualifier (e.g., 'const' or 'volatile'). See the N1275 document for 22963more details. 22964 229656.16.1 AVR Named Address Spaces 22966------------------------------- 22967 22968On the AVR target, there are several address spaces that can be used in 22969order to put read-only data into the flash memory and access that data 22970by means of the special instructions 'LPM' or 'ELPM' needed to read from 22971flash. 22972 22973 Per default, any data including read-only data is located in RAM (the 22974generic address space) so that non-generic address spaces are needed to 22975locate read-only data in flash memory _and_ to generate the right 22976instructions to access this data without using (inline) assembler code. 22977 22978'__flash' 22979 The '__flash' qualifier locates data in the '.progmem.data' 22980 section. Data is read using the 'LPM' instruction. Pointers to 22981 this address space are 16 bits wide. 22982 22983'__flash1' 22984'__flash2' 22985'__flash3' 22986'__flash4' 22987'__flash5' 22988 These are 16-bit address spaces locating data in section 22989 '.progmemN.data' where N refers to address space '__flashN'. The 22990 compiler sets the 'RAMPZ' segment register appropriately before 22991 reading data by means of the 'ELPM' instruction. 22992 22993'__memx' 22994 This is a 24-bit address space that linearizes flash and RAM: If 22995 the high bit of the address is set, data is read from RAM using the 22996 lower two bytes as RAM address. If the high bit of the address is 22997 clear, data is read from flash with 'RAMPZ' set according to the 22998 high byte of the address. *Note '__builtin_avr_flash_segment': AVR 22999 Built-in Functions. 23000 23001 Objects in this address space are located in '.progmemx.data'. 23002 23003 Example 23004 23005 char my_read (const __flash char ** p) 23006 { 23007 /* p is a pointer to RAM that points to a pointer to flash. 23008 The first indirection of p reads that flash pointer 23009 from RAM and the second indirection reads a char from this 23010 flash address. */ 23011 23012 return **p; 23013 } 23014 23015 /* Locate array[] in flash memory */ 23016 const __flash int array[] = { 3, 5, 7, 11, 13, 17, 19 }; 23017 23018 int i = 1; 23019 23020 int main (void) 23021 { 23022 /* Return 17 by reading from flash memory */ 23023 return array[array[i]]; 23024 } 23025 23026For each named address space supported by avr-gcc there is an equally 23027named but uppercase built-in macro defined. The purpose is to 23028facilitate testing if respective address space support is available or 23029not: 23030 23031 #ifdef __FLASH 23032 const __flash int var = 1; 23033 23034 int read_var (void) 23035 { 23036 return var; 23037 } 23038 #else 23039 #include <avr/pgmspace.h> /* From AVR-LibC */ 23040 23041 const int var PROGMEM = 1; 23042 23043 int read_var (void) 23044 { 23045 return (int) pgm_read_word (&var); 23046 } 23047 #endif /* __FLASH */ 23048 23049Notice that attribute *note 'progmem': AVR Variable Attributes. locates 23050data in flash but accesses to these data read from generic address 23051space, i.e. from RAM, so that you need special accessors like 23052'pgm_read_byte' from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) 23053together with attribute 'progmem'. 23054 23055Limitations and caveats 23056 23057 * Reading across the 64 KiB section boundary of the '__flash' or 23058 '__flashN' address spaces shows undefined behavior. The only 23059 address space that supports reading across the 64 KiB flash segment 23060 boundaries is '__memx'. 23061 23062 * If you use one of the '__flashN' address spaces you must arrange 23063 your linker script to locate the '.progmemN.data' sections 23064 according to your needs. 23065 23066 * Any data or pointers to the non-generic address spaces must be 23067 qualified as 'const', i.e. as read-only data. This still applies 23068 if the data in one of these address spaces like software version 23069 number or calibration lookup table are intended to be changed after 23070 load time by, say, a boot loader. In this case the right 23071 qualification is 'const' 'volatile' so that the compiler must not 23072 optimize away known values or insert them as immediates into 23073 operands of instructions. 23074 23075 * The following code initializes a variable 'pfoo' located in static 23076 storage with a 24-bit address: 23077 extern const __memx char foo; 23078 const __memx void *pfoo = &foo; 23079 23080 Such code requires at least binutils 2.23, see 23081 PR13503 (http://sourceware.org/PR13503). 23082 230836.16.2 M32C Named Address Spaces 23084-------------------------------- 23085 23086On the M32C target, with the R8C and M16C CPU variants, variables 23087qualified with '__far' are accessed using 32-bit addresses in order to 23088access memory beyond the first 64 Ki bytes. If '__far' is used with the 23089M32CM or M32C CPU variants, it has no effect. 23090 230916.16.3 RL78 Named Address Spaces 23092-------------------------------- 23093 23094On the RL78 target, variables qualified with '__far' are accessed with 2309532-bit pointers (20-bit addresses) rather than the default 16-bit 23096addresses. Non-far variables are assumed to appear in the topmost 2309764 KiB of the address space. 23098 230996.16.4 SPU Named Address Spaces 23100------------------------------- 23101 23102On the SPU target variables may be declared as belonging to another 23103address space by qualifying the type with the '__ea' address space 23104identifier: 23105 23106 extern int __ea i; 23107 23108The compiler generates special code to access the variable 'i'. It may 23109use runtime library support, or generate special machine instructions to 23110access that address space. 23111 23112 23113File: gcc.info, Node: Zero Length, Next: Empty Structures, Prev: Named Address Spaces, Up: C Extensions 23114 231156.17 Arrays of Length Zero 23116========================== 23117 23118Zero-length arrays are allowed in GNU C. They are very useful as the 23119last element of a structure that is really a header for a 23120variable-length object: 23121 23122 struct line { 23123 int length; 23124 char contents[0]; 23125 }; 23126 23127 struct line *thisline = (struct line *) 23128 malloc (sizeof (struct line) + this_length); 23129 thisline->length = this_length; 23130 23131 In ISO C90, you would have to give 'contents' a length of 1, which 23132means either you waste space or complicate the argument to 'malloc'. 23133 23134 In ISO C99, you would use a "flexible array member", which is slightly 23135different in syntax and semantics: 23136 23137 * Flexible array members are written as 'contents[]' without the '0'. 23138 23139 * Flexible array members have incomplete type, and so the 'sizeof' 23140 operator may not be applied. As a quirk of the original 23141 implementation of zero-length arrays, 'sizeof' evaluates to zero. 23142 23143 * Flexible array members may only appear as the last member of a 23144 'struct' that is otherwise non-empty. 23145 23146 * A structure containing a flexible array member, or a union 23147 containing such a structure (possibly recursively), may not be a 23148 member of a structure or an element of an array. (However, these 23149 uses are permitted by GCC as extensions.) 23150 23151 GCC versions before 3.0 allowed zero-length arrays to be statically 23152initialized, as if they were flexible arrays. In addition to those 23153cases that were useful, it also allowed initializations in situations 23154that would corrupt later data. Non-empty initialization of zero-length 23155arrays is now treated like any case where there are more initializer 23156elements than the array holds, in that a suitable warning about "excess 23157elements in array" is given, and the excess elements (all of them, in 23158this case) are ignored. 23159 23160 Instead GCC allows static initialization of flexible array members. 23161This is equivalent to defining a new structure containing the original 23162structure followed by an array of sufficient size to contain the data. 23163E.g. in the following, 'f1' is constructed as if it were declared like 23164'f2'. 23165 23166 struct f1 { 23167 int x; int y[]; 23168 } f1 = { 1, { 2, 3, 4 } }; 23169 23170 struct f2 { 23171 struct f1 f1; int data[3]; 23172 } f2 = { { 1 }, { 2, 3, 4 } }; 23173 23174The convenience of this extension is that 'f1' has the desired type, 23175eliminating the need to consistently refer to 'f2.f1'. 23176 23177 This has symmetry with normal static arrays, in that an array of 23178unknown size is also written with '[]'. 23179 23180 Of course, this extension only makes sense if the extra data comes at 23181the end of a top-level object, as otherwise we would be overwriting data 23182at subsequent offsets. To avoid undue complication and confusion with 23183initialization of deeply nested arrays, we simply disallow any non-empty 23184initialization except when the structure is the top-level object. For 23185example: 23186 23187 struct foo { int x; int y[]; }; 23188 struct bar { struct foo z; }; 23189 23190 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 23191 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 23192 struct bar c = { { 1, { } } }; // Valid. 23193 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 23194 23195 23196File: gcc.info, Node: Empty Structures, Next: Variable Length, Prev: Zero Length, Up: C Extensions 23197 231986.18 Structures With No Members 23199=============================== 23200 23201GCC permits a C structure to have no members: 23202 23203 struct empty { 23204 }; 23205 23206 The structure has size zero. In C++, empty structures are part of the 23207language. G++ treats empty structures as if they had a single member of 23208type 'char'. 23209 23210 23211File: gcc.info, Node: Variable Length, Next: Variadic Macros, Prev: Empty Structures, Up: C Extensions 23212 232136.19 Arrays of Variable Length 23214============================== 23215 23216Variable-length automatic arrays are allowed in ISO C99, and as an 23217extension GCC accepts them in C90 mode and in C++. These arrays are 23218declared like any other automatic arrays, but with a length that is not 23219a constant expression. The storage is allocated at the point of 23220declaration and deallocated when the block scope containing the 23221declaration exits. For example: 23222 23223 FILE * 23224 concat_fopen (char *s1, char *s2, char *mode) 23225 { 23226 char str[strlen (s1) + strlen (s2) + 1]; 23227 strcpy (str, s1); 23228 strcat (str, s2); 23229 return fopen (str, mode); 23230 } 23231 23232 Jumping or breaking out of the scope of the array name deallocates the 23233storage. Jumping into the scope is not allowed; you get an error 23234message for it. 23235 23236 As an extension, GCC accepts variable-length arrays as a member of a 23237structure or a union. For example: 23238 23239 void 23240 foo (int n) 23241 { 23242 struct S { int x[n]; }; 23243 } 23244 23245 You can use the function 'alloca' to get an effect much like 23246variable-length arrays. The function 'alloca' is available in many 23247other C implementations (but not in all). On the other hand, 23248variable-length arrays are more elegant. 23249 23250 There are other differences between these two methods. Space allocated 23251with 'alloca' exists until the containing _function_ returns. The space 23252for a variable-length array is deallocated as soon as the array name's 23253scope ends. (If you use both variable-length arrays and 'alloca' in the 23254same function, deallocation of a variable-length array also deallocates 23255anything more recently allocated with 'alloca'.) 23256 23257 You can also use variable-length arrays as arguments to functions: 23258 23259 struct entry 23260 tester (int len, char data[len][len]) 23261 { 23262 /* ... */ 23263 } 23264 23265 The length of an array is computed once when the storage is allocated 23266and is remembered for the scope of the array in case you access it with 23267'sizeof'. 23268 23269 If you want to pass the array first and the length afterward, you can 23270use a forward declaration in the parameter list--another GNU extension. 23271 23272 struct entry 23273 tester (int len; char data[len][len], int len) 23274 { 23275 /* ... */ 23276 } 23277 23278 The 'int len' before the semicolon is a "parameter forward 23279declaration", and it serves the purpose of making the name 'len' known 23280when the declaration of 'data' is parsed. 23281 23282 You can write any number of such parameter forward declarations in the 23283parameter list. They can be separated by commas or semicolons, but the 23284last one must end with a semicolon, which is followed by the "real" 23285parameter declarations. Each forward declaration must match a "real" 23286declaration in parameter name and data type. ISO C99 does not support 23287parameter forward declarations. 23288 23289 23290File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Variable Length, Up: C Extensions 23291 232926.20 Macros with a Variable Number of Arguments. 23293================================================ 23294 23295In the ISO C standard of 1999, a macro can be declared to accept a 23296variable number of arguments much as a function can. The syntax for 23297defining the macro is similar to that of a function. Here is an 23298example: 23299 23300 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 23301 23302Here '...' is a "variable argument". In the invocation of such a macro, 23303it represents the zero or more tokens until the closing parenthesis that 23304ends the invocation, including any commas. This set of tokens replaces 23305the identifier '__VA_ARGS__' in the macro body wherever it appears. See 23306the CPP manual for more information. 23307 23308 GCC has long supported variadic macros, and used a different syntax 23309that allowed you to give a name to the variable arguments just like any 23310other argument. Here is an example: 23311 23312 #define debug(format, args...) fprintf (stderr, format, args) 23313 23314This is in all ways equivalent to the ISO C example above, but arguably 23315more readable and descriptive. 23316 23317 GNU CPP has two further variadic macro extensions, and permits them to 23318be used with either of the above forms of macro definition. 23319 23320 In standard C, you are not allowed to leave the variable argument out 23321entirely; but you are allowed to pass an empty argument. For example, 23322this invocation is invalid in ISO C, because there is no comma after the 23323string: 23324 23325 debug ("A message") 23326 23327 GNU CPP permits you to completely omit the variable arguments in this 23328way. In the above examples, the compiler would complain, though since 23329the expansion of the macro still has the extra comma after the format 23330string. 23331 23332 To help solve this problem, CPP behaves specially for variable 23333arguments used with the token paste operator, '##'. If instead you 23334write 23335 23336 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 23337 23338and if the variable arguments are omitted or empty, the '##' operator 23339causes the preprocessor to remove the comma before it. If you do 23340provide some variable arguments in your macro invocation, GNU CPP does 23341not complain about the paste operation and instead places the variable 23342arguments after the comma. Just like any other pasted macro argument, 23343these arguments are not macro expanded. 23344 23345 23346File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 23347 233486.21 Slightly Looser Rules for Escaped Newlines 23349=============================================== 23350 23351Recently, the preprocessor has relaxed its treatment of escaped 23352newlines. Previously, the newline had to immediately follow a 23353backslash. The current implementation allows whitespace in the form of 23354spaces, horizontal and vertical tabs, and form feeds between the 23355backslash and the subsequent newline. The preprocessor issues a 23356warning, but treats it as a valid escaped newline and combines the two 23357lines to form a single logical line. This works within comments and 23358tokens, as well as between tokens. Comments are _not_ treated as 23359whitespace for the purposes of this relaxation, since they have not yet 23360been replaced with spaces. 23361 23362 23363File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 23364 233656.22 Non-Lvalue Arrays May Have Subscripts 23366========================================== 23367 23368In ISO C99, arrays that are not lvalues still decay to pointers, and may 23369be subscripted, although they may not be modified or used after the next 23370sequence point and the unary '&' operator may not be applied to them. 23371As an extension, GNU C allows such arrays to be subscripted in C90 mode, 23372though otherwise they do not decay to pointers outside C99 mode. For 23373example, this is valid in GNU C though not valid in C90: 23374 23375 struct foo {int a[4];}; 23376 23377 struct foo f(); 23378 23379 bar (int index) 23380 { 23381 return f().a[index]; 23382 } 23383 23384 23385File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 23386 233876.23 Arithmetic on 'void'- and Function-Pointers 23388================================================ 23389 23390In GNU C, addition and subtraction operations are supported on pointers 23391to 'void' and on pointers to functions. This is done by treating the 23392size of a 'void' or of a function as 1. 23393 23394 A consequence of this is that 'sizeof' is also allowed on 'void' and on 23395function types, and returns 1. 23396 23397 The option '-Wpointer-arith' requests a warning if these extensions are 23398used. 23399 23400 23401File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 23402 234036.24 Non-Constant Initializers 23404============================== 23405 23406As in standard C++ and ISO C99, the elements of an aggregate initializer 23407for an automatic variable are not required to be constant expressions in 23408GNU C. Here is an example of an initializer with run-time varying 23409elements: 23410 23411 foo (float f, float g) 23412 { 23413 float beat_freqs[2] = { f-g, f+g }; 23414 /* ... */ 23415 } 23416 23417 23418File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 23419 234206.25 Compound Literals 23421====================== 23422 23423ISO C99 supports compound literals. A compound literal looks like a 23424cast containing an initializer. Its value is an object of the type 23425specified in the cast, containing the elements specified in the 23426initializer; it is an lvalue. As an extension, GCC supports compound 23427literals in C90 mode and in C++, though the semantics are somewhat 23428different in C++. 23429 23430 Usually, the specified type is a structure. Assume that 'struct foo' 23431and 'structure' are declared as shown: 23432 23433 struct foo {int a; char b[2];} structure; 23434 23435Here is an example of constructing a 'struct foo' with a compound 23436literal: 23437 23438 structure = ((struct foo) {x + y, 'a', 0}); 23439 23440This is equivalent to writing the following: 23441 23442 { 23443 struct foo temp = {x + y, 'a', 0}; 23444 structure = temp; 23445 } 23446 23447 You can also construct an array, though this is dangerous in C++, as 23448explained below. If all the elements of the compound literal are (made 23449up of) simple constant expressions, suitable for use in initializers of 23450objects of static storage duration, then the compound literal can be 23451coerced to a pointer to its first element and used in such an 23452initializer, as shown here: 23453 23454 char **foo = (char *[]) { "x", "y", "z" }; 23455 23456 Compound literals for scalar types and union types are also allowed, 23457but then the compound literal is equivalent to a cast. 23458 23459 As a GNU extension, GCC allows initialization of objects with static 23460storage duration by compound literals (which is not possible in ISO C99, 23461because the initializer is not a constant). It is handled as if the 23462object is initialized only with the bracket enclosed list if the types 23463of the compound literal and the object match. The initializer list of 23464the compound literal must be constant. If the object being initialized 23465has array type of unknown size, the size is determined by compound 23466literal size. 23467 23468 static struct foo x = (struct foo) {1, 'a', 'b'}; 23469 static int y[] = (int []) {1, 2, 3}; 23470 static int z[] = (int [3]) {1}; 23471 23472The above lines are equivalent to the following: 23473 static struct foo x = {1, 'a', 'b'}; 23474 static int y[] = {1, 2, 3}; 23475 static int z[] = {1, 0, 0}; 23476 23477 In C, a compound literal designates an unnamed object with static or 23478automatic storage duration. In C++, a compound literal designates a 23479temporary object, which only lives until the end of its full-expression. 23480As a result, well-defined C code that takes the address of a subobject 23481of a compound literal can be undefined in C++. For instance, if the 23482array compound literal example above appeared inside a function, any 23483subsequent use of 'foo' in C++ has undefined behavior because the 23484lifetime of the array ends after the declaration of 'foo'. As a result, 23485the C++ compiler now rejects the conversion of a temporary array to a 23486pointer. 23487 23488 As an optimization, the C++ compiler sometimes gives array compound 23489literals longer lifetimes: when the array either appears outside a 23490function or has const-qualified type. If 'foo' and its initializer had 23491elements of 'char *const' type rather than 'char *', or if 'foo' were a 23492global variable, the array would have static storage duration. But it 23493is probably safest just to avoid the use of array compound literals in 23494code compiled as C++. 23495 23496 23497File: gcc.info, Node: Designated Inits, Next: Case Ranges, Prev: Compound Literals, Up: C Extensions 23498 234996.26 Designated Initializers 23500============================ 23501 23502Standard C90 requires the elements of an initializer to appear in a 23503fixed order, the same as the order of the elements in the array or 23504structure being initialized. 23505 23506 In ISO C99 you can give the elements in any order, specifying the array 23507indices or structure field names they apply to, and GNU C allows this as 23508an extension in C90 mode as well. This extension is not implemented in 23509GNU C++. 23510 23511 To specify an array index, write '[INDEX] =' before the element value. 23512For example, 23513 23514 int a[6] = { [4] = 29, [2] = 15 }; 23515 23516is equivalent to 23517 23518 int a[6] = { 0, 0, 15, 0, 29, 0 }; 23519 23520The index values must be constant expressions, even if the array being 23521initialized is automatic. 23522 23523 An alternative syntax for this that has been obsolete since GCC 2.5 but 23524GCC still accepts is to write '[INDEX]' before the element value, with 23525no '='. 23526 23527 To initialize a range of elements to the same value, write '[FIRST ... 23528LAST] = VALUE'. This is a GNU extension. For example, 23529 23530 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 23531 23532If the value in it has side-effects, the side-effects happen only once, 23533not for each initialized field by the range initializer. 23534 23535Note that the length of the array is the highest value specified plus 23536one. 23537 23538 In a structure initializer, specify the name of a field to initialize 23539with '.FIELDNAME =' before the element value. For example, given the 23540following structure, 23541 23542 struct point { int x, y; }; 23543 23544the following initialization 23545 23546 struct point p = { .y = yvalue, .x = xvalue }; 23547 23548is equivalent to 23549 23550 struct point p = { xvalue, yvalue }; 23551 23552 Another syntax that has the same meaning, obsolete since GCC 2.5, is 23553'FIELDNAME:', as shown here: 23554 23555 struct point p = { y: yvalue, x: xvalue }; 23556 23557 Omitted field members are implicitly initialized the same as objects 23558that have static storage duration. 23559 23560 The '[INDEX]' or '.FIELDNAME' is known as a "designator". You can also 23561use a designator (or the obsolete colon syntax) when initializing a 23562union, to specify which element of the union should be used. For 23563example, 23564 23565 union foo { int i; double d; }; 23566 23567 union foo f = { .d = 4 }; 23568 23569converts 4 to a 'double' to store it in the union using the second 23570element. By contrast, casting 4 to type 'union foo' stores it into the 23571union as the integer 'i', since it is an integer. (*Note Cast to 23572Union::.) 23573 23574 You can combine this technique of naming elements with ordinary C 23575initialization of successive elements. Each initializer element that 23576does not have a designator applies to the next consecutive element of 23577the array or structure. For example, 23578 23579 int a[6] = { [1] = v1, v2, [4] = v4 }; 23580 23581is equivalent to 23582 23583 int a[6] = { 0, v1, v2, 0, v4, 0 }; 23584 23585 Labeling the elements of an array initializer is especially useful when 23586the indices are characters or belong to an 'enum' type. For example: 23587 23588 int whitespace[256] 23589 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 23590 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 23591 23592 You can also write a series of '.FIELDNAME' and '[INDEX]' designators 23593before an '=' to specify a nested subobject to initialize; the list is 23594taken relative to the subobject corresponding to the closest surrounding 23595brace pair. For example, with the 'struct point' declaration above: 23596 23597 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 23598 23599If the same field is initialized multiple times, it has the value from 23600the last initialization. If any such overridden initialization has 23601side-effect, it is unspecified whether the side-effect happens or not. 23602Currently, GCC discards them and issues a warning. 23603 23604 23605File: gcc.info, Node: Case Ranges, Next: Cast to Union, Prev: Designated Inits, Up: C Extensions 23606 236076.27 Case Ranges 23608================ 23609 23610You can specify a range of consecutive values in a single 'case' label, 23611like this: 23612 23613 case LOW ... HIGH: 23614 23615This has the same effect as the proper number of individual 'case' 23616labels, one for each integer value from LOW to HIGH, inclusive. 23617 23618 This feature is especially useful for ranges of ASCII character codes: 23619 23620 case 'A' ... 'Z': 23621 23622 *Be careful:* Write spaces around the '...', for otherwise it may be 23623parsed wrong when you use it with integer values. For example, write 23624this: 23625 23626 case 1 ... 5: 23627 23628rather than this: 23629 23630 case 1...5: 23631 23632 23633File: gcc.info, Node: Cast to Union, Next: Mixed Declarations, Prev: Case Ranges, Up: C Extensions 23634 236356.28 Cast to a Union Type 23636========================= 23637 23638A cast to union type is similar to other casts, except that the type 23639specified is a union type. You can specify the type either with 'union 23640TAG' or with a typedef name. A cast to union is actually a constructor, 23641not a cast, and hence does not yield an lvalue like normal casts. 23642(*Note Compound Literals::.) 23643 23644 The types that may be cast to the union type are those of the members 23645of the union. Thus, given the following union and variables: 23646 23647 union foo { int i; double d; }; 23648 int x; 23649 double y; 23650 23651both 'x' and 'y' can be cast to type 'union foo'. 23652 23653 Using the cast as the right-hand side of an assignment to a variable of 23654union type is equivalent to storing in a member of the union: 23655 23656 union foo u; 23657 /* ... */ 23658 u = (union foo) x == u.i = x 23659 u = (union foo) y == u.d = y 23660 23661 You can also use the union cast as a function argument: 23662 23663 void hack (union foo); 23664 /* ... */ 23665 hack ((union foo) x); 23666 23667 23668File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Cast to Union, Up: C Extensions 23669 236706.29 Mixed Declarations and Code 23671================================ 23672 23673ISO C99 and ISO C++ allow declarations and code to be freely mixed 23674within compound statements. As an extension, GNU C also allows this in 23675C90 mode. For example, you could do: 23676 23677 int i; 23678 /* ... */ 23679 i++; 23680 int j = i + 2; 23681 23682 Each identifier is visible from where it is declared until the end of 23683the enclosing block. 23684 23685 23686File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 23687 236886.30 Declaring Attributes of Functions 23689====================================== 23690 23691In GNU C, you declare certain things about functions called in your 23692program which help the compiler optimize function calls and check your 23693code more carefully. 23694 23695 The keyword '__attribute__' allows you to specify special attributes 23696when making a declaration. This keyword is followed by an attribute 23697specification inside double parentheses. The following attributes are 23698currently defined for functions on all targets: 'aligned', 'alloc_size', 23699'alloc_align', 'assume_aligned', 'noreturn', 'returns_twice', 23700'noinline', 'noclone', 'always_inline', 'flatten', 'pure', 'const', 23701'nothrow', 'sentinel', 'format', 'format_arg', 'no_instrument_function', 23702'no_split_stack', 'section', 'constructor', 'destructor', 'used', 23703'unused', 'deprecated', 'weak', 'malloc', 'alias', 'ifunc', 23704'warn_unused_result', 'nonnull', 'returns_nonnull', 'gnu_inline', 23705'externally_visible', 'hot', 'cold', 'artificial', 23706'no_sanitize_address', 'no_address_safety_analysis', 23707'no_sanitize_undefined', 'error' and 'warning'. Several other 23708attributes are defined for functions on particular target systems. 23709Other attributes, including 'section' are supported for variables 23710declarations (*note Variable Attributes::) and for types (*note Type 23711Attributes::). 23712 23713 GCC plugins may provide their own attributes. 23714 23715 You may also specify attributes with '__' preceding and following each 23716keyword. This allows you to use them in header files without being 23717concerned about a possible macro of the same name. For example, you may 23718use '__noreturn__' instead of 'noreturn'. 23719 23720 *Note Attribute Syntax::, for details of the exact syntax for using 23721attributes. 23722 23723'alias ("TARGET")' 23724 The 'alias' attribute causes the declaration to be emitted as an 23725 alias for another symbol, which must be specified. For instance, 23726 23727 void __f () { /* Do something. */; } 23728 void f () __attribute__ ((weak, alias ("__f"))); 23729 23730 defines 'f' to be a weak alias for '__f'. In C++, the mangled name 23731 for the target must be used. It is an error if '__f' is not 23732 defined in the same translation unit. 23733 23734 Not all target machines support this attribute. 23735 23736'aligned (ALIGNMENT)' 23737 This attribute specifies a minimum alignment for the function, 23738 measured in bytes. 23739 23740 You cannot use this attribute to decrease the alignment of a 23741 function, only to increase it. However, when you explicitly 23742 specify a function alignment this overrides the effect of the 23743 '-falign-functions' (*note Optimize Options::) option for this 23744 function. 23745 23746 Note that the effectiveness of 'aligned' attributes may be limited 23747 by inherent limitations in your linker. On many systems, the 23748 linker is only able to arrange for functions to be aligned up to a 23749 certain maximum alignment. (For some linkers, the maximum 23750 supported alignment may be very very small.) See your linker 23751 documentation for further information. 23752 23753 The 'aligned' attribute can also be used for variables and fields 23754 (*note Variable Attributes::.) 23755 23756'alloc_size' 23757 The 'alloc_size' attribute is used to tell the compiler that the 23758 function return value points to memory, where the size is given by 23759 one or two of the functions parameters. GCC uses this information 23760 to improve the correctness of '__builtin_object_size'. 23761 23762 The function parameter(s) denoting the allocated size are specified 23763 by one or two integer arguments supplied to the attribute. The 23764 allocated size is either the value of the single function argument 23765 specified or the product of the two function arguments specified. 23766 Argument numbering starts at one. 23767 23768 For instance, 23769 23770 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 23771 void* my_realloc(void*, size_t) __attribute__((alloc_size(2))) 23772 23773 declares that 'my_calloc' returns memory of the size given by the 23774 product of parameter 1 and 2 and that 'my_realloc' returns memory 23775 of the size given by parameter 2. 23776 23777'alloc_align' 23778 The 'alloc_align' attribute is used to tell the compiler that the 23779 function return value points to memory, where the returned pointer 23780 minimum alignment is given by one of the functions parameters. GCC 23781 uses this information to improve pointer alignment analysis. 23782 23783 The function parameter denoting the allocated alignment is 23784 specified by one integer argument, whose number is the argument of 23785 the attribute. Argument numbering starts at one. 23786 23787 For instance, 23788 23789 void* my_memalign(size_t, size_t) __attribute__((alloc_align(1))) 23790 23791 declares that 'my_memalign' returns memory with minimum alignment 23792 given by parameter 1. 23793 23794'assume_aligned' 23795 The 'assume_aligned' attribute is used to tell the compiler that 23796 the function return value points to memory, where the returned 23797 pointer minimum alignment is given by the first argument. If the 23798 attribute has two arguments, the second argument is misalignment 23799 offset. 23800 23801 For instance 23802 23803 void* my_alloc1(size_t) __attribute__((assume_aligned(16))) 23804 void* my_alloc2(size_t) __attribute__((assume_aligned(32, 8))) 23805 23806 declares that 'my_alloc1' returns 16-byte aligned pointer and that 23807 'my_alloc2' returns a pointer whose value modulo 32 is equal to 8. 23808 23809'always_inline' 23810 Generally, functions are not inlined unless optimization is 23811 specified. For functions declared inline, this attribute inlines 23812 the function even if no optimization level is specified. 23813 23814'gnu_inline' 23815 This attribute should be used with a function that is also declared 23816 with the 'inline' keyword. It directs GCC to treat the function as 23817 if it were defined in gnu90 mode even when compiling in C99 or 23818 gnu99 mode. 23819 23820 If the function is declared 'extern', then this definition of the 23821 function is used only for inlining. In no case is the function 23822 compiled as a standalone function, not even if you take its address 23823 explicitly. Such an address becomes an external reference, as if 23824 you had only declared the function, and had not defined it. This 23825 has almost the effect of a macro. The way to use this is to put a 23826 function definition in a header file with this attribute, and put 23827 another copy of the function, without 'extern', in a library file. 23828 The definition in the header file causes most calls to the function 23829 to be inlined. If any uses of the function remain, they refer to 23830 the single copy in the library. Note that the two definitions of 23831 the functions need not be precisely the same, although if they do 23832 not have the same effect your program may behave oddly. 23833 23834 In C, if the function is neither 'extern' nor 'static', then the 23835 function is compiled as a standalone function, as well as being 23836 inlined where possible. 23837 23838 This is how GCC traditionally handled functions declared 'inline'. 23839 Since ISO C99 specifies a different semantics for 'inline', this 23840 function attribute is provided as a transition measure and as a 23841 useful feature in its own right. This attribute is available in 23842 GCC 4.1.3 and later. It is available if either of the preprocessor 23843 macros '__GNUC_GNU_INLINE__' or '__GNUC_STDC_INLINE__' are defined. 23844 *Note An Inline Function is As Fast As a Macro: Inline. 23845 23846 In C++, this attribute does not depend on 'extern' in any way, but 23847 it still requires the 'inline' keyword to enable its special 23848 behavior. 23849 23850'artificial' 23851 This attribute is useful for small inline wrappers that if possible 23852 should appear during debugging as a unit. Depending on the debug 23853 info format it either means marking the function as artificial or 23854 using the caller location for all instructions within the inlined 23855 body. 23856 23857'bank_switch' 23858 When added to an interrupt handler with the M32C port, causes the 23859 prologue and epilogue to use bank switching to preserve the 23860 registers rather than saving them on the stack. 23861 23862'flatten' 23863 Generally, inlining into a function is limited. For a function 23864 marked with this attribute, every call inside this function is 23865 inlined, if possible. Whether the function itself is considered 23866 for inlining depends on its size and the current inlining 23867 parameters. 23868 23869'error ("MESSAGE")' 23870 If this attribute is used on a function declaration and a call to 23871 such a function is not eliminated through dead code elimination or 23872 other optimizations, an error that includes MESSAGE is diagnosed. 23873 This is useful for compile-time checking, especially together with 23874 '__builtin_constant_p' and inline functions where checking the 23875 inline function arguments is not possible through 'extern char 23876 [(condition) ? 1 : -1];' tricks. While it is possible to leave the 23877 function undefined and thus invoke a link failure, when using this 23878 attribute the problem is diagnosed earlier and with exact location 23879 of the call even in presence of inline functions or when not 23880 emitting debugging information. 23881 23882'warning ("MESSAGE")' 23883 If this attribute is used on a function declaration and a call to 23884 such a function is not eliminated through dead code elimination or 23885 other optimizations, a warning that includes MESSAGE is diagnosed. 23886 This is useful for compile-time checking, especially together with 23887 '__builtin_constant_p' and inline functions. While it is possible 23888 to define the function with a message in '.gnu.warning*' section, 23889 when using this attribute the problem is diagnosed earlier and with 23890 exact location of the call even in presence of inline functions or 23891 when not emitting debugging information. 23892 23893'cdecl' 23894 On the Intel 386, the 'cdecl' attribute causes the compiler to 23895 assume that the calling function pops off the stack space used to 23896 pass arguments. This is useful to override the effects of the 23897 '-mrtd' switch. 23898 23899'const' 23900 Many functions do not examine any values except their arguments, 23901 and have no effects except the return value. Basically this is 23902 just slightly more strict class than the 'pure' attribute below, 23903 since function is not allowed to read global memory. 23904 23905 Note that a function that has pointer arguments and examines the 23906 data pointed to must _not_ be declared 'const'. Likewise, a 23907 function that calls a non-'const' function usually must not be 23908 'const'. It does not make sense for a 'const' function to return 23909 'void'. 23910 23911 The attribute 'const' is not implemented in GCC versions earlier 23912 than 2.5. An alternative way to declare that a function has no 23913 side effects, which works in the current version and in some older 23914 versions, is as follows: 23915 23916 typedef int intfn (); 23917 23918 extern const intfn square; 23919 23920 This approach does not work in GNU C++ from 2.6.0 on, since the 23921 language specifies that the 'const' must be attached to the return 23922 value. 23923 23924'constructor' 23925'destructor' 23926'constructor (PRIORITY)' 23927'destructor (PRIORITY)' 23928 The 'constructor' attribute causes the function to be called 23929 automatically before execution enters 'main ()'. Similarly, the 23930 'destructor' attribute causes the function to be called 23931 automatically after 'main ()' completes or 'exit ()' is called. 23932 Functions with these attributes are useful for initializing data 23933 that is used implicitly during the execution of the program. 23934 23935 You may provide an optional integer priority to control the order 23936 in which constructor and destructor functions are run. A 23937 constructor with a smaller priority number runs before a 23938 constructor with a larger priority number; the opposite 23939 relationship holds for destructors. So, if you have a constructor 23940 that allocates a resource and a destructor that deallocates the 23941 same resource, both functions typically have the same priority. 23942 The priorities for constructor and destructor functions are the 23943 same as those specified for namespace-scope C++ objects (*note C++ 23944 Attributes::). 23945 23946 These attributes are not currently implemented for Objective-C. 23947 23948'deprecated' 23949'deprecated (MSG)' 23950 The 'deprecated' attribute results in a warning if the function is 23951 used anywhere in the source file. This is useful when identifying 23952 functions that are expected to be removed in a future version of a 23953 program. The warning also includes the location of the declaration 23954 of the deprecated function, to enable users to easily find further 23955 information about why the function is deprecated, or what they 23956 should do instead. Note that the warnings only occurs for uses: 23957 23958 int old_fn () __attribute__ ((deprecated)); 23959 int old_fn (); 23960 int (*fn_ptr)() = old_fn; 23961 23962 results in a warning on line 3 but not line 2. The optional MSG 23963 argument, which must be a string, is printed in the warning if 23964 present. 23965 23966 The 'deprecated' attribute can also be used for variables and types 23967 (*note Variable Attributes::, *note Type Attributes::.) 23968 23969'disinterrupt' 23970 On Epiphany and MeP targets, this attribute causes the compiler to 23971 emit instructions to disable interrupts for the duration of the 23972 given function. 23973 23974'dllexport' 23975 On Microsoft Windows targets and Symbian OS targets the 'dllexport' 23976 attribute causes the compiler to provide a global pointer to a 23977 pointer in a DLL, so that it can be referenced with the 'dllimport' 23978 attribute. On Microsoft Windows targets, the pointer name is 23979 formed by combining '_imp__' and the function or variable name. 23980 23981 You can use '__declspec(dllexport)' as a synonym for '__attribute__ 23982 ((dllexport))' for compatibility with other compilers. 23983 23984 On systems that support the 'visibility' attribute, this attribute 23985 also implies "default" visibility. It is an error to explicitly 23986 specify any other visibility. 23987 23988 In previous versions of GCC, the 'dllexport' attribute was ignored 23989 for inlined functions, unless the '-fkeep-inline-functions' flag 23990 had been used. The default behavior now is to emit all dllexported 23991 inline functions; however, this can cause object file-size bloat, 23992 in which case the old behavior can be restored by using 23993 '-fno-keep-inline-dllexport'. 23994 23995 The attribute is also ignored for undefined symbols. 23996 23997 When applied to C++ classes, the attribute marks defined 23998 non-inlined member functions and static data members as exports. 23999 Static consts initialized in-class are not marked unless they are 24000 also defined out-of-class. 24001 24002 For Microsoft Windows targets there are alternative methods for 24003 including the symbol in the DLL's export table such as using a 24004 '.def' file with an 'EXPORTS' section or, with GNU ld, using the 24005 '--export-all' linker flag. 24006 24007'dllimport' 24008 On Microsoft Windows and Symbian OS targets, the 'dllimport' 24009 attribute causes the compiler to reference a function or variable 24010 via a global pointer to a pointer that is set up by the DLL 24011 exporting the symbol. The attribute implies 'extern'. On 24012 Microsoft Windows targets, the pointer name is formed by combining 24013 '_imp__' and the function or variable name. 24014 24015 You can use '__declspec(dllimport)' as a synonym for '__attribute__ 24016 ((dllimport))' for compatibility with other compilers. 24017 24018 On systems that support the 'visibility' attribute, this attribute 24019 also implies "default" visibility. It is an error to explicitly 24020 specify any other visibility. 24021 24022 Currently, the attribute is ignored for inlined functions. If the 24023 attribute is applied to a symbol _definition_, an error is 24024 reported. If a symbol previously declared 'dllimport' is later 24025 defined, the attribute is ignored in subsequent references, and a 24026 warning is emitted. The attribute is also overridden by a 24027 subsequent declaration as 'dllexport'. 24028 24029 When applied to C++ classes, the attribute marks non-inlined member 24030 functions and static data members as imports. However, the 24031 attribute is ignored for virtual methods to allow creation of 24032 vtables using thunks. 24033 24034 On the SH Symbian OS target the 'dllimport' attribute also has 24035 another affect--it can cause the vtable and run-time type 24036 information for a class to be exported. This happens when the 24037 class has a dllimported constructor or a non-inline, non-pure 24038 virtual function and, for either of those two conditions, the class 24039 also has an inline constructor or destructor and has a key function 24040 that is defined in the current translation unit. 24041 24042 For Microsoft Windows targets the use of the 'dllimport' attribute 24043 on functions is not necessary, but provides a small performance 24044 benefit by eliminating a thunk in the DLL. The use of the 24045 'dllimport' attribute on imported variables was required on older 24046 versions of the GNU linker, but can now be avoided by passing the 24047 '--enable-auto-import' switch to the GNU linker. As with 24048 functions, using the attribute for a variable eliminates a thunk in 24049 the DLL. 24050 24051 One drawback to using this attribute is that a pointer to a 24052 _variable_ marked as 'dllimport' cannot be used as a constant 24053 address. However, a pointer to a _function_ with the 'dllimport' 24054 attribute can be used as a constant initializer; in this case, the 24055 address of a stub function in the import lib is referenced. On 24056 Microsoft Windows targets, the attribute can be disabled for 24057 functions by setting the '-mnop-fun-dllimport' flag. 24058 24059'eightbit_data' 24060 Use this attribute on the H8/300, H8/300H, and H8S to indicate that 24061 the specified variable should be placed into the eight-bit data 24062 section. The compiler generates more efficient code for certain 24063 operations on data in the eight-bit data area. Note the eight-bit 24064 data area is limited to 256 bytes of data. 24065 24066 You must use GAS and GLD from GNU binutils version 2.7 or later for 24067 this attribute to work correctly. 24068 24069'exception' 24070 Use this attribute on the NDS32 target to indicate that the 24071 specified function is an exception handler. The compiler will 24072 generate corresponding sections for use in an exception handler. 24073 24074'exception_handler' 24075 Use this attribute on the Blackfin to indicate that the specified 24076 function is an exception handler. The compiler generates function 24077 entry and exit sequences suitable for use in an exception handler 24078 when this attribute is present. 24079 24080'externally_visible' 24081 This attribute, attached to a global variable or function, 24082 nullifies the effect of the '-fwhole-program' command-line option, 24083 so the object remains visible outside the current compilation unit. 24084 24085 If '-fwhole-program' is used together with '-flto' and 'gold' is 24086 used as the linker plugin, 'externally_visible' attributes are 24087 automatically added to functions (not variable yet due to a current 24088 'gold' issue) that are accessed outside of LTO objects according to 24089 resolution file produced by 'gold'. For other linkers that cannot 24090 generate resolution file, explicit 'externally_visible' attributes 24091 are still necessary. 24092 24093'far' 24094 On 68HC11 and 68HC12 the 'far' attribute causes the compiler to use 24095 a calling convention that takes care of switching memory banks when 24096 entering and leaving a function. This calling convention is also 24097 the default when using the '-mlong-calls' option. 24098 24099 On 68HC12 the compiler uses the 'call' and 'rtc' instructions to 24100 call and return from a function. 24101 24102 On 68HC11 the compiler generates a sequence of instructions to 24103 invoke a board-specific routine to switch the memory bank and call 24104 the real function. The board-specific routine simulates a 'call'. 24105 At the end of a function, it jumps to a board-specific routine 24106 instead of using 'rts'. The board-specific return routine 24107 simulates the 'rtc'. 24108 24109 On MeP targets this causes the compiler to use a calling convention 24110 that assumes the called function is too far away for the built-in 24111 addressing modes. 24112 24113'fast_interrupt' 24114 Use this attribute on the M32C and RX ports to indicate that the 24115 specified function is a fast interrupt handler. This is just like 24116 the 'interrupt' attribute, except that 'freit' is used to return 24117 instead of 'reit'. 24118 24119'fastcall' 24120 On the Intel 386, the 'fastcall' attribute causes the compiler to 24121 pass the first argument (if of integral type) in the register ECX 24122 and the second argument (if of integral type) in the register EDX. 24123 Subsequent and other typed arguments are passed on the stack. The 24124 called function pops the arguments off the stack. If the number of 24125 arguments is variable all arguments are pushed on the stack. 24126 24127'thiscall' 24128 On the Intel 386, the 'thiscall' attribute causes the compiler to 24129 pass the first argument (if of integral type) in the register ECX. 24130 Subsequent and other typed arguments are passed on the stack. The 24131 called function pops the arguments off the stack. If the number of 24132 arguments is variable all arguments are pushed on the stack. The 24133 'thiscall' attribute is intended for C++ non-static member 24134 functions. As a GCC extension, this calling convention can be used 24135 for C functions and for static member methods. 24136 24137'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 24138 The 'format' attribute specifies that a function takes 'printf', 24139 'scanf', 'strftime' or 'strfmon' style arguments that should be 24140 type-checked against a format string. For example, the 24141 declaration: 24142 24143 extern int 24144 my_printf (void *my_object, const char *my_format, ...) 24145 __attribute__ ((format (printf, 2, 3))); 24146 24147 causes the compiler to check the arguments in calls to 'my_printf' 24148 for consistency with the 'printf' style format string argument 24149 'my_format'. 24150 24151 The parameter ARCHETYPE determines how the format string is 24152 interpreted, and should be 'printf', 'scanf', 'strftime', 24153 'gnu_printf', 'gnu_scanf', 'gnu_strftime' or 'strfmon'. (You can 24154 also use '__printf__', '__scanf__', '__strftime__' or 24155 '__strfmon__'.) On MinGW targets, 'ms_printf', 'ms_scanf', and 24156 'ms_strftime' are also present. ARCHETYPE values such as 'printf' 24157 refer to the formats accepted by the system's C runtime library, 24158 while values prefixed with 'gnu_' always refer to the formats 24159 accepted by the GNU C Library. On Microsoft Windows targets, 24160 values prefixed with 'ms_' refer to the formats accepted by the 24161 'msvcrt.dll' library. The parameter STRING-INDEX specifies which 24162 argument is the format string argument (starting from 1), while 24163 FIRST-TO-CHECK is the number of the first argument to check against 24164 the format string. For functions where the arguments are not 24165 available to be checked (such as 'vprintf'), specify the third 24166 parameter as zero. In this case the compiler only checks the 24167 format string for consistency. For 'strftime' formats, the third 24168 parameter is required to be zero. Since non-static C++ methods 24169 have an implicit 'this' argument, the arguments of such methods 24170 should be counted from two, not one, when giving values for 24171 STRING-INDEX and FIRST-TO-CHECK. 24172 24173 In the example above, the format string ('my_format') is the second 24174 argument of the function 'my_print', and the arguments to check 24175 start with the third argument, so the correct parameters for the 24176 format attribute are 2 and 3. 24177 24178 The 'format' attribute allows you to identify your own functions 24179 that take format strings as arguments, so that GCC can check the 24180 calls to these functions for errors. The compiler always (unless 24181 '-ffreestanding' or '-fno-builtin' is used) checks formats for the 24182 standard library functions 'printf', 'fprintf', 'sprintf', 'scanf', 24183 'fscanf', 'sscanf', 'strftime', 'vprintf', 'vfprintf' and 24184 'vsprintf' whenever such warnings are requested (using '-Wformat'), 24185 so there is no need to modify the header file 'stdio.h'. In C99 24186 mode, the functions 'snprintf', 'vsnprintf', 'vscanf', 'vfscanf' 24187 and 'vsscanf' are also checked. Except in strictly conforming C 24188 standard modes, the X/Open function 'strfmon' is also checked as 24189 are 'printf_unlocked' and 'fprintf_unlocked'. *Note Options 24190 Controlling C Dialect: C Dialect Options. 24191 24192 For Objective-C dialects, 'NSString' (or '__NSString__') is 24193 recognized in the same context. Declarations including these 24194 format attributes are parsed for correct syntax, however the result 24195 of checking of such format strings is not yet defined, and is not 24196 carried out by this version of the compiler. 24197 24198 The target may also provide additional types of format checks. 24199 *Note Format Checks Specific to Particular Target Machines: Target 24200 Format Checks. 24201 24202'format_arg (STRING-INDEX)' 24203 The 'format_arg' attribute specifies that a function takes a format 24204 string for a 'printf', 'scanf', 'strftime' or 'strfmon' style 24205 function and modifies it (for example, to translate it into another 24206 language), so the result can be passed to a 'printf', 'scanf', 24207 'strftime' or 'strfmon' style function (with the remaining 24208 arguments to the format function the same as they would have been 24209 for the unmodified string). For example, the declaration: 24210 24211 extern char * 24212 my_dgettext (char *my_domain, const char *my_format) 24213 __attribute__ ((format_arg (2))); 24214 24215 causes the compiler to check the arguments in calls to a 'printf', 24216 'scanf', 'strftime' or 'strfmon' type function, whose format string 24217 argument is a call to the 'my_dgettext' function, for consistency 24218 with the format string argument 'my_format'. If the 'format_arg' 24219 attribute had not been specified, all the compiler could tell in 24220 such calls to format functions would be that the format string 24221 argument is not constant; this would generate a warning when 24222 '-Wformat-nonliteral' is used, but the calls could not be checked 24223 without the attribute. 24224 24225 The parameter STRING-INDEX specifies which argument is the format 24226 string argument (starting from one). Since non-static C++ methods 24227 have an implicit 'this' argument, the arguments of such methods 24228 should be counted from two. 24229 24230 The 'format_arg' attribute allows you to identify your own 24231 functions that modify format strings, so that GCC can check the 24232 calls to 'printf', 'scanf', 'strftime' or 'strfmon' type function 24233 whose operands are a call to one of your own function. The 24234 compiler always treats 'gettext', 'dgettext', and 'dcgettext' in 24235 this manner except when strict ISO C support is requested by 24236 '-ansi' or an appropriate '-std' option, or '-ffreestanding' or 24237 '-fno-builtin' is used. *Note Options Controlling C Dialect: C 24238 Dialect Options. 24239 24240 For Objective-C dialects, the 'format-arg' attribute may refer to 24241 an 'NSString' reference for compatibility with the 'format' 24242 attribute above. 24243 24244 The target may also allow additional types in 'format-arg' 24245 attributes. *Note Format Checks Specific to Particular Target 24246 Machines: Target Format Checks. 24247 24248'function_vector' 24249 Use this attribute on the H8/300, H8/300H, and H8S to indicate that 24250 the specified function should be called through the function 24251 vector. Calling a function through the function vector reduces 24252 code size, however; the function vector has a limited size (maximum 24253 128 entries on the H8/300 and 64 entries on the H8/300H and H8S) 24254 and shares space with the interrupt vector. 24255 24256 On SH2A targets, this attribute declares a function to be called 24257 using the TBR relative addressing mode. The argument to this 24258 attribute is the entry number of the same function in a vector 24259 table containing all the TBR relative addressable functions. For 24260 correct operation the TBR must be setup accordingly to point to the 24261 start of the vector table before any functions with this attribute 24262 are invoked. Usually a good place to do the initialization is the 24263 startup routine. The TBR relative vector table can have at max 256 24264 function entries. The jumps to these functions are generated using 24265 a SH2A specific, non delayed branch instruction JSR/N @(disp8,TBR). 24266 You must use GAS and GLD from GNU binutils version 2.7 or later for 24267 this attribute to work correctly. 24268 24269 Please refer the example of M16C target, to see the use of this 24270 attribute while declaring a function, 24271 24272 In an application, for a function being called once, this attribute 24273 saves at least 8 bytes of code; and if other successive calls are 24274 being made to the same function, it saves 2 bytes of code per each 24275 of these calls. 24276 24277 On M16C/M32C targets, the 'function_vector' attribute declares a 24278 special page subroutine call function. Use of this attribute 24279 reduces the code size by 2 bytes for each call generated to the 24280 subroutine. The argument to the attribute is the vector number 24281 entry from the special page vector table which contains the 16 24282 low-order bits of the subroutine's entry address. Each vector 24283 table has special page number (18 to 255) that is used in 'jsrs' 24284 instructions. Jump addresses of the routines are generated by 24285 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 24286 M32C targets), to the 2-byte addresses set in the vector table. 24287 Therefore you need to ensure that all the special page vector 24288 routines should get mapped within the address range 0x0F0000 to 24289 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 24290 24291 In the following example 2 bytes are saved for each call to 24292 function 'foo'. 24293 24294 void foo (void) __attribute__((function_vector(0x18))); 24295 void foo (void) 24296 { 24297 } 24298 24299 void bar (void) 24300 { 24301 foo(); 24302 } 24303 24304 If functions are defined in one file and are called in another 24305 file, then be sure to write this declaration in both files. 24306 24307 This attribute is ignored for R8C target. 24308 24309'ifunc ("RESOLVER")' 24310 The 'ifunc' attribute is used to mark a function as an indirect 24311 function using the STT_GNU_IFUNC symbol type extension to the ELF 24312 standard. This allows the resolution of the symbol value to be 24313 determined dynamically at load time, and an optimized version of 24314 the routine can be selected for the particular processor or other 24315 system characteristics determined then. To use this attribute, 24316 first define the implementation functions available, and a resolver 24317 function that returns a pointer to the selected implementation 24318 function. The implementation functions' declarations must match 24319 the API of the function being implemented, the resolver's 24320 declaration is be a function returning pointer to void function 24321 returning void: 24322 24323 void *my_memcpy (void *dst, const void *src, size_t len) 24324 { 24325 ... 24326 } 24327 24328 static void (*resolve_memcpy (void)) (void) 24329 { 24330 return my_memcpy; // we'll just always select this routine 24331 } 24332 24333 The exported header file declaring the function the user calls 24334 would contain: 24335 24336 extern void *memcpy (void *, const void *, size_t); 24337 24338 allowing the user to call this as a regular function, unaware of 24339 the implementation. Finally, the indirect function needs to be 24340 defined in the same translation unit as the resolver function: 24341 24342 void *memcpy (void *, const void *, size_t) 24343 __attribute__ ((ifunc ("resolve_memcpy"))); 24344 24345 Indirect functions cannot be weak, and require a recent binutils 24346 (at least version 2.20.1), and GNU C library (at least version 24347 2.11.1). 24348 24349'interrupt' 24350 Use this attribute on the ARC, ARM, AVR, CR16, Epiphany, M32C, 24351 M32R/D, m68k, MeP, MIPS, MSP430, RL78, RX and Xstormy16 ports to 24352 indicate that the specified function is an interrupt handler. The 24353 compiler generates function entry and exit sequences suitable for 24354 use in an interrupt handler when this attribute is present. With 24355 Epiphany targets it may also generate a special section with code 24356 to initialize the interrupt vector table. 24357 24358 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 24359 MicroBlaze, and SH processors can be specified via the 24360 'interrupt_handler' attribute. 24361 24362 Note, on the ARC, you must specify the kind of interrupt to be 24363 handled in a parameter to the interrupt attribute like this: 24364 24365 void f () __attribute__ ((interrupt ("ilink1"))); 24366 24367 Permissible values for this parameter are: 'ilink1' and 'ilink2'. 24368 24369 Note, on the AVR, the hardware globally disables interrupts when an 24370 interrupt is executed. The first instruction of an interrupt 24371 handler declared with this attribute is a 'SEI' instruction to 24372 re-enable interrupts. See also the 'signal' function attribute 24373 that does not insert a 'SEI' instruction. If both 'signal' and 24374 'interrupt' are specified for the same function, 'signal' is 24375 silently ignored. 24376 24377 Note, for the ARM, you can specify the kind of interrupt to be 24378 handled by adding an optional parameter to the interrupt attribute 24379 like this: 24380 24381 void f () __attribute__ ((interrupt ("IRQ"))); 24382 24383 Permissible values for this parameter are: 'IRQ', 'FIQ', 'SWI', 24384 'ABORT' and 'UNDEF'. 24385 24386 On ARMv7-M the interrupt type is ignored, and the attribute means 24387 the function may be called with a word-aligned stack pointer. 24388 24389 Note, for the MSP430 you can provide an argument to the interrupt 24390 attribute which specifies a name or number. If the argument is a 24391 number it indicates the slot in the interrupt vector table (0 - 31) 24392 to which this handler should be assigned. If the argument is a 24393 name it is treated as a symbolic name for the vector slot. These 24394 names should match up with appropriate entries in the linker 24395 script. By default the names 'watchdog' for vector 26, 'nmi' for 24396 vector 30 and 'reset' for vector 31 are recognised. 24397 24398 You can also use the following function attributes to modify how 24399 normal functions interact with interrupt functions: 24400 24401 'critical' 24402 Critical functions disable interrupts upon entry and restore 24403 the previous interrupt state upon exit. Critical functions 24404 cannot also have the 'naked' or 'reentrant' attributes. They 24405 can have the 'interrupt' attribute. 24406 24407 'reentrant' 24408 Reentrant functions disable interrupts upon entry and enable 24409 them upon exit. Reentrant functions cannot also have the 24410 'naked' or 'critical' attributes. They can have the 24411 'interrupt' attribute. 24412 24413 'wakeup' 24414 This attribute only applies to interrupt functions. It is 24415 silently ignored if applied to a non-interrupt function. A 24416 wakeup interrupt function will rouse the processor from any 24417 low-power state that it might be in when the function exits. 24418 24419 On Epiphany targets one or more optional parameters can be added 24420 like this: 24421 24422 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 24423 24424 Permissible values for these parameters are: 'reset', 24425 'software_exception', 'page_miss', 'timer0', 'timer1', 'message', 24426 'dma0', 'dma1', 'wand' and 'swi'. Multiple parameters indicate 24427 that multiple entries in the interrupt vector table should be 24428 initialized for this function, i.e. for each parameter NAME, a jump 24429 to the function is emitted in the section ivt_entry_NAME. The 24430 parameter(s) may be omitted entirely, in which case no interrupt 24431 vector table entry is provided. 24432 24433 Note, on Epiphany targets, interrupts are enabled inside the 24434 function unless the 'disinterrupt' attribute is also specified. 24435 24436 On Epiphany targets, you can also use the following attribute to 24437 modify the behavior of an interrupt handler: 24438 'forwarder_section' 24439 The interrupt handler may be in external memory which cannot 24440 be reached by a branch instruction, so generate a local memory 24441 trampoline to transfer control. The single parameter 24442 identifies the section where the trampoline is placed. 24443 24444 The following examples are all valid uses of these attributes on 24445 Epiphany targets: 24446 void __attribute__ ((interrupt)) universal_handler (); 24447 void __attribute__ ((interrupt ("dma1"))) dma1_handler (); 24448 void __attribute__ ((interrupt ("dma0, dma1"))) universal_dma_handler (); 24449 void __attribute__ ((interrupt ("timer0"), disinterrupt)) 24450 fast_timer_handler (); 24451 void __attribute__ ((interrupt ("dma0, dma1"), forwarder_section ("tramp"))) 24452 external_dma_handler (); 24453 24454 On MIPS targets, you can use the following attributes to modify the 24455 behavior of an interrupt handler: 24456 'use_shadow_register_set' 24457 Assume that the handler uses a shadow register set, instead of 24458 the main general-purpose registers. 24459 24460 'keep_interrupts_masked' 24461 Keep interrupts masked for the whole function. Without this 24462 attribute, GCC tries to reenable interrupts for as much of the 24463 function as it can. 24464 24465 'use_debug_exception_return' 24466 Return using the 'deret' instruction. Interrupt handlers that 24467 don't have this attribute return using 'eret' instead. 24468 24469 You can use any combination of these attributes, as shown below: 24470 void __attribute__ ((interrupt)) v0 (); 24471 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 24472 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 24473 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 24474 void __attribute__ ((interrupt, use_shadow_register_set, 24475 keep_interrupts_masked)) v4 (); 24476 void __attribute__ ((interrupt, use_shadow_register_set, 24477 use_debug_exception_return)) v5 (); 24478 void __attribute__ ((interrupt, keep_interrupts_masked, 24479 use_debug_exception_return)) v6 (); 24480 void __attribute__ ((interrupt, use_shadow_register_set, 24481 keep_interrupts_masked, 24482 use_debug_exception_return)) v7 (); 24483 24484 On NDS32 target, this attribute is to indicate that the specified 24485 function is an interrupt handler. The compiler will generate 24486 corresponding sections for use in an interrupt handler. You can 24487 use the following attributes to modify the behavior: 24488 'nested' 24489 This interrupt service routine is interruptible. 24490 'not_nested' 24491 This interrupt service routine is not interruptible. 24492 'nested_ready' 24493 This interrupt service routine is interruptible after 24494 'PSW.GIE' (global interrupt enable) is set. This allows 24495 interrupt service routine to finish some short critical code 24496 before enabling interrupts. 24497 'save_all' 24498 The system will help save all registers into stack before 24499 entering interrupt handler. 24500 'partial_save' 24501 The system will help save caller registers into stack before 24502 entering interrupt handler. 24503 24504 On RL78, use 'brk_interrupt' instead of 'interrupt' for handlers 24505 intended to be used with the 'BRK' opcode (i.e. those that must end 24506 with 'RETB' instead of 'RETI'). 24507 24508'interrupt_handler' 24509 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and 24510 SH to indicate that the specified function is an interrupt handler. 24511 The compiler generates function entry and exit sequences suitable 24512 for use in an interrupt handler when this attribute is present. 24513 24514'interrupt_thread' 24515 Use this attribute on fido, a subarchitecture of the m68k, to 24516 indicate that the specified function is an interrupt handler that 24517 is designed to run as a thread. The compiler omits generate 24518 prologue/epilogue sequences and replaces the return instruction 24519 with a 'sleep' instruction. This attribute is available only on 24520 fido. 24521 24522'isr' 24523 Use this attribute on ARM to write Interrupt Service Routines. 24524 This is an alias to the 'interrupt' attribute above. 24525 24526'kspisusp' 24527 When used together with 'interrupt_handler', 'exception_handler' or 24528 'nmi_handler', code is generated to load the stack pointer from the 24529 USP register in the function prologue. 24530 24531'l1_text' 24532 This attribute specifies a function to be placed into L1 24533 Instruction SRAM. The function is put into a specific section 24534 named '.l1.text'. With '-mfdpic', function calls with a such 24535 function as the callee or caller uses inlined PLT. 24536 24537'l2' 24538 On the Blackfin, this attribute specifies a function to be placed 24539 into L2 SRAM. The function is put into a specific section named 24540 '.l1.text'. With '-mfdpic', callers of such functions use an 24541 inlined PLT. 24542 24543'leaf' 24544 Calls to external functions with this attribute must return to the 24545 current compilation unit only by return or by exception handling. 24546 In particular, leaf functions are not allowed to call callback 24547 function passed to it from the current compilation unit or directly 24548 call functions exported by the unit or longjmp into the unit. Leaf 24549 function might still call functions from other compilation units 24550 and thus they are not necessarily leaf in the sense that they 24551 contain no function calls at all. 24552 24553 The attribute is intended for library functions to improve dataflow 24554 analysis. The compiler takes the hint that any data not escaping 24555 the current compilation unit can not be used or modified by the 24556 leaf function. For example, the 'sin' function is a leaf function, 24557 but 'qsort' is not. 24558 24559 Note that leaf functions might invoke signals and signal handlers 24560 might be defined in the current compilation unit and use static 24561 variables. The only compliant way to write such a signal handler 24562 is to declare such variables 'volatile'. 24563 24564 The attribute has no effect on functions defined within the current 24565 compilation unit. This is to allow easy merging of multiple 24566 compilation units into one, for example, by using the link-time 24567 optimization. For this reason the attribute is not allowed on 24568 types to annotate indirect calls. 24569 24570'long_call/medium_call/short_call' 24571 These attributes specify how a particular function is called on 24572 ARC, ARM and Epiphany - with 'medium_call' being specific to ARC. 24573 These attributes override the '-mlong-calls' (*note ARM Options:: 24574 and *note ARC Options::) and '-mmedium-calls' (*note ARC Options::) 24575 command-line switches and '#pragma long_calls' settings. For ARM, 24576 the 'long_call' attribute indicates that the function might be far 24577 away from the call site and require a different (more expensive) 24578 calling sequence. The 'short_call' attribute always places the 24579 offset to the function from the call site into the 'BL' instruction 24580 directly. 24581 24582 For ARC, a function marked with the 'long_call' attribute is always 24583 called using register-indirect jump-and-link instructions, thereby 24584 enabling the called function to be placed anywhere within the 24585 32-bit address space. A function marked with the 'medium_call' 24586 attribute will always be close enough to be called with an 24587 unconditional branch-and-link instruction, which has a 25-bit 24588 offset from the call site. A function marked with the 'short_call' 24589 attribute will always be close enough to be called with a 24590 conditional branch-and-link instruction, which has a 21-bit offset 24591 from the call site. 24592 24593'longcall/shortcall' 24594 On the Blackfin, RS/6000 and PowerPC, the 'longcall' attribute 24595 indicates that the function might be far away from the call site 24596 and require a different (more expensive) calling sequence. The 24597 'shortcall' attribute indicates that the function is always close 24598 enough for the shorter calling sequence to be used. These 24599 attributes override both the '-mlongcall' switch and, on the 24600 RS/6000 and PowerPC, the '#pragma longcall' setting. 24601 24602 *Note RS/6000 and PowerPC Options::, for more information on 24603 whether long calls are necessary. 24604 24605'long_call/near/far' 24606 These attributes specify how a particular function is called on 24607 MIPS. The attributes override the '-mlong-calls' (*note MIPS 24608 Options::) command-line switch. The 'long_call' and 'far' 24609 attributes are synonyms, and cause the compiler to always call the 24610 function by first loading its address into a register, and then 24611 using the contents of that register. The 'near' attribute has the 24612 opposite effect; it specifies that non-PIC calls should be made 24613 using the more efficient 'jal' instruction. 24614 24615'malloc' 24616 The 'malloc' attribute is used to tell the compiler that a function 24617 may be treated as if any non-'NULL' pointer it returns cannot alias 24618 any other pointer valid when the function returns and that the 24619 memory has undefined content. This often improves optimization. 24620 Standard functions with this property include 'malloc' and 24621 'calloc'. 'realloc'-like functions do not have this property as 24622 the memory pointed to does not have undefined content. 24623 24624'mips16/nomips16' 24625 24626 On MIPS targets, you can use the 'mips16' and 'nomips16' function 24627 attributes to locally select or turn off MIPS16 code generation. A 24628 function with the 'mips16' attribute is emitted as MIPS16 code, 24629 while MIPS16 code generation is disabled for functions with the 24630 'nomips16' attribute. These attributes override the '-mips16' and 24631 '-mno-mips16' options on the command line (*note MIPS Options::). 24632 24633 When compiling files containing mixed MIPS16 and non-MIPS16 code, 24634 the preprocessor symbol '__mips16' reflects the setting on the 24635 command line, not that within individual functions. Mixed MIPS16 24636 and non-MIPS16 code may interact badly with some GCC extensions 24637 such as '__builtin_apply' (*note Constructing Calls::). 24638 24639'micromips/nomicromips' 24640 24641 On MIPS targets, you can use the 'micromips' and 'nomicromips' 24642 function attributes to locally select or turn off microMIPS code 24643 generation. A function with the 'micromips' attribute is emitted 24644 as microMIPS code, while microMIPS code generation is disabled for 24645 functions with the 'nomicromips' attribute. These attributes 24646 override the '-mmicromips' and '-mno-micromips' options on the 24647 command line (*note MIPS Options::). 24648 24649 When compiling files containing mixed microMIPS and non-microMIPS 24650 code, the preprocessor symbol '__mips_micromips' reflects the 24651 setting on the command line, not that within individual functions. 24652 Mixed microMIPS and non-microMIPS code may interact badly with some 24653 GCC extensions such as '__builtin_apply' (*note Constructing 24654 Calls::). 24655 24656'model (MODEL-NAME)' 24657 24658 On the M32R/D, use this attribute to set the addressability of an 24659 object, and of the code generated for a function. The identifier 24660 MODEL-NAME is one of 'small', 'medium', or 'large', representing 24661 each of the code models. 24662 24663 Small model objects live in the lower 16MB of memory (so that their 24664 addresses can be loaded with the 'ld24' instruction), and are 24665 callable with the 'bl' instruction. 24666 24667 Medium model objects may live anywhere in the 32-bit address space 24668 (the compiler generates 'seth/add3' instructions to load their 24669 addresses), and are callable with the 'bl' instruction. 24670 24671 Large model objects may live anywhere in the 32-bit address space 24672 (the compiler generates 'seth/add3' instructions to load their 24673 addresses), and may not be reachable with the 'bl' instruction (the 24674 compiler generates the much slower 'seth/add3/jl' instruction 24675 sequence). 24676 24677 On IA-64, use this attribute to set the addressability of an 24678 object. At present, the only supported identifier for MODEL-NAME 24679 is 'small', indicating addressability via "small" (22-bit) 24680 addresses (so that their addresses can be loaded with the 'addl' 24681 instruction). Caveat: such addressing is by definition not 24682 position independent and hence this attribute must not be used for 24683 objects defined by shared libraries. 24684 24685'ms_abi/sysv_abi' 24686 24687 On 32-bit and 64-bit (i?86|x86_64)-*-* targets, you can use an ABI 24688 attribute to indicate which calling convention should be used for a 24689 function. The 'ms_abi' attribute tells the compiler to use the 24690 Microsoft ABI, while the 'sysv_abi' attribute tells the compiler to 24691 use the ABI used on GNU/Linux and other systems. The default is to 24692 use the Microsoft ABI when targeting Windows. On all other 24693 systems, the default is the x86/AMD ABI. 24694 24695 Note, the 'ms_abi' attribute for Microsoft Windows 64-bit targets 24696 currently requires the '-maccumulate-outgoing-args' option. 24697 24698'callee_pop_aggregate_return (NUMBER)' 24699 24700 On 32-bit i?86-*-* targets, you can use this attribute to control 24701 how aggregates are returned in memory. If the caller is 24702 responsible for popping the hidden pointer together with the rest 24703 of the arguments, specify NUMBER equal to zero. If callee is 24704 responsible for popping the hidden pointer, specify NUMBER equal to 24705 one. 24706 24707 The default i386 ABI assumes that the callee pops the stack for 24708 hidden pointer. However, on 32-bit i386 Microsoft Windows targets, 24709 the compiler assumes that the caller pops the stack for hidden 24710 pointer. 24711 24712'ms_hook_prologue' 24713 24714 On 32-bit i[34567]86-*-* targets and 64-bit x86_64-*-* targets, you 24715 can use this function attribute to make GCC generate the 24716 "hot-patching" function prologue used in Win32 API functions in 24717 Microsoft Windows XP Service Pack 2 and newer. 24718 24719'hotpatch [(PROLOGUE-HALFWORDS)]' 24720 24721 On S/390 System z targets, you can use this function attribute to 24722 make GCC generate a "hot-patching" function prologue. The 24723 'hotpatch' has no effect on funtions that are explicitly inline. 24724 If the '-mhotpatch' or '-mno-hotpatch' command-line option is used 24725 at the same time, the 'hotpatch' attribute takes precedence. If an 24726 argument is given, the maximum allowed value is 1000000. 24727 24728'naked' 24729 Use this attribute on the ARM, AVR, MCORE, MSP430, NDS32, RL78, RX 24730 and SPU ports to indicate that the specified function does not need 24731 prologue/epilogue sequences generated by the compiler. It is up to 24732 the programmer to provide these sequences. The only statements 24733 that can be safely included in naked functions are 'asm' statements 24734 that do not have operands. All other statements, including 24735 declarations of local variables, 'if' statements, and so forth, 24736 should be avoided. Naked functions should be used to implement the 24737 body of an assembly function, while allowing the compiler to 24738 construct the requisite function declaration for the assembler. 24739 24740'near' 24741 On 68HC11 and 68HC12 the 'near' attribute causes the compiler to 24742 use the normal calling convention based on 'jsr' and 'rts'. This 24743 attribute can be used to cancel the effect of the '-mlong-calls' 24744 option. 24745 24746 On MeP targets this attribute causes the compiler to assume the 24747 called function is close enough to use the normal calling 24748 convention, overriding the '-mtf' command-line option. 24749 24750'nesting' 24751 Use this attribute together with 'interrupt_handler', 24752 'exception_handler' or 'nmi_handler' to indicate that the function 24753 entry code should enable nested interrupts or exceptions. 24754 24755'nmi_handler' 24756 Use this attribute on the Blackfin to indicate that the specified 24757 function is an NMI handler. The compiler generates function entry 24758 and exit sequences suitable for use in an NMI handler when this 24759 attribute is present. 24760 24761'nocompression' 24762 On MIPS targets, you can use the 'nocompression' function attribute 24763 to locally turn off MIPS16 and microMIPS code generation. This 24764 attribute overrides the '-mips16' and '-mmicromips' options on the 24765 command line (*note MIPS Options::). 24766 24767'no_instrument_function' 24768 If '-finstrument-functions' is given, profiling function calls are 24769 generated at entry and exit of most user-compiled functions. 24770 Functions with this attribute are not so instrumented. 24771 24772'no_split_stack' 24773 If '-fsplit-stack' is given, functions have a small prologue which 24774 decides whether to split the stack. Functions with the 24775 'no_split_stack' attribute do not have that prologue, and thus may 24776 run with only a small amount of stack space available. 24777 24778'noinline' 24779 This function attribute prevents a function from being considered 24780 for inlining. If the function does not have side-effects, there 24781 are optimizations other than inlining that cause function calls to 24782 be optimized away, although the function call is live. To keep 24783 such calls from being optimized away, put 24784 asm (""); 24785 24786 (*note Extended Asm::) in the called function, to serve as a 24787 special side-effect. 24788 24789'noclone' 24790 This function attribute prevents a function from being considered 24791 for cloning--a mechanism that produces specialized copies of 24792 functions and which is (currently) performed by interprocedural 24793 constant propagation. 24794 24795'nonnull (ARG-INDEX, ...)' 24796 The 'nonnull' attribute specifies that some function parameters 24797 should be non-null pointers. For instance, the declaration: 24798 24799 extern void * 24800 my_memcpy (void *dest, const void *src, size_t len) 24801 __attribute__((nonnull (1, 2))); 24802 24803 causes the compiler to check that, in calls to 'my_memcpy', 24804 arguments DEST and SRC are non-null. If the compiler determines 24805 that a null pointer is passed in an argument slot marked as 24806 non-null, and the '-Wnonnull' option is enabled, a warning is 24807 issued. The compiler may also choose to make optimizations based 24808 on the knowledge that certain function arguments will never be 24809 null. 24810 24811 If no argument index list is given to the 'nonnull' attribute, all 24812 pointer arguments are marked as non-null. To illustrate, the 24813 following declaration is equivalent to the previous example: 24814 24815 extern void * 24816 my_memcpy (void *dest, const void *src, size_t len) 24817 __attribute__((nonnull)); 24818 24819'returns_nonnull' 24820 The 'returns_nonnull' attribute specifies that the function return 24821 value should be a non-null pointer. For instance, the declaration: 24822 24823 extern void * 24824 mymalloc (size_t len) __attribute__((returns_nonnull)); 24825 24826 lets the compiler optimize callers based on the knowledge that the 24827 return value will never be null. 24828 24829'noreturn' 24830 A few standard library functions, such as 'abort' and 'exit', 24831 cannot return. GCC knows this automatically. Some programs define 24832 their own functions that never return. You can declare them 24833 'noreturn' to tell the compiler this fact. For example, 24834 24835 void fatal () __attribute__ ((noreturn)); 24836 24837 void 24838 fatal (/* ... */) 24839 { 24840 /* ... */ /* Print error message. */ /* ... */ 24841 exit (1); 24842 } 24843 24844 The 'noreturn' keyword tells the compiler to assume that 'fatal' 24845 cannot return. It can then optimize without regard to what would 24846 happen if 'fatal' ever did return. This makes slightly better 24847 code. More importantly, it helps avoid spurious warnings of 24848 uninitialized variables. 24849 24850 The 'noreturn' keyword does not affect the exceptional path when 24851 that applies: a 'noreturn'-marked function may still return to the 24852 caller by throwing an exception or calling 'longjmp'. 24853 24854 Do not assume that registers saved by the calling function are 24855 restored before calling the 'noreturn' function. 24856 24857 It does not make sense for a 'noreturn' function to have a return 24858 type other than 'void'. 24859 24860 The attribute 'noreturn' is not implemented in GCC versions earlier 24861 than 2.5. An alternative way to declare that a function does not 24862 return, which works in the current version and in some older 24863 versions, is as follows: 24864 24865 typedef void voidfn (); 24866 24867 volatile voidfn fatal; 24868 24869 This approach does not work in GNU C++. 24870 24871'nothrow' 24872 The 'nothrow' attribute is used to inform the compiler that a 24873 function cannot throw an exception. For example, most functions in 24874 the standard C library can be guaranteed not to throw an exception 24875 with the notable exceptions of 'qsort' and 'bsearch' that take 24876 function pointer arguments. The 'nothrow' attribute is not 24877 implemented in GCC versions earlier than 3.3. 24878 24879'nosave_low_regs' 24880 Use this attribute on SH targets to indicate that an 24881 'interrupt_handler' function should not save and restore registers 24882 R0..R7. This can be used on SH3* and SH4* targets that have a 24883 second R0..R7 register bank for non-reentrant interrupt handlers. 24884 24885'optimize' 24886 The 'optimize' attribute is used to specify that a function is to 24887 be compiled with different optimization options than specified on 24888 the command line. Arguments can either be numbers or strings. 24889 Numbers are assumed to be an optimization level. Strings that 24890 begin with 'O' are assumed to be an optimization option, while 24891 other options are assumed to be used with a '-f' prefix. You can 24892 also use the '#pragma GCC optimize' pragma to set the optimization 24893 options that affect more than one function. *Note Function 24894 Specific Option Pragmas::, for details about the '#pragma GCC 24895 optimize' pragma. 24896 24897 This can be used for instance to have frequently-executed functions 24898 compiled with more aggressive optimization options that produce 24899 faster and larger code, while other functions can be compiled with 24900 less aggressive options. 24901 24902'OS_main/OS_task' 24903 On AVR, functions with the 'OS_main' or 'OS_task' attribute do not 24904 save/restore any call-saved register in their prologue/epilogue. 24905 24906 The 'OS_main' attribute can be used when there _is guarantee_ that 24907 interrupts are disabled at the time when the function is entered. 24908 This saves resources when the stack pointer has to be changed to 24909 set up a frame for local variables. 24910 24911 The 'OS_task' attribute can be used when there is _no guarantee_ 24912 that interrupts are disabled at that time when the function is 24913 entered like for, e.g. task functions in a multi-threading 24914 operating system. In that case, changing the stack pointer 24915 register is guarded by save/clear/restore of the global interrupt 24916 enable flag. 24917 24918 The differences to the 'naked' function attribute are: 24919 * 'naked' functions do not have a return instruction whereas 24920 'OS_main' and 'OS_task' functions have a 'RET' or 'RETI' 24921 return instruction. 24922 * 'naked' functions do not set up a frame for local variables or 24923 a frame pointer whereas 'OS_main' and 'OS_task' do this as 24924 needed. 24925 24926'pcs' 24927 24928 The 'pcs' attribute can be used to control the calling convention 24929 used for a function on ARM. The attribute takes an argument that 24930 specifies the calling convention to use. 24931 24932 When compiling using the AAPCS ABI (or a variant of it) then valid 24933 values for the argument are '"aapcs"' and '"aapcs-vfp"'. In order 24934 to use a variant other than '"aapcs"' then the compiler must be 24935 permitted to use the appropriate co-processor registers (i.e., the 24936 VFP registers must be available in order to use '"aapcs-vfp"'). 24937 For example, 24938 24939 /* Argument passed in r0, and result returned in r0+r1. */ 24940 double f2d (float) __attribute__((pcs("aapcs"))); 24941 24942 Variadic functions always use the '"aapcs"' calling convention and 24943 the compiler rejects attempts to specify an alternative. 24944 24945'pure' 24946 Many functions have no effects except the return value and their 24947 return value depends only on the parameters and/or global 24948 variables. Such a function can be subject to common subexpression 24949 elimination and loop optimization just as an arithmetic operator 24950 would be. These functions should be declared with the attribute 24951 'pure'. For example, 24952 24953 int square (int) __attribute__ ((pure)); 24954 24955 says that the hypothetical function 'square' is safe to call fewer 24956 times than the program says. 24957 24958 Some of common examples of pure functions are 'strlen' or 'memcmp'. 24959 Interesting non-pure functions are functions with infinite loops or 24960 those depending on volatile memory or other system resource, that 24961 may change between two consecutive calls (such as 'feof' in a 24962 multithreading environment). 24963 24964 The attribute 'pure' is not implemented in GCC versions earlier 24965 than 2.96. 24966 24967'hot' 24968 The 'hot' attribute on a function is used to inform the compiler 24969 that the function is a hot spot of the compiled program. The 24970 function is optimized more aggressively and on many target it is 24971 placed into special subsection of the text section so all hot 24972 functions appears close together improving locality. 24973 24974 When profile feedback is available, via '-fprofile-use', hot 24975 functions are automatically detected and this attribute is ignored. 24976 24977 The 'hot' attribute on functions is not implemented in GCC versions 24978 earlier than 4.3. 24979 24980 The 'hot' attribute on a label is used to inform the compiler that 24981 path following the label are more likely than paths that are not so 24982 annotated. This attribute is used in cases where 24983 '__builtin_expect' cannot be used, for instance with computed goto 24984 or 'asm goto'. 24985 24986 The 'hot' attribute on labels is not implemented in GCC versions 24987 earlier than 4.8. 24988 24989'cold' 24990 The 'cold' attribute on functions is used to inform the compiler 24991 that the function is unlikely to be executed. The function is 24992 optimized for size rather than speed and on many targets it is 24993 placed into special subsection of the text section so all cold 24994 functions appears close together improving code locality of 24995 non-cold parts of program. The paths leading to call of cold 24996 functions within code are marked as unlikely by the branch 24997 prediction mechanism. It is thus useful to mark functions used to 24998 handle unlikely conditions, such as 'perror', as cold to improve 24999 optimization of hot functions that do call marked functions in rare 25000 occasions. 25001 25002 When profile feedback is available, via '-fprofile-use', cold 25003 functions are automatically detected and this attribute is ignored. 25004 25005 The 'cold' attribute on functions is not implemented in GCC 25006 versions earlier than 4.3. 25007 25008 The 'cold' attribute on labels is used to inform the compiler that 25009 the path following the label is unlikely to be executed. This 25010 attribute is used in cases where '__builtin_expect' cannot be used, 25011 for instance with computed goto or 'asm goto'. 25012 25013 The 'cold' attribute on labels is not implemented in GCC versions 25014 earlier than 4.8. 25015 25016'no_sanitize_address' 25017'no_address_safety_analysis' 25018 The 'no_sanitize_address' attribute on functions is used to inform 25019 the compiler that it should not instrument memory accesses in the 25020 function when compiling with the '-fsanitize=address' option. The 25021 'no_address_safety_analysis' is a deprecated alias of the 25022 'no_sanitize_address' attribute, new code should use 25023 'no_sanitize_address'. 25024 25025'no_sanitize_undefined' 25026 The 'no_sanitize_undefined' attribute on functions is used to 25027 inform the compiler that it should not check for undefined behavior 25028 in the function when compiling with the '-fsanitize=undefined' 25029 option. 25030 25031'regparm (NUMBER)' 25032 On the Intel 386, the 'regparm' attribute causes the compiler to 25033 pass arguments number one to NUMBER if they are of integral type in 25034 registers EAX, EDX, and ECX instead of on the stack. Functions 25035 that take a variable number of arguments continue to be passed all 25036 of their arguments on the stack. 25037 25038 Beware that on some ELF systems this attribute is unsuitable for 25039 global functions in shared libraries with lazy binding (which is 25040 the default). Lazy binding sends the first call via resolving code 25041 in the loader, which might assume EAX, EDX and ECX can be 25042 clobbered, as per the standard calling conventions. Solaris 8 is 25043 affected by this. Systems with the GNU C Library version 2.1 or 25044 higher and FreeBSD are believed to be safe since the loaders there 25045 save EAX, EDX and ECX. (Lazy binding can be disabled with the 25046 linker or the loader if desired, to avoid the problem.) 25047 25048'reset' 25049 Use this attribute on the NDS32 target to indicate that the 25050 specified function is a reset handler. The compiler will generate 25051 corresponding sections for use in a reset handler. You can use the 25052 following attributes to provide extra exception handling: 25053 'nmi' 25054 Provide a user-defined function to handle NMI exception. 25055 'warm' 25056 Provide a user-defined function to handle warm reset 25057 exception. 25058 25059'sseregparm' 25060 On the Intel 386 with SSE support, the 'sseregparm' attribute 25061 causes the compiler to pass up to 3 floating-point arguments in SSE 25062 registers instead of on the stack. Functions that take a variable 25063 number of arguments continue to pass all of their floating-point 25064 arguments on the stack. 25065 25066'force_align_arg_pointer' 25067 On the Intel x86, the 'force_align_arg_pointer' attribute may be 25068 applied to individual function definitions, generating an alternate 25069 prologue and epilogue that realigns the run-time stack if 25070 necessary. This supports mixing legacy codes that run with a 25071 4-byte aligned stack with modern codes that keep a 16-byte stack 25072 for SSE compatibility. 25073 25074'renesas' 25075 On SH targets this attribute specifies that the function or struct 25076 follows the Renesas ABI. 25077 25078'resbank' 25079 On the SH2A target, this attribute enables the high-speed register 25080 saving and restoration using a register bank for 25081 'interrupt_handler' routines. Saving to the bank is performed 25082 automatically after the CPU accepts an interrupt that uses a 25083 register bank. 25084 25085 The nineteen 32-bit registers comprising general register R0 to 25086 R14, control register GBR, and system registers MACH, MACL, and PR 25087 and the vector table address offset are saved into a register bank. 25088 Register banks are stacked in first-in last-out (FILO) sequence. 25089 Restoration from the bank is executed by issuing a RESBANK 25090 instruction. 25091 25092'returns_twice' 25093 The 'returns_twice' attribute tells the compiler that a function 25094 may return more than one time. The compiler ensures that all 25095 registers are dead before calling such a function and emits a 25096 warning about the variables that may be clobbered after the second 25097 return from the function. Examples of such functions are 'setjmp' 25098 and 'vfork'. The 'longjmp'-like counterpart of such function, if 25099 any, might need to be marked with the 'noreturn' attribute. 25100 25101'saveall' 25102 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 25103 indicate that all registers except the stack pointer should be 25104 saved in the prologue regardless of whether they are used or not. 25105 25106'save_volatiles' 25107 Use this attribute on the MicroBlaze to indicate that the function 25108 is an interrupt handler. All volatile registers (in addition to 25109 non-volatile registers) are saved in the function prologue. If the 25110 function is a leaf function, only volatiles used by the function 25111 are saved. A normal function return is generated instead of a 25112 return from interrupt. 25113 25114'section ("SECTION-NAME")' 25115 Normally, the compiler places the code it generates in the 'text' 25116 section. Sometimes, however, you need additional sections, or you 25117 need certain particular functions to appear in special sections. 25118 The 'section' attribute specifies that a function lives in a 25119 particular section. For example, the declaration: 25120 25121 extern void foobar (void) __attribute__ ((section ("bar"))); 25122 25123 puts the function 'foobar' in the 'bar' section. 25124 25125 Some file formats do not support arbitrary sections so the 25126 'section' attribute is not available on all platforms. If you need 25127 to map the entire contents of a module to a particular section, 25128 consider using the facilities of the linker instead. 25129 25130'sentinel' 25131 This function attribute ensures that a parameter in a function call 25132 is an explicit 'NULL'. The attribute is only valid on variadic 25133 functions. By default, the sentinel is located at position zero, 25134 the last parameter of the function call. If an optional integer 25135 position argument P is supplied to the attribute, the sentinel must 25136 be located at position P counting backwards from the end of the 25137 argument list. 25138 25139 __attribute__ ((sentinel)) 25140 is equivalent to 25141 __attribute__ ((sentinel(0))) 25142 25143 The attribute is automatically set with a position of 0 for the 25144 built-in functions 'execl' and 'execlp'. The built-in function 25145 'execle' has the attribute set with a position of 1. 25146 25147 A valid 'NULL' in this context is defined as zero with any pointer 25148 type. If your system defines the 'NULL' macro with an integer type 25149 then you need to add an explicit cast. GCC replaces 'stddef.h' 25150 with a copy that redefines NULL appropriately. 25151 25152 The warnings for missing or incorrect sentinels are enabled with 25153 '-Wformat'. 25154 25155'short_call' 25156 See 'long_call/short_call'. 25157 25158'shortcall' 25159 See 'longcall/shortcall'. 25160 25161'signal' 25162 Use this attribute on the AVR to indicate that the specified 25163 function is an interrupt handler. The compiler generates function 25164 entry and exit sequences suitable for use in an interrupt handler 25165 when this attribute is present. 25166 25167 See also the 'interrupt' function attribute. 25168 25169 The AVR hardware globally disables interrupts when an interrupt is 25170 executed. Interrupt handler functions defined with the 'signal' 25171 attribute do not re-enable interrupts. It is save to enable 25172 interrupts in a 'signal' handler. This "save" only applies to the 25173 code generated by the compiler and not to the IRQ layout of the 25174 application which is responsibility of the application. 25175 25176 If both 'signal' and 'interrupt' are specified for the same 25177 function, 'signal' is silently ignored. 25178 25179'sp_switch' 25180 Use this attribute on the SH to indicate an 'interrupt_handler' 25181 function should switch to an alternate stack. It expects a string 25182 argument that names a global variable holding the address of the 25183 alternate stack. 25184 25185 void *alt_stack; 25186 void f () __attribute__ ((interrupt_handler, 25187 sp_switch ("alt_stack"))); 25188 25189'stdcall' 25190 On the Intel 386, the 'stdcall' attribute causes the compiler to 25191 assume that the called function pops off the stack space used to 25192 pass arguments, unless it takes a variable number of arguments. 25193 25194'syscall_linkage' 25195 This attribute is used to modify the IA-64 calling convention by 25196 marking all input registers as live at all function exits. This 25197 makes it possible to restart a system call after an interrupt 25198 without having to save/restore the input registers. This also 25199 prevents kernel data from leaking into application code. 25200 25201'target' 25202 The 'target' attribute is used to specify that a function is to be 25203 compiled with different target options than specified on the 25204 command line. This can be used for instance to have functions 25205 compiled with a different ISA (instruction set architecture) than 25206 the default. You can also use the '#pragma GCC target' pragma to 25207 set more than one function to be compiled with specific target 25208 options. *Note Function Specific Option Pragmas::, for details 25209 about the '#pragma GCC target' pragma. 25210 25211 For instance on a 386, you could compile one function with 25212 'target("sse4.1,arch=core2")' and another with 25213 'target("sse4a,arch=amdfam10")'. This is equivalent to compiling 25214 the first function with '-msse4.1' and '-march=core2' options, and 25215 the second function with '-msse4a' and '-march=amdfam10' options. 25216 It is up to the user to make sure that a function is only invoked 25217 on a machine that supports the particular ISA it is compiled for 25218 (for example by using 'cpuid' on 386 to determine what feature bits 25219 and architecture family are used). 25220 25221 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 25222 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 25223 25224 You can either use multiple strings to specify multiple options, or 25225 separate the options with a comma (','). 25226 25227 The 'target' attribute is presently implemented for i386/x86_64, 25228 PowerPC, and Nios II targets only. The options supported are 25229 specific to each target. 25230 25231 On the 386, the following options are allowed: 25232 25233 'abm' 25234 'no-abm' 25235 Enable/disable the generation of the advanced bit 25236 instructions. 25237 25238 'aes' 25239 'no-aes' 25240 Enable/disable the generation of the AES instructions. 25241 25242 'default' 25243 *Note Function Multiversioning::, where it is used to specify 25244 the default function version. 25245 25246 'mmx' 25247 'no-mmx' 25248 Enable/disable the generation of the MMX instructions. 25249 25250 'pclmul' 25251 'no-pclmul' 25252 Enable/disable the generation of the PCLMUL instructions. 25253 25254 'popcnt' 25255 'no-popcnt' 25256 Enable/disable the generation of the POPCNT instruction. 25257 25258 'sse' 25259 'no-sse' 25260 Enable/disable the generation of the SSE instructions. 25261 25262 'sse2' 25263 'no-sse2' 25264 Enable/disable the generation of the SSE2 instructions. 25265 25266 'sse3' 25267 'no-sse3' 25268 Enable/disable the generation of the SSE3 instructions. 25269 25270 'sse4' 25271 'no-sse4' 25272 Enable/disable the generation of the SSE4 instructions (both 25273 SSE4.1 and SSE4.2). 25274 25275 'sse4.1' 25276 'no-sse4.1' 25277 Enable/disable the generation of the sse4.1 instructions. 25278 25279 'sse4.2' 25280 'no-sse4.2' 25281 Enable/disable the generation of the sse4.2 instructions. 25282 25283 'sse4a' 25284 'no-sse4a' 25285 Enable/disable the generation of the SSE4A instructions. 25286 25287 'fma4' 25288 'no-fma4' 25289 Enable/disable the generation of the FMA4 instructions. 25290 25291 'xop' 25292 'no-xop' 25293 Enable/disable the generation of the XOP instructions. 25294 25295 'lwp' 25296 'no-lwp' 25297 Enable/disable the generation of the LWP instructions. 25298 25299 'ssse3' 25300 'no-ssse3' 25301 Enable/disable the generation of the SSSE3 instructions. 25302 25303 'cld' 25304 'no-cld' 25305 Enable/disable the generation of the CLD before string moves. 25306 25307 'fancy-math-387' 25308 'no-fancy-math-387' 25309 Enable/disable the generation of the 'sin', 'cos', and 'sqrt' 25310 instructions on the 387 floating-point unit. 25311 25312 'fused-madd' 25313 'no-fused-madd' 25314 Enable/disable the generation of the fused multiply/add 25315 instructions. 25316 25317 'ieee-fp' 25318 'no-ieee-fp' 25319 Enable/disable the generation of floating point that depends 25320 on IEEE arithmetic. 25321 25322 'inline-all-stringops' 25323 'no-inline-all-stringops' 25324 Enable/disable inlining of string operations. 25325 25326 'inline-stringops-dynamically' 25327 'no-inline-stringops-dynamically' 25328 Enable/disable the generation of the inline code to do small 25329 string operations and calling the library routines for large 25330 operations. 25331 25332 'align-stringops' 25333 'no-align-stringops' 25334 Do/do not align destination of inlined string operations. 25335 25336 'recip' 25337 'no-recip' 25338 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 25339 RSQRTPS instructions followed an additional Newton-Raphson 25340 step instead of doing a floating-point division. 25341 25342 'arch=ARCH' 25343 Specify the architecture to generate code for in compiling the 25344 function. 25345 25346 'tune=TUNE' 25347 Specify the architecture to tune for in compiling the 25348 function. 25349 25350 'fpmath=FPMATH' 25351 Specify which floating-point unit to use. The 25352 'target("fpmath=sse,387")' option must be specified as 25353 'target("fpmath=sse+387")' because the comma would separate 25354 different options. 25355 25356 On the PowerPC, the following options are allowed: 25357 25358 'altivec' 25359 'no-altivec' 25360 Generate code that uses (does not use) AltiVec instructions. 25361 In 32-bit code, you cannot enable AltiVec instructions unless 25362 '-mabi=altivec' is used on the command line. 25363 25364 'cmpb' 25365 'no-cmpb' 25366 Generate code that uses (does not use) the compare bytes 25367 instruction implemented on the POWER6 processor and other 25368 processors that support the PowerPC V2.05 architecture. 25369 25370 'dlmzb' 25371 'no-dlmzb' 25372 Generate code that uses (does not use) the string-search 25373 'dlmzb' instruction on the IBM 405, 440, 464 and 476 25374 processors. This instruction is generated by default when 25375 targeting those processors. 25376 25377 'fprnd' 25378 'no-fprnd' 25379 Generate code that uses (does not use) the FP round to integer 25380 instructions implemented on the POWER5+ processor and other 25381 processors that support the PowerPC V2.03 architecture. 25382 25383 'hard-dfp' 25384 'no-hard-dfp' 25385 Generate code that uses (does not use) the decimal 25386 floating-point instructions implemented on some POWER 25387 processors. 25388 25389 'isel' 25390 'no-isel' 25391 Generate code that uses (does not use) ISEL instruction. 25392 25393 'mfcrf' 25394 'no-mfcrf' 25395 Generate code that uses (does not use) the move from condition 25396 register field instruction implemented on the POWER4 processor 25397 and other processors that support the PowerPC V2.01 25398 architecture. 25399 25400 'mfpgpr' 25401 'no-mfpgpr' 25402 Generate code that uses (does not use) the FP move to/from 25403 general purpose register instructions implemented on the 25404 POWER6X processor and other processors that support the 25405 extended PowerPC V2.05 architecture. 25406 25407 'mulhw' 25408 'no-mulhw' 25409 Generate code that uses (does not use) the half-word multiply 25410 and multiply-accumulate instructions on the IBM 405, 440, 464 25411 and 476 processors. These instructions are generated by 25412 default when targeting those processors. 25413 25414 'multiple' 25415 'no-multiple' 25416 Generate code that uses (does not use) the load multiple word 25417 instructions and the store multiple word instructions. 25418 25419 'update' 25420 'no-update' 25421 Generate code that uses (does not use) the load or store 25422 instructions that update the base register to the address of 25423 the calculated memory location. 25424 25425 'popcntb' 25426 'no-popcntb' 25427 Generate code that uses (does not use) the popcount and 25428 double-precision FP reciprocal estimate instruction 25429 implemented on the POWER5 processor and other processors that 25430 support the PowerPC V2.02 architecture. 25431 25432 'popcntd' 25433 'no-popcntd' 25434 Generate code that uses (does not use) the popcount 25435 instruction implemented on the POWER7 processor and other 25436 processors that support the PowerPC V2.06 architecture. 25437 25438 'powerpc-gfxopt' 25439 'no-powerpc-gfxopt' 25440 Generate code that uses (does not use) the optional PowerPC 25441 architecture instructions in the Graphics group, including 25442 floating-point select. 25443 25444 'powerpc-gpopt' 25445 'no-powerpc-gpopt' 25446 Generate code that uses (does not use) the optional PowerPC 25447 architecture instructions in the General Purpose group, 25448 including floating-point square root. 25449 25450 'recip-precision' 25451 'no-recip-precision' 25452 Assume (do not assume) that the reciprocal estimate 25453 instructions provide higher-precision estimates than is 25454 mandated by the powerpc ABI. 25455 25456 'string' 25457 'no-string' 25458 Generate code that uses (does not use) the load string 25459 instructions and the store string word instructions to save 25460 multiple registers and do small block moves. 25461 25462 'vsx' 25463 'no-vsx' 25464 Generate code that uses (does not use) vector/scalar (VSX) 25465 instructions, and also enable the use of built-in functions 25466 that allow more direct access to the VSX instruction set. In 25467 32-bit code, you cannot enable VSX or AltiVec instructions 25468 unless '-mabi=altivec' is used on the command line. 25469 25470 'friz' 25471 'no-friz' 25472 Generate (do not generate) the 'friz' instruction when the 25473 '-funsafe-math-optimizations' option is used to optimize 25474 rounding a floating-point value to 64-bit integer and back to 25475 floating point. The 'friz' instruction does not return the 25476 same value if the floating-point number is too large to fit in 25477 an integer. 25478 25479 'avoid-indexed-addresses' 25480 'no-avoid-indexed-addresses' 25481 Generate code that tries to avoid (not avoid) the use of 25482 indexed load or store instructions. 25483 25484 'paired' 25485 'no-paired' 25486 Generate code that uses (does not use) the generation of 25487 PAIRED simd instructions. 25488 25489 'longcall' 25490 'no-longcall' 25491 Generate code that assumes (does not assume) that all calls 25492 are far away so that a longer more expensive calling sequence 25493 is required. 25494 25495 'cpu=CPU' 25496 Specify the architecture to generate code for when compiling 25497 the function. If you select the 'target("cpu=power7")' 25498 attribute when generating 32-bit code, VSX and AltiVec 25499 instructions are not generated unless you use the 25500 '-mabi=altivec' option on the command line. 25501 25502 'tune=TUNE' 25503 Specify the architecture to tune for when compiling the 25504 function. If you do not specify the 'target("tune=TUNE")' 25505 attribute and you do specify the 'target("cpu=CPU")' 25506 attribute, compilation tunes for the CPU architecture, and not 25507 the default tuning specified on the command line. 25508 25509 When compiling for Nios II, the following options are allowed: 25510 25511 'custom-INSN=N' 25512 'no-custom-INSN' 25513 Each 'custom-INSN=N' attribute locally enables use of a custom 25514 instruction with encoding N when generating code that uses 25515 INSN. Similarly, 'no-custom-INSN' locally inhibits use of the 25516 custom instruction INSN. These target attributes correspond 25517 to the '-mcustom-INSN=N' and '-mno-custom-INSN' command-line 25518 options, and support the same set of INSN keywords. *Note 25519 Nios II Options::, for more information. 25520 25521 'custom-fpu-cfg=NAME' 25522 This attribute corresponds to the '-mcustom-fpu-cfg=NAME' 25523 command-line option, to select a predefined set of custom 25524 instructions named NAME. *Note Nios II Options::, for more 25525 information. 25526 25527 On the 386/x86_64 and PowerPC back ends, the inliner does not 25528 inline a function that has different target options than the 25529 caller, unless the callee has a subset of the target options of the 25530 caller. For example a function declared with 'target("sse3")' can 25531 inline a function with 'target("sse2")', since '-msse3' implies 25532 '-msse2'. 25533 25534'tiny_data' 25535 Use this attribute on the H8/300H and H8S to indicate that the 25536 specified variable should be placed into the tiny data section. 25537 The compiler generates more efficient code for loads and stores on 25538 data in the tiny data section. Note the tiny data area is limited 25539 to slightly under 32KB of data. 25540 25541'trap_exit' 25542 Use this attribute on the SH for an 'interrupt_handler' to return 25543 using 'trapa' instead of 'rte'. This attribute expects an integer 25544 argument specifying the trap number to be used. 25545 25546'trapa_handler' 25547 On SH targets this function attribute is similar to 25548 'interrupt_handler' but it does not save and restore all registers. 25549 25550'unused' 25551 This attribute, attached to a function, means that the function is 25552 meant to be possibly unused. GCC does not produce a warning for 25553 this function. 25554 25555'used' 25556 This attribute, attached to a function, means that code must be 25557 emitted for the function even if it appears that the function is 25558 not referenced. This is useful, for example, when the function is 25559 referenced only in inline assembly. 25560 25561 When applied to a member function of a C++ class template, the 25562 attribute also means that the function is instantiated if the class 25563 itself is instantiated. 25564 25565'version_id' 25566 This IA-64 HP-UX attribute, attached to a global variable or 25567 function, renames a symbol to contain a version string, thus 25568 allowing for function level versioning. HP-UX system header files 25569 may use function level versioning for some system calls. 25570 25571 extern int foo () __attribute__((version_id ("20040821"))); 25572 25573 Calls to FOO are mapped to calls to FOO{20040821}. 25574 25575'visibility ("VISIBILITY_TYPE")' 25576 This attribute affects the linkage of the declaration to which it 25577 is attached. There are four supported VISIBILITY_TYPE values: 25578 default, hidden, protected or internal visibility. 25579 25580 void __attribute__ ((visibility ("protected"))) 25581 f () { /* Do something. */; } 25582 int i __attribute__ ((visibility ("hidden"))); 25583 25584 The possible values of VISIBILITY_TYPE correspond to the visibility 25585 settings in the ELF gABI. 25586 25587 "default" 25588 Default visibility is the normal case for the object file 25589 format. This value is available for the visibility attribute 25590 to override other options that may change the assumed 25591 visibility of entities. 25592 25593 On ELF, default visibility means that the declaration is 25594 visible to other modules and, in shared libraries, means that 25595 the declared entity may be overridden. 25596 25597 On Darwin, default visibility means that the declaration is 25598 visible to other modules. 25599 25600 Default visibility corresponds to "external linkage" in the 25601 language. 25602 25603 "hidden" 25604 Hidden visibility indicates that the entity declared has a new 25605 form of linkage, which we call "hidden linkage". Two 25606 declarations of an object with hidden linkage refer to the 25607 same object if they are in the same shared object. 25608 25609 "internal" 25610 Internal visibility is like hidden visibility, but with 25611 additional processor specific semantics. Unless otherwise 25612 specified by the psABI, GCC defines internal visibility to 25613 mean that a function is _never_ called from another module. 25614 Compare this with hidden functions which, while they cannot be 25615 referenced directly by other modules, can be referenced 25616 indirectly via function pointers. By indicating that a 25617 function cannot be called from outside the module, GCC may for 25618 instance omit the load of a PIC register since it is known 25619 that the calling function loaded the correct value. 25620 25621 "protected" 25622 Protected visibility is like default visibility except that it 25623 indicates that references within the defining module bind to 25624 the definition in that module. That is, the declared entity 25625 cannot be overridden by another module. 25626 25627 All visibilities are supported on many, but not all, ELF targets 25628 (supported when the assembler supports the '.visibility' 25629 pseudo-op). Default visibility is supported everywhere. Hidden 25630 visibility is supported on Darwin targets. 25631 25632 The visibility attribute should be applied only to declarations 25633 that would otherwise have external linkage. The attribute should 25634 be applied consistently, so that the same entity should not be 25635 declared with different settings of the attribute. 25636 25637 In C++, the visibility attribute applies to types as well as 25638 functions and objects, because in C++ types have linkage. A class 25639 must not have greater visibility than its non-static data member 25640 types and bases, and class members default to the visibility of 25641 their class. Also, a declaration without explicit visibility is 25642 limited to the visibility of its type. 25643 25644 In C++, you can mark member functions and static member variables 25645 of a class with the visibility attribute. This is useful if you 25646 know a particular method or static member variable should only be 25647 used from one shared object; then you can mark it hidden while the 25648 rest of the class has default visibility. Care must be taken to 25649 avoid breaking the One Definition Rule; for example, it is usually 25650 not useful to mark an inline method as hidden without marking the 25651 whole class as hidden. 25652 25653 A C++ namespace declaration can also have the visibility attribute. 25654 25655 namespace nspace1 __attribute__ ((visibility ("protected"))) 25656 { /* Do something. */; } 25657 25658 This attribute applies only to the particular namespace body, not 25659 to other definitions of the same namespace; it is equivalent to 25660 using '#pragma GCC visibility' before and after the namespace 25661 definition (*note Visibility Pragmas::). 25662 25663 In C++, if a template argument has limited visibility, this 25664 restriction is implicitly propagated to the template instantiation. 25665 Otherwise, template instantiations and specializations default to 25666 the visibility of their template. 25667 25668 If both the template and enclosing class have explicit visibility, 25669 the visibility from the template is used. 25670 25671'vliw' 25672 On MeP, the 'vliw' attribute tells the compiler to emit 25673 instructions in VLIW mode instead of core mode. Note that this 25674 attribute is not allowed unless a VLIW coprocessor has been 25675 configured and enabled through command-line options. 25676 25677'warn_unused_result' 25678 The 'warn_unused_result' attribute causes a warning to be emitted 25679 if a caller of the function with this attribute does not use its 25680 return value. This is useful for functions where not checking the 25681 result is either a security problem or always a bug, such as 25682 'realloc'. 25683 25684 int fn () __attribute__ ((warn_unused_result)); 25685 int foo () 25686 { 25687 if (fn () < 0) return -1; 25688 fn (); 25689 return 0; 25690 } 25691 25692 results in warning on line 5. 25693 25694'weak' 25695 The 'weak' attribute causes the declaration to be emitted as a weak 25696 symbol rather than a global. This is primarily useful in defining 25697 library functions that can be overridden in user code, though it 25698 can also be used with non-function declarations. Weak symbols are 25699 supported for ELF targets, and also for a.out targets when using 25700 the GNU assembler and linker. 25701 25702'weakref' 25703'weakref ("TARGET")' 25704 The 'weakref' attribute marks a declaration as a weak reference. 25705 Without arguments, it should be accompanied by an 'alias' attribute 25706 naming the target symbol. Optionally, the TARGET may be given as 25707 an argument to 'weakref' itself. In either case, 'weakref' 25708 implicitly marks the declaration as 'weak'. Without a TARGET, 25709 given as an argument to 'weakref' or to 'alias', 'weakref' is 25710 equivalent to 'weak'. 25711 25712 static int x() __attribute__ ((weakref ("y"))); 25713 /* is equivalent to... */ 25714 static int x() __attribute__ ((weak, weakref, alias ("y"))); 25715 /* and to... */ 25716 static int x() __attribute__ ((weakref)); 25717 static int x() __attribute__ ((alias ("y"))); 25718 25719 A weak reference is an alias that does not by itself require a 25720 definition to be given for the target symbol. If the target symbol 25721 is only referenced through weak references, then it becomes a 25722 'weak' undefined symbol. If it is directly referenced, however, 25723 then such strong references prevail, and a definition is required 25724 for the symbol, not necessarily in the same translation unit. 25725 25726 The effect is equivalent to moving all references to the alias to a 25727 separate translation unit, renaming the alias to the aliased 25728 symbol, declaring it as weak, compiling the two separate 25729 translation units and performing a reloadable link on them. 25730 25731 At present, a declaration to which 'weakref' is attached can only 25732 be 'static'. 25733 25734 You can specify multiple attributes in a declaration by separating them 25735by commas within the double parentheses or by immediately following an 25736attribute declaration with another attribute declaration. 25737 25738 Some people object to the '__attribute__' feature, suggesting that ISO 25739C's '#pragma' should be used instead. At the time '__attribute__' was 25740designed, there were two reasons for not doing this. 25741 25742 1. It is impossible to generate '#pragma' commands from a macro. 25743 25744 2. There is no telling what the same '#pragma' might mean in another 25745 compiler. 25746 25747 These two reasons applied to almost any application that might have 25748been proposed for '#pragma'. It was basically a mistake to use 25749'#pragma' for _anything_. 25750 25751 The ISO C99 standard includes '_Pragma', which now allows pragmas to be 25752generated from macros. In addition, a '#pragma GCC' namespace is now in 25753use for GCC-specific pragmas. However, it has been found convenient to 25754use '__attribute__' to achieve a natural attachment of attributes to 25755their corresponding declarations, whereas '#pragma GCC' is of use for 25756constructs that do not naturally form part of the grammar. *Note 25757Pragmas Accepted by GCC: Pragmas. 25758 25759 25760File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 25761 257626.31 Attribute Syntax 25763===================== 25764 25765This section describes the syntax with which '__attribute__' may be 25766used, and the constructs to which attribute specifiers bind, for the C 25767language. Some details may vary for C++ and Objective-C. Because of 25768infelicities in the grammar for attributes, some forms described here 25769may not be successfully parsed in all cases. 25770 25771 There are some problems with the semantics of attributes in C++. For 25772example, there are no manglings for attributes, although they may affect 25773code generation, so problems may arise when attributed types are used in 25774conjunction with templates or overloading. Similarly, 'typeid' does not 25775distinguish between types with different attributes. Support for 25776attributes in C++ may be restricted in future to attributes on 25777declarations only, but not on nested declarators. 25778 25779 *Note Function Attributes::, for details of the semantics of attributes 25780applying to functions. *Note Variable Attributes::, for details of the 25781semantics of attributes applying to variables. *Note Type Attributes::, 25782for details of the semantics of attributes applying to structure, union 25783and enumerated types. 25784 25785 An "attribute specifier" is of the form '__attribute__ 25786((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 25787comma-separated sequence of "attributes", where each attribute is one of 25788the following: 25789 25790 * Empty. Empty attributes are ignored. 25791 25792 * A word (which may be an identifier such as 'unused', or a reserved 25793 word such as 'const'). 25794 25795 * A word, followed by, in parentheses, parameters for the attribute. 25796 These parameters take one of the following forms: 25797 25798 * An identifier. For example, 'mode' attributes use this form. 25799 25800 * An identifier followed by a comma and a non-empty 25801 comma-separated list of expressions. For example, 'format' 25802 attributes use this form. 25803 25804 * A possibly empty comma-separated list of expressions. For 25805 example, 'format_arg' attributes use this form with the list 25806 being a single integer constant expression, and 'alias' 25807 attributes use this form with the list being a single string 25808 constant. 25809 25810 An "attribute specifier list" is a sequence of one or more attribute 25811specifiers, not separated by any other tokens. 25812 25813 In GNU C, an attribute specifier list may appear after the colon 25814following a label, other than a 'case' or 'default' label. The only 25815attribute it makes sense to use after a label is 'unused'. This feature 25816is intended for program-generated code that may contain unused labels, 25817but which is compiled with '-Wall'. It is not normally appropriate to 25818use in it human-written code, though it could be useful in cases where 25819the code that jumps to the label is contained within an '#ifdef' 25820conditional. GNU C++ only permits attributes on labels if the attribute 25821specifier is immediately followed by a semicolon (i.e., the label 25822applies to an empty statement). If the semicolon is missing, C++ label 25823attributes are ambiguous, as it is permissible for a declaration, which 25824could begin with an attribute list, to be labelled in C++. Declarations 25825cannot be labelled in C90 or C99, so the ambiguity does not arise there. 25826 25827 An attribute specifier list may appear as part of a 'struct', 'union' 25828or 'enum' specifier. It may go either immediately after the 'struct', 25829'union' or 'enum' keyword, or after the closing brace. The former 25830syntax is preferred. Where attribute specifiers follow the closing 25831brace, they are considered to relate to the structure, union or 25832enumerated type defined, not to any enclosing declaration the type 25833specifier appears in, and the type defined is not complete until after 25834the attribute specifiers. 25835 25836 Otherwise, an attribute specifier appears as part of a declaration, 25837counting declarations of unnamed parameters and type names, and relates 25838to that declaration (which may be nested in another declaration, for 25839example in the case of a parameter declaration), or to a particular 25840declarator within a declaration. Where an attribute specifier is 25841applied to a parameter declared as a function or an array, it should 25842apply to the function or array rather than the pointer to which the 25843parameter is implicitly converted, but this is not yet correctly 25844implemented. 25845 25846 Any list of specifiers and qualifiers at the start of a declaration may 25847contain attribute specifiers, whether or not such a list may in that 25848context contain storage class specifiers. (Some attributes, however, 25849are essentially in the nature of storage class specifiers, and only make 25850sense where storage class specifiers may be used; for example, 25851'section'.) There is one necessary limitation to this syntax: the first 25852old-style parameter declaration in a function definition cannot begin 25853with an attribute specifier, because such an attribute applies to the 25854function instead by syntax described below (which, however, is not yet 25855implemented in this case). In some other cases, attribute specifiers 25856are permitted by this grammar but not yet supported by the compiler. 25857All attribute specifiers in this place relate to the declaration as a 25858whole. In the obsolescent usage where a type of 'int' is implied by the 25859absence of type specifiers, such a list of specifiers and qualifiers may 25860be an attribute specifier list with no other specifiers or qualifiers. 25861 25862 At present, the first parameter in a function prototype must have some 25863type specifier that is not an attribute specifier; this resolves an 25864ambiguity in the interpretation of 'void f(int (__attribute__((foo)) 25865x))', but is subject to change. At present, if the parentheses of a 25866function declarator contain only attributes then those attributes are 25867ignored, rather than yielding an error or warning or implying a single 25868parameter of type int, but this is subject to change. 25869 25870 An attribute specifier list may appear immediately before a declarator 25871(other than the first) in a comma-separated list of declarators in a 25872declaration of more than one identifier using a single list of 25873specifiers and qualifiers. Such attribute specifiers apply only to the 25874identifier before whose declarator they appear. For example, in 25875 25876 __attribute__((noreturn)) void d0 (void), 25877 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 25878 d2 (void) 25879 25880the 'noreturn' attribute applies to all the functions declared; the 25881'format' attribute only applies to 'd1'. 25882 25883 An attribute specifier list may appear immediately before the comma, 25884'=' or semicolon terminating the declaration of an identifier other than 25885a function definition. Such attribute specifiers apply to the declared 25886object or function. Where an assembler name for an object or function 25887is specified (*note Asm Labels::), the attribute must follow the 'asm' 25888specification. 25889 25890 An attribute specifier list may, in future, be permitted to appear 25891after the declarator in a function definition (before any old-style 25892parameter declarations or the function body). 25893 25894 Attribute specifiers may be mixed with type qualifiers appearing inside 25895the '[]' of a parameter array declarator, in the C99 construct by which 25896such qualifiers are applied to the pointer to which the array is 25897implicitly converted. Such attribute specifiers apply to the pointer, 25898not to the array, but at present this is not implemented and they are 25899ignored. 25900 25901 An attribute specifier list may appear at the start of a nested 25902declarator. At present, there are some limitations in this usage: the 25903attributes correctly apply to the declarator, but for most individual 25904attributes the semantics this implies are not implemented. When 25905attribute specifiers follow the '*' of a pointer declarator, they may be 25906mixed with any type qualifiers present. The following describes the 25907formal semantics of this syntax. It makes the most sense if you are 25908familiar with the formal specification of declarators in the ISO C 25909standard. 25910 25911 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration 'T D1', 25912where 'T' contains declaration specifiers that specify a type TYPE (such 25913as 'int') and 'D1' is a declarator that contains an identifier IDENT. 25914The type specified for IDENT for derived declarators whose type does not 25915include an attribute specifier is as in the ISO C standard. 25916 25917 If 'D1' has the form '( ATTRIBUTE-SPECIFIER-LIST D )', and the 25918declaration 'T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST TYPE" 25919for IDENT, then 'T D1' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 25920ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 25921 25922 If 'D1' has the form '* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST D', 25923and the declaration 'T D' specifies the type 25924"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then 'T D1' specifies the 25925type "DERIVED-DECLARATOR-TYPE-LIST 25926TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST pointer to TYPE" for IDENT. 25927 25928 For example, 25929 25930 void (__attribute__((noreturn)) ****f) (void); 25931 25932specifies the type "pointer to pointer to pointer to pointer to 25933non-returning function returning 'void'". As another example, 25934 25935 char *__attribute__((aligned(8))) *f; 25936 25937specifies the type "pointer to 8-byte-aligned pointer to 'char'". Note 25938again that this does not work with most attributes; for example, the 25939usage of 'aligned' and 'noreturn' attributes given above is not yet 25940supported. 25941 25942 For compatibility with existing code written for compiler versions that 25943did not implement attributes on nested declarators, some laxity is 25944allowed in the placing of attributes. If an attribute that only applies 25945to types is applied to a declaration, it is treated as applying to the 25946type of that declaration. If an attribute that only applies to 25947declarations is applied to the type of a declaration, it is treated as 25948applying to that declaration; and, for compatibility with code placing 25949the attributes immediately before the identifier declared, such an 25950attribute applied to a function return type is treated as applying to 25951the function type, and such an attribute applied to an array element 25952type is treated as applying to the array type. If an attribute that 25953only applies to function types is applied to a pointer-to-function type, 25954it is treated as applying to the pointer target type; if such an 25955attribute is applied to a function return type that is not a 25956pointer-to-function type, it is treated as applying to the function 25957type. 25958 25959 25960File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 25961 259626.32 Prototypes and Old-Style Function Definitions 25963================================================== 25964 25965GNU C extends ISO C to allow a function prototype to override a later 25966old-style non-prototype definition. Consider the following example: 25967 25968 /* Use prototypes unless the compiler is old-fashioned. */ 25969 #ifdef __STDC__ 25970 #define P(x) x 25971 #else 25972 #define P(x) () 25973 #endif 25974 25975 /* Prototype function declaration. */ 25976 int isroot P((uid_t)); 25977 25978 /* Old-style function definition. */ 25979 int 25980 isroot (x) /* ??? lossage here ??? */ 25981 uid_t x; 25982 { 25983 return x == 0; 25984 } 25985 25986 Suppose the type 'uid_t' happens to be 'short'. ISO C does not allow 25987this example, because subword arguments in old-style non-prototype 25988definitions are promoted. Therefore in this example the function 25989definition's argument is really an 'int', which does not match the 25990prototype argument type of 'short'. 25991 25992 This restriction of ISO C makes it hard to write code that is portable 25993to traditional C compilers, because the programmer does not know whether 25994the 'uid_t' type is 'short', 'int', or 'long'. Therefore, in cases like 25995these GNU C allows a prototype to override a later old-style definition. 25996More precisely, in GNU C, a function prototype argument type overrides 25997the argument type specified by a later old-style definition if the 25998former type is the same as the latter type before promotion. Thus in 25999GNU C the above example is equivalent to the following: 26000 26001 int isroot (uid_t); 26002 26003 int 26004 isroot (uid_t x) 26005 { 26006 return x == 0; 26007 } 26008 26009GNU C++ does not support old-style function definitions, so this 26010extension is irrelevant. 26011 26012 26013File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 26014 260156.33 C++ Style Comments 26016======================= 26017 26018In GNU C, you may use C++ style comments, which start with '//' and 26019continue until the end of the line. Many other C implementations allow 26020such comments, and they are included in the 1999 C standard. However, 26021C++ style comments are not recognized if you specify an '-std' option 26022specifying a version of ISO C before C99, or '-ansi' (equivalent to 26023'-std=c90'). 26024 26025 26026File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 26027 260286.34 Dollar Signs in Identifier Names 26029===================================== 26030 26031In GNU C, you may normally use dollar signs in identifier names. This 26032is because many traditional C implementations allow such identifiers. 26033However, dollar signs in identifiers are not supported on a few target 26034machines, typically because the target assembler does not allow them. 26035 26036 26037File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 26038 260396.35 The Character <ESC> in Constants 26040===================================== 26041 26042You can use the sequence '\e' in a string or character constant to stand 26043for the ASCII character <ESC>. 26044 26045 26046File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 26047 260486.36 Specifying Attributes of Variables 26049======================================= 26050 26051The keyword '__attribute__' allows you to specify special attributes of 26052variables or structure fields. This keyword is followed by an attribute 26053specification inside double parentheses. Some attributes are currently 26054defined generically for variables. Other attributes are defined for 26055variables on particular target systems. Other attributes are available 26056for functions (*note Function Attributes::) and for types (*note Type 26057Attributes::). Other front ends might define more attributes (*note 26058Extensions to the C++ Language: C++ Extensions.). 26059 26060 You may also specify attributes with '__' preceding and following each 26061keyword. This allows you to use them in header files without being 26062concerned about a possible macro of the same name. For example, you may 26063use '__aligned__' instead of 'aligned'. 26064 26065 *Note Attribute Syntax::, for details of the exact syntax for using 26066attributes. 26067 26068'aligned (ALIGNMENT)' 26069 This attribute specifies a minimum alignment for the variable or 26070 structure field, measured in bytes. For example, the declaration: 26071 26072 int x __attribute__ ((aligned (16))) = 0; 26073 26074 causes the compiler to allocate the global variable 'x' on a 26075 16-byte boundary. On a 68040, this could be used in conjunction 26076 with an 'asm' expression to access the 'move16' instruction which 26077 requires 16-byte aligned operands. 26078 26079 You can also specify the alignment of structure fields. For 26080 example, to create a double-word aligned 'int' pair, you could 26081 write: 26082 26083 struct foo { int x[2] __attribute__ ((aligned (8))); }; 26084 26085 This is an alternative to creating a union with a 'double' member, 26086 which forces the union to be double-word aligned. 26087 26088 As in the preceding examples, you can explicitly specify the 26089 alignment (in bytes) that you wish the compiler to use for a given 26090 variable or structure field. Alternatively, you can leave out the 26091 alignment factor and just ask the compiler to align a variable or 26092 field to the default alignment for the target architecture you are 26093 compiling for. The default alignment is sufficient for all scalar 26094 types, but may not be enough for all vector types on a target that 26095 supports vector operations. The default alignment is fixed for a 26096 particular target ABI. 26097 26098 GCC also provides a target specific macro '__BIGGEST_ALIGNMENT__', 26099 which is the largest alignment ever used for any data type on the 26100 target machine you are compiling for. For example, you could 26101 write: 26102 26103 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 26104 26105 The compiler automatically sets the alignment for the declared 26106 variable or field to '__BIGGEST_ALIGNMENT__'. Doing this can often 26107 make copy operations more efficient, because the compiler can use 26108 whatever instructions copy the biggest chunks of memory when 26109 performing copies to or from the variables or fields that you have 26110 aligned this way. Note that the value of '__BIGGEST_ALIGNMENT__' 26111 may change depending on command-line options. 26112 26113 When used on a struct, or struct member, the 'aligned' attribute 26114 can only increase the alignment; in order to decrease it, the 26115 'packed' attribute must be specified as well. When used as part of 26116 a typedef, the 'aligned' attribute can both increase and decrease 26117 alignment, and specifying the 'packed' attribute generates a 26118 warning. 26119 26120 Note that the effectiveness of 'aligned' attributes may be limited 26121 by inherent limitations in your linker. On many systems, the 26122 linker is only able to arrange for variables to be aligned up to a 26123 certain maximum alignment. (For some linkers, the maximum 26124 supported alignment may be very very small.) If your linker is 26125 only able to align variables up to a maximum of 8-byte alignment, 26126 then specifying 'aligned(16)' in an '__attribute__' still only 26127 provides you with 8-byte alignment. See your linker documentation 26128 for further information. 26129 26130 The 'aligned' attribute can also be used for functions (*note 26131 Function Attributes::.) 26132 26133'cleanup (CLEANUP_FUNCTION)' 26134 The 'cleanup' attribute runs a function when the variable goes out 26135 of scope. This attribute can only be applied to auto function 26136 scope variables; it may not be applied to parameters or variables 26137 with static storage duration. The function must take one 26138 parameter, a pointer to a type compatible with the variable. The 26139 return value of the function (if any) is ignored. 26140 26141 If '-fexceptions' is enabled, then CLEANUP_FUNCTION is run during 26142 the stack unwinding that happens during the processing of the 26143 exception. Note that the 'cleanup' attribute does not allow the 26144 exception to be caught, only to perform an action. It is undefined 26145 what happens if CLEANUP_FUNCTION does not return normally. 26146 26147'common' 26148'nocommon' 26149 The 'common' attribute requests GCC to place a variable in "common" 26150 storage. The 'nocommon' attribute requests the opposite--to 26151 allocate space for it directly. 26152 26153 These attributes override the default chosen by the '-fno-common' 26154 and '-fcommon' flags respectively. 26155 26156'deprecated' 26157'deprecated (MSG)' 26158 The 'deprecated' attribute results in a warning if the variable is 26159 used anywhere in the source file. This is useful when identifying 26160 variables that are expected to be removed in a future version of a 26161 program. The warning also includes the location of the declaration 26162 of the deprecated variable, to enable users to easily find further 26163 information about why the variable is deprecated, or what they 26164 should do instead. Note that the warning only occurs for uses: 26165 26166 extern int old_var __attribute__ ((deprecated)); 26167 extern int old_var; 26168 int new_fn () { return old_var; } 26169 26170 results in a warning on line 3 but not line 2. The optional MSG 26171 argument, which must be a string, is printed in the warning if 26172 present. 26173 26174 The 'deprecated' attribute can also be used for functions and types 26175 (*note Function Attributes::, *note Type Attributes::.) 26176 26177'mode (MODE)' 26178 This attribute specifies the data type for the 26179 declaration--whichever type corresponds to the mode MODE. This in 26180 effect lets you request an integer or floating-point type according 26181 to its width. 26182 26183 You may also specify a mode of 'byte' or '__byte__' to indicate the 26184 mode corresponding to a one-byte integer, 'word' or '__word__' for 26185 the mode of a one-word integer, and 'pointer' or '__pointer__' for 26186 the mode used to represent pointers. 26187 26188'packed' 26189 The 'packed' attribute specifies that a variable or structure field 26190 should have the smallest possible alignment--one byte for a 26191 variable, and one bit for a field, unless you specify a larger 26192 value with the 'aligned' attribute. 26193 26194 Here is a structure in which the field 'x' is packed, so that it 26195 immediately follows 'a': 26196 26197 struct foo 26198 { 26199 char a; 26200 int x[2] __attribute__ ((packed)); 26201 }; 26202 26203 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the 'packed' 26204 attribute on bit-fields of type 'char'. This has been fixed in GCC 26205 4.4 but the change can lead to differences in the structure layout. 26206 See the documentation of '-Wpacked-bitfield-compat' for more 26207 information. 26208 26209'section ("SECTION-NAME")' 26210 Normally, the compiler places the objects it generates in sections 26211 like 'data' and 'bss'. Sometimes, however, you need additional 26212 sections, or you need certain particular variables to appear in 26213 special sections, for example to map to special hardware. The 26214 'section' attribute specifies that a variable (or function) lives 26215 in a particular section. For example, this small program uses 26216 several specific section names: 26217 26218 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 26219 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 26220 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 26221 int init_data __attribute__ ((section ("INITDATA"))); 26222 26223 main() 26224 { 26225 /* Initialize stack pointer */ 26226 init_sp (stack + sizeof (stack)); 26227 26228 /* Initialize initialized data */ 26229 memcpy (&init_data, &data, &edata - &data); 26230 26231 /* Turn on the serial ports */ 26232 init_duart (&a); 26233 init_duart (&b); 26234 } 26235 26236 Use the 'section' attribute with _global_ variables and not _local_ 26237 variables, as shown in the example. 26238 26239 You may use the 'section' attribute with initialized or 26240 uninitialized global variables but the linker requires each object 26241 be defined once, with the exception that uninitialized variables 26242 tentatively go in the 'common' (or 'bss') section and can be 26243 multiply "defined". Using the 'section' attribute changes what 26244 section the variable goes into and may cause the linker to issue an 26245 error if an uninitialized variable has multiple definitions. You 26246 can force a variable to be initialized with the '-fno-common' flag 26247 or the 'nocommon' attribute. 26248 26249 Some file formats do not support arbitrary sections so the 26250 'section' attribute is not available on all platforms. If you need 26251 to map the entire contents of a module to a particular section, 26252 consider using the facilities of the linker instead. 26253 26254'shared' 26255 On Microsoft Windows, in addition to putting variable definitions 26256 in a named section, the section can also be shared among all 26257 running copies of an executable or DLL. For example, this small 26258 program defines shared data by putting it in a named section 26259 'shared' and marking the section shareable: 26260 26261 int foo __attribute__((section ("shared"), shared)) = 0; 26262 26263 int 26264 main() 26265 { 26266 /* Read and write foo. All running 26267 copies see the same value. */ 26268 return 0; 26269 } 26270 26271 You may only use the 'shared' attribute along with 'section' 26272 attribute with a fully-initialized global definition because of the 26273 way linkers work. See 'section' attribute for more information. 26274 26275 The 'shared' attribute is only available on Microsoft Windows. 26276 26277'tls_model ("TLS_MODEL")' 26278 The 'tls_model' attribute sets thread-local storage model (*note 26279 Thread-Local::) of a particular '__thread' variable, overriding 26280 '-ftls-model=' command-line switch on a per-variable basis. The 26281 TLS_MODEL argument should be one of 'global-dynamic', 26282 'local-dynamic', 'initial-exec' or 'local-exec'. 26283 26284 Not all targets support this attribute. 26285 26286'unused' 26287 This attribute, attached to a variable, means that the variable is 26288 meant to be possibly unused. GCC does not produce a warning for 26289 this variable. 26290 26291'used' 26292 This attribute, attached to a variable with the static storage, 26293 means that the variable must be emitted even if it appears that the 26294 variable is not referenced. 26295 26296 When applied to a static data member of a C++ class template, the 26297 attribute also means that the member is instantiated if the class 26298 itself is instantiated. 26299 26300'vector_size (BYTES)' 26301 This attribute specifies the vector size for the variable, measured 26302 in bytes. For example, the declaration: 26303 26304 int foo __attribute__ ((vector_size (16))); 26305 26306 causes the compiler to set the mode for 'foo', to be 16 bytes, 26307 divided into 'int' sized units. Assuming a 32-bit int (a vector of 26308 4 units of 4 bytes), the corresponding mode of 'foo' is V4SI. 26309 26310 This attribute is only applicable to integral and float scalars, 26311 although arrays, pointers, and function return values are allowed 26312 in conjunction with this construct. 26313 26314 Aggregates with this attribute are invalid, even if they are of the 26315 same size as a corresponding scalar. For example, the declaration: 26316 26317 struct S { int a; }; 26318 struct S __attribute__ ((vector_size (16))) foo; 26319 26320 is invalid even if the size of the structure is the same as the 26321 size of the 'int'. 26322 26323'selectany' 26324 The 'selectany' attribute causes an initialized global variable to 26325 have link-once semantics. When multiple definitions of the 26326 variable are encountered by the linker, the first is selected and 26327 the remainder are discarded. Following usage by the Microsoft 26328 compiler, the linker is told _not_ to warn about size or content 26329 differences of the multiple definitions. 26330 26331 Although the primary usage of this attribute is for POD types, the 26332 attribute can also be applied to global C++ objects that are 26333 initialized by a constructor. In this case, the static 26334 initialization and destruction code for the object is emitted in 26335 each translation defining the object, but the calls to the 26336 constructor and destructor are protected by a link-once guard 26337 variable. 26338 26339 The 'selectany' attribute is only available on Microsoft Windows 26340 targets. You can use '__declspec (selectany)' as a synonym for 26341 '__attribute__ ((selectany))' for compatibility with other 26342 compilers. 26343 26344'weak' 26345 The 'weak' attribute is described in *note Function Attributes::. 26346 26347'dllimport' 26348 The 'dllimport' attribute is described in *note Function 26349 Attributes::. 26350 26351'dllexport' 26352 The 'dllexport' attribute is described in *note Function 26353 Attributes::. 26354 263556.36.1 AVR Variable Attributes 26356------------------------------ 26357 26358'progmem' 26359 The 'progmem' attribute is used on the AVR to place read-only data 26360 in the non-volatile program memory (flash). The 'progmem' 26361 attribute accomplishes this by putting respective variables into a 26362 section whose name starts with '.progmem'. 26363 26364 This attribute works similar to the 'section' attribute but adds 26365 additional checking. Notice that just like the 'section' 26366 attribute, 'progmem' affects the location of the data but not how 26367 this data is accessed. 26368 26369 In order to read data located with the 'progmem' attribute (inline) 26370 assembler must be used. 26371 /* Use custom macros from AVR-LibC (http://nongnu.org/avr-libc/user-manual/) */ 26372 #include <avr/pgmspace.h> 26373 26374 /* Locate var in flash memory */ 26375 const int var[2] PROGMEM = { 1, 2 }; 26376 26377 int read_var (int i) 26378 { 26379 /* Access var[] by accessor macro from avr/pgmspace.h */ 26380 return (int) pgm_read_word (& var[i]); 26381 } 26382 26383 AVR is a Harvard architecture processor and data and read-only data 26384 normally resides in the data memory (RAM). 26385 26386 See also the *note AVR Named Address Spaces:: section for an 26387 alternate way to locate and access data in flash memory. 26388 263896.36.2 Blackfin Variable Attributes 26390----------------------------------- 26391 26392Three attributes are currently defined for the Blackfin. 26393 26394'l1_data' 26395'l1_data_A' 26396'l1_data_B' 26397 Use these attributes on the Blackfin to place the variable into L1 26398 Data SRAM. Variables with 'l1_data' attribute are put into the 26399 specific section named '.l1.data'. Those with 'l1_data_A' 26400 attribute are put into the specific section named '.l1.data.A'. 26401 Those with 'l1_data_B' attribute are put into the specific section 26402 named '.l1.data.B'. 26403 26404'l2' 26405 Use this attribute on the Blackfin to place the variable into L2 26406 SRAM. Variables with 'l2' attribute are put into the specific 26407 section named '.l2.data'. 26408 264096.36.3 M32R/D Variable Attributes 26410--------------------------------- 26411 26412One attribute is currently defined for the M32R/D. 26413 26414'model (MODEL-NAME)' 26415 Use this attribute on the M32R/D to set the addressability of an 26416 object. The identifier MODEL-NAME is one of 'small', 'medium', or 26417 'large', representing each of the code models. 26418 26419 Small model objects live in the lower 16MB of memory (so that their 26420 addresses can be loaded with the 'ld24' instruction). 26421 26422 Medium and large model objects may live anywhere in the 32-bit 26423 address space (the compiler generates 'seth/add3' instructions to 26424 load their addresses). 26425 264266.36.4 MeP Variable Attributes 26427------------------------------ 26428 26429The MeP target has a number of addressing modes and busses. The 'near' 26430space spans the standard memory space's first 16 megabytes (24 bits). 26431The 'far' space spans the entire 32-bit memory space. The 'based' space 26432is a 128-byte region in the memory space that is addressed relative to 26433the '$tp' register. The 'tiny' space is a 65536-byte region relative to 26434the '$gp' register. In addition to these memory regions, the MeP target 26435has a separate 16-bit control bus which is specified with 'cb' 26436attributes. 26437 26438'based' 26439 Any variable with the 'based' attribute is assigned to the '.based' 26440 section, and is accessed with relative to the '$tp' register. 26441 26442'tiny' 26443 Likewise, the 'tiny' attribute assigned variables to the '.tiny' 26444 section, relative to the '$gp' register. 26445 26446'near' 26447 Variables with the 'near' attribute are assumed to have addresses 26448 that fit in a 24-bit addressing mode. This is the default for 26449 large variables ('-mtiny=4' is the default) but this attribute can 26450 override '-mtiny=' for small variables, or override '-ml'. 26451 26452'far' 26453 Variables with the 'far' attribute are addressed using a full 26454 32-bit address. Since this covers the entire memory space, this 26455 allows modules to make no assumptions about where variables might 26456 be stored. 26457 26458'io' 26459'io (ADDR)' 26460 Variables with the 'io' attribute are used to address memory-mapped 26461 peripherals. If an address is specified, the variable is assigned 26462 that address, else it is not assigned an address (it is assumed 26463 some other module assigns an address). Example: 26464 26465 int timer_count __attribute__((io(0x123))); 26466 26467'cb' 26468'cb (ADDR)' 26469 Variables with the 'cb' attribute are used to access the control 26470 bus, using special instructions. 'addr' indicates the control bus 26471 address. Example: 26472 26473 int cpu_clock __attribute__((cb(0x123))); 26474 264756.36.5 i386 Variable Attributes 26476------------------------------- 26477 26478Two attributes are currently defined for i386 configurations: 26479'ms_struct' and 'gcc_struct' 26480 26481'ms_struct' 26482'gcc_struct' 26483 26484 If 'packed' is used on a structure, or if bit-fields are used, it 26485 may be that the Microsoft ABI lays out the structure differently 26486 than the way GCC normally does. Particularly when moving packed 26487 data between functions compiled with GCC and the native Microsoft 26488 compiler (either via function call or as data in a file), it may be 26489 necessary to access either format. 26490 26491 Currently '-m[no-]ms-bitfields' is provided for the Microsoft 26492 Windows X86 compilers to match the native Microsoft compiler. 26493 26494 The Microsoft structure layout algorithm is fairly simple with the 26495 exception of the bit-field packing. The padding and alignment of 26496 members of structures and whether a bit-field can straddle a 26497 storage-unit boundary are determine by these rules: 26498 26499 1. Structure members are stored sequentially in the order in 26500 which they are declared: the first member has the lowest 26501 memory address and the last member the highest. 26502 26503 2. Every data object has an alignment requirement. The alignment 26504 requirement for all data except structures, unions, and arrays 26505 is either the size of the object or the current packing size 26506 (specified with either the 'aligned' attribute or the 'pack' 26507 pragma), whichever is less. For structures, unions, and 26508 arrays, the alignment requirement is the largest alignment 26509 requirement of its members. Every object is allocated an 26510 offset so that: 26511 26512 offset % alignment_requirement == 0 26513 26514 3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte 26515 allocation unit if the integral types are the same size and if 26516 the next bit-field fits into the current allocation unit 26517 without crossing the boundary imposed by the common alignment 26518 requirements of the bit-fields. 26519 26520 MSVC interprets zero-length bit-fields in the following ways: 26521 26522 1. If a zero-length bit-field is inserted between two bit-fields 26523 that are normally coalesced, the bit-fields are not coalesced. 26524 26525 For example: 26526 26527 struct 26528 { 26529 unsigned long bf_1 : 12; 26530 unsigned long : 0; 26531 unsigned long bf_2 : 12; 26532 } t1; 26533 26534 The size of 't1' is 8 bytes with the zero-length bit-field. 26535 If the zero-length bit-field were removed, 't1''s size would 26536 be 4 bytes. 26537 26538 2. If a zero-length bit-field is inserted after a bit-field, 26539 'foo', and the alignment of the zero-length bit-field is 26540 greater than the member that follows it, 'bar', 'bar' is 26541 aligned as the type of the zero-length bit-field. 26542 26543 For example: 26544 26545 struct 26546 { 26547 char foo : 4; 26548 short : 0; 26549 char bar; 26550 } t2; 26551 26552 struct 26553 { 26554 char foo : 4; 26555 short : 0; 26556 double bar; 26557 } t3; 26558 26559 For 't2', 'bar' is placed at offset 2, rather than offset 1. 26560 Accordingly, the size of 't2' is 4. For 't3', the zero-length 26561 bit-field does not affect the alignment of 'bar' or, as a 26562 result, the size of the structure. 26563 26564 Taking this into account, it is important to note the 26565 following: 26566 26567 1. If a zero-length bit-field follows a normal bit-field, 26568 the type of the zero-length bit-field may affect the 26569 alignment of the structure as whole. For example, 't2' 26570 has a size of 4 bytes, since the zero-length bit-field 26571 follows a normal bit-field, and is of type short. 26572 26573 2. Even if a zero-length bit-field is not followed by a 26574 normal bit-field, it may still affect the alignment of 26575 the structure: 26576 26577 struct 26578 { 26579 char foo : 6; 26580 long : 0; 26581 } t4; 26582 26583 Here, 't4' takes up 4 bytes. 26584 26585 3. Zero-length bit-fields following non-bit-field members are 26586 ignored: 26587 26588 struct 26589 { 26590 char foo; 26591 long : 0; 26592 char bar; 26593 } t5; 26594 26595 Here, 't5' takes up 2 bytes. 26596 265976.36.6 PowerPC Variable Attributes 26598---------------------------------- 26599 26600Three attributes currently are defined for PowerPC configurations: 26601'altivec', 'ms_struct' and 'gcc_struct'. 26602 26603 For full documentation of the struct attributes please see the 26604documentation in *note i386 Variable Attributes::. 26605 26606 For documentation of 'altivec' attribute please see the documentation 26607in *note PowerPC Type Attributes::. 26608 266096.36.7 SPU Variable Attributes 26610------------------------------ 26611 26612The SPU supports the 'spu_vector' attribute for variables. For 26613documentation of this attribute please see the documentation in *note 26614SPU Type Attributes::. 26615 266166.36.8 Xstormy16 Variable Attributes 26617------------------------------------ 26618 26619One attribute is currently defined for xstormy16 configurations: 26620'below100'. 26621 26622'below100' 26623 26624 If a variable has the 'below100' attribute ('BELOW100' is allowed 26625 also), GCC places the variable in the first 0x100 bytes of memory 26626 and use special opcodes to access it. Such variables are placed in 26627 either the '.bss_below100' section or the '.data_below100' section. 26628 26629 26630File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 26631 266326.37 Specifying Attributes of Types 26633=================================== 26634 26635The keyword '__attribute__' allows you to specify special attributes of 26636'struct' and 'union' types when you define such types. This keyword is 26637followed by an attribute specification inside double parentheses. Seven 26638attributes are currently defined for types: 'aligned', 'packed', 26639'transparent_union', 'unused', 'deprecated', 'visibility', and 26640'may_alias'. Other attributes are defined for functions (*note Function 26641Attributes::) and for variables (*note Variable Attributes::). 26642 26643 You may also specify any one of these attributes with '__' preceding 26644and following its keyword. This allows you to use these attributes in 26645header files without being concerned about a possible macro of the same 26646name. For example, you may use '__aligned__' instead of 'aligned'. 26647 26648 You may specify type attributes in an enum, struct or union type 26649declaration or definition, or for other types in a 'typedef' 26650declaration. 26651 26652 For an enum, struct or union type, you may specify attributes either 26653between the enum, struct or union tag and the name of the type, or just 26654past the closing curly brace of the _definition_. The former syntax is 26655preferred. 26656 26657 *Note Attribute Syntax::, for details of the exact syntax for using 26658attributes. 26659 26660'aligned (ALIGNMENT)' 26661 This attribute specifies a minimum alignment (in bytes) for 26662 variables of the specified type. For example, the declarations: 26663 26664 struct S { short f[3]; } __attribute__ ((aligned (8))); 26665 typedef int more_aligned_int __attribute__ ((aligned (8))); 26666 26667 force the compiler to ensure (as far as it can) that each variable 26668 whose type is 'struct S' or 'more_aligned_int' is allocated and 26669 aligned _at least_ on a 8-byte boundary. On a SPARC, having all 26670 variables of type 'struct S' aligned to 8-byte boundaries allows 26671 the compiler to use the 'ldd' and 'std' (doubleword load and store) 26672 instructions when copying one variable of type 'struct S' to 26673 another, thus improving run-time efficiency. 26674 26675 Note that the alignment of any given 'struct' or 'union' type is 26676 required by the ISO C standard to be at least a perfect multiple of 26677 the lowest common multiple of the alignments of all of the members 26678 of the 'struct' or 'union' in question. This means that you _can_ 26679 effectively adjust the alignment of a 'struct' or 'union' type by 26680 attaching an 'aligned' attribute to any one of the members of such 26681 a type, but the notation illustrated in the example above is a more 26682 obvious, intuitive, and readable way to request the compiler to 26683 adjust the alignment of an entire 'struct' or 'union' type. 26684 26685 As in the preceding example, you can explicitly specify the 26686 alignment (in bytes) that you wish the compiler to use for a given 26687 'struct' or 'union' type. Alternatively, you can leave out the 26688 alignment factor and just ask the compiler to align a type to the 26689 maximum useful alignment for the target machine you are compiling 26690 for. For example, you could write: 26691 26692 struct S { short f[3]; } __attribute__ ((aligned)); 26693 26694 Whenever you leave out the alignment factor in an 'aligned' 26695 attribute specification, the compiler automatically sets the 26696 alignment for the type to the largest alignment that is ever used 26697 for any data type on the target machine you are compiling for. 26698 Doing this can often make copy operations more efficient, because 26699 the compiler can use whatever instructions copy the biggest chunks 26700 of memory when performing copies to or from the variables that have 26701 types that you have aligned this way. 26702 26703 In the example above, if the size of each 'short' is 2 bytes, then 26704 the size of the entire 'struct S' type is 6 bytes. The smallest 26705 power of two that is greater than or equal to that is 8, so the 26706 compiler sets the alignment for the entire 'struct S' type to 8 26707 bytes. 26708 26709 Note that although you can ask the compiler to select a 26710 time-efficient alignment for a given type and then declare only 26711 individual stand-alone objects of that type, the compiler's ability 26712 to select a time-efficient alignment is primarily useful only when 26713 you plan to create arrays of variables having the relevant 26714 (efficiently aligned) type. If you declare or use arrays of 26715 variables of an efficiently-aligned type, then it is likely that 26716 your program also does pointer arithmetic (or subscripting, which 26717 amounts to the same thing) on pointers to the relevant type, and 26718 the code that the compiler generates for these pointer arithmetic 26719 operations is often more efficient for efficiently-aligned types 26720 than for other types. 26721 26722 The 'aligned' attribute can only increase the alignment; but you 26723 can decrease it by specifying 'packed' as well. See below. 26724 26725 Note that the effectiveness of 'aligned' attributes may be limited 26726 by inherent limitations in your linker. On many systems, the 26727 linker is only able to arrange for variables to be aligned up to a 26728 certain maximum alignment. (For some linkers, the maximum 26729 supported alignment may be very very small.) If your linker is 26730 only able to align variables up to a maximum of 8-byte alignment, 26731 then specifying 'aligned(16)' in an '__attribute__' still only 26732 provides you with 8-byte alignment. See your linker documentation 26733 for further information. 26734 26735'packed' 26736 This attribute, attached to 'struct' or 'union' type definition, 26737 specifies that each member (other than zero-width bit-fields) of 26738 the structure or union is placed to minimize the memory required. 26739 When attached to an 'enum' definition, it indicates that the 26740 smallest integral type should be used. 26741 26742 Specifying this attribute for 'struct' and 'union' types is 26743 equivalent to specifying the 'packed' attribute on each of the 26744 structure or union members. Specifying the '-fshort-enums' flag on 26745 the line is equivalent to specifying the 'packed' attribute on all 26746 'enum' definitions. 26747 26748 In the following example 'struct my_packed_struct''s members are 26749 packed closely together, but the internal layout of its 's' member 26750 is not packed--to do that, 'struct my_unpacked_struct' needs to be 26751 packed too. 26752 26753 struct my_unpacked_struct 26754 { 26755 char c; 26756 int i; 26757 }; 26758 26759 struct __attribute__ ((__packed__)) my_packed_struct 26760 { 26761 char c; 26762 int i; 26763 struct my_unpacked_struct s; 26764 }; 26765 26766 You may only specify this attribute on the definition of an 'enum', 26767 'struct' or 'union', not on a 'typedef' that does not also define 26768 the enumerated type, structure or union. 26769 26770'transparent_union' 26771 This attribute, attached to a 'union' type definition, indicates 26772 that any function parameter having that union type causes calls to 26773 that function to be treated in a special way. 26774 26775 First, the argument corresponding to a transparent union type can 26776 be of any type in the union; no cast is required. Also, if the 26777 union contains a pointer type, the corresponding argument can be a 26778 null pointer constant or a void pointer expression; and if the 26779 union contains a void pointer type, the corresponding argument can 26780 be any pointer expression. If the union member type is a pointer, 26781 qualifiers like 'const' on the referenced type must be respected, 26782 just as with normal pointer conversions. 26783 26784 Second, the argument is passed to the function using the calling 26785 conventions of the first member of the transparent union, not the 26786 calling conventions of the union itself. All members of the union 26787 must have the same machine representation; this is necessary for 26788 this argument passing to work properly. 26789 26790 Transparent unions are designed for library functions that have 26791 multiple interfaces for compatibility reasons. For example, 26792 suppose the 'wait' function must accept either a value of type 'int 26793 *' to comply with POSIX, or a value of type 'union wait *' to 26794 comply with the 4.1BSD interface. If 'wait''s parameter were 'void 26795 *', 'wait' would accept both kinds of arguments, but it would also 26796 accept any other pointer type and this would make argument type 26797 checking less useful. Instead, '<sys/wait.h>' might define the 26798 interface as follows: 26799 26800 typedef union __attribute__ ((__transparent_union__)) 26801 { 26802 int *__ip; 26803 union wait *__up; 26804 } wait_status_ptr_t; 26805 26806 pid_t wait (wait_status_ptr_t); 26807 26808 This interface allows either 'int *' or 'union wait *' arguments to 26809 be passed, using the 'int *' calling convention. The program can 26810 call 'wait' with arguments of either type: 26811 26812 int w1 () { int w; return wait (&w); } 26813 int w2 () { union wait w; return wait (&w); } 26814 26815 With this interface, 'wait''s implementation might look like this: 26816 26817 pid_t wait (wait_status_ptr_t p) 26818 { 26819 return waitpid (-1, p.__ip, 0); 26820 } 26821 26822'unused' 26823 When attached to a type (including a 'union' or a 'struct'), this 26824 attribute means that variables of that type are meant to appear 26825 possibly unused. GCC does not produce a warning for any variables 26826 of that type, even if the variable appears to do nothing. This is 26827 often the case with lock or thread classes, which are usually 26828 defined and then not referenced, but contain constructors and 26829 destructors that have nontrivial bookkeeping functions. 26830 26831'deprecated' 26832'deprecated (MSG)' 26833 The 'deprecated' attribute results in a warning if the type is used 26834 anywhere in the source file. This is useful when identifying types 26835 that are expected to be removed in a future version of a program. 26836 If possible, the warning also includes the location of the 26837 declaration of the deprecated type, to enable users to easily find 26838 further information about why the type is deprecated, or what they 26839 should do instead. Note that the warnings only occur for uses and 26840 then only if the type is being applied to an identifier that itself 26841 is not being declared as deprecated. 26842 26843 typedef int T1 __attribute__ ((deprecated)); 26844 T1 x; 26845 typedef T1 T2; 26846 T2 y; 26847 typedef T1 T3 __attribute__ ((deprecated)); 26848 T3 z __attribute__ ((deprecated)); 26849 26850 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 26851 warning is issued for line 4 because T2 is not explicitly 26852 deprecated. Line 5 has no warning because T3 is explicitly 26853 deprecated. Similarly for line 6. The optional MSG argument, 26854 which must be a string, is printed in the warning if present. 26855 26856 The 'deprecated' attribute can also be used for functions and 26857 variables (*note Function Attributes::, *note Variable 26858 Attributes::.) 26859 26860'may_alias' 26861 Accesses through pointers to types with this attribute are not 26862 subject to type-based alias analysis, but are instead assumed to be 26863 able to alias any other type of objects. In the context of section 26864 6.5 paragraph 7 of the C99 standard, an lvalue expression 26865 dereferencing such a pointer is treated like having a character 26866 type. See '-fstrict-aliasing' for more information on aliasing 26867 issues. This extension exists to support some vector APIs, in 26868 which pointers to one vector type are permitted to alias pointers 26869 to a different vector type. 26870 26871 Note that an object of a type with this attribute does not have any 26872 special semantics. 26873 26874 Example of use: 26875 26876 typedef short __attribute__((__may_alias__)) short_a; 26877 26878 int 26879 main (void) 26880 { 26881 int a = 0x12345678; 26882 short_a *b = (short_a *) &a; 26883 26884 b[1] = 0; 26885 26886 if (a == 0x12345678) 26887 abort(); 26888 26889 exit(0); 26890 } 26891 26892 If you replaced 'short_a' with 'short' in the variable declaration, 26893 the above program would abort when compiled with 26894 '-fstrict-aliasing', which is on by default at '-O2' or above in 26895 recent GCC versions. 26896 26897'visibility' 26898 In C++, attribute visibility (*note Function Attributes::) can also 26899 be applied to class, struct, union and enum types. Unlike other 26900 type attributes, the attribute must appear between the initial 26901 keyword and the name of the type; it cannot appear after the body 26902 of the type. 26903 26904 Note that the type visibility is applied to vague linkage entities 26905 associated with the class (vtable, typeinfo node, etc.). In 26906 particular, if a class is thrown as an exception in one shared 26907 object and caught in another, the class must have default 26908 visibility. Otherwise the two shared objects are unable to use the 26909 same typeinfo node and exception handling will break. 26910 26911 To specify multiple attributes, separate them by commas within the 26912double parentheses: for example, '__attribute__ ((aligned (16), 26913packed))'. 26914 269156.37.1 ARM Type Attributes 26916-------------------------- 26917 26918On those ARM targets that support 'dllimport' (such as Symbian OS), you 26919can use the 'notshared' attribute to indicate that the virtual table and 26920other similar data for a class should not be exported from a DLL. For 26921example: 26922 26923 class __declspec(notshared) C { 26924 public: 26925 __declspec(dllimport) C(); 26926 virtual void f(); 26927 } 26928 26929 __declspec(dllexport) 26930 C::C() {} 26931 26932In this code, 'C::C' is exported from the current DLL, but the virtual 26933table for 'C' is not exported. (You can use '__attribute__' instead of 26934'__declspec' if you prefer, but most Symbian OS code uses '__declspec'.) 26935 269366.37.2 MeP Type Attributes 26937-------------------------- 26938 26939Many of the MeP variable attributes may be applied to types as well. 26940Specifically, the 'based', 'tiny', 'near', and 'far' attributes may be 26941applied to either. The 'io' and 'cb' attributes may not be applied to 26942types. 26943 269446.37.3 i386 Type Attributes 26945--------------------------- 26946 26947Two attributes are currently defined for i386 configurations: 26948'ms_struct' and 'gcc_struct'. 26949 26950'ms_struct' 26951'gcc_struct' 26952 26953 If 'packed' is used on a structure, or if bit-fields are used it 26954 may be that the Microsoft ABI packs them differently than GCC 26955 normally packs them. Particularly when moving packed data between 26956 functions compiled with GCC and the native Microsoft compiler 26957 (either via function call or as data in a file), it may be 26958 necessary to access either format. 26959 26960 Currently '-m[no-]ms-bitfields' is provided for the Microsoft 26961 Windows X86 compilers to match the native Microsoft compiler. 26962 269636.37.4 PowerPC Type Attributes 26964------------------------------ 26965 26966Three attributes currently are defined for PowerPC configurations: 26967'altivec', 'ms_struct' and 'gcc_struct'. 26968 26969 For full documentation of the 'ms_struct' and 'gcc_struct' attributes 26970please see the documentation in *note i386 Type Attributes::. 26971 26972 The 'altivec' attribute allows one to declare AltiVec vector data types 26973supported by the AltiVec Programming Interface Manual. The attribute 26974requires an argument to specify one of three vector types: 'vector__', 26975'pixel__' (always followed by unsigned short), and 'bool__' (always 26976followed by unsigned). 26977 26978 __attribute__((altivec(vector__))) 26979 __attribute__((altivec(pixel__))) unsigned short 26980 __attribute__((altivec(bool__))) unsigned 26981 26982 These attributes mainly are intended to support the '__vector', 26983'__pixel', and '__bool' AltiVec keywords. 26984 269856.37.5 SPU Type Attributes 26986-------------------------- 26987 26988The SPU supports the 'spu_vector' attribute for types. This attribute 26989allows one to declare vector data types supported by the 26990Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 26991to support the '__vector' keyword. 26992 26993 26994File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 26995 269966.38 Inquiring on Alignment of Types or Variables 26997================================================= 26998 26999The keyword '__alignof__' allows you to inquire about how an object is 27000aligned, or the minimum alignment usually required by a type. Its 27001syntax is just like 'sizeof'. 27002 27003 For example, if the target machine requires a 'double' value to be 27004aligned on an 8-byte boundary, then '__alignof__ (double)' is 8. This 27005is true on many RISC machines. On more traditional machine designs, 27006'__alignof__ (double)' is 4 or even 2. 27007 27008 Some machines never actually require alignment; they allow reference to 27009any data type even at an odd address. For these machines, '__alignof__' 27010reports the smallest alignment that GCC gives the data type, usually as 27011mandated by the target ABI. 27012 27013 If the operand of '__alignof__' is an lvalue rather than a type, its 27014value is the required alignment for its type, taking into account any 27015minimum alignment specified with GCC's '__attribute__' extension (*note 27016Variable Attributes::). For example, after this declaration: 27017 27018 struct foo { int x; char y; } foo1; 27019 27020the value of '__alignof__ (foo1.y)' is 1, even though its actual 27021alignment is probably 2 or 4, the same as '__alignof__ (int)'. 27022 27023 It is an error to ask for the alignment of an incomplete type. 27024 27025 27026File: gcc.info, Node: Inline, Next: Volatiles, Prev: Alignment, Up: C Extensions 27027 270286.39 An Inline Function is As Fast As a Macro 27029============================================= 27030 27031By declaring a function inline, you can direct GCC to make calls to that 27032function faster. One way GCC can achieve this is to integrate that 27033function's code into the code for its callers. This makes execution 27034faster by eliminating the function-call overhead; in addition, if any of 27035the actual argument values are constant, their known values may permit 27036simplifications at compile time so that not all of the inline function's 27037code needs to be included. The effect on code size is less predictable; 27038object code may be larger or smaller with function inlining, depending 27039on the particular case. You can also direct GCC to try to integrate all 27040"simple enough" functions into their callers with the option 27041'-finline-functions'. 27042 27043 GCC implements three different semantics of declaring a function 27044inline. One is available with '-std=gnu89' or '-fgnu89-inline' or when 27045'gnu_inline' attribute is present on all inline declarations, another 27046when '-std=c99', '-std=c11', '-std=gnu99' or '-std=gnu11' (without 27047'-fgnu89-inline'), and the third is used when compiling C++. 27048 27049 To declare a function inline, use the 'inline' keyword in its 27050declaration, like this: 27051 27052 static inline int 27053 inc (int *a) 27054 { 27055 return (*a)++; 27056 } 27057 27058 If you are writing a header file to be included in ISO C90 programs, 27059write '__inline__' instead of 'inline'. *Note Alternate Keywords::. 27060 27061 The three types of inlining behave similarly in two important cases: 27062when the 'inline' keyword is used on a 'static' function, like the 27063example above, and when a function is first declared without using the 27064'inline' keyword and then is defined with 'inline', like this: 27065 27066 extern int inc (int *a); 27067 inline int 27068 inc (int *a) 27069 { 27070 return (*a)++; 27071 } 27072 27073 In both of these common cases, the program behaves the same as if you 27074had not used the 'inline' keyword, except for its speed. 27075 27076 When a function is both inline and 'static', if all calls to the 27077function are integrated into the caller, and the function's address is 27078never used, then the function's own assembler code is never referenced. 27079In this case, GCC does not actually output assembler code for the 27080function, unless you specify the option '-fkeep-inline-functions'. Some 27081calls cannot be integrated for various reasons (in particular, calls 27082that precede the function's definition cannot be integrated, and neither 27083can recursive calls within the definition). If there is a nonintegrated 27084call, then the function is compiled to assembler code as usual. The 27085function must also be compiled as usual if the program refers to its 27086address, because that can't be inlined. 27087 27088 Note that certain usages in a function definition can make it 27089unsuitable for inline substitution. Among these usages are: variadic 27090functions, use of 'alloca', use of variable-length data types (*note 27091Variable Length::), use of computed goto (*note Labels as Values::), use 27092of nonlocal goto, and nested functions (*note Nested Functions::). 27093Using '-Winline' warns when a function marked 'inline' could not be 27094substituted, and gives the reason for the failure. 27095 27096 As required by ISO C++, GCC considers member functions defined within 27097the body of a class to be marked inline even if they are not explicitly 27098declared with the 'inline' keyword. You can override this with 27099'-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 27100Dialect Options. 27101 27102 GCC does not inline any functions when not optimizing unless you 27103specify the 'always_inline' attribute for the function, like this: 27104 27105 /* Prototype. */ 27106 inline void foo (const char) __attribute__((always_inline)); 27107 27108 The remainder of this section is specific to GNU C90 inlining. 27109 27110 When an inline function is not 'static', then the compiler must assume 27111that there may be calls from other source files; since a global symbol 27112can be defined only once in any program, the function must not be 27113defined in the other source files, so the calls therein cannot be 27114integrated. Therefore, a non-'static' inline function is always 27115compiled on its own in the usual fashion. 27116 27117 If you specify both 'inline' and 'extern' in the function definition, 27118then the definition is used only for inlining. In no case is the 27119function compiled on its own, not even if you refer to its address 27120explicitly. Such an address becomes an external reference, as if you 27121had only declared the function, and had not defined it. 27122 27123 This combination of 'inline' and 'extern' has almost the effect of a 27124macro. The way to use it is to put a function definition in a header 27125file with these keywords, and put another copy of the definition 27126(lacking 'inline' and 'extern') in a library file. The definition in 27127the header file causes most calls to the function to be inlined. If any 27128uses of the function remain, they refer to the single copy in the 27129library. 27130 27131 27132File: gcc.info, Node: Volatiles, Next: Extended Asm, Prev: Inline, Up: C Extensions 27133 271346.40 When is a Volatile Object Accessed? 27135======================================== 27136 27137C has the concept of volatile objects. These are normally accessed by 27138pointers and used for accessing hardware or inter-thread communication. 27139The standard encourages compilers to refrain from optimizations 27140concerning accesses to volatile objects, but leaves it implementation 27141defined as to what constitutes a volatile access. The minimum 27142requirement is that at a sequence point all previous accesses to 27143volatile objects have stabilized and no subsequent accesses have 27144occurred. Thus an implementation is free to reorder and combine 27145volatile accesses that occur between sequence points, but cannot do so 27146for accesses across a sequence point. The use of volatile does not 27147allow you to violate the restriction on updating objects multiple times 27148between two sequence points. 27149 27150 Accesses to non-volatile objects are not ordered with respect to 27151volatile accesses. You cannot use a volatile object as a memory barrier 27152to order a sequence of writes to non-volatile memory. For instance: 27153 27154 int *ptr = SOMETHING; 27155 volatile int vobj; 27156 *ptr = SOMETHING; 27157 vobj = 1; 27158 27159Unless *PTR and VOBJ can be aliased, it is not guaranteed that the write 27160to *PTR occurs by the time the update of VOBJ happens. If you need this 27161guarantee, you must use a stronger memory barrier such as: 27162 27163 int *ptr = SOMETHING; 27164 volatile int vobj; 27165 *ptr = SOMETHING; 27166 asm volatile ("" : : : "memory"); 27167 vobj = 1; 27168 27169 A scalar volatile object is read when it is accessed in a void context: 27170 27171 volatile int *src = SOMEVALUE; 27172 *src; 27173 27174 Such expressions are rvalues, and GCC implements this as a read of the 27175volatile object being pointed to. 27176 27177 Assignments are also expressions and have an rvalue. However when 27178assigning to a scalar volatile, the volatile object is not reread, 27179regardless of whether the assignment expression's rvalue is used or not. 27180If the assignment's rvalue is used, the value is that assigned to the 27181volatile object. For instance, there is no read of VOBJ in all the 27182following cases: 27183 27184 int obj; 27185 volatile int vobj; 27186 vobj = SOMETHING; 27187 obj = vobj = SOMETHING; 27188 obj ? vobj = ONETHING : vobj = ANOTHERTHING; 27189 obj = (SOMETHING, vobj = ANOTHERTHING); 27190 27191 If you need to read the volatile object after an assignment has 27192occurred, you must use a separate expression with an intervening 27193sequence point. 27194 27195 As bit-fields are not individually addressable, volatile bit-fields may 27196be implicitly read when written to, or when adjacent bit-fields are 27197accessed. Bit-field operations may be optimized such that adjacent 27198bit-fields are only partially accessed, if they straddle a storage unit 27199boundary. For these reasons it is unwise to use volatile bit-fields to 27200access hardware. 27201 27202 27203File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Volatiles, Up: C Extensions 27204 272056.41 Assembler Instructions with C Expression Operands 27206====================================================== 27207 27208In an assembler instruction using 'asm', you can specify the operands of 27209the instruction using C expressions. This means you need not guess 27210which registers or memory locations contain the data you want to use. 27211 27212 You must specify an assembler instruction template much like what 27213appears in a machine description, plus an operand constraint string for 27214each operand. 27215 27216 For example, here is how to use the 68881's 'fsinx' instruction: 27217 27218 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 27219 27220Here 'angle' is the C expression for the input operand while 'result' is 27221that of the output operand. Each has '"f"' as its operand constraint, 27222saying that a floating-point register is required. The '=' in '=f' 27223indicates that the operand is an output; all output operands' 27224constraints must use '='. The constraints use the same language used in 27225the machine description (*note Constraints::). 27226 27227 Each operand is described by an operand-constraint string followed by 27228the C expression in parentheses. A colon separates the assembler 27229template from the first output operand and another separates the last 27230output operand from the first input, if any. Commas separate the 27231operands within each group. The total number of operands is currently 27232limited to 30; this limitation may be lifted in some future version of 27233GCC. 27234 27235 If there are no output operands but there are input operands, you must 27236place two consecutive colons surrounding the place where the output 27237operands would go. 27238 27239 As of GCC version 3.1, it is also possible to specify input and output 27240operands using symbolic names which can be referenced within the 27241assembler code. These names are specified inside square brackets 27242preceding the constraint string, and can be referenced inside the 27243assembler code using '%[NAME]' instead of a percentage sign followed by 27244the operand number. Using named operands the above example could look 27245like: 27246 27247 asm ("fsinx %[angle],%[output]" 27248 : [output] "=f" (result) 27249 : [angle] "f" (angle)); 27250 27251Note that the symbolic operand names have no relation whatsoever to 27252other C identifiers. You may use any name you like, even those of 27253existing C symbols, but you must ensure that no two operands within the 27254same assembler construct use the same symbolic name. 27255 27256 Output operand expressions must be lvalues; the compiler can check 27257this. The input operands need not be lvalues. The compiler cannot 27258check whether the operands have data types that are reasonable for the 27259instruction being executed. It does not parse the assembler instruction 27260template and does not know what it means or even whether it is valid 27261assembler input. The extended 'asm' feature is most often used for 27262machine instructions the compiler itself does not know exist. If the 27263output expression cannot be directly addressed (for example, it is a 27264bit-field), your constraint must allow a register. In that case, GCC 27265uses the register as the output of the 'asm', and then stores that 27266register into the output. 27267 27268 The ordinary output operands must be write-only; GCC assumes that the 27269values in these operands before the instruction are dead and need not be 27270generated. Extended asm supports input-output or read-write operands. 27271Use the constraint character '+' to indicate such an operand and list it 27272with the output operands. 27273 27274 You may, as an alternative, logically split its function into two 27275separate operands, one input operand and one write-only output operand. 27276The connection between them is expressed by constraints that say they 27277need to be in the same location when the instruction executes. You can 27278use the same C expression for both operands, or different expressions. 27279For example, here we write the (fictitious) 'combine' instruction with 27280'bar' as its read-only source operand and 'foo' as its read-write 27281destination: 27282 27283 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 27284 27285The constraint '"0"' for operand 1 says that it must occupy the same 27286location as operand 0. A number in constraint is allowed only in an 27287input operand and it must refer to an output operand. 27288 27289 Only a number in the constraint can guarantee that one operand is in 27290the same place as another. The mere fact that 'foo' is the value of 27291both operands is not enough to guarantee that they are in the same place 27292in the generated assembler code. The following does not work reliably: 27293 27294 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 27295 27296 Various optimizations or reloading could cause operands 0 and 1 to be 27297in different registers; GCC knows no reason not to do so. For example, 27298the compiler might find a copy of the value of 'foo' in one register and 27299use it for operand 1, but generate the output operand 0 in a different 27300register (copying it afterward to 'foo''s own address). Of course, 27301since the register for operand 1 is not even mentioned in the assembler 27302code, the result will not work, but GCC can't tell that. 27303 27304 As of GCC version 3.1, one may write '[NAME]' instead of the operand 27305number for a matching constraint. For example: 27306 27307 asm ("cmoveq %1,%2,%[result]" 27308 : [result] "=r"(result) 27309 : "r" (test), "r"(new), "[result]"(old)); 27310 27311 Sometimes you need to make an 'asm' operand be a specific register, but 27312there's no matching constraint letter for that register _by itself_. To 27313force the operand into that register, use a local variable for the 27314operand and specify the register in the variable declaration. *Note 27315Explicit Reg Vars::. Then for the 'asm' operand, use any register 27316constraint letter that matches the register: 27317 27318 register int *p1 asm ("r0") = ...; 27319 register int *p2 asm ("r1") = ...; 27320 register int *result asm ("r0"); 27321 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 27322 27323 In the above example, beware that a register that is call-clobbered by 27324the target ABI will be overwritten by any function call in the 27325assignment, including library calls for arithmetic operators. Also a 27326register may be clobbered when generating some operations, like variable 27327shift, memory copy or memory move on x86. Assuming it is a 27328call-clobbered register, this may happen to 'r0' above by the assignment 27329to 'p2'. If you have to use such a register, use temporary variables 27330for expressions between the register assignment and use: 27331 27332 int t1 = ...; 27333 register int *p1 asm ("r0") = ...; 27334 register int *p2 asm ("r1") = t1; 27335 register int *result asm ("r0"); 27336 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 27337 27338 Some instructions clobber specific hard registers. To describe this, 27339write a third colon after the input operands, followed by the names of 27340the clobbered hard registers (given as strings). Here is a realistic 27341example for the VAX: 27342 27343 asm volatile ("movc3 %0,%1,%2" 27344 : /* no outputs */ 27345 : "g" (from), "g" (to), "g" (count) 27346 : "r0", "r1", "r2", "r3", "r4", "r5"); 27347 27348 You may not write a clobber description in a way that overlaps with an 27349input or output operand. For example, you may not have an operand 27350describing a register class with one member if you mention that register 27351in the clobber list. Variables declared to live in specific registers 27352(*note Explicit Reg Vars::), and used as asm input or output operands 27353must have no part mentioned in the clobber description. There is no way 27354for you to specify that an input operand is modified without also 27355specifying it as an output operand. Note that if all the output 27356operands you specify are for this purpose (and hence unused), you then 27357also need to specify 'volatile' for the 'asm' construct, as described 27358below, to prevent GCC from deleting the 'asm' statement as unused. 27359 27360 If you refer to a particular hardware register from the assembler code, 27361you probably have to list the register after the third colon to tell the 27362compiler the register's value is modified. In some assemblers, the 27363register names begin with '%'; to produce one '%' in the assembler code, 27364you must write '%%' in the input. 27365 27366 If your assembler instruction can alter the condition code register, 27367add 'cc' to the list of clobbered registers. GCC on some machines 27368represents the condition codes as a specific hardware register; 'cc' 27369serves to name this register. On other machines, the condition code is 27370handled differently, and specifying 'cc' has no effect. But it is valid 27371no matter what the machine. 27372 27373 If your assembler instructions access memory in an unpredictable 27374fashion, add 'memory' to the list of clobbered registers. This causes 27375GCC to not keep memory values cached in registers across the assembler 27376instruction and not optimize stores or loads to that memory. You also 27377should add the 'volatile' keyword if the memory affected is not listed 27378in the inputs or outputs of the 'asm', as the 'memory' clobber does not 27379count as a side-effect of the 'asm'. If you know how large the accessed 27380memory is, you can add it as input or output but if this is not known, 27381you should add 'memory'. As an example, if you access ten bytes of a 27382string, you can use a memory input like: 27383 27384 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 27385 27386 Note that in the following example the memory input is necessary, 27387otherwise GCC might optimize the store to 'x' away: 27388 int foo () 27389 { 27390 int x = 42; 27391 int *y = &x; 27392 int result; 27393 asm ("magic stuff accessing an 'int' pointed to by '%1'" 27394 : "=&d" (result) : "a" (y), "m" (*y)); 27395 return result; 27396 } 27397 27398 You can put multiple assembler instructions together in a single 'asm' 27399template, separated by the characters normally used in assembly code for 27400the system. A combination that works in most places is a newline to 27401break the line, plus a tab character to move to the instruction field 27402(written as '\n\t'). Sometimes semicolons can be used, if the assembler 27403allows semicolons as a line-breaking character. Note that some 27404assembler dialects use semicolons to start a comment. The input 27405operands are guaranteed not to use any of the clobbered registers, and 27406neither do the output operands' addresses, so you can read and write the 27407clobbered registers as many times as you like. Here is an example of 27408multiple instructions in a template; it assumes the subroutine '_foo' 27409accepts arguments in registers 9 and 10: 27410 27411 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 27412 : /* no outputs */ 27413 : "g" (from), "g" (to) 27414 : "r9", "r10"); 27415 27416 Unless an output operand has the '&' constraint modifier, GCC may 27417allocate it in the same register as an unrelated input operand, on the 27418assumption the inputs are consumed before the outputs are produced. 27419This assumption may be false if the assembler code actually consists of 27420more than one instruction. In such a case, use '&' for each output 27421operand that may not overlap an input. *Note Modifiers::. 27422 27423 If you want to test the condition code produced by an assembler 27424instruction, you must include a branch and a label in the 'asm' 27425construct, as follows: 27426 27427 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 27428 : "g" (result) 27429 : "g" (input)); 27430 27431This assumes your assembler supports local labels, as the GNU assembler 27432and most Unix assemblers do. 27433 27434 Speaking of labels, jumps from one 'asm' to another are not supported. 27435The compiler's optimizers do not know about these jumps, and therefore 27436they cannot take account of them when deciding how to optimize. *Note 27437Extended asm with goto::. 27438 27439 Usually the most convenient way to use these 'asm' instructions is to 27440encapsulate them in macros that look like functions. For example, 27441 27442 #define sin(x) \ 27443 ({ double __value, __arg = (x); \ 27444 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 27445 __value; }) 27446 27447Here the variable '__arg' is used to make sure that the instruction 27448operates on a proper 'double' value, and to accept only those arguments 27449'x' that can convert automatically to a 'double'. 27450 27451 Another way to make sure the instruction operates on the correct data 27452type is to use a cast in the 'asm'. This is different from using a 27453variable '__arg' in that it converts more different types. For example, 27454if the desired type is 'int', casting the argument to 'int' accepts a 27455pointer with no complaint, while assigning the argument to an 'int' 27456variable named '__arg' warns about using a pointer unless the caller 27457explicitly casts it. 27458 27459 If an 'asm' has output operands, GCC assumes for optimization purposes 27460the instruction has no side effects except to change the output 27461operands. This does not mean instructions with a side effect cannot be 27462used, but you must be careful, because the compiler may eliminate them 27463if the output operands aren't used, or move them out of loops, or 27464replace two with one if they constitute a common subexpression. Also, 27465if your instruction does have a side effect on a variable that otherwise 27466appears not to change, the old value of the variable may be reused later 27467if it happens to be found in a register. 27468 27469 You can prevent an 'asm' instruction from being deleted by writing the 27470keyword 'volatile' after the 'asm'. For example: 27471 27472 #define get_and_set_priority(new) \ 27473 ({ int __old; \ 27474 asm volatile ("get_and_set_priority %0, %1" \ 27475 : "=g" (__old) : "g" (new)); \ 27476 __old; }) 27477 27478The 'volatile' keyword indicates that the instruction has important 27479side-effects. GCC does not delete a volatile 'asm' if it is reachable. 27480(The instruction can still be deleted if GCC can prove that control flow 27481never reaches the location of the instruction.) Note that even a 27482volatile 'asm' instruction can be moved relative to other code, 27483including across jump instructions. For example, on many targets there 27484is a system register that can be set to control the rounding mode of 27485floating-point operations. You might try setting it with a volatile 27486'asm', like this PowerPC example: 27487 27488 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 27489 sum = x + y; 27490 27491This does not work reliably, as the compiler may move the addition back 27492before the volatile 'asm'. To make it work you need to add an 27493artificial dependency to the 'asm' referencing a variable in the code 27494you don't want moved, for example: 27495 27496 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 27497 sum = x + y; 27498 27499 Similarly, you can't expect a sequence of volatile 'asm' instructions 27500to remain perfectly consecutive. If you want consecutive output, use a 27501single 'asm'. Also, GCC performs some optimizations across a volatile 27502'asm' instruction; GCC does not "forget everything" when it encounters a 27503volatile 'asm' instruction the way some other compilers do. 27504 27505 An 'asm' instruction without any output operands is treated identically 27506to a volatile 'asm' instruction. 27507 27508 It is a natural idea to look for a way to give access to the condition 27509code left by the assembler instruction. However, when we attempted to 27510implement this, we found no way to make it work reliably. The problem 27511is that output operands might need reloading, which result in additional 27512following "store" instructions. On most machines, these instructions 27513alter the condition code before there is time to test it. This problem 27514doesn't arise for ordinary "test" and "compare" instructions because 27515they don't have any output operands. 27516 27517 For reasons similar to those described above, it is not possible to 27518give an assembler instruction access to the condition code left by 27519previous instructions. 27520 27521 As of GCC version 4.5, 'asm goto' may be used to have the assembly jump 27522to one or more C labels. In this form, a fifth section after the 27523clobber list contains a list of all C labels to which the assembly may 27524jump. Each label operand is implicitly self-named. The 'asm' is also 27525assumed to fall through to the next statement. 27526 27527 This form of 'asm' is restricted to not have outputs. This is due to a 27528internal restriction in the compiler that control transfer instructions 27529cannot have outputs. This restriction on 'asm goto' may be lifted in 27530some future version of the compiler. In the meantime, 'asm goto' may 27531include a memory clobber, and so leave outputs in memory. 27532 27533 int frob(int x) 27534 { 27535 int y; 27536 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 27537 : : "r"(x), "r"(&y) : "r5", "memory" : error); 27538 return y; 27539 error: 27540 return -1; 27541 } 27542 27543In this (inefficient) example, the 'frob' instruction sets the carry bit 27544to indicate an error. The 'jc' instruction detects this and branches to 27545the 'error' label. Finally, the output of the 'frob' instruction 27546('%r5') is stored into the memory for variable 'y', which is later read 27547by the 'return' statement. 27548 27549 void doit(void) 27550 { 27551 int i = 0; 27552 asm goto ("mfsr %%r1, 123; jmp %%r1;" 27553 ".pushsection doit_table;" 27554 ".long %l0, %l1, %l2, %l3;" 27555 ".popsection" 27556 : : : "r1" : label1, label2, label3, label4); 27557 __builtin_unreachable (); 27558 27559 label1: 27560 f1(); 27561 return; 27562 label2: 27563 f2(); 27564 return; 27565 label3: 27566 i = 1; 27567 label4: 27568 f3(i); 27569 } 27570 27571In this (also inefficient) example, the 'mfsr' instruction reads an 27572address from some out-of-band machine register, and the following 'jmp' 27573instruction branches to that address. The address read by the 'mfsr' 27574instruction is assumed to have been previously set via some 27575application-specific mechanism to be one of the four values stored in 27576the 'doit_table' section. Finally, the 'asm' is followed by a call to 27577'__builtin_unreachable' to indicate that the 'asm' does not in fact fall 27578through. 27579 27580 #define TRACE1(NUM) \ 27581 do { \ 27582 asm goto ("0: nop;" \ 27583 ".pushsection trace_table;" \ 27584 ".long 0b, %l0;" \ 27585 ".popsection" \ 27586 : : : : trace#NUM); \ 27587 if (0) { trace#NUM: trace(); } \ 27588 } while (0) 27589 #define TRACE TRACE1(__COUNTER__) 27590 27591In this example (which in fact inspired the 'asm goto' feature) we want 27592on rare occasions to call the 'trace' function; on other occasions we'd 27593like to keep the overhead to the absolute minimum. The normal code path 27594consists of a single 'nop' instruction. However, we record the address 27595of this 'nop' together with the address of a label that calls the 27596'trace' function. This allows the 'nop' instruction to be patched at 27597run time to be an unconditional branch to the stored label. It is 27598assumed that an optimizing compiler moves the labeled block out of line, 27599to optimize the fall through path from the 'asm'. 27600 27601 If you are writing a header file that should be includable in ISO C 27602programs, write '__asm__' instead of 'asm'. *Note Alternate Keywords::. 27603 276046.41.1 Size of an 'asm' 27605----------------------- 27606 27607Some targets require that GCC track the size of each instruction used in 27608order to generate correct code. Because the final length of an 'asm' is 27609only known by the assembler, GCC must make an estimate as to how big it 27610will be. The estimate is formed by counting the number of statements in 27611the pattern of the 'asm' and multiplying that by the length of the 27612longest instruction on that processor. Statements in the 'asm' are 27613identified by newline characters and whatever statement separator 27614characters are supported by the assembler; on most processors this is 27615the ';' character. 27616 27617 Normally, GCC's estimate is perfectly adequate to ensure that correct 27618code is generated, but it is possible to confuse the compiler if you use 27619pseudo instructions or assembler macros that expand into multiple real 27620instructions or if you use assembler directives that expand to more 27621space in the object file than is needed for a single instruction. If 27622this happens then the assembler produces a diagnostic saying that a 27623label is unreachable. 27624 276256.41.2 i386 floating-point asm operands 27626--------------------------------------- 27627 27628On i386 targets, there are several rules on the usage of stack-like 27629registers in the operands of an 'asm'. These rules apply only to the 27630operands that are stack-like registers: 27631 27632 1. Given a set of input registers that die in an 'asm', it is 27633 necessary to know which are implicitly popped by the 'asm', and 27634 which must be explicitly popped by GCC. 27635 27636 An input register that is implicitly popped by the 'asm' must be 27637 explicitly clobbered, unless it is constrained to match an output 27638 operand. 27639 27640 2. For any input register that is implicitly popped by an 'asm', it is 27641 necessary to know how to adjust the stack to compensate for the 27642 pop. If any non-popped input is closer to the top of the reg-stack 27643 than the implicitly popped register, it would not be possible to 27644 know what the stack looked like--it's not clear how the rest of the 27645 stack "slides up". 27646 27647 All implicitly popped input registers must be closer to the top of 27648 the reg-stack than any input that is not implicitly popped. 27649 27650 It is possible that if an input dies in an 'asm', the compiler 27651 might use the input register for an output reload. Consider this 27652 example: 27653 27654 asm ("foo" : "=t" (a) : "f" (b)); 27655 27656 This code says that input 'b' is not popped by the 'asm', and that 27657 the 'asm' pushes a result onto the reg-stack, i.e., the stack is 27658 one deeper after the 'asm' than it was before. But, it is possible 27659 that reload may think that it can use the same register for both 27660 the input and the output. 27661 27662 To prevent this from happening, if any input operand uses the 'f' 27663 constraint, all output register constraints must use the '&' 27664 early-clobber modifier. 27665 27666 The example above would be correctly written as: 27667 27668 asm ("foo" : "=&t" (a) : "f" (b)); 27669 27670 3. Some operands need to be in particular places on the stack. All 27671 output operands fall in this category--GCC has no other way to know 27672 which registers the outputs appear in unless you indicate this in 27673 the constraints. 27674 27675 Output operands must specifically indicate which register an output 27676 appears in after an 'asm'. '=f' is not allowed: the operand 27677 constraints must select a class with a single register. 27678 27679 4. Output operands may not be "inserted" between existing stack 27680 registers. Since no 387 opcode uses a read/write operand, all 27681 output operands are dead before the 'asm', and are pushed by the 27682 'asm'. It makes no sense to push anywhere but the top of the 27683 reg-stack. 27684 27685 Output operands must start at the top of the reg-stack: output 27686 operands may not "skip" a register. 27687 27688 5. Some 'asm' statements may need extra stack space for internal 27689 calculations. This can be guaranteed by clobbering stack registers 27690 unrelated to the inputs and outputs. 27691 27692 Here are a couple of reasonable 'asm's to want to write. This 'asm' 27693takes one input, which is internally popped, and produces two outputs. 27694 27695 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 27696 27697This 'asm' takes two inputs, which are popped by the 'fyl2xp1' opcode, 27698and replaces them with one output. The 'st(1)' clobber is necessary for 27699the compiler to know that 'fyl2xp1' pops both inputs. 27700 27701 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 27702 27703 27704File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 27705 277066.42 Constraints for 'asm' Operands 27707=================================== 27708 27709Here are specific details on what constraint letters you can use with 27710'asm' operands. Constraints can say whether an operand may be in a 27711register, and which kinds of register; whether the operand can be a 27712memory reference, and which kinds of address; whether the operand may be 27713an immediate constant, and which possible values it may have. 27714Constraints can also require two operands to match. Side-effects aren't 27715allowed in operands of inline 'asm', unless '<' or '>' constraints are 27716used, because there is no guarantee that the side-effects will happen 27717exactly once in an instruction that can update the addressing register. 27718 27719* Menu: 27720 27721* Simple Constraints:: Basic use of constraints. 27722* Multi-Alternative:: When an insn has two alternative constraint-patterns. 27723* Modifiers:: More precise control over effects of constraints. 27724* Machine Constraints:: Special constraints for some particular machines. 27725 27726 27727File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 27728 277296.42.1 Simple Constraints 27730------------------------- 27731 27732The simplest kind of constraint is a string full of letters, each of 27733which describes one kind of operand that is permitted. Here are the 27734letters that are allowed: 27735 27736whitespace 27737 Whitespace characters are ignored and can be inserted at any 27738 position except the first. This enables each alternative for 27739 different operands to be visually aligned in the machine 27740 description even if they have different number of constraints and 27741 modifiers. 27742 27743'm' 27744 A memory operand is allowed, with any kind of address that the 27745 machine supports in general. Note that the letter used for the 27746 general memory constraint can be re-defined by a back end using the 27747 'TARGET_MEM_CONSTRAINT' macro. 27748 27749'o' 27750 A memory operand is allowed, but only if the address is 27751 "offsettable". This means that adding a small integer (actually, 27752 the width in bytes of the operand, as determined by its machine 27753 mode) may be added to the address and the result is also a valid 27754 memory address. 27755 27756 For example, an address which is constant is offsettable; so is an 27757 address that is the sum of a register and a constant (as long as a 27758 slightly larger constant is also within the range of 27759 address-offsets supported by the machine); but an autoincrement or 27760 autodecrement address is not offsettable. More complicated 27761 indirect/indexed addresses may or may not be offsettable depending 27762 on the other addressing modes that the machine supports. 27763 27764 Note that in an output operand which can be matched by another 27765 operand, the constraint letter 'o' is valid only when accompanied 27766 by both '<' (if the target machine has predecrement addressing) and 27767 '>' (if the target machine has preincrement addressing). 27768 27769'V' 27770 A memory operand that is not offsettable. In other words, anything 27771 that would fit the 'm' constraint but not the 'o' constraint. 27772 27773'<' 27774 A memory operand with autodecrement addressing (either predecrement 27775 or postdecrement) is allowed. In inline 'asm' this constraint is 27776 only allowed if the operand is used exactly once in an instruction 27777 that can handle the side-effects. Not using an operand with '<' in 27778 constraint string in the inline 'asm' pattern at all or using it in 27779 multiple instructions isn't valid, because the side-effects 27780 wouldn't be performed or would be performed more than once. 27781 Furthermore, on some targets the operand with '<' in constraint 27782 string must be accompanied by special instruction suffixes like 27783 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 27784 27785'>' 27786 A memory operand with autoincrement addressing (either preincrement 27787 or postincrement) is allowed. In inline 'asm' the same 27788 restrictions as for '<' apply. 27789 27790'r' 27791 A register operand is allowed provided that it is in a general 27792 register. 27793 27794'i' 27795 An immediate integer operand (one with constant value) is allowed. 27796 This includes symbolic constants whose values will be known only at 27797 assembly time or later. 27798 27799'n' 27800 An immediate integer operand with a known numeric value is allowed. 27801 Many systems cannot support assembly-time constants for operands 27802 less than a word wide. Constraints for these operands should use 27803 'n' rather than 'i'. 27804 27805'I', 'J', 'K', ... 'P' 27806 Other letters in the range 'I' through 'P' may be defined in a 27807 machine-dependent fashion to permit immediate integer operands with 27808 explicit integer values in specified ranges. For example, on the 27809 68000, 'I' is defined to stand for the range of values 1 to 8. 27810 This is the range permitted as a shift count in the shift 27811 instructions. 27812 27813'E' 27814 An immediate floating operand (expression code 'const_double') is 27815 allowed, but only if the target floating point format is the same 27816 as that of the host machine (on which the compiler is running). 27817 27818'F' 27819 An immediate floating operand (expression code 'const_double' or 27820 'const_vector') is allowed. 27821 27822'G', 'H' 27823 'G' and 'H' may be defined in a machine-dependent fashion to permit 27824 immediate floating operands in particular ranges of values. 27825 27826's' 27827 An immediate integer operand whose value is not an explicit integer 27828 is allowed. 27829 27830 This might appear strange; if an insn allows a constant operand 27831 with a value not known at compile time, it certainly must allow any 27832 known value. So why use 's' instead of 'i'? Sometimes it allows 27833 better code to be generated. 27834 27835 For example, on the 68000 in a fullword instruction it is possible 27836 to use an immediate operand; but if the immediate value is between 27837 -128 and 127, better code results from loading the value into a 27838 register and using the register. This is because the load into the 27839 register can be done with a 'moveq' instruction. We arrange for 27840 this to happen by defining the letter 'K' to mean "any integer 27841 outside the range -128 to 127", and then specifying 'Ks' in the 27842 operand constraints. 27843 27844'g' 27845 Any register, memory or immediate integer operand is allowed, 27846 except for registers that are not general registers. 27847 27848'X' 27849 Any operand whatsoever is allowed. 27850 27851'0', '1', '2', ... '9' 27852 An operand that matches the specified operand number is allowed. 27853 If a digit is used together with letters within the same 27854 alternative, the digit should come last. 27855 27856 This number is allowed to be more than a single digit. If multiple 27857 digits are encountered consecutively, they are interpreted as a 27858 single decimal integer. There is scant chance for ambiguity, since 27859 to-date it has never been desirable that '10' be interpreted as 27860 matching either operand 1 _or_ operand 0. Should this be desired, 27861 one can use multiple alternatives instead. 27862 27863 This is called a "matching constraint" and what it really means is 27864 that the assembler has only a single operand that fills two roles 27865 which 'asm' distinguishes. For example, an add instruction uses 27866 two input operands and an output operand, but on most CISC machines 27867 an add instruction really has only two operands, one of them an 27868 input-output operand: 27869 27870 addl #35,r12 27871 27872 Matching constraints are used in these circumstances. More 27873 precisely, the two operands that match must include one input-only 27874 operand and one output-only operand. Moreover, the digit must be a 27875 smaller number than the number of the operand that uses it in the 27876 constraint. 27877 27878'p' 27879 An operand that is a valid memory address is allowed. This is for 27880 "load address" and "push address" instructions. 27881 27882 'p' in the constraint must be accompanied by 'address_operand' as 27883 the predicate in the 'match_operand'. This predicate interprets 27884 the mode specified in the 'match_operand' as the mode of the memory 27885 reference for which the address would be valid. 27886 27887OTHER-LETTERS 27888 Other letters can be defined in machine-dependent fashion to stand 27889 for particular classes of registers or other arbitrary operand 27890 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 27891 for data, address and floating point registers. 27892 27893 27894File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 27895 278966.42.2 Multiple Alternative Constraints 27897--------------------------------------- 27898 27899Sometimes a single instruction has multiple alternative sets of possible 27900operands. For example, on the 68000, a logical-or instruction can 27901combine register or an immediate value into memory, or it can combine 27902any kind of operand into a register; but it cannot combine one memory 27903location into another. 27904 27905 These constraints are represented as multiple alternatives. An 27906alternative can be described by a series of letters for each operand. 27907The overall constraint for an operand is made from the letters for this 27908operand from the first alternative, a comma, the letters for this 27909operand from the second alternative, a comma, and so on until the last 27910alternative. 27911 27912 If all the operands fit any one alternative, the instruction is valid. 27913Otherwise, for each alternative, the compiler counts how many 27914instructions must be added to copy the operands so that that alternative 27915applies. The alternative requiring the least copying is chosen. If two 27916alternatives need the same amount of copying, the one that comes first 27917is chosen. These choices can be altered with the '?' and '!' 27918characters: 27919 27920'?' 27921 Disparage slightly the alternative that the '?' appears in, as a 27922 choice when no alternative applies exactly. The compiler regards 27923 this alternative as one unit more costly for each '?' that appears 27924 in it. 27925 27926'!' 27927 Disparage severely the alternative that the '!' appears in. This 27928 alternative can still be used if it fits without reloading, but if 27929 reloading is needed, some other alternative will be used. 27930 27931 27932File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 27933 279346.42.3 Constraint Modifier Characters 27935------------------------------------- 27936 27937Here are constraint modifier characters. 27938 27939'=' 27940 Means that this operand is write-only for this instruction: the 27941 previous value is discarded and replaced by output data. 27942 27943'+' 27944 Means that this operand is both read and written by the 27945 instruction. 27946 27947 When the compiler fixes up the operands to satisfy the constraints, 27948 it needs to know which operands are inputs to the instruction and 27949 which are outputs from it. '=' identifies an output; '+' 27950 identifies an operand that is both input and output; all other 27951 operands are assumed to be input only. 27952 27953 If you specify '=' or '+' in a constraint, you put it in the first 27954 character of the constraint string. 27955 27956'&' 27957 Means (in a particular alternative) that this operand is an 27958 "earlyclobber" operand, which is modified before the instruction is 27959 finished using the input operands. Therefore, this operand may not 27960 lie in a register that is used as an input operand or as part of 27961 any memory address. 27962 27963 '&' applies only to the alternative in which it is written. In 27964 constraints with multiple alternatives, sometimes one alternative 27965 requires '&' while others do not. See, for example, the 'movdf' 27966 insn of the 68000. 27967 27968 An input operand can be tied to an earlyclobber operand if its only 27969 use as an input occurs before the early result is written. Adding 27970 alternatives of this form often allows GCC to produce better code 27971 when only some of the inputs can be affected by the earlyclobber. 27972 See, for example, the 'mulsi3' insn of the ARM. 27973 27974 '&' does not obviate the need to write '='. 27975 27976'%' 27977 Declares the instruction to be commutative for this operand and the 27978 following operand. This means that the compiler may interchange 27979 the two operands if that is the cheapest way to make all operands 27980 fit the constraints. GCC can only handle one commutative pair in 27981 an asm; if you use more, the compiler may fail. Note that you need 27982 not use the modifier if the two alternatives are strictly 27983 identical; this would only waste time in the reload pass. The 27984 modifier is not operational after register allocation, so the 27985 result of 'define_peephole2' and 'define_split's performed after 27986 reload cannot rely on '%' to make the intended insn match. 27987 27988'#' 27989 Says that all following characters, up to the next comma, are to be 27990 ignored as a constraint. They are significant only for choosing 27991 register preferences. 27992 27993'*' 27994 Says that the following character should be ignored when choosing 27995 register preferences. '*' has no effect on the meaning of the 27996 constraint as a constraint, and no effect on reloading. For LRA 27997 '*' additionally disparages slightly the alternative if the 27998 following character matches the operand. 27999 28000 28001File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 28002 280036.42.4 Constraints for Particular Machines 28004------------------------------------------ 28005 28006Whenever possible, you should use the general-purpose constraint letters 28007in 'asm' arguments, since they will convey meaning more readily to 28008people reading your code. Failing that, use the constraint letters that 28009usually have very similar meanings across architectures. The most 28010commonly used constraints are 'm' and 'r' (for memory and 28011general-purpose registers respectively; *note Simple Constraints::), and 28012'I', usually the letter indicating the most common immediate-constant 28013format. 28014 28015 Each architecture defines additional constraints. These constraints 28016are used by the compiler itself for instruction generation, as well as 28017for 'asm' statements; therefore, some of the constraints are not 28018particularly useful for 'asm'. Here is a summary of some of the 28019machine-dependent constraints available on some particular machines; it 28020includes both constraints that are useful for 'asm' and constraints that 28021aren't. The compiler source file mentioned in the table heading for 28022each architecture is the definitive reference for the meanings of that 28023architecture's constraints. 28024 28025_AArch64 family--'config/aarch64/constraints.md'_ 28026 'k' 28027 The stack pointer register ('SP') 28028 28029 'w' 28030 Floating point or SIMD vector register 28031 28032 'I' 28033 Integer constant that is valid as an immediate operand in an 28034 'ADD' instruction 28035 28036 'J' 28037 Integer constant that is valid as an immediate operand in a 28038 'SUB' instruction (once negated) 28039 28040 'K' 28041 Integer constant that can be used with a 32-bit logical 28042 instruction 28043 28044 'L' 28045 Integer constant that can be used with a 64-bit logical 28046 instruction 28047 28048 'M' 28049 Integer constant that is valid as an immediate operand in a 28050 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 28051 to one of several different machine instructions depending on 28052 the value 28053 28054 'N' 28055 Integer constant that is valid as an immediate operand in a 28056 64-bit 'MOV' pseudo instruction 28057 28058 'S' 28059 An absolute symbolic address or a label reference 28060 28061 'Y' 28062 Floating point constant zero 28063 28064 'Z' 28065 Integer constant zero 28066 28067 'Ush' 28068 The high part (bits 12 and upwards) of the pc-relative address 28069 of a symbol within 4GB of the instruction 28070 28071 'Q' 28072 A memory address which uses a single base register with no 28073 offset 28074 28075 'Ump' 28076 A memory address suitable for a load/store pair instruction in 28077 SI, DI, SF and DF modes 28078 28079_ARC --'config/arc/constraints.md'_ 28080 'q' 28081 Registers usable in ARCompact 16-bit instructions: 'r0'-'r3', 28082 'r12'-'r15'. This constraint can only match when the '-mq' 28083 option is in effect. 28084 28085 'e' 28086 Registers usable as base-regs of memory addresses in ARCompact 28087 16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'. 28088 This constraint can only match when the '-mq' option is in 28089 effect. 28090 'D' 28091 ARC FPX (dpfp) 64-bit registers. 'D0', 'D1'. 28092 28093 'I' 28094 A signed 12-bit integer constant. 28095 28096 'Cal' 28097 constant for arithmetic/logical operations. This might be any 28098 constant that can be put into a long immediate by the assmbler 28099 or linker without involving a PIC relocation. 28100 28101 'K' 28102 A 3-bit unsigned integer constant. 28103 28104 'L' 28105 A 6-bit unsigned integer constant. 28106 28107 'CnL' 28108 One's complement of a 6-bit unsigned integer constant. 28109 28110 'CmL' 28111 Two's complement of a 6-bit unsigned integer constant. 28112 28113 'M' 28114 A 5-bit unsigned integer constant. 28115 28116 'O' 28117 A 7-bit unsigned integer constant. 28118 28119 'P' 28120 A 8-bit unsigned integer constant. 28121 28122 'H' 28123 Any const_double value. 28124 28125_ARM family--'config/arm/constraints.md'_ 28126 'w' 28127 VFP floating-point register 28128 28129 'G' 28130 The floating-point constant 0.0 28131 28132 'I' 28133 Integer that is valid as an immediate operand in a data 28134 processing instruction. That is, an integer in the range 0 to 28135 255 rotated by a multiple of 2 28136 28137 'J' 28138 Integer in the range -4095 to 4095 28139 28140 'K' 28141 Integer that satisfies constraint 'I' when inverted (ones 28142 complement) 28143 28144 'L' 28145 Integer that satisfies constraint 'I' when negated (twos 28146 complement) 28147 28148 'M' 28149 Integer in the range 0 to 32 28150 28151 'Q' 28152 A memory reference where the exact address is in a single 28153 register (''m'' is preferable for 'asm' statements) 28154 28155 'R' 28156 An item in the constant pool 28157 28158 'S' 28159 A symbol in the text segment of the current file 28160 28161 'Uv' 28162 A memory reference suitable for VFP load/store insns 28163 (reg+constant offset) 28164 28165 'Uy' 28166 A memory reference suitable for iWMMXt load/store 28167 instructions. 28168 28169 'Uq' 28170 A memory reference suitable for the ARMv4 ldrsb instruction. 28171 28172_AVR family--'config/avr/constraints.md'_ 28173 'l' 28174 Registers from r0 to r15 28175 28176 'a' 28177 Registers from r16 to r23 28178 28179 'd' 28180 Registers from r16 to r31 28181 28182 'w' 28183 Registers from r24 to r31. These registers can be used in 28184 'adiw' command 28185 28186 'e' 28187 Pointer register (r26-r31) 28188 28189 'b' 28190 Base pointer register (r28-r31) 28191 28192 'q' 28193 Stack pointer register (SPH:SPL) 28194 28195 't' 28196 Temporary register r0 28197 28198 'x' 28199 Register pair X (r27:r26) 28200 28201 'y' 28202 Register pair Y (r29:r28) 28203 28204 'z' 28205 Register pair Z (r31:r30) 28206 28207 'I' 28208 Constant greater than -1, less than 64 28209 28210 'J' 28211 Constant greater than -64, less than 1 28212 28213 'K' 28214 Constant integer 2 28215 28216 'L' 28217 Constant integer 0 28218 28219 'M' 28220 Constant that fits in 8 bits 28221 28222 'N' 28223 Constant integer -1 28224 28225 'O' 28226 Constant integer 8, 16, or 24 28227 28228 'P' 28229 Constant integer 1 28230 28231 'G' 28232 A floating point constant 0.0 28233 28234 'Q' 28235 A memory address based on Y or Z pointer with displacement. 28236 28237_Epiphany--'config/epiphany/constraints.md'_ 28238 'U16' 28239 An unsigned 16-bit constant. 28240 28241 'K' 28242 An unsigned 5-bit constant. 28243 28244 'L' 28245 A signed 11-bit constant. 28246 28247 'Cm1' 28248 A signed 11-bit constant added to -1. Can only match when the 28249 '-m1reg-REG' option is active. 28250 28251 'Cl1' 28252 Left-shift of -1, i.e., a bit mask with a block of leading 28253 ones, the rest being a block of trailing zeroes. Can only 28254 match when the '-m1reg-REG' option is active. 28255 28256 'Cr1' 28257 Right-shift of -1, i.e., a bit mask with a trailing block of 28258 ones, the rest being zeroes. Or to put it another way, one 28259 less than a power of two. Can only match when the 28260 '-m1reg-REG' option is active. 28261 28262 'Cal' 28263 Constant for arithmetic/logical operations. This is like 'i', 28264 except that for position independent code, no symbols / 28265 expressions needing relocations are allowed. 28266 28267 'Csy' 28268 Symbolic constant for call/jump instruction. 28269 28270 'Rcs' 28271 The register class usable in short insns. This is a register 28272 class constraint, and can thus drive register allocation. 28273 This constraint won't match unless '-mprefer-short-insn-regs' 28274 is in effect. 28275 28276 'Rsc' 28277 The the register class of registers that can be used to hold a 28278 sibcall call address. I.e., a caller-saved register. 28279 28280 'Rct' 28281 Core control register class. 28282 28283 'Rgs' 28284 The register group usable in short insns. This constraint 28285 does not use a register class, so that it only passively 28286 matches suitable registers, and doesn't drive register 28287 allocation. 28288 28289 'Rra' 28290 Matches the return address if it can be replaced with the link 28291 register. 28292 28293 'Rcc' 28294 Matches the integer condition code register. 28295 28296 'Sra' 28297 Matches the return address if it is in a stack slot. 28298 28299 'Cfm' 28300 Matches control register values to switch fp mode, which are 28301 encapsulated in 'UNSPEC_FP_MODE'. 28302 28303_CR16 Architecture--'config/cr16/cr16.h'_ 28304 28305 'b' 28306 Registers from r0 to r14 (registers without stack pointer) 28307 28308 't' 28309 Register from r0 to r11 (all 16-bit registers) 28310 28311 'p' 28312 Register from r12 to r15 (all 32-bit registers) 28313 28314 'I' 28315 Signed constant that fits in 4 bits 28316 28317 'J' 28318 Signed constant that fits in 5 bits 28319 28320 'K' 28321 Signed constant that fits in 6 bits 28322 28323 'L' 28324 Unsigned constant that fits in 4 bits 28325 28326 'M' 28327 Signed constant that fits in 32 bits 28328 28329 'N' 28330 Check for 64 bits wide constants for add/sub instructions 28331 28332 'G' 28333 Floating point constant that is legal for store immediate 28334 28335_Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 28336 'a' 28337 General register 1 28338 28339 'f' 28340 Floating point register 28341 28342 'q' 28343 Shift amount register 28344 28345 'x' 28346 Floating point register (deprecated) 28347 28348 'y' 28349 Upper floating point register (32-bit), floating point 28350 register (64-bit) 28351 28352 'Z' 28353 Any register 28354 28355 'I' 28356 Signed 11-bit integer constant 28357 28358 'J' 28359 Signed 14-bit integer constant 28360 28361 'K' 28362 Integer constant that can be deposited with a 'zdepi' 28363 instruction 28364 28365 'L' 28366 Signed 5-bit integer constant 28367 28368 'M' 28369 Integer constant 0 28370 28371 'N' 28372 Integer constant that can be loaded with a 'ldil' instruction 28373 28374 'O' 28375 Integer constant whose value plus one is a power of 2 28376 28377 'P' 28378 Integer constant that can be used for 'and' operations in 28379 'depi' and 'extru' instructions 28380 28381 'S' 28382 Integer constant 31 28383 28384 'U' 28385 Integer constant 63 28386 28387 'G' 28388 Floating-point constant 0.0 28389 28390 'A' 28391 A 'lo_sum' data-linkage-table memory operand 28392 28393 'Q' 28394 A memory operand that can be used as the destination operand 28395 of an integer store instruction 28396 28397 'R' 28398 A scaled or unscaled indexed memory operand 28399 28400 'T' 28401 A memory operand for floating-point loads and stores 28402 28403 'W' 28404 A register indirect memory operand 28405 28406_picoChip family--'picochip.h'_ 28407 'k' 28408 Stack register. 28409 28410 'f' 28411 Pointer register. A register which can be used to access 28412 memory without supplying an offset. Any other register can be 28413 used to access memory, but will need a constant offset. In 28414 the case of the offset being zero, it is more efficient to use 28415 a pointer register, since this reduces code size. 28416 28417 't' 28418 A twin register. A register which may be paired with an 28419 adjacent register to create a 32-bit register. 28420 28421 'a' 28422 Any absolute memory address (e.g., symbolic constant, symbolic 28423 constant + offset). 28424 28425 'I' 28426 4-bit signed integer. 28427 28428 'J' 28429 4-bit unsigned integer. 28430 28431 'K' 28432 8-bit signed integer. 28433 28434 'M' 28435 Any constant whose absolute value is no greater than 4-bits. 28436 28437 'N' 28438 10-bit signed integer 28439 28440 'O' 28441 16-bit signed integer. 28442 28443_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 28444 'b' 28445 Address base register 28446 28447 'd' 28448 Floating point register (containing 64-bit value) 28449 28450 'f' 28451 Floating point register (containing 32-bit value) 28452 28453 'v' 28454 Altivec vector register 28455 28456 'wa' 28457 Any VSX register if the -mvsx option was used or NO_REGS. 28458 28459 'wd' 28460 VSX vector register to hold vector double data or NO_REGS. 28461 28462 'wf' 28463 VSX vector register to hold vector float data or NO_REGS. 28464 28465 'wg' 28466 If '-mmfpgpr' was used, a floating point register or NO_REGS. 28467 28468 'wh' 28469 Floating point register if direct moves are available, or 28470 NO_REGS. 28471 28472 'wi' 28473 FP or VSX register to hold 64-bit integers for VSX insns or 28474 NO_REGS. 28475 28476 'wj' 28477 FP or VSX register to hold 64-bit integers for direct moves or 28478 NO_REGS. 28479 28480 'wk' 28481 FP or VSX register to hold 64-bit doubles for direct moves or 28482 NO_REGS. 28483 28484 'wl' 28485 Floating point register if the LFIWAX instruction is enabled 28486 or NO_REGS. 28487 28488 'wm' 28489 VSX register if direct move instructions are enabled, or 28490 NO_REGS. 28491 28492 'wn' 28493 No register (NO_REGS). 28494 28495 'wr' 28496 General purpose register if 64-bit instructions are enabled or 28497 NO_REGS. 28498 28499 'ws' 28500 VSX vector register to hold scalar double values or NO_REGS. 28501 28502 'wt' 28503 VSX vector register to hold 128 bit integer or NO_REGS. 28504 28505 'wu' 28506 Altivec register to use for float/32-bit int loads/stores or 28507 NO_REGS. 28508 28509 'wv' 28510 Altivec register to use for double loads/stores or NO_REGS. 28511 28512 'ww' 28513 FP or VSX register to perform float operations under '-mvsx' 28514 or NO_REGS. 28515 28516 'wx' 28517 Floating point register if the STFIWX instruction is enabled 28518 or NO_REGS. 28519 28520 'wy' 28521 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 28522 28523 'wz' 28524 Floating point register if the LFIWZX instruction is enabled 28525 or NO_REGS. 28526 28527 'wD' 28528 Int constant that is the element number of the 64-bit scalar 28529 in a vector. 28530 28531 'wQ' 28532 A memory address that will work with the 'lq' and 'stq' 28533 instructions. 28534 28535 'h' 28536 'MQ', 'CTR', or 'LINK' register 28537 28538 'q' 28539 'MQ' register 28540 28541 'c' 28542 'CTR' register 28543 28544 'l' 28545 'LINK' register 28546 28547 'x' 28548 'CR' register (condition register) number 0 28549 28550 'y' 28551 'CR' register (condition register) 28552 28553 'z' 28554 'XER[CA]' carry bit (part of the XER register) 28555 28556 'I' 28557 Signed 16-bit constant 28558 28559 'J' 28560 Unsigned 16-bit constant shifted left 16 bits (use 'L' instead 28561 for 'SImode' constants) 28562 28563 'K' 28564 Unsigned 16-bit constant 28565 28566 'L' 28567 Signed 16-bit constant shifted left 16 bits 28568 28569 'M' 28570 Constant larger than 31 28571 28572 'N' 28573 Exact power of 2 28574 28575 'O' 28576 Zero 28577 28578 'P' 28579 Constant whose negation is a signed 16-bit constant 28580 28581 'G' 28582 Floating point constant that can be loaded into a register 28583 with one instruction per word 28584 28585 'H' 28586 Integer/Floating point constant that can be loaded into a 28587 register using three instructions 28588 28589 'm' 28590 Memory operand. Normally, 'm' does not allow addresses that 28591 update the base register. If '<' or '>' constraint is also 28592 used, they are allowed and therefore on PowerPC targets in 28593 that case it is only safe to use 'm<>' in an 'asm' statement 28594 if that 'asm' statement accesses the operand exactly once. 28595 The 'asm' statement must also use '%U<OPNO>' as a placeholder 28596 for the "update" flag in the corresponding load or store 28597 instruction. For example: 28598 28599 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 28600 28601 is correct but: 28602 28603 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 28604 28605 is not. 28606 28607 'es' 28608 A "stable" memory operand; that is, one which does not include 28609 any automodification of the base register. This used to be 28610 useful when 'm' allowed automodification of the base register, 28611 but as those are now only allowed when '<' or '>' is used, 28612 'es' is basically the same as 'm' without '<' and '>'. 28613 28614 'Q' 28615 Memory operand that is an offset from a register (it is 28616 usually better to use 'm' or 'es' in 'asm' statements) 28617 28618 'Z' 28619 Memory operand that is an indexed or indirect from a register 28620 (it is usually better to use 'm' or 'es' in 'asm' statements) 28621 28622 'R' 28623 AIX TOC entry 28624 28625 'a' 28626 Address operand that is an indexed or indirect from a register 28627 ('p' is preferable for 'asm' statements) 28628 28629 'S' 28630 Constant suitable as a 64-bit mask operand 28631 28632 'T' 28633 Constant suitable as a 32-bit mask operand 28634 28635 'U' 28636 System V Release 4 small data area reference 28637 28638 't' 28639 AND masks that can be performed by two rldic{l, r} 28640 instructions 28641 28642 'W' 28643 Vector constant that does not require memory 28644 28645 'j' 28646 Vector constant that is all zeros. 28647 28648_Intel 386--'config/i386/constraints.md'_ 28649 'R' 28650 Legacy register--the eight integer registers available on all 28651 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 28652 28653 'q' 28654 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 28655 'c', and 'd'; in 64-bit mode, any integer register. 28656 28657 'Q' 28658 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 28659 28660 'a' 28661 The 'a' register. 28662 28663 'b' 28664 The 'b' register. 28665 28666 'c' 28667 The 'c' register. 28668 28669 'd' 28670 The 'd' register. 28671 28672 'S' 28673 The 'si' register. 28674 28675 'D' 28676 The 'di' register. 28677 28678 'A' 28679 The 'a' and 'd' registers. This class is used for 28680 instructions that return double word results in the 'ax:dx' 28681 register pair. Single word values will be allocated either in 28682 'ax' or 'dx'. For example on i386 the following implements 28683 'rdtsc': 28684 28685 unsigned long long rdtsc (void) 28686 { 28687 unsigned long long tick; 28688 __asm__ __volatile__("rdtsc":"=A"(tick)); 28689 return tick; 28690 } 28691 28692 This is not correct on x86_64 as it would allocate tick in 28693 either 'ax' or 'dx'. You have to use the following variant 28694 instead: 28695 28696 unsigned long long rdtsc (void) 28697 { 28698 unsigned int tickl, tickh; 28699 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 28700 return ((unsigned long long)tickh << 32)|tickl; 28701 } 28702 28703 'f' 28704 Any 80387 floating-point (stack) register. 28705 28706 't' 28707 Top of 80387 floating-point stack ('%st(0)'). 28708 28709 'u' 28710 Second from top of 80387 floating-point stack ('%st(1)'). 28711 28712 'y' 28713 Any MMX register. 28714 28715 'x' 28716 Any SSE register. 28717 28718 'Yz' 28719 First SSE register ('%xmm0'). 28720 28721 'I' 28722 Integer constant in the range 0 ... 31, for 32-bit shifts. 28723 28724 'J' 28725 Integer constant in the range 0 ... 63, for 64-bit shifts. 28726 28727 'K' 28728 Signed 8-bit integer constant. 28729 28730 'L' 28731 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 28732 28733 'M' 28734 0, 1, 2, or 3 (shifts for the 'lea' instruction). 28735 28736 'N' 28737 Unsigned 8-bit integer constant (for 'in' and 'out' 28738 instructions). 28739 28740 'G' 28741 Standard 80387 floating point constant. 28742 28743 'C' 28744 Standard SSE floating point constant. 28745 28746 'e' 28747 32-bit signed integer constant, or a symbolic reference known 28748 to fit that range (for immediate operands in sign-extending 28749 x86-64 instructions). 28750 28751 'Z' 28752 32-bit unsigned integer constant, or a symbolic reference 28753 known to fit that range (for immediate operands in 28754 zero-extending x86-64 instructions). 28755 28756_Intel IA-64--'config/ia64/ia64.h'_ 28757 'a' 28758 General register 'r0' to 'r3' for 'addl' instruction 28759 28760 'b' 28761 Branch register 28762 28763 'c' 28764 Predicate register ('c' as in "conditional") 28765 28766 'd' 28767 Application register residing in M-unit 28768 28769 'e' 28770 Application register residing in I-unit 28771 28772 'f' 28773 Floating-point register 28774 28775 'm' 28776 Memory operand. If used together with '<' or '>', the operand 28777 can have postincrement and postdecrement which require 28778 printing with '%Pn' on IA-64. 28779 28780 'G' 28781 Floating-point constant 0.0 or 1.0 28782 28783 'I' 28784 14-bit signed integer constant 28785 28786 'J' 28787 22-bit signed integer constant 28788 28789 'K' 28790 8-bit signed integer constant for logical instructions 28791 28792 'L' 28793 8-bit adjusted signed integer constant for compare pseudo-ops 28794 28795 'M' 28796 6-bit unsigned integer constant for shift counts 28797 28798 'N' 28799 9-bit signed integer constant for load and store 28800 postincrements 28801 28802 'O' 28803 The constant zero 28804 28805 'P' 28806 0 or -1 for 'dep' instruction 28807 28808 'Q' 28809 Non-volatile memory for floating-point loads and stores 28810 28811 'R' 28812 Integer constant in the range 1 to 4 for 'shladd' instruction 28813 28814 'S' 28815 Memory operand except postincrement and postdecrement. This 28816 is now roughly the same as 'm' when not used together with '<' 28817 or '>'. 28818 28819_FRV--'config/frv/frv.h'_ 28820 'a' 28821 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 28822 28823 'b' 28824 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 28825 28826 'c' 28827 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 28828 to 'icc3'). 28829 28830 'd' 28831 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 28832 28833 'e' 28834 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 28835 registers are excluded not in the class but through the use of 28836 a machine mode larger than 4 bytes. 28837 28838 'f' 28839 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 28840 28841 'h' 28842 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 28843 registers are excluded not in the class but through the use of 28844 a machine mode larger than 4 bytes. 28845 28846 'l' 28847 Register in the class 'LR_REG' (the 'lr' register). 28848 28849 'q' 28850 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 28851 numbers not divisible by 4 are excluded not in the class but 28852 through the use of a machine mode larger than 8 bytes. 28853 28854 't' 28855 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 28856 28857 'u' 28858 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 28859 28860 'v' 28861 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 28862 28863 'w' 28864 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 28865 28866 'x' 28867 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 28868 Register numbers not divisible by 4 are excluded not in the 28869 class but through the use of a machine mode larger than 8 28870 bytes. 28871 28872 'z' 28873 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 28874 28875 'A' 28876 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 28877 28878 'B' 28879 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 28880 28881 'C' 28882 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 28883 28884 'G' 28885 Floating point constant zero 28886 28887 'I' 28888 6-bit signed integer constant 28889 28890 'J' 28891 10-bit signed integer constant 28892 28893 'L' 28894 16-bit signed integer constant 28895 28896 'M' 28897 16-bit unsigned integer constant 28898 28899 'N' 28900 12-bit signed integer constant that is negative--i.e. in the 28901 range of -2048 to -1 28902 28903 'O' 28904 Constant zero 28905 28906 'P' 28907 12-bit signed integer constant that is greater than zero--i.e. 28908 in the range of 1 to 2047. 28909 28910_Blackfin family--'config/bfin/constraints.md'_ 28911 'a' 28912 P register 28913 28914 'd' 28915 D register 28916 28917 'z' 28918 A call clobbered P register. 28919 28920 'qN' 28921 A single register. If N is in the range 0 to 7, the 28922 corresponding D register. If it is 'A', then the register P0. 28923 28924 'D' 28925 Even-numbered D register 28926 28927 'W' 28928 Odd-numbered D register 28929 28930 'e' 28931 Accumulator register. 28932 28933 'A' 28934 Even-numbered accumulator register. 28935 28936 'B' 28937 Odd-numbered accumulator register. 28938 28939 'b' 28940 I register 28941 28942 'v' 28943 B register 28944 28945 'f' 28946 M register 28947 28948 'c' 28949 Registers used for circular buffering, i.e. I, B, or L 28950 registers. 28951 28952 'C' 28953 The CC register. 28954 28955 't' 28956 LT0 or LT1. 28957 28958 'k' 28959 LC0 or LC1. 28960 28961 'u' 28962 LB0 or LB1. 28963 28964 'x' 28965 Any D, P, B, M, I or L register. 28966 28967 'y' 28968 Additional registers typically used only in prologues and 28969 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 28970 USP. 28971 28972 'w' 28973 Any register except accumulators or CC. 28974 28975 'Ksh' 28976 Signed 16 bit integer (in the range -32768 to 32767) 28977 28978 'Kuh' 28979 Unsigned 16 bit integer (in the range 0 to 65535) 28980 28981 'Ks7' 28982 Signed 7 bit integer (in the range -64 to 63) 28983 28984 'Ku7' 28985 Unsigned 7 bit integer (in the range 0 to 127) 28986 28987 'Ku5' 28988 Unsigned 5 bit integer (in the range 0 to 31) 28989 28990 'Ks4' 28991 Signed 4 bit integer (in the range -8 to 7) 28992 28993 'Ks3' 28994 Signed 3 bit integer (in the range -3 to 4) 28995 28996 'Ku3' 28997 Unsigned 3 bit integer (in the range 0 to 7) 28998 28999 'PN' 29000 Constant N, where N is a single-digit constant in the range 0 29001 to 4. 29002 29003 'PA' 29004 An integer equal to one of the MACFLAG_XXX constants that is 29005 suitable for use with either accumulator. 29006 29007 'PB' 29008 An integer equal to one of the MACFLAG_XXX constants that is 29009 suitable for use only with accumulator A1. 29010 29011 'M1' 29012 Constant 255. 29013 29014 'M2' 29015 Constant 65535. 29016 29017 'J' 29018 An integer constant with exactly a single bit set. 29019 29020 'L' 29021 An integer constant with all bits set except exactly one. 29022 29023 'H' 29024 29025 'Q' 29026 Any SYMBOL_REF. 29027 29028_M32C--'config/m32c/m32c.c'_ 29029 'Rsp' 29030 'Rfb' 29031 'Rsb' 29032 '$sp', '$fb', '$sb'. 29033 29034 'Rcr' 29035 Any control register, when they're 16 bits wide (nothing if 29036 control registers are 24 bits wide) 29037 29038 'Rcl' 29039 Any control register, when they're 24 bits wide. 29040 29041 'R0w' 29042 'R1w' 29043 'R2w' 29044 'R3w' 29045 $r0, $r1, $r2, $r3. 29046 29047 'R02' 29048 $r0 or $r2, or $r2r0 for 32 bit values. 29049 29050 'R13' 29051 $r1 or $r3, or $r3r1 for 32 bit values. 29052 29053 'Rdi' 29054 A register that can hold a 64 bit value. 29055 29056 'Rhl' 29057 $r0 or $r1 (registers with addressable high/low bytes) 29058 29059 'R23' 29060 $r2 or $r3 29061 29062 'Raa' 29063 Address registers 29064 29065 'Raw' 29066 Address registers when they're 16 bits wide. 29067 29068 'Ral' 29069 Address registers when they're 24 bits wide. 29070 29071 'Rqi' 29072 Registers that can hold QI values. 29073 29074 'Rad' 29075 Registers that can be used with displacements ($a0, $a1, $sb). 29076 29077 'Rsi' 29078 Registers that can hold 32 bit values. 29079 29080 'Rhi' 29081 Registers that can hold 16 bit values. 29082 29083 'Rhc' 29084 Registers chat can hold 16 bit values, including all control 29085 registers. 29086 29087 'Rra' 29088 $r0 through R1, plus $a0 and $a1. 29089 29090 'Rfl' 29091 The flags register. 29092 29093 'Rmm' 29094 The memory-based pseudo-registers $mem0 through $mem15. 29095 29096 'Rpi' 29097 Registers that can hold pointers (16 bit registers for r8c, 29098 m16c; 24 bit registers for m32cm, m32c). 29099 29100 'Rpa' 29101 Matches multiple registers in a PARALLEL to form a larger 29102 register. Used to match function return values. 29103 29104 'Is3' 29105 -8 ... 7 29106 29107 'IS1' 29108 -128 ... 127 29109 29110 'IS2' 29111 -32768 ... 32767 29112 29113 'IU2' 29114 0 ... 65535 29115 29116 'In4' 29117 -8 ... -1 or 1 ... 8 29118 29119 'In5' 29120 -16 ... -1 or 1 ... 16 29121 29122 'In6' 29123 -32 ... -1 or 1 ... 32 29124 29125 'IM2' 29126 -65536 ... -1 29127 29128 'Ilb' 29129 An 8 bit value with exactly one bit set. 29130 29131 'Ilw' 29132 A 16 bit value with exactly one bit set. 29133 29134 'Sd' 29135 The common src/dest memory addressing modes. 29136 29137 'Sa' 29138 Memory addressed using $a0 or $a1. 29139 29140 'Si' 29141 Memory addressed with immediate addresses. 29142 29143 'Ss' 29144 Memory addressed using the stack pointer ($sp). 29145 29146 'Sf' 29147 Memory addressed using the frame base register ($fb). 29148 29149 'Ss' 29150 Memory addressed using the small base register ($sb). 29151 29152 'S1' 29153 $r1h 29154 29155_MeP--'config/mep/constraints.md'_ 29156 29157 'a' 29158 The $sp register. 29159 29160 'b' 29161 The $tp register. 29162 29163 'c' 29164 Any control register. 29165 29166 'd' 29167 Either the $hi or the $lo register. 29168 29169 'em' 29170 Coprocessor registers that can be directly loaded ($c0-$c15). 29171 29172 'ex' 29173 Coprocessor registers that can be moved to each other. 29174 29175 'er' 29176 Coprocessor registers that can be moved to core registers. 29177 29178 'h' 29179 The $hi register. 29180 29181 'j' 29182 The $rpc register. 29183 29184 'l' 29185 The $lo register. 29186 29187 't' 29188 Registers which can be used in $tp-relative addressing. 29189 29190 'v' 29191 The $gp register. 29192 29193 'x' 29194 The coprocessor registers. 29195 29196 'y' 29197 The coprocessor control registers. 29198 29199 'z' 29200 The $0 register. 29201 29202 'A' 29203 User-defined register set A. 29204 29205 'B' 29206 User-defined register set B. 29207 29208 'C' 29209 User-defined register set C. 29210 29211 'D' 29212 User-defined register set D. 29213 29214 'I' 29215 Offsets for $gp-rel addressing. 29216 29217 'J' 29218 Constants that can be used directly with boolean insns. 29219 29220 'K' 29221 Constants that can be moved directly to registers. 29222 29223 'L' 29224 Small constants that can be added to registers. 29225 29226 'M' 29227 Long shift counts. 29228 29229 'N' 29230 Small constants that can be compared to registers. 29231 29232 'O' 29233 Constants that can be loaded into the top half of registers. 29234 29235 'S' 29236 Signed 8-bit immediates. 29237 29238 'T' 29239 Symbols encoded for $tp-rel or $gp-rel addressing. 29240 29241 'U' 29242 Non-constant addresses for loading/saving coprocessor 29243 registers. 29244 29245 'W' 29246 The top half of a symbol's value. 29247 29248 'Y' 29249 A register indirect address without offset. 29250 29251 'Z' 29252 Symbolic references to the control bus. 29253 29254_MicroBlaze--'config/microblaze/constraints.md'_ 29255 'd' 29256 A general register ('r0' to 'r31'). 29257 29258 'z' 29259 A status register ('rmsr', '$fcc1' to '$fcc7'). 29260 29261_MIPS--'config/mips/constraints.md'_ 29262 'd' 29263 An address register. This is equivalent to 'r' unless 29264 generating MIPS16 code. 29265 29266 'f' 29267 A floating-point register (if available). 29268 29269 'h' 29270 Formerly the 'hi' register. This constraint is no longer 29271 supported. 29272 29273 'l' 29274 The 'lo' register. Use this register to store values that are 29275 no bigger than a word. 29276 29277 'x' 29278 The concatenated 'hi' and 'lo' registers. Use this register 29279 to store doubleword values. 29280 29281 'c' 29282 A register suitable for use in an indirect jump. This will 29283 always be '$25' for '-mabicalls'. 29284 29285 'v' 29286 Register '$3'. Do not use this constraint in new code; it is 29287 retained only for compatibility with glibc. 29288 29289 'y' 29290 Equivalent to 'r'; retained for backwards compatibility. 29291 29292 'z' 29293 A floating-point condition code register. 29294 29295 'I' 29296 A signed 16-bit constant (for arithmetic instructions). 29297 29298 'J' 29299 Integer zero. 29300 29301 'K' 29302 An unsigned 16-bit constant (for logic instructions). 29303 29304 'L' 29305 A signed 32-bit constant in which the lower 16 bits are zero. 29306 Such constants can be loaded using 'lui'. 29307 29308 'M' 29309 A constant that cannot be loaded using 'lui', 'addiu' or 29310 'ori'. 29311 29312 'N' 29313 A constant in the range -65535 to -1 (inclusive). 29314 29315 'O' 29316 A signed 15-bit constant. 29317 29318 'P' 29319 A constant in the range 1 to 65535 (inclusive). 29320 29321 'G' 29322 Floating-point zero. 29323 29324 'R' 29325 An address that can be used in a non-macro load or store. 29326 29327 'ZC' 29328 When compiling microMIPS code, this constraint matches a 29329 memory operand whose address is formed from a base register 29330 and a 12-bit offset. These operands can be used for microMIPS 29331 instructions such as 'll' and 'sc'. When not compiling for 29332 microMIPS code, 'ZC' is equivalent to 'R'. 29333 29334 'ZD' 29335 When compiling microMIPS code, this constraint matches an 29336 address operand that is formed from a base register and a 29337 12-bit offset. These operands can be used for microMIPS 29338 instructions such as 'prefetch'. When not compiling for 29339 microMIPS code, 'ZD' is equivalent to 'p'. 29340 29341_Motorola 680x0--'config/m68k/constraints.md'_ 29342 'a' 29343 Address register 29344 29345 'd' 29346 Data register 29347 29348 'f' 29349 68881 floating-point register, if available 29350 29351 'I' 29352 Integer in the range 1 to 8 29353 29354 'J' 29355 16-bit signed number 29356 29357 'K' 29358 Signed number whose magnitude is greater than 0x80 29359 29360 'L' 29361 Integer in the range -8 to -1 29362 29363 'M' 29364 Signed number whose magnitude is greater than 0x100 29365 29366 'N' 29367 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 29368 29369 'O' 29370 16 (for rotate using swap) 29371 29372 'P' 29373 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 29374 29375 'R' 29376 Numbers that mov3q can handle 29377 29378 'G' 29379 Floating point constant that is not a 68881 constant 29380 29381 'S' 29382 Operands that satisfy 'm' when -mpcrel is in effect 29383 29384 'T' 29385 Operands that satisfy 's' when -mpcrel is not in effect 29386 29387 'Q' 29388 Address register indirect addressing mode 29389 29390 'U' 29391 Register offset addressing 29392 29393 'W' 29394 const_call_operand 29395 29396 'Cs' 29397 symbol_ref or const 29398 29399 'Ci' 29400 const_int 29401 29402 'C0' 29403 const_int 0 29404 29405 'Cj' 29406 Range of signed numbers that don't fit in 16 bits 29407 29408 'Cmvq' 29409 Integers valid for mvq 29410 29411 'Capsw' 29412 Integers valid for a moveq followed by a swap 29413 29414 'Cmvz' 29415 Integers valid for mvz 29416 29417 'Cmvs' 29418 Integers valid for mvs 29419 29420 'Ap' 29421 push_operand 29422 29423 'Ac' 29424 Non-register operands allowed in clr 29425 29426_Moxie--'config/moxie/constraints.md'_ 29427 'A' 29428 An absolute address 29429 29430 'B' 29431 An offset address 29432 29433 'W' 29434 A register indirect memory operand 29435 29436 'I' 29437 A constant in the range of 0 to 255. 29438 29439 'N' 29440 A constant in the range of 0 to -255. 29441 29442_MSP430-'config/msp430/constraints.md'_ 29443 29444 'R12' 29445 Register R12. 29446 29447 'R13' 29448 Register R13. 29449 29450 'K' 29451 Integer constant 1. 29452 29453 'L' 29454 Integer constant -1^20..1^19. 29455 29456 'M' 29457 Integer constant 1-4. 29458 29459 'Ya' 29460 Memory references which do not require an extended MOVX 29461 instruction. 29462 29463 'Yl' 29464 Memory reference, labels only. 29465 29466 'Ys' 29467 Memory reference, stack only. 29468 29469_NDS32--'config/nds32/constraints.md'_ 29470 'w' 29471 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 29472 'l' 29473 LOW register class $r0 to $r7. 29474 'd' 29475 MIDDLE register class $r0 to $r11, $r16 to $r19. 29476 'h' 29477 HIGH register class $r12 to $r14, $r20 to $r31. 29478 't' 29479 Temporary assist register $ta (i.e. $r15). 29480 'k' 29481 Stack register $sp. 29482 'Iu03' 29483 Unsigned immediate 3-bit value. 29484 'In03' 29485 Negative immediate 3-bit value in the range of -7-0. 29486 'Iu04' 29487 Unsigned immediate 4-bit value. 29488 'Is05' 29489 Signed immediate 5-bit value. 29490 'Iu05' 29491 Unsigned immediate 5-bit value. 29492 'In05' 29493 Negative immediate 5-bit value in the range of -31-0. 29494 'Ip05' 29495 Unsigned immediate 5-bit value for movpi45 instruction with 29496 range 16-47. 29497 'Iu06' 29498 Unsigned immediate 6-bit value constraint for addri36.sp 29499 instruction. 29500 'Iu08' 29501 Unsigned immediate 8-bit value. 29502 'Iu09' 29503 Unsigned immediate 9-bit value. 29504 'Is10' 29505 Signed immediate 10-bit value. 29506 'Is11' 29507 Signed immediate 11-bit value. 29508 'Is15' 29509 Signed immediate 15-bit value. 29510 'Iu15' 29511 Unsigned immediate 15-bit value. 29512 'Ic15' 29513 A constant which is not in the range of imm15u but ok for bclr 29514 instruction. 29515 'Ie15' 29516 A constant which is not in the range of imm15u but ok for bset 29517 instruction. 29518 'It15' 29519 A constant which is not in the range of imm15u but ok for btgl 29520 instruction. 29521 'Ii15' 29522 A constant whose compliment value is in the range of imm15u 29523 and ok for bitci instruction. 29524 'Is16' 29525 Signed immediate 16-bit value. 29526 'Is17' 29527 Signed immediate 17-bit value. 29528 'Is19' 29529 Signed immediate 19-bit value. 29530 'Is20' 29531 Signed immediate 20-bit value. 29532 'Ihig' 29533 The immediate value that can be simply set high 20-bit. 29534 'Izeb' 29535 The immediate value 0xff. 29536 'Izeh' 29537 The immediate value 0xffff. 29538 'Ixls' 29539 The immediate value 0x01. 29540 'Ix11' 29541 The immediate value 0x7ff. 29542 'Ibms' 29543 The immediate value with power of 2. 29544 'Ifex' 29545 The immediate value with power of 2 minus 1. 29546 'U33' 29547 Memory constraint for 333 format. 29548 'U45' 29549 Memory constraint for 45 format. 29550 'U37' 29551 Memory constraint for 37 format. 29552 29553_Nios II family--'config/nios2/constraints.md'_ 29554 29555 'I' 29556 Integer that is valid as an immediate operand in an 29557 instruction taking a signed 16-bit number. Range -32768 to 29558 32767. 29559 29560 'J' 29561 Integer that is valid as an immediate operand in an 29562 instruction taking an unsigned 16-bit number. Range 0 to 29563 65535. 29564 29565 'K' 29566 Integer that is valid as an immediate operand in an 29567 instruction taking only the upper 16-bits of a 32-bit number. 29568 Range 32-bit numbers with the lower 16-bits being 0. 29569 29570 'L' 29571 Integer that is valid as an immediate operand for a shift 29572 instruction. Range 0 to 31. 29573 29574 'M' 29575 Integer that is valid as an immediate operand for only the 29576 value 0. Can be used in conjunction with the format modifier 29577 'z' to use 'r0' instead of '0' in the assembly output. 29578 29579 'N' 29580 Integer that is valid as an immediate operand for a custom 29581 instruction opcode. Range 0 to 255. 29582 29583 'S' 29584 Matches immediates which are addresses in the small data 29585 section and therefore can be added to 'gp' as a 16-bit 29586 immediate to re-create their 32-bit value. 29587 29588_PDP-11--'config/pdp11/constraints.md'_ 29589 'a' 29590 Floating point registers AC0 through AC3. These can be loaded 29591 from/to memory with a single instruction. 29592 29593 'd' 29594 Odd numbered general registers (R1, R3, R5). These are used 29595 for 16-bit multiply operations. 29596 29597 'f' 29598 Any of the floating point registers (AC0 through AC5). 29599 29600 'G' 29601 Floating point constant 0. 29602 29603 'I' 29604 An integer constant that fits in 16 bits. 29605 29606 'J' 29607 An integer constant whose low order 16 bits are zero. 29608 29609 'K' 29610 An integer constant that does not meet the constraints for 29611 codes 'I' or 'J'. 29612 29613 'L' 29614 The integer constant 1. 29615 29616 'M' 29617 The integer constant -1. 29618 29619 'N' 29620 The integer constant 0. 29621 29622 'O' 29623 Integer constants -4 through -1 and 1 through 4; shifts by 29624 these amounts are handled as multiple single-bit shifts rather 29625 than a single variable-length shift. 29626 29627 'Q' 29628 A memory reference which requires an additional word (address 29629 or offset) after the opcode. 29630 29631 'R' 29632 A memory reference that is encoded within the opcode. 29633 29634_RL78--'config/rl78/constraints.md'_ 29635 29636 'Int3' 29637 An integer constant in the range 1 ... 7. 29638 'Int8' 29639 An integer constant in the range 0 ... 255. 29640 'J' 29641 An integer constant in the range -255 ... 0 29642 'K' 29643 The integer constant 1. 29644 'L' 29645 The integer constant -1. 29646 'M' 29647 The integer constant 0. 29648 'N' 29649 The integer constant 2. 29650 'O' 29651 The integer constant -2. 29652 'P' 29653 An integer constant in the range 1 ... 15. 29654 'Qbi' 29655 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 29656 'Qsc' 29657 The synthetic compare types-gt, lt, ge, and le. 29658 'Wab' 29659 A memory reference with an absolute address. 29660 'Wbc' 29661 A memory reference using 'BC' as a base register, with an 29662 optional offset. 29663 'Wca' 29664 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 29665 address, for calls. 29666 'Wcv' 29667 A memory reference using any 16-bit register pair for the 29668 address, for calls. 29669 'Wd2' 29670 A memory reference using 'DE' as a base register, with an 29671 optional offset. 29672 'Wde' 29673 A memory reference using 'DE' as a base register, without any 29674 offset. 29675 'Wfr' 29676 Any memory reference to an address in the far address space. 29677 'Wh1' 29678 A memory reference using 'HL' as a base register, with an 29679 optional one-byte offset. 29680 'Whb' 29681 A memory reference using 'HL' as a base register, with 'B' or 29682 'C' as the index register. 29683 'Whl' 29684 A memory reference using 'HL' as a base register, without any 29685 offset. 29686 'Ws1' 29687 A memory reference using 'SP' as a base register, with an 29688 optional one-byte offset. 29689 'Y' 29690 Any memory reference to an address in the near address space. 29691 'A' 29692 The 'AX' register. 29693 'B' 29694 The 'BC' register. 29695 'D' 29696 The 'DE' register. 29697 'R' 29698 'A' through 'L' registers. 29699 'S' 29700 The 'SP' register. 29701 'T' 29702 The 'HL' register. 29703 'Z08W' 29704 The 16-bit 'R8' register. 29705 'Z10W' 29706 The 16-bit 'R10' register. 29707 'Zint' 29708 The registers reserved for interrupts ('R24' to 'R31'). 29709 'a' 29710 The 'A' register. 29711 'b' 29712 The 'B' register. 29713 'c' 29714 The 'C' register. 29715 'd' 29716 The 'D' register. 29717 'e' 29718 The 'E' register. 29719 'h' 29720 The 'H' register. 29721 'l' 29722 The 'L' register. 29723 'v' 29724 The virtual registers. 29725 'w' 29726 The 'PSW' register. 29727 'x' 29728 The 'X' register. 29729 29730_RX--'config/rx/constraints.md'_ 29731 'Q' 29732 An address which does not involve register indirect addressing 29733 or pre/post increment/decrement addressing. 29734 29735 'Symbol' 29736 A symbol reference. 29737 29738 'Int08' 29739 A constant in the range -256 to 255, inclusive. 29740 29741 'Sint08' 29742 A constant in the range -128 to 127, inclusive. 29743 29744 'Sint16' 29745 A constant in the range -32768 to 32767, inclusive. 29746 29747 'Sint24' 29748 A constant in the range -8388608 to 8388607, inclusive. 29749 29750 'Uint04' 29751 A constant in the range 0 to 15, inclusive. 29752 29753_SPARC--'config/sparc/sparc.h'_ 29754 'f' 29755 Floating-point register on the SPARC-V8 architecture and lower 29756 floating-point register on the SPARC-V9 architecture. 29757 29758 'e' 29759 Floating-point register. It is equivalent to 'f' on the 29760 SPARC-V8 architecture and contains both lower and upper 29761 floating-point registers on the SPARC-V9 architecture. 29762 29763 'c' 29764 Floating-point condition code register. 29765 29766 'd' 29767 Lower floating-point register. It is only valid on the 29768 SPARC-V9 architecture when the Visual Instruction Set is 29769 available. 29770 29771 'b' 29772 Floating-point register. It is only valid on the SPARC-V9 29773 architecture when the Visual Instruction Set is available. 29774 29775 'h' 29776 64-bit global or out register for the SPARC-V8+ architecture. 29777 29778 'C' 29779 The constant all-ones, for floating-point. 29780 29781 'A' 29782 Signed 5-bit constant 29783 29784 'D' 29785 A vector constant 29786 29787 'I' 29788 Signed 13-bit constant 29789 29790 'J' 29791 Zero 29792 29793 'K' 29794 32-bit constant with the low 12 bits clear (a constant that 29795 can be loaded with the 'sethi' instruction) 29796 29797 'L' 29798 A constant in the range supported by 'movcc' instructions 29799 (11-bit signed immediate) 29800 29801 'M' 29802 A constant in the range supported by 'movrcc' instructions 29803 (10-bit signed immediate) 29804 29805 'N' 29806 Same as 'K', except that it verifies that bits that are not in 29807 the lower 32-bit range are all zero. Must be used instead of 29808 'K' for modes wider than 'SImode' 29809 29810 'O' 29811 The constant 4096 29812 29813 'G' 29814 Floating-point zero 29815 29816 'H' 29817 Signed 13-bit constant, sign-extended to 32 or 64 bits 29818 29819 'P' 29820 The constant -1 29821 29822 'Q' 29823 Floating-point constant whose integral representation can be 29824 moved into an integer register using a single sethi 29825 instruction 29826 29827 'R' 29828 Floating-point constant whose integral representation can be 29829 moved into an integer register using a single mov instruction 29830 29831 'S' 29832 Floating-point constant whose integral representation can be 29833 moved into an integer register using a high/lo_sum instruction 29834 sequence 29835 29836 'T' 29837 Memory address aligned to an 8-byte boundary 29838 29839 'U' 29840 Even register 29841 29842 'W' 29843 Memory address for 'e' constraint registers 29844 29845 'w' 29846 Memory address with only a base register 29847 29848 'Y' 29849 Vector zero 29850 29851_SPU--'config/spu/spu.h'_ 29852 'a' 29853 An immediate which can be loaded with the il/ila/ilh/ilhu 29854 instructions. const_int is treated as a 64 bit value. 29855 29856 'c' 29857 An immediate for and/xor/or instructions. const_int is 29858 treated as a 64 bit value. 29859 29860 'd' 29861 An immediate for the 'iohl' instruction. const_int is treated 29862 as a 64 bit value. 29863 29864 'f' 29865 An immediate which can be loaded with 'fsmbi'. 29866 29867 'A' 29868 An immediate which can be loaded with the il/ila/ilh/ilhu 29869 instructions. const_int is treated as a 32 bit value. 29870 29871 'B' 29872 An immediate for most arithmetic instructions. const_int is 29873 treated as a 32 bit value. 29874 29875 'C' 29876 An immediate for and/xor/or instructions. const_int is 29877 treated as a 32 bit value. 29878 29879 'D' 29880 An immediate for the 'iohl' instruction. const_int is treated 29881 as a 32 bit value. 29882 29883 'I' 29884 A constant in the range [-64, 63] for shift/rotate 29885 instructions. 29886 29887 'J' 29888 An unsigned 7-bit constant for conversion/nop/channel 29889 instructions. 29890 29891 'K' 29892 A signed 10-bit constant for most arithmetic instructions. 29893 29894 'M' 29895 A signed 16 bit immediate for 'stop'. 29896 29897 'N' 29898 An unsigned 16-bit constant for 'iohl' and 'fsmbi'. 29899 29900 'O' 29901 An unsigned 7-bit constant whose 3 least significant bits are 29902 0. 29903 29904 'P' 29905 An unsigned 3-bit constant for 16-byte rotates and shifts 29906 29907 'R' 29908 Call operand, reg, for indirect calls 29909 29910 'S' 29911 Call operand, symbol, for relative calls. 29912 29913 'T' 29914 Call operand, const_int, for absolute calls. 29915 29916 'U' 29917 An immediate which can be loaded with the il/ila/ilh/ilhu 29918 instructions. const_int is sign extended to 128 bit. 29919 29920 'W' 29921 An immediate for shift and rotate instructions. const_int is 29922 treated as a 32 bit value. 29923 29924 'Y' 29925 An immediate for and/xor/or instructions. const_int is sign 29926 extended as a 128 bit. 29927 29928 'Z' 29929 An immediate for the 'iohl' instruction. const_int is sign 29930 extended to 128 bit. 29931 29932_S/390 and zSeries--'config/s390/s390.h'_ 29933 'a' 29934 Address register (general purpose register except r0) 29935 29936 'c' 29937 Condition code register 29938 29939 'd' 29940 Data register (arbitrary general purpose register) 29941 29942 'f' 29943 Floating-point register 29944 29945 'I' 29946 Unsigned 8-bit constant (0-255) 29947 29948 'J' 29949 Unsigned 12-bit constant (0-4095) 29950 29951 'K' 29952 Signed 16-bit constant (-32768-32767) 29953 29954 'L' 29955 Value appropriate as displacement. 29956 '(0..4095)' 29957 for short displacement 29958 '(-524288..524287)' 29959 for long displacement 29960 29961 'M' 29962 Constant integer with a value of 0x7fffffff. 29963 29964 'N' 29965 Multiple letter constraint followed by 4 parameter letters. 29966 '0..9:' 29967 number of the part counting from most to least 29968 significant 29969 'H,Q:' 29970 mode of the part 29971 'D,S,H:' 29972 mode of the containing operand 29973 '0,F:' 29974 value of the other parts (F--all bits set) 29975 The constraint matches if the specified part of a constant has 29976 a value different from its other parts. 29977 29978 'Q' 29979 Memory reference without index register and with short 29980 displacement. 29981 29982 'R' 29983 Memory reference with index register and short displacement. 29984 29985 'S' 29986 Memory reference without index register but with long 29987 displacement. 29988 29989 'T' 29990 Memory reference with index register and long displacement. 29991 29992 'U' 29993 Pointer with short displacement. 29994 29995 'W' 29996 Pointer with long displacement. 29997 29998 'Y' 29999 Shift count operand. 30000 30001_Score family--'config/score/score.h'_ 30002 'd' 30003 Registers from r0 to r32. 30004 30005 'e' 30006 Registers from r0 to r16. 30007 30008 't' 30009 r8--r11 or r22--r27 registers. 30010 30011 'h' 30012 hi register. 30013 30014 'l' 30015 lo register. 30016 30017 'x' 30018 hi + lo register. 30019 30020 'q' 30021 cnt register. 30022 30023 'y' 30024 lcb register. 30025 30026 'z' 30027 scb register. 30028 30029 'a' 30030 cnt + lcb + scb register. 30031 30032 'c' 30033 cr0--cr15 register. 30034 30035 'b' 30036 cp1 registers. 30037 30038 'f' 30039 cp2 registers. 30040 30041 'i' 30042 cp3 registers. 30043 30044 'j' 30045 cp1 + cp2 + cp3 registers. 30046 30047 'I' 30048 High 16-bit constant (32-bit constant with 16 LSBs zero). 30049 30050 'J' 30051 Unsigned 5 bit integer (in the range 0 to 31). 30052 30053 'K' 30054 Unsigned 16 bit integer (in the range 0 to 65535). 30055 30056 'L' 30057 Signed 16 bit integer (in the range -32768 to 32767). 30058 30059 'M' 30060 Unsigned 14 bit integer (in the range 0 to 16383). 30061 30062 'N' 30063 Signed 14 bit integer (in the range -8192 to 8191). 30064 30065 'Z' 30066 Any SYMBOL_REF. 30067 30068_Xstormy16--'config/stormy16/stormy16.h'_ 30069 'a' 30070 Register r0. 30071 30072 'b' 30073 Register r1. 30074 30075 'c' 30076 Register r2. 30077 30078 'd' 30079 Register r8. 30080 30081 'e' 30082 Registers r0 through r7. 30083 30084 't' 30085 Registers r0 and r1. 30086 30087 'y' 30088 The carry register. 30089 30090 'z' 30091 Registers r8 and r9. 30092 30093 'I' 30094 A constant between 0 and 3 inclusive. 30095 30096 'J' 30097 A constant that has exactly one bit set. 30098 30099 'K' 30100 A constant that has exactly one bit clear. 30101 30102 'L' 30103 A constant between 0 and 255 inclusive. 30104 30105 'M' 30106 A constant between -255 and 0 inclusive. 30107 30108 'N' 30109 A constant between -3 and 0 inclusive. 30110 30111 'O' 30112 A constant between 1 and 4 inclusive. 30113 30114 'P' 30115 A constant between -4 and -1 inclusive. 30116 30117 'Q' 30118 A memory reference that is a stack push. 30119 30120 'R' 30121 A memory reference that is a stack pop. 30122 30123 'S' 30124 A memory reference that refers to a constant address of known 30125 value. 30126 30127 'T' 30128 The register indicated by Rx (not implemented yet). 30129 30130 'U' 30131 A constant that is not between 2 and 15 inclusive. 30132 30133 'Z' 30134 The constant 0. 30135 30136_TI C6X family--'config/c6x/constraints.md'_ 30137 'a' 30138 Register file A (A0-A31). 30139 30140 'b' 30141 Register file B (B0-B31). 30142 30143 'A' 30144 Predicate registers in register file A (A0-A2 on C64X and 30145 higher, A1 and A2 otherwise). 30146 30147 'B' 30148 Predicate registers in register file B (B0-B2). 30149 30150 'C' 30151 A call-used register in register file B (B0-B9, B16-B31). 30152 30153 'Da' 30154 Register file A, excluding predicate registers (A3-A31, plus 30155 A0 if not C64X or higher). 30156 30157 'Db' 30158 Register file B, excluding predicate registers (B3-B31). 30159 30160 'Iu4' 30161 Integer constant in the range 0 ... 15. 30162 30163 'Iu5' 30164 Integer constant in the range 0 ... 31. 30165 30166 'In5' 30167 Integer constant in the range -31 ... 0. 30168 30169 'Is5' 30170 Integer constant in the range -16 ... 15. 30171 30172 'I5x' 30173 Integer constant that can be the operand of an ADDA or a SUBA 30174 insn. 30175 30176 'IuB' 30177 Integer constant in the range 0 ... 65535. 30178 30179 'IsB' 30180 Integer constant in the range -32768 ... 32767. 30181 30182 'IsC' 30183 Integer constant in the range -2^{20} ... 2^{20} - 1. 30184 30185 'Jc' 30186 Integer constant that is a valid mask for the clr instruction. 30187 30188 'Js' 30189 Integer constant that is a valid mask for the set instruction. 30190 30191 'Q' 30192 Memory location with A base register. 30193 30194 'R' 30195 Memory location with B base register. 30196 30197 'Z' 30198 Register B14 (aka DP). 30199 30200_TILE-Gx--'config/tilegx/constraints.md'_ 30201 'R00' 30202 'R01' 30203 'R02' 30204 'R03' 30205 'R04' 30206 'R05' 30207 'R06' 30208 'R07' 30209 'R08' 30210 'R09' 30211 'R10' 30212 Each of these represents a register constraint for an 30213 individual register, from r0 to r10. 30214 30215 'I' 30216 Signed 8-bit integer constant. 30217 30218 'J' 30219 Signed 16-bit integer constant. 30220 30221 'K' 30222 Unsigned 16-bit integer constant. 30223 30224 'L' 30225 Integer constant that fits in one signed byte when incremented 30226 by one (-129 ... 126). 30227 30228 'm' 30229 Memory operand. If used together with '<' or '>', the operand 30230 can have postincrement which requires printing with '%In' and 30231 '%in' on TILE-Gx. For example: 30232 30233 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 30234 30235 'M' 30236 A bit mask suitable for the BFINS instruction. 30237 30238 'N' 30239 Integer constant that is a byte tiled out eight times. 30240 30241 'O' 30242 The integer zero constant. 30243 30244 'P' 30245 Integer constant that is a sign-extended byte tiled out as 30246 four shorts. 30247 30248 'Q' 30249 Integer constant that fits in one signed byte when incremented 30250 (-129 ... 126), but excluding -1. 30251 30252 'S' 30253 Integer constant that has all 1 bits consecutive and starting 30254 at bit 0. 30255 30256 'T' 30257 A 16-bit fragment of a got, tls, or pc-relative reference. 30258 30259 'U' 30260 Memory operand except postincrement. This is roughly the same 30261 as 'm' when not used together with '<' or '>'. 30262 30263 'W' 30264 An 8-element vector constant with identical elements. 30265 30266 'Y' 30267 A 4-element vector constant with identical elements. 30268 30269 'Z0' 30270 The integer constant 0xffffffff. 30271 30272 'Z1' 30273 The integer constant 0xffffffff00000000. 30274 30275_TILEPro--'config/tilepro/constraints.md'_ 30276 'R00' 30277 'R01' 30278 'R02' 30279 'R03' 30280 'R04' 30281 'R05' 30282 'R06' 30283 'R07' 30284 'R08' 30285 'R09' 30286 'R10' 30287 Each of these represents a register constraint for an 30288 individual register, from r0 to r10. 30289 30290 'I' 30291 Signed 8-bit integer constant. 30292 30293 'J' 30294 Signed 16-bit integer constant. 30295 30296 'K' 30297 Nonzero integer constant with low 16 bits zero. 30298 30299 'L' 30300 Integer constant that fits in one signed byte when incremented 30301 by one (-129 ... 126). 30302 30303 'm' 30304 Memory operand. If used together with '<' or '>', the operand 30305 can have postincrement which requires printing with '%In' and 30306 '%in' on TILEPro. For example: 30307 30308 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 30309 30310 'M' 30311 A bit mask suitable for the MM instruction. 30312 30313 'N' 30314 Integer constant that is a byte tiled out four times. 30315 30316 'O' 30317 The integer zero constant. 30318 30319 'P' 30320 Integer constant that is a sign-extended byte tiled out as two 30321 shorts. 30322 30323 'Q' 30324 Integer constant that fits in one signed byte when incremented 30325 (-129 ... 126), but excluding -1. 30326 30327 'T' 30328 A symbolic operand, or a 16-bit fragment of a got, tls, or 30329 pc-relative reference. 30330 30331 'U' 30332 Memory operand except postincrement. This is roughly the same 30333 as 'm' when not used together with '<' or '>'. 30334 30335 'W' 30336 A 4-element vector constant with identical elements. 30337 30338 'Y' 30339 A 2-element vector constant with identical elements. 30340 30341_Xtensa--'config/xtensa/constraints.md'_ 30342 'a' 30343 General-purpose 32-bit register 30344 30345 'b' 30346 One-bit boolean register 30347 30348 'A' 30349 MAC16 40-bit accumulator register 30350 30351 'I' 30352 Signed 12-bit integer constant, for use in MOVI instructions 30353 30354 'J' 30355 Signed 8-bit integer constant, for use in ADDI instructions 30356 30357 'K' 30358 Integer constant valid for BccI instructions 30359 30360 'L' 30361 Unsigned constant valid for BccUI instructions 30362 30363 30364File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 30365 303666.43 Controlling Names Used in Assembler Code 30367============================================= 30368 30369You can specify the name to be used in the assembler code for a C 30370function or variable by writing the 'asm' (or '__asm__') keyword after 30371the declarator as follows: 30372 30373 int foo asm ("myfoo") = 2; 30374 30375This specifies that the name to be used for the variable 'foo' in the 30376assembler code should be 'myfoo' rather than the usual '_foo'. 30377 30378 On systems where an underscore is normally prepended to the name of a C 30379function or variable, this feature allows you to define names for the 30380linker that do not start with an underscore. 30381 30382 It does not make sense to use this feature with a non-static local 30383variable since such variables do not have assembler names. If you are 30384trying to put the variable in a particular register, see *note Explicit 30385Reg Vars::. GCC presently accepts such code with a warning, but will 30386probably be changed to issue an error, rather than a warning, in the 30387future. 30388 30389 You cannot use 'asm' in this way in a function _definition_; but you 30390can get the same effect by writing a declaration for the function before 30391its definition and putting 'asm' there, like this: 30392 30393 extern func () asm ("FUNC"); 30394 30395 func (x, y) 30396 int x, y; 30397 /* ... */ 30398 30399 It is up to you to make sure that the assembler names you choose do not 30400conflict with any other assembler symbols. Also, you must not use a 30401register name; that would produce completely invalid assembler code. 30402GCC does not as yet have the ability to store static variables in 30403registers. Perhaps that will be added. 30404 30405 30406File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 30407 304086.44 Variables in Specified Registers 30409===================================== 30410 30411GNU C allows you to put a few global variables into specified hardware 30412registers. You can also specify the register in which an ordinary 30413register variable should be allocated. 30414 30415 * Global register variables reserve registers throughout the program. 30416 This may be useful in programs such as programming language 30417 interpreters that have a couple of global variables that are 30418 accessed very often. 30419 30420 * Local register variables in specific registers do not reserve the 30421 registers, except at the point where they are used as input or 30422 output operands in an 'asm' statement and the 'asm' statement 30423 itself is not deleted. The compiler's data flow analysis is 30424 capable of determining where the specified registers contain live 30425 values, and where they are available for other uses. Stores into 30426 local register variables may be deleted when they appear to be dead 30427 according to dataflow analysis. References to local register 30428 variables may be deleted or moved or simplified. 30429 30430 These local variables are sometimes convenient for use with the 30431 extended 'asm' feature (*note Extended Asm::), if you want to write 30432 one output of the assembler instruction directly into a particular 30433 register. (This works provided the register you specify fits the 30434 constraints specified for that operand in the 'asm'.) 30435 30436* Menu: 30437 30438* Global Reg Vars:: 30439* Local Reg Vars:: 30440 30441 30442File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 30443 304446.44.1 Defining Global Register Variables 30445----------------------------------------- 30446 30447You can define a global register variable in GNU C like this: 30448 30449 register int *foo asm ("a5"); 30450 30451Here 'a5' is the name of the register that should be used. Choose a 30452register that is normally saved and restored by function calls on your 30453machine, so that library routines will not clobber it. 30454 30455 Naturally the register name is cpu-dependent, so you need to 30456conditionalize your program according to cpu type. The register 'a5' is 30457a good choice on a 68000 for a variable of pointer type. On machines 30458with register windows, be sure to choose a "global" register that is not 30459affected magically by the function call mechanism. 30460 30461 In addition, different operating systems on the same CPU may differ in 30462how they name the registers; then you need additional conditionals. For 30463example, some 68000 operating systems call this register '%a5'. 30464 30465 Eventually there may be a way of asking the compiler to choose a 30466register automatically, but first we need to figure out how it should 30467choose and how to enable you to guide the choice. No solution is 30468evident. 30469 30470 Defining a global register variable in a certain register reserves that 30471register entirely for this use, at least within the current compilation. 30472The register is not allocated for any other purpose in the functions in 30473the current compilation, and is not saved and restored by these 30474functions. Stores into this register are never deleted even if they 30475appear to be dead, but references may be deleted or moved or simplified. 30476 30477 It is not safe to access the global register variables from signal 30478handlers, or from more than one thread of control, because the system 30479library routines may temporarily use the register for other things 30480(unless you recompile them specially for the task at hand). 30481 30482 It is not safe for one function that uses a global register variable to 30483call another such function 'foo' by way of a third function 'lose' that 30484is compiled without knowledge of this variable (i.e. in a different 30485source file in which the variable isn't declared). This is because 30486'lose' might save the register and put some other value there. For 30487example, you can't expect a global register variable to be available in 30488the comparison-function that you pass to 'qsort', since 'qsort' might 30489have put something else in that register. (If you are prepared to 30490recompile 'qsort' with the same global register variable, you can solve 30491this problem.) 30492 30493 If you want to recompile 'qsort' or other source files that do not 30494actually use your global register variable, so that they do not use that 30495register for any other purpose, then it suffices to specify the compiler 30496option '-ffixed-REG'. You need not actually add a global register 30497declaration to their source code. 30498 30499 A function that can alter the value of a global register variable 30500cannot safely be called from a function compiled without this variable, 30501because it could clobber the value the caller expects to find there on 30502return. Therefore, the function that is the entry point into the part 30503of the program that uses the global register variable must explicitly 30504save and restore the value that belongs to its caller. 30505 30506 On most machines, 'longjmp' restores to each global register variable 30507the value it had at the time of the 'setjmp'. On some machines, 30508however, 'longjmp' does not change the value of global register 30509variables. To be portable, the function that called 'setjmp' should 30510make other arrangements to save the values of the global register 30511variables, and to restore them in a 'longjmp'. This way, the same thing 30512happens regardless of what 'longjmp' does. 30513 30514 All global register variable declarations must precede all function 30515definitions. If such a declaration could appear after function 30516definitions, the declaration would be too late to prevent the register 30517from being used for other purposes in the preceding functions. 30518 30519 Global register variables may not have initial values, because an 30520executable file has no means to supply initial contents for a register. 30521 30522 On the SPARC, there are reports that g3 ... g7 are suitable registers, 30523but certain library functions, such as 'getwd', as well as the 30524subroutines for division and remainder, modify g3 and g4. g1 and g2 are 30525local temporaries. 30526 30527 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 30528course, it does not do to use more than a few of those. 30529 30530 30531File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 30532 305336.44.2 Specifying Registers for Local Variables 30534----------------------------------------------- 30535 30536You can define a local register variable with a specified register like 30537this: 30538 30539 register int *foo asm ("a5"); 30540 30541Here 'a5' is the name of the register that should be used. Note that 30542this is the same syntax used for defining global register variables, but 30543for a local variable it appears within a function. 30544 30545 Naturally the register name is cpu-dependent, but this is not a 30546problem, since specific registers are most often useful with explicit 30547assembler instructions (*note Extended Asm::). Both of these things 30548generally require that you conditionalize your program according to cpu 30549type. 30550 30551 In addition, operating systems on one type of cpu may differ in how 30552they name the registers; then you need additional conditionals. For 30553example, some 68000 operating systems call this register '%a5'. 30554 30555 Defining such a register variable does not reserve the register; it 30556remains available for other uses in places where flow control determines 30557the variable's value is not live. 30558 30559 This option does not guarantee that GCC generates code that has this 30560variable in the register you specify at all times. You may not code an 30561explicit reference to this register in the _assembler instruction 30562template_ part of an 'asm' statement and assume it always refers to this 30563variable. However, using the variable as an 'asm' _operand_ guarantees 30564that the specified register is used for the operand. 30565 30566 Stores into local register variables may be deleted when they appear to 30567be dead according to dataflow analysis. References to local register 30568variables may be deleted or moved or simplified. 30569 30570 As for global register variables, it's recommended that you choose a 30571register that is normally saved and restored by function calls on your 30572machine, so that library routines will not clobber it. A common pitfall 30573is to initialize multiple call-clobbered registers with arbitrary 30574expressions, where a function call or library call for an arithmetic 30575operator overwrites a register value from a previous assignment, for 30576example 'r0' below: 30577 register int *p1 asm ("r0") = ...; 30578 register int *p2 asm ("r1") = ...; 30579 30580In those cases, a solution is to use a temporary variable for each 30581arbitrary expression. *Note Example of asm with clobbered asm reg::. 30582 30583 30584File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 30585 305866.45 Alternate Keywords 30587======================= 30588 30589'-ansi' and the various '-std' options disable certain keywords. This 30590causes trouble when you want to use GNU C extensions, or a 30591general-purpose header file that should be usable by all programs, 30592including ISO C programs. The keywords 'asm', 'typeof' and 'inline' are 30593not available in programs compiled with '-ansi' or '-std' (although 30594'inline' can be used in a program compiled with '-std=c99' or 30595'-std=c11'). The ISO C99 keyword 'restrict' is only available when 30596'-std=gnu99' (which will eventually be the default) or '-std=c99' (or 30597the equivalent '-std=iso9899:1999'), or an option for a later standard 30598version, is used. 30599 30600 The way to solve these problems is to put '__' at the beginning and end 30601of each problematical keyword. For example, use '__asm__' instead of 30602'asm', and '__inline__' instead of 'inline'. 30603 30604 Other C compilers won't accept these alternative keywords; if you want 30605to compile with another compiler, you can define the alternate keywords 30606as macros to replace them with the customary keywords. It looks like 30607this: 30608 30609 #ifndef __GNUC__ 30610 #define __asm__ asm 30611 #endif 30612 30613 '-pedantic' and other options cause warnings for many GNU C extensions. 30614You can prevent such warnings within one expression by writing 30615'__extension__' before the expression. '__extension__' has no effect 30616aside from this. 30617 30618 30619File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 30620 306216.46 Incomplete 'enum' Types 30622============================ 30623 30624You can define an 'enum' tag without specifying its possible values. 30625This results in an incomplete type, much like what you get if you write 30626'struct foo' without describing the elements. A later declaration that 30627does specify the possible values completes the type. 30628 30629 You can't allocate variables or storage using the type while it is 30630incomplete. However, you can work with pointers to that type. 30631 30632 This extension may not be very useful, but it makes the handling of 30633'enum' more consistent with the way 'struct' and 'union' are handled. 30634 30635 This extension is not supported by GNU C++. 30636 30637 30638File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 30639 306406.47 Function Names as Strings 30641============================== 30642 30643GCC provides three magic variables that hold the name of the current 30644function, as a string. The first of these is '__func__', which is part 30645of the C99 standard: 30646 30647 The identifier '__func__' is implicitly declared by the translator as 30648if, immediately following the opening brace of each function definition, 30649the declaration 30650 30651 static const char __func__[] = "function-name"; 30652 30653appeared, where function-name is the name of the lexically-enclosing 30654function. This name is the unadorned name of the function. 30655 30656 '__FUNCTION__' is another name for '__func__'. Older versions of GCC 30657recognize only this name. However, it is not standardized. For maximum 30658portability, we recommend you use '__func__', but provide a fallback 30659definition with the preprocessor: 30660 30661 #if __STDC_VERSION__ < 199901L 30662 # if __GNUC__ >= 2 30663 # define __func__ __FUNCTION__ 30664 # else 30665 # define __func__ "<unknown>" 30666 # endif 30667 #endif 30668 30669 In C, '__PRETTY_FUNCTION__' is yet another name for '__func__'. 30670However, in C++, '__PRETTY_FUNCTION__' contains the type signature of 30671the function as well as its bare name. For example, this program: 30672 30673 extern "C" { 30674 extern int printf (char *, ...); 30675 } 30676 30677 class a { 30678 public: 30679 void sub (int i) 30680 { 30681 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 30682 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 30683 } 30684 }; 30685 30686 int 30687 main (void) 30688 { 30689 a ax; 30690 ax.sub (0); 30691 return 0; 30692 } 30693 30694gives this output: 30695 30696 __FUNCTION__ = sub 30697 __PRETTY_FUNCTION__ = void a::sub(int) 30698 30699 These identifiers are not preprocessor macros. In GCC 3.3 and earlier, 30700in C only, '__FUNCTION__' and '__PRETTY_FUNCTION__' were treated as 30701string literals; they could be used to initialize 'char' arrays, and 30702they could be concatenated with other string literals. GCC 3.4 and 30703later treat them as variables, like '__func__'. In C++, '__FUNCTION__' 30704and '__PRETTY_FUNCTION__' have always been variables. 30705 30706 30707File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 30708 307096.48 Getting the Return or Frame Address of a Function 30710====================================================== 30711 30712These functions may be used to get information about the callers of a 30713function. 30714 30715 -- Built-in Function: void * __builtin_return_address (unsigned int 30716 LEVEL) 30717 This function returns the return address of the current function, 30718 or of one of its callers. The LEVEL argument is number of frames 30719 to scan up the call stack. A value of '0' yields the return 30720 address of the current function, a value of '1' yields the return 30721 address of the caller of the current function, and so forth. When 30722 inlining the expected behavior is that the function returns the 30723 address of the function that is returned to. To work around this 30724 behavior use the 'noinline' function attribute. 30725 30726 The LEVEL argument must be a constant integer. 30727 30728 On some machines it may be impossible to determine the return 30729 address of any function other than the current one; in such cases, 30730 or when the top of the stack has been reached, this function 30731 returns '0' or a random value. In addition, 30732 '__builtin_frame_address' may be used to determine if the top of 30733 the stack has been reached. 30734 30735 Additional post-processing of the returned value may be needed, see 30736 '__builtin_extract_return_addr'. 30737 30738 This function should only be used with a nonzero argument for 30739 debugging purposes. 30740 30741 -- Built-in Function: void * __builtin_extract_return_addr (void *ADDR) 30742 The address as returned by '__builtin_return_address' may have to 30743 be fed through this function to get the actual encoded address. 30744 For example, on the 31-bit S/390 platform the highest bit has to be 30745 masked out, or on SPARC platforms an offset has to be added for the 30746 true next instruction to be executed. 30747 30748 If no fixup is needed, this function simply passes through ADDR. 30749 30750 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 30751 This function does the reverse of '__builtin_extract_return_addr'. 30752 30753 -- Built-in Function: void * __builtin_frame_address (unsigned int 30754 LEVEL) 30755 This function is similar to '__builtin_return_address', but it 30756 returns the address of the function frame rather than the return 30757 address of the function. Calling '__builtin_frame_address' with a 30758 value of '0' yields the frame address of the current function, a 30759 value of '1' yields the frame address of the caller of the current 30760 function, and so forth. 30761 30762 The frame is the area on the stack that holds local variables and 30763 saved registers. The frame address is normally the address of the 30764 first word pushed on to the stack by the function. However, the 30765 exact definition depends upon the processor and the calling 30766 convention. If the processor has a dedicated frame pointer 30767 register, and the function has a frame, then 30768 '__builtin_frame_address' returns the value of the frame pointer 30769 register. 30770 30771 On some machines it may be impossible to determine the frame 30772 address of any function other than the current one; in such cases, 30773 or when the top of the stack has been reached, this function 30774 returns '0' if the first frame pointer is properly initialized by 30775 the startup code. 30776 30777 This function should only be used with a nonzero argument for 30778 debugging purposes. 30779 30780 30781File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 30782 307836.49 Using Vector Instructions through Built-in Functions 30784========================================================= 30785 30786On some targets, the instruction set contains SIMD vector instructions 30787which operate on multiple values contained in one large register at the 30788same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 30789can be used this way. 30790 30791 The first step in using these extensions is to provide the necessary 30792data types. This should be done using an appropriate 'typedef': 30793 30794 typedef int v4si __attribute__ ((vector_size (16))); 30795 30796The 'int' type specifies the base type, while the attribute specifies 30797the vector size for the variable, measured in bytes. For example, the 30798declaration above causes the compiler to set the mode for the 'v4si' 30799type to be 16 bytes wide and divided into 'int' sized units. For a 3080032-bit 'int' this means a vector of 4 units of 4 bytes, and the 30801corresponding mode of 'foo' is V4SI. 30802 30803 The 'vector_size' attribute is only applicable to integral and float 30804scalars, although arrays, pointers, and function return values are 30805allowed in conjunction with this construct. Only sizes that are a power 30806of two are currently allowed. 30807 30808 All the basic integer types can be used as base types, both as signed 30809and as unsigned: 'char', 'short', 'int', 'long', 'long long'. In 30810addition, 'float' and 'double' can be used to build floating-point 30811vector types. 30812 30813 Specifying a combination that is not valid for the current architecture 30814causes GCC to synthesize the instructions using a narrower mode. For 30815example, if you specify a variable of type 'V4SI' and your architecture 30816does not allow for this specific SIMD type, GCC produces code that uses 308174 'SIs'. 30818 30819 The types defined in this manner can be used with a subset of normal C 30820operations. Currently, GCC allows using the following operators on 30821these types: '+, -, *, /, unary minus, ^, |, &, ~, %'. 30822 30823 The operations behave like C++ 'valarrays'. Addition is defined as the 30824addition of the corresponding elements of the operands. For example, in 30825the code below, each of the 4 elements in A is added to the 30826corresponding 4 elements in B and the resulting vector is stored in C. 30827 30828 typedef int v4si __attribute__ ((vector_size (16))); 30829 30830 v4si a, b, c; 30831 30832 c = a + b; 30833 30834 Subtraction, multiplication, division, and the logical operations 30835operate in a similar manner. Likewise, the result of using the unary 30836minus or complement operators on a vector type is a vector whose 30837elements are the negative or complemented values of the corresponding 30838elements in the operand. 30839 30840 It is possible to use shifting operators '<<', '>>' on integer-type 30841vectors. The operation is defined as following: '{a0, a1, ..., an} >> 30842{b0, b1, ..., bn} == {a0 >> b0, a1 >> b1, ..., an >> bn}'. Vector 30843operands must have the same number of elements. 30844 30845 For convenience, it is allowed to use a binary vector operation where 30846one operand is a scalar. In that case the compiler transforms the 30847scalar operand into a vector where each element is the scalar from the 30848operation. The transformation happens only if the scalar could be 30849safely converted to the vector-element type. Consider the following 30850code. 30851 30852 typedef int v4si __attribute__ ((vector_size (16))); 30853 30854 v4si a, b, c; 30855 long l; 30856 30857 a = b + 1; /* a = b + {1,1,1,1}; */ 30858 a = 2 * b; /* a = {2,2,2,2} * b; */ 30859 30860 a = l + a; /* Error, cannot convert long to int. */ 30861 30862 Vectors can be subscripted as if the vector were an array with the same 30863number of elements and base type. Out of bound accesses invoke 30864undefined behavior at run time. Warnings for out of bound accesses for 30865vector subscription can be enabled with '-Warray-bounds'. 30866 30867 Vector comparison is supported with standard comparison operators: '==, 30868!=, <, <=, >, >='. Comparison operands can be vector expressions of 30869integer-type or real-type. Comparison between integer-type vectors and 30870real-type vectors are not supported. The result of the comparison is a 30871vector of the same width and number of elements as the comparison 30872operands with a signed integral element type. 30873 30874 Vectors are compared element-wise producing 0 when comparison is false 30875and -1 (constant of the appropriate type where all bits are set) 30876otherwise. Consider the following example. 30877 30878 typedef int v4si __attribute__ ((vector_size (16))); 30879 30880 v4si a = {1,2,3,4}; 30881 v4si b = {3,2,1,4}; 30882 v4si c; 30883 30884 c = a > b; /* The result would be {0, 0,-1, 0} */ 30885 c = a == b; /* The result would be {0,-1, 0,-1} */ 30886 30887 In C++, the ternary operator '?:' is available. 'a?b:c', where 'b' and 30888'c' are vectors of the same type and 'a' is an integer vector with the 30889same number of elements of the same size as 'b' and 'c', computes all 30890three arguments and creates a vector '{a[0]?b[0]:c[0], a[1]?b[1]:c[1], 30891...}'. Note that unlike in OpenCL, 'a' is thus interpreted as 'a != 0' 30892and not 'a < 0'. As in the case of binary operations, this syntax is 30893also accepted when one of 'b' or 'c' is a scalar that is then 30894transformed into a vector. If both 'b' and 'c' are scalars and the type 30895of 'true?b:c' has the same size as the element type of 'a', then 'b' and 30896'c' are converted to a vector type whose elements have this type and 30897with the same number of elements as 'a'. 30898 30899 Vector shuffling is available using functions '__builtin_shuffle (vec, 30900mask)' and '__builtin_shuffle (vec0, vec1, mask)'. Both functions 30901construct a permutation of elements from one or two vectors and return a 30902vector of the same type as the input vector(s). The MASK is an integral 30903vector with the same width (W) and element count (N) as the output 30904vector. 30905 30906 The elements of the input vectors are numbered in memory ordering of 30907VEC0 beginning at 0 and VEC1 beginning at N. The elements of MASK are 30908considered modulo N in the single-operand case and modulo 2*N in the 30909two-operand case. 30910 30911 Consider the following example, 30912 30913 typedef int v4si __attribute__ ((vector_size (16))); 30914 30915 v4si a = {1,2,3,4}; 30916 v4si b = {5,6,7,8}; 30917 v4si mask1 = {0,1,1,3}; 30918 v4si mask2 = {0,4,2,5}; 30919 v4si res; 30920 30921 res = __builtin_shuffle (a, mask1); /* res is {1,2,2,4} */ 30922 res = __builtin_shuffle (a, b, mask2); /* res is {1,5,3,6} */ 30923 30924 Note that '__builtin_shuffle' is intentionally semantically compatible 30925with the OpenCL 'shuffle' and 'shuffle2' functions. 30926 30927 You can declare variables and use them in function calls and returns, 30928as well as in assignments and some casts. You can specify a vector type 30929as a return type for a function. Vector types can also be used as 30930function arguments. It is possible to cast from one vector type to 30931another, provided they are of the same size (in fact, you can also cast 30932vectors to and from other datatypes of the same size). 30933 30934 You cannot operate between vectors of different lengths or different 30935signedness without a cast. 30936 30937 30938File: gcc.info, Node: Offsetof, Next: __sync Builtins, Prev: Vector Extensions, Up: C Extensions 30939 309406.50 Offsetof 30941============= 30942 30943GCC implements for both C and C++ a syntactic extension to implement the 30944'offsetof' macro. 30945 30946 primary: 30947 "__builtin_offsetof" "(" typename "," offsetof_member_designator ")" 30948 30949 offsetof_member_designator: 30950 identifier 30951 | offsetof_member_designator "." identifier 30952 | offsetof_member_designator "[" expr "]" 30953 30954 This extension is sufficient such that 30955 30956 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 30957 30958is a suitable definition of the 'offsetof' macro. In C++, TYPE may be 30959dependent. In either case, MEMBER may consist of a single identifier, 30960or a sequence of member accesses and array references. 30961 30962 30963File: gcc.info, Node: __sync Builtins, Next: __atomic Builtins, Prev: Offsetof, Up: C Extensions 30964 309656.51 Legacy __sync Built-in Functions for Atomic Memory Access 30966============================================================== 30967 30968The following built-in functions are intended to be compatible with 30969those described in the 'Intel Itanium Processor-specific Application 30970Binary Interface', section 7.4. As such, they depart from the normal 30971GCC practice of using the '__builtin_' prefix, and further that they are 30972overloaded such that they work on multiple types. 30973 30974 The definition given in the Intel documentation allows only for the use 30975of the types 'int', 'long', 'long long' as well as their unsigned 30976counterparts. GCC allows any integral scalar or pointer type that is 1, 309772, 4 or 8 bytes in length. 30978 30979 Not all operations are supported by all target processors. If a 30980particular operation cannot be implemented on the target processor, a 30981warning is generated and a call an external function is generated. The 30982external function carries the same name as the built-in version, with an 30983additional suffix '_N' where N is the size of the data type. 30984 30985 In most cases, these built-in functions are considered a "full 30986barrier". That is, no memory operand is moved across the operation, 30987either forward or backward. Further, instructions are issued as 30988necessary to prevent the processor from speculating loads across the 30989operation and from queuing stores after the operation. 30990 30991 All of the routines are described in the Intel documentation to take 30992"an optional list of variables protected by the memory barrier". It's 30993not clear what is meant by that; it could mean that _only_ the following 30994variables are protected, or it could mean that these variables should in 30995addition be protected. At present GCC ignores this list and protects 30996all variables that are globally accessible. If in the future we make 30997some use of this list, an empty list will continue to mean all globally 30998accessible variables. 30999 31000'TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 31001'TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 31002'TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 31003'TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 31004'TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 31005'TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 31006 These built-in functions perform the operation suggested by the 31007 name, and returns the value that had previously been in memory. 31008 That is, 31009 31010 { tmp = *ptr; *ptr OP= value; return tmp; } 31011 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 31012 31013 _Note:_ GCC 4.4 and later implement '__sync_fetch_and_nand' as 31014 '*ptr = ~(tmp & value)' instead of '*ptr = ~tmp & value'. 31015 31016'TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 31017'TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 31018'TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 31019'TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 31020'TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 31021'TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 31022 These built-in functions perform the operation suggested by the 31023 name, and return the new value. That is, 31024 31025 { *ptr OP= value; return *ptr; } 31026 { *ptr = ~(*ptr & value); return *ptr; } // nand 31027 31028 _Note:_ GCC 4.4 and later implement '__sync_nand_and_fetch' as 31029 '*ptr = ~(*ptr & value)' instead of '*ptr = ~*ptr & value'. 31030 31031'bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 31032'TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval, TYPE newval, ...)' 31033 These built-in functions perform an atomic compare and swap. That 31034 is, if the current value of '*PTR' is OLDVAL, then write NEWVAL 31035 into '*PTR'. 31036 31037 The "bool" version returns true if the comparison is successful and 31038 NEWVAL is written. The "val" version returns the contents of 31039 '*PTR' before the operation. 31040 31041'__sync_synchronize (...)' 31042 This built-in function issues a full memory barrier. 31043 31044'TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 31045 This built-in function, as described by Intel, is not a traditional 31046 test-and-set operation, but rather an atomic exchange operation. 31047 It writes VALUE into '*PTR', and returns the previous contents of 31048 '*PTR'. 31049 31050 Many targets have only minimal support for such locks, and do not 31051 support a full exchange operation. In this case, a target may 31052 support reduced functionality here by which the _only_ valid value 31053 to store is the immediate constant 1. The exact value actually 31054 stored in '*PTR' is implementation defined. 31055 31056 This built-in function is not a full barrier, but rather an 31057 "acquire barrier". This means that references after the operation 31058 cannot move to (or be speculated to) before the operation, but 31059 previous memory stores may not be globally visible yet, and 31060 previous memory loads may not yet be satisfied. 31061 31062'void __sync_lock_release (TYPE *ptr, ...)' 31063 This built-in function releases the lock acquired by 31064 '__sync_lock_test_and_set'. Normally this means writing the 31065 constant 0 to '*PTR'. 31066 31067 This built-in function is not a full barrier, but rather a "release 31068 barrier". This means that all previous memory stores are globally 31069 visible, and all previous memory loads have been satisfied, but 31070 following memory reads are not prevented from being speculated to 31071 before the barrier. 31072 31073 31074File: gcc.info, Node: __atomic Builtins, Next: x86 specific memory model extensions for transactional memory, Prev: __sync Builtins, Up: C Extensions 31075 310766.52 Built-in functions for memory model aware atomic operations 31077================================================================ 31078 31079The following built-in functions approximately match the requirements 31080for C++11 memory model. Many are similar to the '__sync' prefixed 31081built-in functions, but all also have a memory model parameter. These 31082are all identified by being prefixed with '__atomic', and most are 31083overloaded such that they work with multiple types. 31084 31085 GCC allows any integral scalar or pointer type that is 1, 2, 4, or 8 31086bytes in length. 16-byte integral types are also allowed if '__int128' 31087(*note __int128::) is supported by the architecture. 31088 31089 Target architectures are encouraged to provide their own patterns for 31090each of these built-in functions. If no target is provided, the 31091original non-memory model set of '__sync' atomic built-in functions are 31092utilized, along with any required synchronization fences surrounding it 31093in order to achieve the proper behavior. Execution in this case is 31094subject to the same restrictions as those built-in functions. 31095 31096 If there is no pattern or mechanism to provide a lock free instruction 31097sequence, a call is made to an external routine with the same parameters 31098to be resolved at run time. 31099 31100 The four non-arithmetic functions (load, store, exchange, and 31101compare_exchange) all have a generic version as well. This generic 31102version works on any data type. If the data type size maps to one of 31103the integral sizes that may have lock free support, the generic version 31104utilizes the lock free built-in function. Otherwise an external call is 31105left to be resolved at run time. This external call is the same format 31106with the addition of a 'size_t' parameter inserted as the first 31107parameter indicating the size of the object being pointed to. All 31108objects must be the same size. 31109 31110 There are 6 different memory models that can be specified. These map 31111to the same names in the C++11 standard. Refer there or to the GCC wiki 31112on atomic synchronization 31113(http://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync) for more detailed 31114definitions. These memory models integrate both barriers to code motion 31115as well as synchronization requirements with other threads. These are 31116listed in approximately ascending order of strength. It is also 31117possible to use target specific flags for memory model flags, like 31118Hardware Lock Elision. 31119 31120'__ATOMIC_RELAXED' 31121 No barriers or synchronization. 31122'__ATOMIC_CONSUME' 31123 Data dependency only for both barrier and synchronization with 31124 another thread. 31125'__ATOMIC_ACQUIRE' 31126 Barrier to hoisting of code and synchronizes with release (or 31127 stronger) semantic stores from another thread. 31128'__ATOMIC_RELEASE' 31129 Barrier to sinking of code and synchronizes with acquire (or 31130 stronger) semantic loads from another thread. 31131'__ATOMIC_ACQ_REL' 31132 Full barrier in both directions and synchronizes with acquire loads 31133 and release stores in another thread. 31134'__ATOMIC_SEQ_CST' 31135 Full barrier in both directions and synchronizes with acquire loads 31136 and release stores in all threads. 31137 31138 When implementing patterns for these built-in functions, the memory 31139model parameter can be ignored as long as the pattern implements the 31140most restrictive '__ATOMIC_SEQ_CST' model. Any of the other memory 31141models execute correctly with this memory model but they may not execute 31142as efficiently as they could with a more appropriate implementation of 31143the relaxed requirements. 31144 31145 Note that the C++11 standard allows for the memory model parameter to 31146be determined at run time rather than at compile time. These built-in 31147functions map any run-time value to '__ATOMIC_SEQ_CST' rather than 31148invoke a runtime library call or inline a switch statement. This is 31149standard compliant, safe, and the simplest approach for now. 31150 31151 The memory model parameter is a signed int, but only the lower 8 bits 31152are reserved for the memory model. The remainder of the signed int is 31153reserved for future use and should be 0. Use of the predefined atomic 31154values ensures proper usage. 31155 31156 -- Built-in Function: TYPE __atomic_load_n (TYPE *ptr, int memmodel) 31157 This built-in function implements an atomic load operation. It 31158 returns the contents of '*PTR'. 31159 31160 The valid memory model variants are '__ATOMIC_RELAXED', 31161 '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', and '__ATOMIC_CONSUME'. 31162 31163 -- Built-in Function: void __atomic_load (TYPE *ptr, TYPE *ret, int 31164 memmodel) 31165 This is the generic version of an atomic load. It returns the 31166 contents of '*PTR' in '*RET'. 31167 31168 -- Built-in Function: void __atomic_store_n (TYPE *ptr, TYPE val, int 31169 memmodel) 31170 This built-in function implements an atomic store operation. It 31171 writes 'VAL' into '*PTR'. 31172 31173 The valid memory model variants are '__ATOMIC_RELAXED', 31174 '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. 31175 31176 -- Built-in Function: void __atomic_store (TYPE *ptr, TYPE *val, int 31177 memmodel) 31178 This is the generic version of an atomic store. It stores the 31179 value of '*VAL' into '*PTR'. 31180 31181 -- Built-in Function: TYPE __atomic_exchange_n (TYPE *ptr, TYPE val, 31182 int memmodel) 31183 This built-in function implements an atomic exchange operation. It 31184 writes VAL into '*PTR', and returns the previous contents of 31185 '*PTR'. 31186 31187 The valid memory model variants are '__ATOMIC_RELAXED', 31188 '__ATOMIC_SEQ_CST', '__ATOMIC_ACQUIRE', '__ATOMIC_RELEASE', and 31189 '__ATOMIC_ACQ_REL'. 31190 31191 -- Built-in Function: void __atomic_exchange (TYPE *ptr, TYPE *val, 31192 TYPE *ret, int memmodel) 31193 This is the generic version of an atomic exchange. It stores the 31194 contents of '*VAL' into '*PTR'. The original value of '*PTR' is 31195 copied into '*RET'. 31196 31197 -- Built-in Function: bool __atomic_compare_exchange_n (TYPE *ptr, TYPE 31198 *expected, TYPE desired, bool weak, int success_memmodel, int 31199 failure_memmodel) 31200 This built-in function implements an atomic compare and exchange 31201 operation. This compares the contents of '*PTR' with the contents 31202 of '*EXPECTED' and if equal, writes DESIRED into '*PTR'. If they 31203 are not equal, the current contents of '*PTR' is written into 31204 '*EXPECTED'. WEAK is true for weak compare_exchange, and false for 31205 the strong variation. Many targets only offer the strong variation 31206 and ignore the parameter. When in doubt, use the strong variation. 31207 31208 True is returned if DESIRED is written into '*PTR' and the 31209 execution is considered to conform to the memory model specified by 31210 SUCCESS_MEMMODEL. There are no restrictions on what memory model 31211 can be used here. 31212 31213 False is returned otherwise, and the execution is considered to 31214 conform to FAILURE_MEMMODEL. This memory model cannot be 31215 '__ATOMIC_RELEASE' nor '__ATOMIC_ACQ_REL'. It also cannot be a 31216 stronger model than that specified by SUCCESS_MEMMODEL. 31217 31218 -- Built-in Function: bool __atomic_compare_exchange (TYPE *ptr, TYPE 31219 *expected, TYPE *desired, bool weak, int success_memmodel, int 31220 failure_memmodel) 31221 This built-in function implements the generic version of 31222 '__atomic_compare_exchange'. The function is virtually identical 31223 to '__atomic_compare_exchange_n', except the desired value is also 31224 a pointer. 31225 31226 -- Built-in Function: TYPE __atomic_add_fetch (TYPE *ptr, TYPE val, int 31227 memmodel) 31228 -- Built-in Function: TYPE __atomic_sub_fetch (TYPE *ptr, TYPE val, int 31229 memmodel) 31230 -- Built-in Function: TYPE __atomic_and_fetch (TYPE *ptr, TYPE val, int 31231 memmodel) 31232 -- Built-in Function: TYPE __atomic_xor_fetch (TYPE *ptr, TYPE val, int 31233 memmodel) 31234 -- Built-in Function: TYPE __atomic_or_fetch (TYPE *ptr, TYPE val, int 31235 memmodel) 31236 -- Built-in Function: TYPE __atomic_nand_fetch (TYPE *ptr, TYPE val, 31237 int memmodel) 31238 These built-in functions perform the operation suggested by the 31239 name, and return the result of the operation. That is, 31240 31241 { *ptr OP= val; return *ptr; } 31242 31243 All memory models are valid. 31244 31245 -- Built-in Function: TYPE __atomic_fetch_add (TYPE *ptr, TYPE val, int 31246 memmodel) 31247 -- Built-in Function: TYPE __atomic_fetch_sub (TYPE *ptr, TYPE val, int 31248 memmodel) 31249 -- Built-in Function: TYPE __atomic_fetch_and (TYPE *ptr, TYPE val, int 31250 memmodel) 31251 -- Built-in Function: TYPE __atomic_fetch_xor (TYPE *ptr, TYPE val, int 31252 memmodel) 31253 -- Built-in Function: TYPE __atomic_fetch_or (TYPE *ptr, TYPE val, int 31254 memmodel) 31255 -- Built-in Function: TYPE __atomic_fetch_nand (TYPE *ptr, TYPE val, 31256 int memmodel) 31257 These built-in functions perform the operation suggested by the 31258 name, and return the value that had previously been in '*PTR'. 31259 That is, 31260 31261 { tmp = *ptr; *ptr OP= val; return tmp; } 31262 31263 All memory models are valid. 31264 31265 -- Built-in Function: bool __atomic_test_and_set (void *ptr, int 31266 memmodel) 31267 31268 This built-in function performs an atomic test-and-set operation on 31269 the byte at '*PTR'. The byte is set to some implementation defined 31270 nonzero "set" value and the return value is 'true' if and only if 31271 the previous contents were "set". It should be only used for 31272 operands of type 'bool' or 'char'. For other types only part of 31273 the value may be set. 31274 31275 All memory models are valid. 31276 31277 -- Built-in Function: void __atomic_clear (bool *ptr, int memmodel) 31278 31279 This built-in function performs an atomic clear operation on 31280 '*PTR'. After the operation, '*PTR' contains 0. It should be only 31281 used for operands of type 'bool' or 'char' and in conjunction with 31282 '__atomic_test_and_set'. For other types it may only clear 31283 partially. If the type is not 'bool' prefer using 31284 '__atomic_store'. 31285 31286 The valid memory model variants are '__ATOMIC_RELAXED', 31287 '__ATOMIC_SEQ_CST', and '__ATOMIC_RELEASE'. 31288 31289 -- Built-in Function: void __atomic_thread_fence (int memmodel) 31290 31291 This built-in function acts as a synchronization fence between 31292 threads based on the specified memory model. 31293 31294 All memory orders are valid. 31295 31296 -- Built-in Function: void __atomic_signal_fence (int memmodel) 31297 31298 This built-in function acts as a synchronization fence between a 31299 thread and signal handlers based in the same thread. 31300 31301 All memory orders are valid. 31302 31303 -- Built-in Function: bool __atomic_always_lock_free (size_t size, void 31304 *ptr) 31305 31306 This built-in function returns true if objects of SIZE bytes always 31307 generate lock free atomic instructions for the target architecture. 31308 SIZE must resolve to a compile-time constant and the result also 31309 resolves to a compile-time constant. 31310 31311 PTR is an optional pointer to the object that may be used to 31312 determine alignment. A value of 0 indicates typical alignment 31313 should be used. The compiler may also ignore this parameter. 31314 31315 if (_atomic_always_lock_free (sizeof (long long), 0)) 31316 31317 -- Built-in Function: bool __atomic_is_lock_free (size_t size, void 31318 *ptr) 31319 31320 This built-in function returns true if objects of SIZE bytes always 31321 generate lock free atomic instructions for the target architecture. 31322 If it is not known to be lock free a call is made to a runtime 31323 routine named '__atomic_is_lock_free'. 31324 31325 PTR is an optional pointer to the object that may be used to 31326 determine alignment. A value of 0 indicates typical alignment 31327 should be used. The compiler may also ignore this parameter. 31328 31329 31330File: gcc.info, Node: x86 specific memory model extensions for transactional memory, Next: Object Size Checking, Prev: __atomic Builtins, Up: C Extensions 31331 313326.53 x86 specific memory model extensions for transactional memory 31333================================================================== 31334 31335The i386 architecture supports additional memory ordering flags to mark 31336lock critical sections for hardware lock elision. These must be 31337specified in addition to an existing memory model to atomic intrinsics. 31338 31339'__ATOMIC_HLE_ACQUIRE' 31340 Start lock elision on a lock variable. Memory model must be 31341 '__ATOMIC_ACQUIRE' or stronger. 31342'__ATOMIC_HLE_RELEASE' 31343 End lock elision on a lock variable. Memory model must be 31344 '__ATOMIC_RELEASE' or stronger. 31345 31346 When a lock acquire fails it is required for good performance to abort 31347the transaction quickly. This can be done with a '_mm_pause' 31348 31349 #include <immintrin.h> // For _mm_pause 31350 31351 int lockvar; 31352 31353 /* Acquire lock with lock elision */ 31354 while (__atomic_exchange_n(&lockvar, 1, __ATOMIC_ACQUIRE|__ATOMIC_HLE_ACQUIRE)) 31355 _mm_pause(); /* Abort failed transaction */ 31356 ... 31357 /* Free lock with lock elision */ 31358 __atomic_store_n(&lockvar, 0, __ATOMIC_RELEASE|__ATOMIC_HLE_RELEASE); 31359 31360 31361File: gcc.info, Node: Object Size Checking, Next: Cilk Plus Builtins, Prev: x86 specific memory model extensions for transactional memory, Up: C Extensions 31362 313636.54 Object Size Checking Built-in Functions 31364============================================ 31365 31366GCC implements a limited buffer overflow protection mechanism that can 31367prevent some buffer overflow attacks. 31368 31369 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 31370 TYPE) 31371 is a built-in construct that returns a constant number of bytes 31372 from PTR to the end of the object PTR pointer points to (if known 31373 at compile time). '__builtin_object_size' never evaluates its 31374 arguments for side-effects. If there are any side-effects in them, 31375 it returns '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for TYPE 31376 2 or 3. If there are multiple objects PTR can point to and all of 31377 them are known at compile time, the returned number is the maximum 31378 of remaining byte counts in those objects if TYPE & 2 is 0 and 31379 minimum if nonzero. If it is not possible to determine which 31380 objects PTR points to at compile time, '__builtin_object_size' 31381 should return '(size_t) -1' for TYPE 0 or 1 and '(size_t) 0' for 31382 TYPE 2 or 3. 31383 31384 TYPE is an integer constant from 0 to 3. If the least significant 31385 bit is clear, objects are whole variables, if it is set, a closest 31386 surrounding subobject is considered the object a pointer points to. 31387 The second bit determines if maximum or minimum of remaining bytes 31388 is computed. 31389 31390 struct V { char buf1[10]; int b; char buf2[10]; } var; 31391 char *p = &var.buf1[1], *q = &var.b; 31392 31393 /* Here the object p points to is var. */ 31394 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 31395 /* The subobject p points to is var.buf1. */ 31396 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 31397 /* The object q points to is var. */ 31398 assert (__builtin_object_size (q, 0) 31399 == (char *) (&var + 1) - (char *) &var.b); 31400 /* The subobject q points to is var.b. */ 31401 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 31402 31403 There are built-in functions added for many common string operation 31404functions, e.g., for 'memcpy' '__builtin___memcpy_chk' built-in is 31405provided. This built-in has an additional last argument, which is the 31406number of bytes remaining in object the DEST argument points to or 31407'(size_t) -1' if the size is not known. 31408 31409 The built-in functions are optimized into the normal string functions 31410like 'memcpy' if the last argument is '(size_t) -1' or if it is known at 31411compile time that the destination object will not be overflown. If the 31412compiler can determine at compile time the object will be always 31413overflown, it issues a warning. 31414 31415 The intended use can be e.g. 31416 31417 #undef memcpy 31418 #define bos0(dest) __builtin_object_size (dest, 0) 31419 #define memcpy(dest, src, n) \ 31420 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 31421 31422 char *volatile p; 31423 char buf[10]; 31424 /* It is unknown what object p points to, so this is optimized 31425 into plain memcpy - no checking is possible. */ 31426 memcpy (p, "abcde", n); 31427 /* Destination is known and length too. It is known at compile 31428 time there will be no overflow. */ 31429 memcpy (&buf[5], "abcde", 5); 31430 /* Destination is known, but the length is not known at compile time. 31431 This will result in __memcpy_chk call that can check for overflow 31432 at run time. */ 31433 memcpy (&buf[5], "abcde", n); 31434 /* Destination is known and it is known at compile time there will 31435 be overflow. There will be a warning and __memcpy_chk call that 31436 will abort the program at run time. */ 31437 memcpy (&buf[6], "abcde", 5); 31438 31439 Such built-in functions are provided for 'memcpy', 'mempcpy', 31440'memmove', 'memset', 'strcpy', 'stpcpy', 'strncpy', 'strcat' and 31441'strncat'. 31442 31443 There are also checking built-in functions for formatted output 31444functions. 31445 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 31446 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 31447 const char *fmt, ...); 31448 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 31449 va_list ap); 31450 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 31451 const char *fmt, va_list ap); 31452 31453 The added FLAG argument is passed unchanged to '__sprintf_chk' etc. 31454functions and can contain implementation specific flags on what 31455additional security measures the checking function might take, such as 31456handling '%n' differently. 31457 31458 The OS argument is the object size S points to, like in the other 31459built-in functions. There is a small difference in the behavior though, 31460if OS is '(size_t) -1', the built-in functions are optimized into the 31461non-checking functions only if FLAG is 0, otherwise the checking 31462function is called with OS argument set to '(size_t) -1'. 31463 31464 In addition to this, there are checking built-in functions 31465'__builtin___printf_chk', '__builtin___vprintf_chk', 31466'__builtin___fprintf_chk' and '__builtin___vfprintf_chk'. These have 31467just one additional argument, FLAG, right before format string FMT. If 31468the compiler is able to optimize them to 'fputc' etc. functions, it 31469does, otherwise the checking function is called and the FLAG argument 31470passed to it. 31471 31472 31473File: gcc.info, Node: Cilk Plus Builtins, Next: Other Builtins, Prev: Object Size Checking, Up: C Extensions 31474 314756.55 Cilk Plus C/C++ language extension Built-in Functions. 31476=========================================================== 31477 31478GCC provides support for the following built-in reduction funtions if 31479Cilk Plus is enabled. Cilk Plus can be enabled using the '-fcilkplus' 31480flag. 31481 31482 * __sec_implicit_index 31483 * __sec_reduce 31484 * __sec_reduce_add 31485 * __sec_reduce_all_nonzero 31486 * __sec_reduce_all_zero 31487 * __sec_reduce_any_nonzero 31488 * __sec_reduce_any_zero 31489 * __sec_reduce_max 31490 * __sec_reduce_min 31491 * __sec_reduce_max_ind 31492 * __sec_reduce_min_ind 31493 * __sec_reduce_mul 31494 * __sec_reduce_mutating 31495 31496 Further details and examples about these built-in functions are 31497described in the Cilk Plus language manual which can be found at 31498<http://www.cilkplus.org>. 31499 31500 31501File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Cilk Plus Builtins, Up: C Extensions 31502 315036.56 Other Built-in Functions Provided by GCC 31504============================================= 31505 31506GCC provides a large number of built-in functions other than the ones 31507mentioned above. Some of these are for internal use in the processing 31508of exceptions or variable-length argument lists and are not documented 31509here because they may change from time to time; we do not recommend 31510general use of these functions. 31511 31512 The remaining functions are provided for optimization purposes. 31513 31514 GCC includes built-in versions of many of the functions in the standard 31515C library. The versions prefixed with '__builtin_' are always treated 31516as having the same meaning as the C library function even if you specify 31517the '-fno-builtin' option. (*note C Dialect Options::) Many of these 31518functions are only optimized in certain cases; if they are not optimized 31519in a particular case, a call to the library function is emitted. 31520 31521 Outside strict ISO C mode ('-ansi', '-std=c90', '-std=c99' or 31522'-std=c11'), the functions '_exit', 'alloca', 'bcmp', 'bzero', 31523'dcgettext', 'dgettext', 'dremf', 'dreml', 'drem', 'exp10f', 'exp10l', 31524'exp10', 'ffsll', 'ffsl', 'ffs', 'fprintf_unlocked', 'fputs_unlocked', 31525'gammaf', 'gammal', 'gamma', 'gammaf_r', 'gammal_r', 'gamma_r', 31526'gettext', 'index', 'isascii', 'j0f', 'j0l', 'j0', 'j1f', 'j1l', 'j1', 31527'jnf', 'jnl', 'jn', 'lgammaf_r', 'lgammal_r', 'lgamma_r', 'mempcpy', 31528'pow10f', 'pow10l', 'pow10', 'printf_unlocked', 'rindex', 'scalbf', 31529'scalbl', 'scalb', 'signbit', 'signbitf', 'signbitl', 'signbitd32', 31530'signbitd64', 'signbitd128', 'significandf', 'significandl', 31531'significand', 'sincosf', 'sincosl', 'sincos', 'stpcpy', 'stpncpy', 31532'strcasecmp', 'strdup', 'strfmon', 'strncasecmp', 'strndup', 'toascii', 31533'y0f', 'y0l', 'y0', 'y1f', 'y1l', 'y1', 'ynf', 'ynl' and 'yn' may be 31534handled as built-in functions. All these functions have corresponding 31535versions prefixed with '__builtin_', which may be used even in strict 31536C90 mode. 31537 31538 The ISO C99 functions '_Exit', 'acoshf', 'acoshl', 'acosh', 'asinhf', 31539'asinhl', 'asinh', 'atanhf', 'atanhl', 'atanh', 'cabsf', 'cabsl', 31540'cabs', 'cacosf', 'cacoshf', 'cacoshl', 'cacosh', 'cacosl', 'cacos', 31541'cargf', 'cargl', 'carg', 'casinf', 'casinhf', 'casinhl', 'casinh', 31542'casinl', 'casin', 'catanf', 'catanhf', 'catanhl', 'catanh', 'catanl', 31543'catan', 'cbrtf', 'cbrtl', 'cbrt', 'ccosf', 'ccoshf', 'ccoshl', 'ccosh', 31544'ccosl', 'ccos', 'cexpf', 'cexpl', 'cexp', 'cimagf', 'cimagl', 'cimag', 31545'clogf', 'clogl', 'clog', 'conjf', 'conjl', 'conj', 'copysignf', 31546'copysignl', 'copysign', 'cpowf', 'cpowl', 'cpow', 'cprojf', 'cprojl', 31547'cproj', 'crealf', 'creall', 'creal', 'csinf', 'csinhf', 'csinhl', 31548'csinh', 'csinl', 'csin', 'csqrtf', 'csqrtl', 'csqrt', 'ctanf', 31549'ctanhf', 'ctanhl', 'ctanh', 'ctanl', 'ctan', 'erfcf', 'erfcl', 'erfc', 31550'erff', 'erfl', 'erf', 'exp2f', 'exp2l', 'exp2', 'expm1f', 'expm1l', 31551'expm1', 'fdimf', 'fdiml', 'fdim', 'fmaf', 'fmal', 'fmaxf', 'fmaxl', 31552'fmax', 'fma', 'fminf', 'fminl', 'fmin', 'hypotf', 'hypotl', 'hypot', 31553'ilogbf', 'ilogbl', 'ilogb', 'imaxabs', 'isblank', 'iswblank', 31554'lgammaf', 'lgammal', 'lgamma', 'llabs', 'llrintf', 'llrintl', 'llrint', 31555'llroundf', 'llroundl', 'llround', 'log1pf', 'log1pl', 'log1p', 'log2f', 31556'log2l', 'log2', 'logbf', 'logbl', 'logb', 'lrintf', 'lrintl', 'lrint', 31557'lroundf', 'lroundl', 'lround', 'nearbyintf', 'nearbyintl', 'nearbyint', 31558'nextafterf', 'nextafterl', 'nextafter', 'nexttowardf', 'nexttowardl', 31559'nexttoward', 'remainderf', 'remainderl', 'remainder', 'remquof', 31560'remquol', 'remquo', 'rintf', 'rintl', 'rint', 'roundf', 'roundl', 31561'round', 'scalblnf', 'scalblnl', 'scalbln', 'scalbnf', 'scalbnl', 31562'scalbn', 'snprintf', 'tgammaf', 'tgammal', 'tgamma', 'truncf', 31563'truncl', 'trunc', 'vfscanf', 'vscanf', 'vsnprintf' and 'vsscanf' are 31564handled as built-in functions except in strict ISO C90 mode ('-ansi' or 31565'-std=c90'). 31566 31567 There are also built-in versions of the ISO C99 functions 'acosf', 31568'acosl', 'asinf', 'asinl', 'atan2f', 'atan2l', 'atanf', 'atanl', 31569'ceilf', 'ceill', 'cosf', 'coshf', 'coshl', 'cosl', 'expf', 'expl', 31570'fabsf', 'fabsl', 'floorf', 'floorl', 'fmodf', 'fmodl', 'frexpf', 31571'frexpl', 'ldexpf', 'ldexpl', 'log10f', 'log10l', 'logf', 'logl', 31572'modfl', 'modf', 'powf', 'powl', 'sinf', 'sinhf', 'sinhl', 'sinl', 31573'sqrtf', 'sqrtl', 'tanf', 'tanhf', 'tanhl' and 'tanl' that are 31574recognized in any mode since ISO C90 reserves these names for the 31575purpose to which ISO C99 puts them. All these functions have 31576corresponding versions prefixed with '__builtin_'. 31577 31578 The ISO C94 functions 'iswalnum', 'iswalpha', 'iswcntrl', 'iswdigit', 31579'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace', 'iswupper', 31580'iswxdigit', 'towlower' and 'towupper' are handled as built-in functions 31581except in strict ISO C90 mode ('-ansi' or '-std=c90'). 31582 31583 The ISO C90 functions 'abort', 'abs', 'acos', 'asin', 'atan2', 'atan', 31584'calloc', 'ceil', 'cosh', 'cos', 'exit', 'exp', 'fabs', 'floor', 'fmod', 31585'fprintf', 'fputs', 'frexp', 'fscanf', 'isalnum', 'isalpha', 'iscntrl', 31586'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace', 31587'isupper', 'isxdigit', 'tolower', 'toupper', 'labs', 'ldexp', 'log10', 31588'log', 'malloc', 'memchr', 'memcmp', 'memcpy', 'memset', 'modf', 'pow', 31589'printf', 'putchar', 'puts', 'scanf', 'sinh', 'sin', 'snprintf', 31590'sprintf', 'sqrt', 'sscanf', 'strcat', 'strchr', 'strcmp', 'strcpy', 31591'strcspn', 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 31592'strrchr', 'strspn', 'strstr', 'tanh', 'tan', 'vfprintf', 'vprintf' and 31593'vsprintf' are all recognized as built-in functions unless 31594'-fno-builtin' is specified (or '-fno-builtin-FUNCTION' is specified for 31595an individual function). All of these functions have corresponding 31596versions prefixed with '__builtin_'. 31597 31598 GCC provides built-in versions of the ISO C99 floating-point comparison 31599macros that avoid raising exceptions for unordered operands. They have 31600the same names as the standard macros ( 'isgreater', 'isgreaterequal', 31601'isless', 'islessequal', 'islessgreater', and 'isunordered') , with 31602'__builtin_' prefixed. We intend for a library implementor to be able 31603to simply '#define' each standard macro to its built-in equivalent. In 31604the same fashion, GCC provides 'fpclassify', 'isfinite', 'isinf_sign' 31605and 'isnormal' built-ins used with '__builtin_' prefixed. The 'isinf' 31606and 'isnan' built-in functions appear both with and without the 31607'__builtin_' prefix. 31608 31609 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 31610 31611 You can use the built-in function '__builtin_types_compatible_p' to 31612 determine whether two types are the same. 31613 31614 This built-in function returns 1 if the unqualified versions of the 31615 types TYPE1 and TYPE2 (which are types, not expressions) are 31616 compatible, 0 otherwise. The result of this built-in function can 31617 be used in integer constant expressions. 31618 31619 This built-in function ignores top level qualifiers (e.g., 'const', 31620 'volatile'). For example, 'int' is equivalent to 'const int'. 31621 31622 The type 'int[]' and 'int[5]' are compatible. On the other hand, 31623 'int' and 'char *' are not compatible, even if the size of their 31624 types, on the particular architecture are the same. Also, the 31625 amount of pointer indirection is taken into account when 31626 determining similarity. Consequently, 'short *' is not similar to 31627 'short **'. Furthermore, two types that are typedefed are 31628 considered compatible if their underlying types are compatible. 31629 31630 An 'enum' type is not considered to be compatible with another 31631 'enum' type even if both are compatible with the same integer type; 31632 this is what the C standard specifies. For example, 'enum {foo, 31633 bar}' is not similar to 'enum {hot, dog}'. 31634 31635 You typically use this function in code whose execution varies 31636 depending on the arguments' types. For example: 31637 31638 #define foo(x) \ 31639 ({ \ 31640 typeof (x) tmp = (x); \ 31641 if (__builtin_types_compatible_p (typeof (x), long double)) \ 31642 tmp = foo_long_double (tmp); \ 31643 else if (__builtin_types_compatible_p (typeof (x), double)) \ 31644 tmp = foo_double (tmp); \ 31645 else if (__builtin_types_compatible_p (typeof (x), float)) \ 31646 tmp = foo_float (tmp); \ 31647 else \ 31648 abort (); \ 31649 tmp; \ 31650 }) 31651 31652 _Note:_ This construct is only available for C. 31653 31654 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 31655 EXP2) 31656 31657 You can use the built-in function '__builtin_choose_expr' to 31658 evaluate code depending on the value of a constant expression. 31659 This built-in function returns EXP1 if CONST_EXP, which is an 31660 integer constant expression, is nonzero. Otherwise it returns 31661 EXP2. 31662 31663 This built-in function is analogous to the '? :' operator in C, 31664 except that the expression returned has its type unaltered by 31665 promotion rules. Also, the built-in function does not evaluate the 31666 expression that is not chosen. For example, if CONST_EXP evaluates 31667 to true, EXP2 is not evaluated even if it has side-effects. 31668 31669 This built-in function can return an lvalue if the chosen argument 31670 is an lvalue. 31671 31672 If EXP1 is returned, the return type is the same as EXP1's type. 31673 Similarly, if EXP2 is returned, its return type is the same as 31674 EXP2. 31675 31676 Example: 31677 31678 #define foo(x) \ 31679 __builtin_choose_expr ( \ 31680 __builtin_types_compatible_p (typeof (x), double), \ 31681 foo_double (x), \ 31682 __builtin_choose_expr ( \ 31683 __builtin_types_compatible_p (typeof (x), float), \ 31684 foo_float (x), \ 31685 /* The void expression results in a compile-time error \ 31686 when assigning the result to something. */ \ 31687 (void)0)) 31688 31689 _Note:_ This construct is only available for C. Furthermore, the 31690 unused expression (EXP1 or EXP2 depending on the value of 31691 CONST_EXP) may still generate syntax errors. This may change in 31692 future revisions. 31693 31694 -- Built-in Function: TYPE __builtin_complex (REAL, IMAG) 31695 31696 The built-in function '__builtin_complex' is provided for use in 31697 implementing the ISO C11 macros 'CMPLXF', 'CMPLX' and 'CMPLXL'. 31698 REAL and IMAG must have the same type, a real binary floating-point 31699 type, and the result has the corresponding complex type with real 31700 and imaginary parts REAL and IMAG. Unlike 'REAL + I * IMAG', this 31701 works even when infinities, NaNs and negative zeros are involved. 31702 31703 -- Built-in Function: int __builtin_constant_p (EXP) 31704 You can use the built-in function '__builtin_constant_p' to 31705 determine if a value is known to be constant at compile time and 31706 hence that GCC can perform constant-folding on expressions 31707 involving that value. The argument of the function is the value to 31708 test. The function returns the integer 1 if the argument is known 31709 to be a compile-time constant and 0 if it is not known to be a 31710 compile-time constant. A return of 0 does not indicate that the 31711 value is _not_ a constant, but merely that GCC cannot prove it is a 31712 constant with the specified value of the '-O' option. 31713 31714 You typically use this function in an embedded application where 31715 memory is a critical resource. If you have some complex 31716 calculation, you may want it to be folded if it involves constants, 31717 but need to call a function if it does not. For example: 31718 31719 #define Scale_Value(X) \ 31720 (__builtin_constant_p (X) \ 31721 ? ((X) * SCALE + OFFSET) : Scale (X)) 31722 31723 You may use this built-in function in either a macro or an inline 31724 function. However, if you use it in an inlined function and pass 31725 an argument of the function as the argument to the built-in, GCC 31726 never returns 1 when you call the inline function with a string 31727 constant or compound literal (*note Compound Literals::) and does 31728 not return 1 when you pass a constant numeric value to the inline 31729 function unless you specify the '-O' option. 31730 31731 You may also use '__builtin_constant_p' in initializers for static 31732 data. For instance, you can write 31733 31734 static const int table[] = { 31735 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 31736 /* ... */ 31737 }; 31738 31739 This is an acceptable initializer even if EXPRESSION is not a 31740 constant expression, including the case where 31741 '__builtin_constant_p' returns 1 because EXPRESSION can be folded 31742 to a constant but EXPRESSION contains operands that are not 31743 otherwise permitted in a static initializer (for example, '0 && foo 31744 ()'). GCC must be more conservative about evaluating the built-in 31745 in this case, because it has no opportunity to perform 31746 optimization. 31747 31748 Previous versions of GCC did not accept this built-in in data 31749 initializers. The earliest version where it is completely safe is 31750 3.0.1. 31751 31752 -- Built-in Function: long __builtin_expect (long EXP, long C) 31753 You may use '__builtin_expect' to provide the compiler with branch 31754 prediction information. In general, you should prefer to use 31755 actual profile feedback for this ('-fprofile-arcs'), as programmers 31756 are notoriously bad at predicting how their programs actually 31757 perform. However, there are applications in which this data is 31758 hard to collect. 31759 31760 The return value is the value of EXP, which should be an integral 31761 expression. The semantics of the built-in are that it is expected 31762 that EXP == C. For example: 31763 31764 if (__builtin_expect (x, 0)) 31765 foo (); 31766 31767 indicates that we do not expect to call 'foo', since we expect 'x' 31768 to be zero. Since you are limited to integral expressions for EXP, 31769 you should use constructions such as 31770 31771 if (__builtin_expect (ptr != NULL, 1)) 31772 foo (*ptr); 31773 31774 when testing pointer or floating-point values. 31775 31776 -- Built-in Function: void __builtin_trap (void) 31777 This function causes the program to exit abnormally. GCC 31778 implements this function by using a target-dependent mechanism 31779 (such as intentionally executing an illegal instruction) or by 31780 calling 'abort'. The mechanism used may vary from release to 31781 release so you should not rely on any particular implementation. 31782 31783 -- Built-in Function: void __builtin_unreachable (void) 31784 If control flow reaches the point of the '__builtin_unreachable', 31785 the program is undefined. It is useful in situations where the 31786 compiler cannot deduce the unreachability of the code. 31787 31788 One such case is immediately following an 'asm' statement that 31789 either never terminates, or one that transfers control elsewhere 31790 and never returns. In this example, without the 31791 '__builtin_unreachable', GCC issues a warning that control reaches 31792 the end of a non-void function. It also generates code to return 31793 after the 'asm'. 31794 31795 int f (int c, int v) 31796 { 31797 if (c) 31798 { 31799 return v; 31800 } 31801 else 31802 { 31803 asm("jmp error_handler"); 31804 __builtin_unreachable (); 31805 } 31806 } 31807 31808 Because the 'asm' statement unconditionally transfers control out 31809 of the function, control never reaches the end of the function 31810 body. The '__builtin_unreachable' is in fact unreachable and 31811 communicates this fact to the compiler. 31812 31813 Another use for '__builtin_unreachable' is following a call a 31814 function that never returns but that is not declared 31815 '__attribute__((noreturn))', as in this example: 31816 31817 void function_that_never_returns (void); 31818 31819 int g (int c) 31820 { 31821 if (c) 31822 { 31823 return 1; 31824 } 31825 else 31826 { 31827 function_that_never_returns (); 31828 __builtin_unreachable (); 31829 } 31830 } 31831 31832 -- Built-in Function: void *__builtin_assume_aligned (const void *EXP, 31833 size_t ALIGN, ...) 31834 This function returns its first argument, and allows the compiler 31835 to assume that the returned pointer is at least ALIGN bytes 31836 aligned. This built-in can have either two or three arguments, if 31837 it has three, the third argument should have integer type, and if 31838 it is nonzero means misalignment offset. For example: 31839 31840 void *x = __builtin_assume_aligned (arg, 16); 31841 31842 means that the compiler can assume 'x', set to 'arg', is at least 31843 16-byte aligned, while: 31844 31845 void *x = __builtin_assume_aligned (arg, 32, 8); 31846 31847 means that the compiler can assume for 'x', set to 'arg', that 31848 '(char *) x - 8' is 32-byte aligned. 31849 31850 -- Built-in Function: int __builtin_LINE () 31851 This function is the equivalent to the preprocessor '__LINE__' 31852 macro and returns the line number of the invocation of the 31853 built-in. In a C++ default argument for a function F, it gets the 31854 line number of the call to F. 31855 31856 -- Built-in Function: const char * __builtin_FUNCTION () 31857 This function is the equivalent to the preprocessor '__FUNCTION__' 31858 macro and returns the function name the invocation of the built-in 31859 is in. 31860 31861 -- Built-in Function: const char * __builtin_FILE () 31862 This function is the equivalent to the preprocessor '__FILE__' 31863 macro and returns the file name the invocation of the built-in is 31864 in. In a C++ default argument for a function F, it gets the file 31865 name of the call to F. 31866 31867 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 31868 *END) 31869 This function is used to flush the processor's instruction cache 31870 for the region of memory between BEGIN inclusive and END exclusive. 31871 Some targets require that the instruction cache be flushed, after 31872 modifying memory containing code, in order to obtain deterministic 31873 behavior. 31874 31875 If the target does not require instruction cache flushes, 31876 '__builtin___clear_cache' has no effect. Otherwise either 31877 instructions are emitted in-line to clear the instruction cache or 31878 a call to the '__clear_cache' function in libgcc is made. 31879 31880 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 31881 This function is used to minimize cache-miss latency by moving data 31882 into a cache before it is accessed. You can insert calls to 31883 '__builtin_prefetch' into code for which you know addresses of data 31884 in memory that is likely to be accessed soon. If the target 31885 supports them, data prefetch instructions are generated. If the 31886 prefetch is done early enough before the access then the data will 31887 be in the cache by the time it is accessed. 31888 31889 The value of ADDR is the address of the memory to prefetch. There 31890 are two optional arguments, RW and LOCALITY. The value of RW is a 31891 compile-time constant one or zero; one means that the prefetch is 31892 preparing for a write to the memory address and zero, the default, 31893 means that the prefetch is preparing for a read. The value 31894 LOCALITY must be a compile-time constant integer between zero and 31895 three. A value of zero means that the data has no temporal 31896 locality, so it need not be left in the cache after the access. A 31897 value of three means that the data has a high degree of temporal 31898 locality and should be left in all levels of cache possible. 31899 Values of one and two mean, respectively, a low or moderate degree 31900 of temporal locality. The default is three. 31901 31902 for (i = 0; i < n; i++) 31903 { 31904 a[i] = a[i] + b[i]; 31905 __builtin_prefetch (&a[i+j], 1, 1); 31906 __builtin_prefetch (&b[i+j], 0, 1); 31907 /* ... */ 31908 } 31909 31910 Data prefetch does not generate faults if ADDR is invalid, but the 31911 address expression itself must be valid. For example, a prefetch 31912 of 'p->next' does not fault if 'p->next' is not a valid address, 31913 but evaluation faults if 'p' is not a valid address. 31914 31915 If the target does not support data prefetch, the address 31916 expression is evaluated if it includes side effects but no other 31917 code is generated and GCC does not issue a warning. 31918 31919 -- Built-in Function: double __builtin_huge_val (void) 31920 Returns a positive infinity, if supported by the floating-point 31921 format, else 'DBL_MAX'. This function is suitable for implementing 31922 the ISO C macro 'HUGE_VAL'. 31923 31924 -- Built-in Function: float __builtin_huge_valf (void) 31925 Similar to '__builtin_huge_val', except the return type is 'float'. 31926 31927 -- Built-in Function: long double __builtin_huge_vall (void) 31928 Similar to '__builtin_huge_val', except the return type is 'long 31929 double'. 31930 31931 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 31932 int, ...) 31933 This built-in implements the C99 fpclassify functionality. The 31934 first five int arguments should be the target library's notion of 31935 the possible FP classes and are used for return values. They must 31936 be constant values and they must appear in this order: 'FP_NAN', 31937 'FP_INFINITE', 'FP_NORMAL', 'FP_SUBNORMAL' and 'FP_ZERO'. The 31938 ellipsis is for exactly one floating-point value to classify. GCC 31939 treats the last argument as type-generic, which means it does not 31940 do default promotion from float to double. 31941 31942 -- Built-in Function: double __builtin_inf (void) 31943 Similar to '__builtin_huge_val', except a warning is generated if 31944 the target floating-point format does not support infinities. 31945 31946 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 31947 Similar to '__builtin_inf', except the return type is '_Decimal32'. 31948 31949 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 31950 Similar to '__builtin_inf', except the return type is '_Decimal64'. 31951 31952 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 31953 Similar to '__builtin_inf', except the return type is 31954 '_Decimal128'. 31955 31956 -- Built-in Function: float __builtin_inff (void) 31957 Similar to '__builtin_inf', except the return type is 'float'. 31958 This function is suitable for implementing the ISO C99 macro 31959 'INFINITY'. 31960 31961 -- Built-in Function: long double __builtin_infl (void) 31962 Similar to '__builtin_inf', except the return type is 'long 31963 double'. 31964 31965 -- Built-in Function: int __builtin_isinf_sign (...) 31966 Similar to 'isinf', except the return value is -1 for an argument 31967 of '-Inf' and 1 for an argument of '+Inf'. Note while the 31968 parameter list is an ellipsis, this function only accepts exactly 31969 one floating-point argument. GCC treats this parameter as 31970 type-generic, which means it does not do default promotion from 31971 float to double. 31972 31973 -- Built-in Function: double __builtin_nan (const char *str) 31974 This is an implementation of the ISO C99 function 'nan'. 31975 31976 Since ISO C99 defines this function in terms of 'strtod', which we 31977 do not implement, a description of the parsing is in order. The 31978 string is parsed as by 'strtol'; that is, the base is recognized by 31979 leading '0' or '0x' prefixes. The number parsed is placed in the 31980 significand such that the least significant bit of the number is at 31981 the least significant bit of the significand. The number is 31982 truncated to fit the significand field provided. The significand 31983 is forced to be a quiet NaN. 31984 31985 This function, if given a string literal all of which would have 31986 been consumed by 'strtol', is evaluated early enough that it is 31987 considered a compile-time constant. 31988 31989 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 31990 Similar to '__builtin_nan', except the return type is '_Decimal32'. 31991 31992 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 31993 Similar to '__builtin_nan', except the return type is '_Decimal64'. 31994 31995 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 31996 Similar to '__builtin_nan', except the return type is 31997 '_Decimal128'. 31998 31999 -- Built-in Function: float __builtin_nanf (const char *str) 32000 Similar to '__builtin_nan', except the return type is 'float'. 32001 32002 -- Built-in Function: long double __builtin_nanl (const char *str) 32003 Similar to '__builtin_nan', except the return type is 'long 32004 double'. 32005 32006 -- Built-in Function: double __builtin_nans (const char *str) 32007 Similar to '__builtin_nan', except the significand is forced to be 32008 a signaling NaN. The 'nans' function is proposed by WG14 N965. 32009 32010 -- Built-in Function: float __builtin_nansf (const char *str) 32011 Similar to '__builtin_nans', except the return type is 'float'. 32012 32013 -- Built-in Function: long double __builtin_nansl (const char *str) 32014 Similar to '__builtin_nans', except the return type is 'long 32015 double'. 32016 32017 -- Built-in Function: int __builtin_ffs (int x) 32018 Returns one plus the index of the least significant 1-bit of X, or 32019 if X is zero, returns zero. 32020 32021 -- Built-in Function: int __builtin_clz (unsigned int x) 32022 Returns the number of leading 0-bits in X, starting at the most 32023 significant bit position. If X is 0, the result is undefined. 32024 32025 -- Built-in Function: int __builtin_ctz (unsigned int x) 32026 Returns the number of trailing 0-bits in X, starting at the least 32027 significant bit position. If X is 0, the result is undefined. 32028 32029 -- Built-in Function: int __builtin_clrsb (int x) 32030 Returns the number of leading redundant sign bits in X, i.e. the 32031 number of bits following the most significant bit that are 32032 identical to it. There are no special cases for 0 or other values. 32033 32034 -- Built-in Function: int __builtin_popcount (unsigned int x) 32035 Returns the number of 1-bits in X. 32036 32037 -- Built-in Function: int __builtin_parity (unsigned int x) 32038 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 32039 32040 -- Built-in Function: int __builtin_ffsl (long) 32041 Similar to '__builtin_ffs', except the argument type is 'long'. 32042 32043 -- Built-in Function: int __builtin_clzl (unsigned long) 32044 Similar to '__builtin_clz', except the argument type is 'unsigned 32045 long'. 32046 32047 -- Built-in Function: int __builtin_ctzl (unsigned long) 32048 Similar to '__builtin_ctz', except the argument type is 'unsigned 32049 long'. 32050 32051 -- Built-in Function: int __builtin_clrsbl (long) 32052 Similar to '__builtin_clrsb', except the argument type is 'long'. 32053 32054 -- Built-in Function: int __builtin_popcountl (unsigned long) 32055 Similar to '__builtin_popcount', except the argument type is 32056 'unsigned long'. 32057 32058 -- Built-in Function: int __builtin_parityl (unsigned long) 32059 Similar to '__builtin_parity', except the argument type is 32060 'unsigned long'. 32061 32062 -- Built-in Function: int __builtin_ffsll (long long) 32063 Similar to '__builtin_ffs', except the argument type is 'long 32064 long'. 32065 32066 -- Built-in Function: int __builtin_clzll (unsigned long long) 32067 Similar to '__builtin_clz', except the argument type is 'unsigned 32068 long long'. 32069 32070 -- Built-in Function: int __builtin_ctzll (unsigned long long) 32071 Similar to '__builtin_ctz', except the argument type is 'unsigned 32072 long long'. 32073 32074 -- Built-in Function: int __builtin_clrsbll (long long) 32075 Similar to '__builtin_clrsb', except the argument type is 'long 32076 long'. 32077 32078 -- Built-in Function: int __builtin_popcountll (unsigned long long) 32079 Similar to '__builtin_popcount', except the argument type is 32080 'unsigned long long'. 32081 32082 -- Built-in Function: int __builtin_parityll (unsigned long long) 32083 Similar to '__builtin_parity', except the argument type is 32084 'unsigned long long'. 32085 32086 -- Built-in Function: double __builtin_powi (double, int) 32087 Returns the first argument raised to the power of the second. 32088 Unlike the 'pow' function no guarantees about precision and 32089 rounding are made. 32090 32091 -- Built-in Function: float __builtin_powif (float, int) 32092 Similar to '__builtin_powi', except the argument and return types 32093 are 'float'. 32094 32095 -- Built-in Function: long double __builtin_powil (long double, int) 32096 Similar to '__builtin_powi', except the argument and return types 32097 are 'long double'. 32098 32099 -- Built-in Function: uint16_t __builtin_bswap16 (uint16_t x) 32100 Returns X with the order of the bytes reversed; for example, 32101 '0xaabb' becomes '0xbbaa'. Byte here always means exactly 8 bits. 32102 32103 -- Built-in Function: uint32_t __builtin_bswap32 (uint32_t x) 32104 Similar to '__builtin_bswap16', except the argument and return 32105 types are 32 bit. 32106 32107 -- Built-in Function: uint64_t __builtin_bswap64 (uint64_t x) 32108 Similar to '__builtin_bswap32', except the argument and return 32109 types are 64 bit. 32110 32111 32112File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 32113 321146.57 Built-in Functions Specific to Particular Target Machines 32115============================================================== 32116 32117On some target machines, GCC supports many built-in functions specific 32118to those machines. Generally these generate calls to specific machine 32119instructions, but allow the compiler to schedule those calls. 32120 32121* Menu: 32122 32123* Alpha Built-in Functions:: 32124* Altera Nios II Built-in Functions:: 32125* ARC Built-in Functions:: 32126* ARC SIMD Built-in Functions:: 32127* ARM iWMMXt Built-in Functions:: 32128* ARM NEON Intrinsics:: 32129* ARM ACLE Intrinsics:: 32130* AVR Built-in Functions:: 32131* Blackfin Built-in Functions:: 32132* FR-V Built-in Functions:: 32133* X86 Built-in Functions:: 32134* X86 transactional memory intrinsics:: 32135* MIPS DSP Built-in Functions:: 32136* MIPS Paired-Single Support:: 32137* MIPS Loongson Built-in Functions:: 32138* Other MIPS Built-in Functions:: 32139* MSP430 Built-in Functions:: 32140* NDS32 Built-in Functions:: 32141* picoChip Built-in Functions:: 32142* PowerPC Built-in Functions:: 32143* PowerPC AltiVec/VSX Built-in Functions:: 32144* PowerPC Hardware Transactional Memory Built-in Functions:: 32145* RX Built-in Functions:: 32146* S/390 System z Built-in Functions:: 32147* SH Built-in Functions:: 32148* SPARC VIS Built-in Functions:: 32149* SPU Built-in Functions:: 32150* TI C6X Built-in Functions:: 32151* TILE-Gx Built-in Functions:: 32152* TILEPro Built-in Functions:: 32153 32154 32155File: gcc.info, Node: Alpha Built-in Functions, Next: Altera Nios II Built-in Functions, Up: Target Builtins 32156 321576.57.1 Alpha Built-in Functions 32158------------------------------- 32159 32160These built-in functions are available for the Alpha family of 32161processors, depending on the command-line switches used. 32162 32163 The following built-in functions are always available. They all 32164generate the machine instruction that is part of the name. 32165 32166 long __builtin_alpha_implver (void) 32167 long __builtin_alpha_rpcc (void) 32168 long __builtin_alpha_amask (long) 32169 long __builtin_alpha_cmpbge (long, long) 32170 long __builtin_alpha_extbl (long, long) 32171 long __builtin_alpha_extwl (long, long) 32172 long __builtin_alpha_extll (long, long) 32173 long __builtin_alpha_extql (long, long) 32174 long __builtin_alpha_extwh (long, long) 32175 long __builtin_alpha_extlh (long, long) 32176 long __builtin_alpha_extqh (long, long) 32177 long __builtin_alpha_insbl (long, long) 32178 long __builtin_alpha_inswl (long, long) 32179 long __builtin_alpha_insll (long, long) 32180 long __builtin_alpha_insql (long, long) 32181 long __builtin_alpha_inswh (long, long) 32182 long __builtin_alpha_inslh (long, long) 32183 long __builtin_alpha_insqh (long, long) 32184 long __builtin_alpha_mskbl (long, long) 32185 long __builtin_alpha_mskwl (long, long) 32186 long __builtin_alpha_mskll (long, long) 32187 long __builtin_alpha_mskql (long, long) 32188 long __builtin_alpha_mskwh (long, long) 32189 long __builtin_alpha_msklh (long, long) 32190 long __builtin_alpha_mskqh (long, long) 32191 long __builtin_alpha_umulh (long, long) 32192 long __builtin_alpha_zap (long, long) 32193 long __builtin_alpha_zapnot (long, long) 32194 32195 The following built-in functions are always with '-mmax' or '-mcpu=CPU' 32196where CPU is 'pca56' or later. They all generate the machine 32197instruction that is part of the name. 32198 32199 long __builtin_alpha_pklb (long) 32200 long __builtin_alpha_pkwb (long) 32201 long __builtin_alpha_unpkbl (long) 32202 long __builtin_alpha_unpkbw (long) 32203 long __builtin_alpha_minub8 (long, long) 32204 long __builtin_alpha_minsb8 (long, long) 32205 long __builtin_alpha_minuw4 (long, long) 32206 long __builtin_alpha_minsw4 (long, long) 32207 long __builtin_alpha_maxub8 (long, long) 32208 long __builtin_alpha_maxsb8 (long, long) 32209 long __builtin_alpha_maxuw4 (long, long) 32210 long __builtin_alpha_maxsw4 (long, long) 32211 long __builtin_alpha_perr (long, long) 32212 32213 The following built-in functions are always with '-mcix' or '-mcpu=CPU' 32214where CPU is 'ev67' or later. They all generate the machine instruction 32215that is part of the name. 32216 32217 long __builtin_alpha_cttz (long) 32218 long __builtin_alpha_ctlz (long) 32219 long __builtin_alpha_ctpop (long) 32220 32221 The following built-in functions are available on systems that use the 32222OSF/1 PALcode. Normally they invoke the 'rduniq' and 'wruniq' PAL 32223calls, but when invoked with '-mtls-kernel', they invoke 'rdval' and 32224'wrval'. 32225 32226 void *__builtin_thread_pointer (void) 32227 void __builtin_set_thread_pointer (void *) 32228 32229 32230File: gcc.info, Node: Altera Nios II Built-in Functions, Next: ARC Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins 32231 322326.57.2 Altera Nios II Built-in Functions 32233---------------------------------------- 32234 32235These built-in functions are available for the Altera Nios II family of 32236processors. 32237 32238 The following built-in functions are always available. They all 32239generate the machine instruction that is part of the name. 32240 32241 int __builtin_ldbio (volatile const void *) 32242 int __builtin_ldbuio (volatile const void *) 32243 int __builtin_ldhio (volatile const void *) 32244 int __builtin_ldhuio (volatile const void *) 32245 int __builtin_ldwio (volatile const void *) 32246 void __builtin_stbio (volatile void *, int) 32247 void __builtin_sthio (volatile void *, int) 32248 void __builtin_stwio (volatile void *, int) 32249 void __builtin_sync (void) 32250 int __builtin_rdctl (int) 32251 void __builtin_wrctl (int, int) 32252 32253 The following built-in functions are always available. They all 32254generate a Nios II Custom Instruction. The name of the function 32255represents the types that the function takes and returns. The letter 32256before the 'n' is the return type or void if absent. The 'n' represents 32257the first parameter to all the custom instructions, the custom 32258instruction number. The two letters after the 'n' represent the up to 32259two parameters to the function. 32260 32261 The letters represent the following data types: 32262'<no letter>' 32263 'void' for return type and no parameter for parameter types. 32264 32265'i' 32266 'int' for return type and parameter type 32267 32268'f' 32269 'float' for return type and parameter type 32270 32271'p' 32272 'void *' for return type and parameter type 32273 32274 And the function names are: 32275 void __builtin_custom_n (void) 32276 void __builtin_custom_ni (int) 32277 void __builtin_custom_nf (float) 32278 void __builtin_custom_np (void *) 32279 void __builtin_custom_nii (int, int) 32280 void __builtin_custom_nif (int, float) 32281 void __builtin_custom_nip (int, void *) 32282 void __builtin_custom_nfi (float, int) 32283 void __builtin_custom_nff (float, float) 32284 void __builtin_custom_nfp (float, void *) 32285 void __builtin_custom_npi (void *, int) 32286 void __builtin_custom_npf (void *, float) 32287 void __builtin_custom_npp (void *, void *) 32288 int __builtin_custom_in (void) 32289 int __builtin_custom_ini (int) 32290 int __builtin_custom_inf (float) 32291 int __builtin_custom_inp (void *) 32292 int __builtin_custom_inii (int, int) 32293 int __builtin_custom_inif (int, float) 32294 int __builtin_custom_inip (int, void *) 32295 int __builtin_custom_infi (float, int) 32296 int __builtin_custom_inff (float, float) 32297 int __builtin_custom_infp (float, void *) 32298 int __builtin_custom_inpi (void *, int) 32299 int __builtin_custom_inpf (void *, float) 32300 int __builtin_custom_inpp (void *, void *) 32301 float __builtin_custom_fn (void) 32302 float __builtin_custom_fni (int) 32303 float __builtin_custom_fnf (float) 32304 float __builtin_custom_fnp (void *) 32305 float __builtin_custom_fnii (int, int) 32306 float __builtin_custom_fnif (int, float) 32307 float __builtin_custom_fnip (int, void *) 32308 float __builtin_custom_fnfi (float, int) 32309 float __builtin_custom_fnff (float, float) 32310 float __builtin_custom_fnfp (float, void *) 32311 float __builtin_custom_fnpi (void *, int) 32312 float __builtin_custom_fnpf (void *, float) 32313 float __builtin_custom_fnpp (void *, void *) 32314 void * __builtin_custom_pn (void) 32315 void * __builtin_custom_pni (int) 32316 void * __builtin_custom_pnf (float) 32317 void * __builtin_custom_pnp (void *) 32318 void * __builtin_custom_pnii (int, int) 32319 void * __builtin_custom_pnif (int, float) 32320 void * __builtin_custom_pnip (int, void *) 32321 void * __builtin_custom_pnfi (float, int) 32322 void * __builtin_custom_pnff (float, float) 32323 void * __builtin_custom_pnfp (float, void *) 32324 void * __builtin_custom_pnpi (void *, int) 32325 void * __builtin_custom_pnpf (void *, float) 32326 void * __builtin_custom_pnpp (void *, void *) 32327 32328 32329File: gcc.info, Node: ARC Built-in Functions, Next: ARC SIMD Built-in Functions, Prev: Altera Nios II Built-in Functions, Up: Target Builtins 32330 323316.57.3 ARC Built-in Functions 32332----------------------------- 32333 32334The following built-in functions are provided for ARC targets. The 32335built-ins generate the corresponding assembly instructions. In the 32336examples given below, the generated code often requires an operand or 32337result to be in a register. Where necessary further code will be 32338generated to ensure this is true, but for brevity this is not described 32339in each case. 32340 32341 _Note:_ Using a built-in to generate an instruction not supported by a 32342target may cause problems. At present the compiler is not guaranteed to 32343detect such misuse, and as a result an internal compiler error may be 32344generated. 32345 32346 -- Built-in Function: int __builtin_arc_aligned (void *VAL, int 32347 ALIGNVAL) 32348 Return 1 if VAL is known to have the byte alignment given by 32349 ALIGNVAL, otherwise return 0. Note that this is different from 32350 __alignof__(*(char *)VAL) >= alignval 32351 because __alignof__ sees only the type of the dereference, whereas 32352 __builtin_arc_align uses alignment information from the pointer as 32353 well as from the pointed-to type. The information available will 32354 depend on optimization level. 32355 32356 -- Built-in Function: void __builtin_arc_brk (void) 32357 Generates 32358 brk 32359 32360 -- Built-in Function: unsigned int __builtin_arc_core_read (unsigned 32361 int REGNO) 32362 The operand is the number of a register to be read. Generates: 32363 mov DEST, rREGNO 32364 where the value in DEST will be the result returned from the 32365 built-in. 32366 32367 -- Built-in Function: void __builtin_arc_core_write (unsigned int 32368 REGNO, unsigned int VAL) 32369 The first operand is the number of a register to be written, the 32370 second operand is a compile time constant to write into that 32371 register. Generates: 32372 mov rREGNO, VAL 32373 32374 -- Built-in Function: int __builtin_arc_divaw (int A, int B) 32375 Only available if either '-mcpu=ARC700' or '-meA' is set. 32376 Generates: 32377 divaw DEST, A, B 32378 where the value in DEST will be the result returned from the 32379 built-in. 32380 32381 -- Built-in Function: void __builtin_arc_flag (unsigned int A) 32382 Generates 32383 flag A 32384 32385 -- Built-in Function: unsigned int __builtin_arc_lr (unsigned int AUXR) 32386 The operand, AUXV, is the address of an auxiliary register and must 32387 be a compile time constant. Generates: 32388 lr DEST, [AUXR] 32389 Where the value in DEST will be the result returned from the 32390 built-in. 32391 32392 -- Built-in Function: void __builtin_arc_mul64 (int A, int B) 32393 Only available with '-mmul64'. Generates: 32394 mul64 A, B 32395 32396 -- Built-in Function: void __builtin_arc_mulu64 (unsigned int A, 32397 unsigned int B) 32398 Only available with '-mmul64'. Generates: 32399 mulu64 A, B 32400 32401 -- Built-in Function: void __builtin_arc_nop (void) 32402 Generates: 32403 nop 32404 32405 -- Built-in Function: int __builtin_arc_norm (int SRC) 32406 Only valid if the 'norm' instruction is available through the 32407 '-mnorm' option or by default with '-mcpu=ARC700'. Generates: 32408 norm DEST, SRC 32409 Where the value in DEST will be the result returned from the 32410 built-in. 32411 32412 -- Built-in Function: short int __builtin_arc_normw (short int SRC) 32413 Only valid if the 'normw' instruction is available through the 32414 '-mnorm' option or by default with '-mcpu=ARC700'. Generates: 32415 normw DEST, SRC 32416 Where the value in DEST will be the result returned from the 32417 built-in. 32418 32419 -- Built-in Function: void __builtin_arc_rtie (void) 32420 Generates: 32421 rtie 32422 32423 -- Built-in Function: void __builtin_arc_sleep (int A 32424 Generates: 32425 sleep A 32426 32427 -- Built-in Function: void __builtin_arc_sr (unsigned int AUXR, 32428 unsigned int VAL) 32429 The first argument, AUXV, is the address of an auxiliary register, 32430 the second argument, VAL, is a compile time constant to be written 32431 to the register. Generates: 32432 sr AUXR, [VAL] 32433 32434 -- Built-in Function: int __builtin_arc_swap (int SRC) 32435 Only valid with '-mswap'. Generates: 32436 swap DEST, SRC 32437 Where the value in DEST will be the result returned from the 32438 built-in. 32439 32440 -- Built-in Function: void __builtin_arc_swi (void) 32441 Generates: 32442 swi 32443 32444 -- Built-in Function: void __builtin_arc_sync (void) 32445 Only available with '-mcpu=ARC700'. Generates: 32446 sync 32447 32448 -- Built-in Function: void __builtin_arc_trap_s (unsigned int C) 32449 Only available with '-mcpu=ARC700'. Generates: 32450 trap_s C 32451 32452 -- Built-in Function: void __builtin_arc_unimp_s (void) 32453 Only available with '-mcpu=ARC700'. Generates: 32454 unimp_s 32455 32456 The instructions generated by the following builtins are not considered 32457as candidates for scheduling. They are not moved around by the compiler 32458during scheduling, and thus can be expected to appear where they are put 32459in the C code: 32460 __builtin_arc_brk() 32461 __builtin_arc_core_read() 32462 __builtin_arc_core_write() 32463 __builtin_arc_flag() 32464 __builtin_arc_lr() 32465 __builtin_arc_sleep() 32466 __builtin_arc_sr() 32467 __builtin_arc_swi() 32468 32469 32470File: gcc.info, Node: ARC SIMD Built-in Functions, Next: ARM iWMMXt Built-in Functions, Prev: ARC Built-in Functions, Up: Target Builtins 32471 324726.57.4 ARC SIMD Built-in Functions 32473---------------------------------- 32474 32475SIMD builtins provided by the compiler can be used to generate the 32476vector instructions. This section describes the available builtins and 32477their usage in programs. With the '-msimd' option, the compiler 32478provides 128-bit vector types, which can be specified using the 32479'vector_size' attribute. The header file 'arc-simd.h' can be included 32480to use the following predefined types: 32481 typedef int __v4si __attribute__((vector_size(16))); 32482 typedef short __v8hi __attribute__((vector_size(16))); 32483 32484 These types can be used to define 128-bit variables. The built-in 32485functions listed in the following section can be used on these variables 32486to generate the vector operations. 32487 32488 For all builtins, '__builtin_arc_SOMEINSN', the header file 32489'arc-simd.h' also provides equivalent macros called '_SOMEINSN' that can 32490be used for programming ease and improved readability. The following 32491macros for DMA control are also provided: 32492 #define _setup_dma_in_channel_reg _vdiwr 32493 #define _setup_dma_out_channel_reg _vdowr 32494 32495 The following is a complete list of all the SIMD built-ins provided for 32496ARC, grouped by calling signature. 32497 32498 The following take two '__v8hi' arguments and return a '__v8hi' result: 32499 __v8hi __builtin_arc_vaddaw (__v8hi, __v8hi) 32500 __v8hi __builtin_arc_vaddw (__v8hi, __v8hi) 32501 __v8hi __builtin_arc_vand (__v8hi, __v8hi) 32502 __v8hi __builtin_arc_vandaw (__v8hi, __v8hi) 32503 __v8hi __builtin_arc_vavb (__v8hi, __v8hi) 32504 __v8hi __builtin_arc_vavrb (__v8hi, __v8hi) 32505 __v8hi __builtin_arc_vbic (__v8hi, __v8hi) 32506 __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi) 32507 __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi) 32508 __v8hi __builtin_arc_vdifw (__v8hi, __v8hi) 32509 __v8hi __builtin_arc_veqw (__v8hi, __v8hi) 32510 __v8hi __builtin_arc_vh264f (__v8hi, __v8hi) 32511 __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi) 32512 __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi) 32513 __v8hi __builtin_arc_vlew (__v8hi, __v8hi) 32514 __v8hi __builtin_arc_vltw (__v8hi, __v8hi) 32515 __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi) 32516 __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi) 32517 __v8hi __builtin_arc_vminaw (__v8hi, __v8hi) 32518 __v8hi __builtin_arc_vminw (__v8hi, __v8hi) 32519 __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi) 32520 __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi) 32521 __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi) 32522 __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi) 32523 __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi) 32524 __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi) 32525 __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi) 32526 __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi) 32527 __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi) 32528 __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi) 32529 __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi) 32530 __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi) 32531 __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi) 32532 __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi) 32533 __v8hi __builtin_arc_vmrb (__v8hi, __v8hi) 32534 __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi) 32535 __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi) 32536 __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi) 32537 __v8hi __builtin_arc_vmulw (__v8hi, __v8hi) 32538 __v8hi __builtin_arc_vnew (__v8hi, __v8hi) 32539 __v8hi __builtin_arc_vor (__v8hi, __v8hi) 32540 __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi) 32541 __v8hi __builtin_arc_vsubw (__v8hi, __v8hi) 32542 __v8hi __builtin_arc_vsummw (__v8hi, __v8hi) 32543 __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi) 32544 __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi) 32545 __v8hi __builtin_arc_vxor (__v8hi, __v8hi) 32546 __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi) 32547 32548 The following take one '__v8hi' and one 'int' argument and return a 32549'__v8hi' result: 32550 32551 __v8hi __builtin_arc_vbaddw (__v8hi, int) 32552 __v8hi __builtin_arc_vbmaxw (__v8hi, int) 32553 __v8hi __builtin_arc_vbminw (__v8hi, int) 32554 __v8hi __builtin_arc_vbmulaw (__v8hi, int) 32555 __v8hi __builtin_arc_vbmulfw (__v8hi, int) 32556 __v8hi __builtin_arc_vbmulw (__v8hi, int) 32557 __v8hi __builtin_arc_vbrsubw (__v8hi, int) 32558 __v8hi __builtin_arc_vbsubw (__v8hi, int) 32559 32560 The following take one '__v8hi' argument and one 'int' argument which 32561must be a 3-bit compile time constant indicating a register number 32562I0-I7. They return a '__v8hi' result. 32563 __v8hi __builtin_arc_vasrw (__v8hi, const int) 32564 __v8hi __builtin_arc_vsr8 (__v8hi, const int) 32565 __v8hi __builtin_arc_vsr8aw (__v8hi, const int) 32566 32567 The following take one '__v8hi' argument and one 'int' argument which 32568must be a 6-bit compile time constant. They return a '__v8hi' result. 32569 __v8hi __builtin_arc_vasrpwbi (__v8hi, const int) 32570 __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int) 32571 __v8hi __builtin_arc_vasrrwi (__v8hi, const int) 32572 __v8hi __builtin_arc_vasrsrwi (__v8hi, const int) 32573 __v8hi __builtin_arc_vasrwi (__v8hi, const int) 32574 __v8hi __builtin_arc_vsr8awi (__v8hi, const int) 32575 __v8hi __builtin_arc_vsr8i (__v8hi, const int) 32576 32577 The following take one '__v8hi' argument and one 'int' argument which 32578must be a 8-bit compile time constant. They return a '__v8hi' result. 32579 __v8hi __builtin_arc_vd6tapf (__v8hi, const int) 32580 __v8hi __builtin_arc_vmvaw (__v8hi, const int) 32581 __v8hi __builtin_arc_vmvw (__v8hi, const int) 32582 __v8hi __builtin_arc_vmvzw (__v8hi, const int) 32583 32584 The following take two 'int' arguments, the second of which which must 32585be a 8-bit compile time constant. They return a '__v8hi' result: 32586 __v8hi __builtin_arc_vmovaw (int, const int) 32587 __v8hi __builtin_arc_vmovw (int, const int) 32588 __v8hi __builtin_arc_vmovzw (int, const int) 32589 32590 The following take a single '__v8hi' argument and return a '__v8hi' 32591result: 32592 __v8hi __builtin_arc_vabsaw (__v8hi) 32593 __v8hi __builtin_arc_vabsw (__v8hi) 32594 __v8hi __builtin_arc_vaddsuw (__v8hi) 32595 __v8hi __builtin_arc_vexch1 (__v8hi) 32596 __v8hi __builtin_arc_vexch2 (__v8hi) 32597 __v8hi __builtin_arc_vexch4 (__v8hi) 32598 __v8hi __builtin_arc_vsignw (__v8hi) 32599 __v8hi __builtin_arc_vupbaw (__v8hi) 32600 __v8hi __builtin_arc_vupbw (__v8hi) 32601 __v8hi __builtin_arc_vupsbaw (__v8hi) 32602 __v8hi __builtin_arc_vupsbw (__v8hi) 32603 32604 The followign take two 'int' arguments and return no result: 32605 void __builtin_arc_vdirun (int, int) 32606 void __builtin_arc_vdorun (int, int) 32607 32608 The following take two 'int' arguments and return no result. The first 32609argument must a 3-bit compile time constant indicating one of the 32610DR0-DR7 DMA setup channels: 32611 void __builtin_arc_vdiwr (const int, int) 32612 void __builtin_arc_vdowr (const int, int) 32613 32614 The following take an 'int' argument and return no result: 32615 void __builtin_arc_vendrec (int) 32616 void __builtin_arc_vrec (int) 32617 void __builtin_arc_vrecrun (int) 32618 void __builtin_arc_vrun (int) 32619 32620 The following take a '__v8hi' argument and two 'int' arguments and 32621return a '__v8hi' result. The second argument must be a 3-bit compile 32622time constants, indicating one the registers I0-I7, and the third 32623argument must be an 8-bit compile time constant. 32624 32625 _Note:_ Although the equivalent hardware instructions do not take an 32626SIMD register as an operand, these builtins overwrite the relevant bits 32627of the '__v8hi' register provided as the first argument with the value 32628loaded from the '[Ib, u8]' location in the SDM. 32629 32630 __v8hi __builtin_arc_vld32 (__v8hi, const int, const int) 32631 __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int) 32632 __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int) 32633 __v8hi __builtin_arc_vld64 (__v8hi, const int, const int) 32634 32635 The following take two 'int' arguments and return a '__v8hi' result. 32636The first argument must be a 3-bit compile time constants, indicating 32637one the registers I0-I7, and the second argument must be an 8-bit 32638compile time constant. 32639 32640 __v8hi __builtin_arc_vld128 (const int, const int) 32641 __v8hi __builtin_arc_vld64w (const int, const int) 32642 32643 The following take a '__v8hi' argument and two 'int' arguments and 32644return no result. The second argument must be a 3-bit compile time 32645constants, indicating one the registers I0-I7, and the third argument 32646must be an 8-bit compile time constant. 32647 32648 void __builtin_arc_vst128 (__v8hi, const int, const int) 32649 void __builtin_arc_vst64 (__v8hi, const int, const int) 32650 32651 The following take a '__v8hi' argument and three 'int' arguments and 32652return no result. The second argument must be a 3-bit compile-time 32653constant, identifying the 16-bit sub-register to be stored, the third 32654argument must be a 3-bit compile time constants, indicating one the 32655registers I0-I7, and the fourth argument must be an 8-bit compile time 32656constant. 32657 32658 void __builtin_arc_vst16_n (__v8hi, const int, const int, const int) 32659 void __builtin_arc_vst32_n (__v8hi, const int, const int, const int) 32660 32661 32662File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: ARC SIMD Built-in Functions, Up: Target Builtins 32663 326646.57.5 ARM iWMMXt Built-in Functions 32665------------------------------------ 32666 32667These built-in functions are available for the ARM family of processors 32668when the '-mcpu=iwmmxt' switch is used: 32669 32670 typedef int v2si __attribute__ ((vector_size (8))); 32671 typedef short v4hi __attribute__ ((vector_size (8))); 32672 typedef char v8qi __attribute__ ((vector_size (8))); 32673 32674 int __builtin_arm_getwcgr0 (void) 32675 void __builtin_arm_setwcgr0 (int) 32676 int __builtin_arm_getwcgr1 (void) 32677 void __builtin_arm_setwcgr1 (int) 32678 int __builtin_arm_getwcgr2 (void) 32679 void __builtin_arm_setwcgr2 (int) 32680 int __builtin_arm_getwcgr3 (void) 32681 void __builtin_arm_setwcgr3 (int) 32682 int __builtin_arm_textrmsb (v8qi, int) 32683 int __builtin_arm_textrmsh (v4hi, int) 32684 int __builtin_arm_textrmsw (v2si, int) 32685 int __builtin_arm_textrmub (v8qi, int) 32686 int __builtin_arm_textrmuh (v4hi, int) 32687 int __builtin_arm_textrmuw (v2si, int) 32688 v8qi __builtin_arm_tinsrb (v8qi, int, int) 32689 v4hi __builtin_arm_tinsrh (v4hi, int, int) 32690 v2si __builtin_arm_tinsrw (v2si, int, int) 32691 long long __builtin_arm_tmia (long long, int, int) 32692 long long __builtin_arm_tmiabb (long long, int, int) 32693 long long __builtin_arm_tmiabt (long long, int, int) 32694 long long __builtin_arm_tmiaph (long long, int, int) 32695 long long __builtin_arm_tmiatb (long long, int, int) 32696 long long __builtin_arm_tmiatt (long long, int, int) 32697 int __builtin_arm_tmovmskb (v8qi) 32698 int __builtin_arm_tmovmskh (v4hi) 32699 int __builtin_arm_tmovmskw (v2si) 32700 long long __builtin_arm_waccb (v8qi) 32701 long long __builtin_arm_wacch (v4hi) 32702 long long __builtin_arm_waccw (v2si) 32703 v8qi __builtin_arm_waddb (v8qi, v8qi) 32704 v8qi __builtin_arm_waddbss (v8qi, v8qi) 32705 v8qi __builtin_arm_waddbus (v8qi, v8qi) 32706 v4hi __builtin_arm_waddh (v4hi, v4hi) 32707 v4hi __builtin_arm_waddhss (v4hi, v4hi) 32708 v4hi __builtin_arm_waddhus (v4hi, v4hi) 32709 v2si __builtin_arm_waddw (v2si, v2si) 32710 v2si __builtin_arm_waddwss (v2si, v2si) 32711 v2si __builtin_arm_waddwus (v2si, v2si) 32712 v8qi __builtin_arm_walign (v8qi, v8qi, int) 32713 long long __builtin_arm_wand(long long, long long) 32714 long long __builtin_arm_wandn (long long, long long) 32715 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 32716 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 32717 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 32718 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 32719 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 32720 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 32721 v2si __builtin_arm_wcmpeqw (v2si, v2si) 32722 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 32723 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 32724 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 32725 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 32726 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 32727 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 32728 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 32729 long long __builtin_arm_wmacsz (v4hi, v4hi) 32730 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 32731 long long __builtin_arm_wmacuz (v4hi, v4hi) 32732 v4hi __builtin_arm_wmadds (v4hi, v4hi) 32733 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 32734 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 32735 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 32736 v2si __builtin_arm_wmaxsw (v2si, v2si) 32737 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 32738 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 32739 v2si __builtin_arm_wmaxuw (v2si, v2si) 32740 v8qi __builtin_arm_wminsb (v8qi, v8qi) 32741 v4hi __builtin_arm_wminsh (v4hi, v4hi) 32742 v2si __builtin_arm_wminsw (v2si, v2si) 32743 v8qi __builtin_arm_wminub (v8qi, v8qi) 32744 v4hi __builtin_arm_wminuh (v4hi, v4hi) 32745 v2si __builtin_arm_wminuw (v2si, v2si) 32746 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 32747 v4hi __builtin_arm_wmulul (v4hi, v4hi) 32748 v4hi __builtin_arm_wmulum (v4hi, v4hi) 32749 long long __builtin_arm_wor (long long, long long) 32750 v2si __builtin_arm_wpackdss (long long, long long) 32751 v2si __builtin_arm_wpackdus (long long, long long) 32752 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 32753 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 32754 v4hi __builtin_arm_wpackwss (v2si, v2si) 32755 v4hi __builtin_arm_wpackwus (v2si, v2si) 32756 long long __builtin_arm_wrord (long long, long long) 32757 long long __builtin_arm_wrordi (long long, int) 32758 v4hi __builtin_arm_wrorh (v4hi, long long) 32759 v4hi __builtin_arm_wrorhi (v4hi, int) 32760 v2si __builtin_arm_wrorw (v2si, long long) 32761 v2si __builtin_arm_wrorwi (v2si, int) 32762 v2si __builtin_arm_wsadb (v2si, v8qi, v8qi) 32763 v2si __builtin_arm_wsadbz (v8qi, v8qi) 32764 v2si __builtin_arm_wsadh (v2si, v4hi, v4hi) 32765 v2si __builtin_arm_wsadhz (v4hi, v4hi) 32766 v4hi __builtin_arm_wshufh (v4hi, int) 32767 long long __builtin_arm_wslld (long long, long long) 32768 long long __builtin_arm_wslldi (long long, int) 32769 v4hi __builtin_arm_wsllh (v4hi, long long) 32770 v4hi __builtin_arm_wsllhi (v4hi, int) 32771 v2si __builtin_arm_wsllw (v2si, long long) 32772 v2si __builtin_arm_wsllwi (v2si, int) 32773 long long __builtin_arm_wsrad (long long, long long) 32774 long long __builtin_arm_wsradi (long long, int) 32775 v4hi __builtin_arm_wsrah (v4hi, long long) 32776 v4hi __builtin_arm_wsrahi (v4hi, int) 32777 v2si __builtin_arm_wsraw (v2si, long long) 32778 v2si __builtin_arm_wsrawi (v2si, int) 32779 long long __builtin_arm_wsrld (long long, long long) 32780 long long __builtin_arm_wsrldi (long long, int) 32781 v4hi __builtin_arm_wsrlh (v4hi, long long) 32782 v4hi __builtin_arm_wsrlhi (v4hi, int) 32783 v2si __builtin_arm_wsrlw (v2si, long long) 32784 v2si __builtin_arm_wsrlwi (v2si, int) 32785 v8qi __builtin_arm_wsubb (v8qi, v8qi) 32786 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 32787 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 32788 v4hi __builtin_arm_wsubh (v4hi, v4hi) 32789 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 32790 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 32791 v2si __builtin_arm_wsubw (v2si, v2si) 32792 v2si __builtin_arm_wsubwss (v2si, v2si) 32793 v2si __builtin_arm_wsubwus (v2si, v2si) 32794 v4hi __builtin_arm_wunpckehsb (v8qi) 32795 v2si __builtin_arm_wunpckehsh (v4hi) 32796 long long __builtin_arm_wunpckehsw (v2si) 32797 v4hi __builtin_arm_wunpckehub (v8qi) 32798 v2si __builtin_arm_wunpckehuh (v4hi) 32799 long long __builtin_arm_wunpckehuw (v2si) 32800 v4hi __builtin_arm_wunpckelsb (v8qi) 32801 v2si __builtin_arm_wunpckelsh (v4hi) 32802 long long __builtin_arm_wunpckelsw (v2si) 32803 v4hi __builtin_arm_wunpckelub (v8qi) 32804 v2si __builtin_arm_wunpckeluh (v4hi) 32805 long long __builtin_arm_wunpckeluw (v2si) 32806 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 32807 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 32808 v2si __builtin_arm_wunpckihw (v2si, v2si) 32809 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 32810 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 32811 v2si __builtin_arm_wunpckilw (v2si, v2si) 32812 long long __builtin_arm_wxor (long long, long long) 32813 long long __builtin_arm_wzero () 32814 32815 32816File: gcc.info, Node: ARM NEON Intrinsics, Next: ARM ACLE Intrinsics, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 32817 328186.57.6 ARM NEON Intrinsics 32819-------------------------- 32820 32821These built-in intrinsics for the ARM Advanced SIMD extension are 32822available when the '-mfpu=neon' switch is used: 32823 328246.57.6.1 Addition 32825................. 32826 32827 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 32828 _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' 32829 32830 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 32831 _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' 32832 32833 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 32834 _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' 32835 32836 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 32837 _Form of expected instruction(s):_ 'vadd.i32 D0, D0, D0' 32838 32839 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 32840 _Form of expected instruction(s):_ 'vadd.i16 D0, D0, D0' 32841 32842 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 32843 _Form of expected instruction(s):_ 'vadd.i8 D0, D0, D0' 32844 32845 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 32846 _Form of expected instruction(s):_ 'vadd.f32 D0, D0, D0' 32847 32848 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 32849 32850 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 32851 32852 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 32853 _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' 32854 32855 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 32856 _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' 32857 32858 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 32859 _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' 32860 32861 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 32862 _Form of expected instruction(s):_ 'vadd.i32 Q0, Q0, Q0' 32863 32864 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 32865 _Form of expected instruction(s):_ 'vadd.i16 Q0, Q0, Q0' 32866 32867 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 32868 _Form of expected instruction(s):_ 'vadd.i8 Q0, Q0, Q0' 32869 32870 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 32871 _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' 32872 32873 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 32874 _Form of expected instruction(s):_ 'vadd.i64 Q0, Q0, Q0' 32875 32876 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 32877 _Form of expected instruction(s):_ 'vadd.f32 Q0, Q0, Q0' 32878 32879 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 32880 _Form of expected instruction(s):_ 'vaddl.u32 Q0, D0, D0' 32881 32882 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 32883 _Form of expected instruction(s):_ 'vaddl.u16 Q0, D0, D0' 32884 32885 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 32886 _Form of expected instruction(s):_ 'vaddl.u8 Q0, D0, D0' 32887 32888 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 32889 _Form of expected instruction(s):_ 'vaddl.s32 Q0, D0, D0' 32890 32891 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 32892 _Form of expected instruction(s):_ 'vaddl.s16 Q0, D0, D0' 32893 32894 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 32895 _Form of expected instruction(s):_ 'vaddl.s8 Q0, D0, D0' 32896 32897 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 32898 _Form of expected instruction(s):_ 'vaddw.u32 Q0, Q0, D0' 32899 32900 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 32901 _Form of expected instruction(s):_ 'vaddw.u16 Q0, Q0, D0' 32902 32903 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 32904 _Form of expected instruction(s):_ 'vaddw.u8 Q0, Q0, D0' 32905 32906 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 32907 _Form of expected instruction(s):_ 'vaddw.s32 Q0, Q0, D0' 32908 32909 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 32910 _Form of expected instruction(s):_ 'vaddw.s16 Q0, Q0, D0' 32911 32912 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 32913 _Form of expected instruction(s):_ 'vaddw.s8 Q0, Q0, D0' 32914 32915 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 32916 _Form of expected instruction(s):_ 'vhadd.u32 D0, D0, D0' 32917 32918 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 32919 _Form of expected instruction(s):_ 'vhadd.u16 D0, D0, D0' 32920 32921 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 32922 _Form of expected instruction(s):_ 'vhadd.u8 D0, D0, D0' 32923 32924 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 32925 _Form of expected instruction(s):_ 'vhadd.s32 D0, D0, D0' 32926 32927 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 32928 _Form of expected instruction(s):_ 'vhadd.s16 D0, D0, D0' 32929 32930 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 32931 _Form of expected instruction(s):_ 'vhadd.s8 D0, D0, D0' 32932 32933 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 32934 _Form of expected instruction(s):_ 'vhadd.u32 Q0, Q0, Q0' 32935 32936 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 32937 _Form of expected instruction(s):_ 'vhadd.u16 Q0, Q0, Q0' 32938 32939 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 32940 _Form of expected instruction(s):_ 'vhadd.u8 Q0, Q0, Q0' 32941 32942 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 32943 _Form of expected instruction(s):_ 'vhadd.s32 Q0, Q0, Q0' 32944 32945 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 32946 _Form of expected instruction(s):_ 'vhadd.s16 Q0, Q0, Q0' 32947 32948 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 32949 _Form of expected instruction(s):_ 'vhadd.s8 Q0, Q0, Q0' 32950 32951 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 32952 _Form of expected instruction(s):_ 'vrhadd.u32 D0, D0, D0' 32953 32954 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 32955 _Form of expected instruction(s):_ 'vrhadd.u16 D0, D0, D0' 32956 32957 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 32958 _Form of expected instruction(s):_ 'vrhadd.u8 D0, D0, D0' 32959 32960 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 32961 _Form of expected instruction(s):_ 'vrhadd.s32 D0, D0, D0' 32962 32963 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 32964 _Form of expected instruction(s):_ 'vrhadd.s16 D0, D0, D0' 32965 32966 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 32967 _Form of expected instruction(s):_ 'vrhadd.s8 D0, D0, D0' 32968 32969 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 32970 _Form of expected instruction(s):_ 'vrhadd.u32 Q0, Q0, Q0' 32971 32972 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 32973 _Form of expected instruction(s):_ 'vrhadd.u16 Q0, Q0, Q0' 32974 32975 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 32976 _Form of expected instruction(s):_ 'vrhadd.u8 Q0, Q0, Q0' 32977 32978 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 32979 _Form of expected instruction(s):_ 'vrhadd.s32 Q0, Q0, Q0' 32980 32981 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 32982 _Form of expected instruction(s):_ 'vrhadd.s16 Q0, Q0, Q0' 32983 32984 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 32985 _Form of expected instruction(s):_ 'vrhadd.s8 Q0, Q0, Q0' 32986 32987 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 32988 _Form of expected instruction(s):_ 'vqadd.u32 D0, D0, D0' 32989 32990 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 32991 _Form of expected instruction(s):_ 'vqadd.u16 D0, D0, D0' 32992 32993 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 32994 _Form of expected instruction(s):_ 'vqadd.u8 D0, D0, D0' 32995 32996 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 32997 _Form of expected instruction(s):_ 'vqadd.s32 D0, D0, D0' 32998 32999 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 33000 _Form of expected instruction(s):_ 'vqadd.s16 D0, D0, D0' 33001 33002 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 33003 _Form of expected instruction(s):_ 'vqadd.s8 D0, D0, D0' 33004 33005 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 33006 _Form of expected instruction(s):_ 'vqadd.u64 D0, D0, D0' 33007 33008 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 33009 _Form of expected instruction(s):_ 'vqadd.s64 D0, D0, D0' 33010 33011 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 33012 _Form of expected instruction(s):_ 'vqadd.u32 Q0, Q0, Q0' 33013 33014 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 33015 _Form of expected instruction(s):_ 'vqadd.u16 Q0, Q0, Q0' 33016 33017 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 33018 _Form of expected instruction(s):_ 'vqadd.u8 Q0, Q0, Q0' 33019 33020 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 33021 _Form of expected instruction(s):_ 'vqadd.s32 Q0, Q0, Q0' 33022 33023 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 33024 _Form of expected instruction(s):_ 'vqadd.s16 Q0, Q0, Q0' 33025 33026 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 33027 _Form of expected instruction(s):_ 'vqadd.s8 Q0, Q0, Q0' 33028 33029 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 33030 _Form of expected instruction(s):_ 'vqadd.u64 Q0, Q0, Q0' 33031 33032 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 33033 _Form of expected instruction(s):_ 'vqadd.s64 Q0, Q0, Q0' 33034 33035 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 33036 _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' 33037 33038 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 33039 _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' 33040 33041 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 33042 _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' 33043 33044 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 33045 _Form of expected instruction(s):_ 'vaddhn.i64 D0, Q0, Q0' 33046 33047 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 33048 _Form of expected instruction(s):_ 'vaddhn.i32 D0, Q0, Q0' 33049 33050 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 33051 _Form of expected instruction(s):_ 'vaddhn.i16 D0, Q0, Q0' 33052 33053 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 33054 _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' 33055 33056 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 33057 _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' 33058 33059 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 33060 _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' 33061 33062 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 33063 _Form of expected instruction(s):_ 'vraddhn.i64 D0, Q0, Q0' 33064 33065 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 33066 _Form of expected instruction(s):_ 'vraddhn.i32 D0, Q0, Q0' 33067 33068 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 33069 _Form of expected instruction(s):_ 'vraddhn.i16 D0, Q0, Q0' 33070 330716.57.6.2 Multiplication 33072....................... 33073 33074 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 33075 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' 33076 33077 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 33078 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' 33079 33080 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 33081 _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' 33082 33083 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 33084 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0' 33085 33086 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 33087 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0' 33088 33089 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 33090 _Form of expected instruction(s):_ 'vmul.i8 D0, D0, D0' 33091 33092 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 33093 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0' 33094 33095 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 33096 _Form of expected instruction(s):_ 'vmul.p8 D0, D0, D0' 33097 33098 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 33099 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' 33100 33101 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 33102 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' 33103 33104 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 33105 _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' 33106 33107 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 33108 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, Q0' 33109 33110 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 33111 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, Q0' 33112 33113 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 33114 _Form of expected instruction(s):_ 'vmul.i8 Q0, Q0, Q0' 33115 33116 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 33117 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, Q0' 33118 33119 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 33120 _Form of expected instruction(s):_ 'vmul.p8 Q0, Q0, Q0' 33121 33122 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 33123 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0' 33124 33125 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 33126 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0' 33127 33128 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 33129 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, Q0' 33130 33131 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 33132 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, Q0' 33133 33134 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 33135 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0' 33136 33137 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 33138 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0' 33139 33140 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 33141 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, Q0' 33142 33143 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 33144 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, Q0' 33145 33146 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 33147 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0' 33148 33149 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 33150 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0' 33151 33152 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 33153 _Form of expected instruction(s):_ 'vmull.u8 Q0, D0, D0' 33154 33155 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 33156 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0' 33157 33158 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 33159 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0' 33160 33161 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 33162 _Form of expected instruction(s):_ 'vmull.s8 Q0, D0, D0' 33163 33164 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 33165 _Form of expected instruction(s):_ 'vmull.p8 Q0, D0, D0' 33166 33167 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 33168 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0' 33169 33170 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 33171 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0' 33172 331736.57.6.3 Multiply-accumulate 33174............................ 33175 33176 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 33177 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' 33178 33179 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 33180 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' 33181 33182 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33183 _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' 33184 33185 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 33186 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0' 33187 33188 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 33189 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0' 33190 33191 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 33192 _Form of expected instruction(s):_ 'vmla.i8 D0, D0, D0' 33193 33194 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 33195 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0' 33196 33197 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 33198 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' 33199 33200 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 33201 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' 33202 33203 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 33204 _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' 33205 33206 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 33207 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, Q0' 33208 33209 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 33210 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, Q0' 33211 33212 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 33213 _Form of expected instruction(s):_ 'vmla.i8 Q0, Q0, Q0' 33214 33215 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 33216 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, Q0' 33217 33218 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 33219 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0' 33220 33221 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 33222 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0' 33223 33224 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 33225 _Form of expected instruction(s):_ 'vmlal.u8 Q0, D0, D0' 33226 33227 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 33228 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0' 33229 33230 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 33231 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0' 33232 33233 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 33234 _Form of expected instruction(s):_ 'vmlal.s8 Q0, D0, D0' 33235 33236 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 33237 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0' 33238 33239 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 33240 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0' 33241 332426.57.6.4 Multiply-subtract 33243.......................... 33244 33245 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 33246 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' 33247 33248 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 33249 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' 33250 33251 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33252 _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' 33253 33254 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 33255 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0' 33256 33257 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 33258 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0' 33259 33260 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 33261 _Form of expected instruction(s):_ 'vmls.i8 D0, D0, D0' 33262 33263 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 33264 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0' 33265 33266 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 33267 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' 33268 33269 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 33270 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' 33271 33272 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 33273 _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' 33274 33275 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 33276 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, Q0' 33277 33278 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 33279 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, Q0' 33280 33281 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 33282 _Form of expected instruction(s):_ 'vmls.i8 Q0, Q0, Q0' 33283 33284 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 33285 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, Q0' 33286 33287 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 33288 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0' 33289 33290 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 33291 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0' 33292 33293 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 33294 _Form of expected instruction(s):_ 'vmlsl.u8 Q0, D0, D0' 33295 33296 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 33297 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0' 33298 33299 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 33300 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0' 33301 33302 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 33303 _Form of expected instruction(s):_ 'vmlsl.s8 Q0, D0, D0' 33304 33305 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 33306 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0' 33307 33308 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 33309 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0' 33310 333116.57.6.5 Fused-multiply-accumulate 33312.................................. 33313 33314 * float32x2_t vfma_f32 (float32x2_t, float32x2_t, float32x2_t) 33315 _Form of expected instruction(s):_ 'vfma.f32 D0, D0, D0' 33316 33317 * float32x4_t vfmaq_f32 (float32x4_t, float32x4_t, float32x4_t) 33318 _Form of expected instruction(s):_ 'vfma.f32 Q0, Q0, Q0' 33319 333206.57.6.6 Fused-multiply-subtract 33321................................ 33322 33323 * float32x2_t vfms_f32 (float32x2_t, float32x2_t, float32x2_t) 33324 _Form of expected instruction(s):_ 'vfms.f32 D0, D0, D0' 33325 33326 * float32x4_t vfmsq_f32 (float32x4_t, float32x4_t, float32x4_t) 33327 _Form of expected instruction(s):_ 'vfms.f32 Q0, Q0, Q0' 33328 333296.57.6.7 Round to integral (to nearest, ties to even) 33330..................................................... 33331 33332 * float32x2_t vrndn_f32 (float32x2_t) 33333 _Form of expected instruction(s):_ 'vrintn.f32 D0, D0' 33334 33335 * float32x4_t vrndqn_f32 (float32x4_t) 33336 _Form of expected instruction(s):_ 'vrintn.f32 Q0, Q0' 33337 333386.57.6.8 Round to integral (to nearest, ties away from zero) 33339............................................................ 33340 33341 * float32x2_t vrnda_f32 (float32x2_t) 33342 _Form of expected instruction(s):_ 'vrinta.f32 D0, D0' 33343 33344 * float32x4_t vrndqa_f32 (float32x4_t) 33345 _Form of expected instruction(s):_ 'vrinta.f32 Q0, Q0' 33346 333476.57.6.9 Round to integral (towards +Inf) 33348......................................... 33349 33350 * float32x2_t vrndp_f32 (float32x2_t) 33351 _Form of expected instruction(s):_ 'vrintp.f32 D0, D0' 33352 33353 * float32x4_t vrndqp_f32 (float32x4_t) 33354 _Form of expected instruction(s):_ 'vrintp.f32 Q0, Q0' 33355 333566.57.6.10 Round to integral (towards -Inf) 33357.......................................... 33358 33359 * float32x2_t vrndm_f32 (float32x2_t) 33360 _Form of expected instruction(s):_ 'vrintm.f32 D0, D0' 33361 33362 * float32x4_t vrndqm_f32 (float32x4_t) 33363 _Form of expected instruction(s):_ 'vrintm.f32 Q0, Q0' 33364 333656.57.6.11 Round to integral (towards 0) 33366....................................... 33367 33368 * float32x2_t vrnd_f32 (float32x2_t) 33369 _Form of expected instruction(s):_ 'vrintz.f32 D0, D0' 33370 33371 * float32x4_t vrndq_f32 (float32x4_t) 33372 _Form of expected instruction(s):_ 'vrintz.f32 Q0, Q0' 33373 333746.57.6.12 Subtraction 33375..................... 33376 33377 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 33378 _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' 33379 33380 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 33381 _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' 33382 33383 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 33384 _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' 33385 33386 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 33387 _Form of expected instruction(s):_ 'vsub.i32 D0, D0, D0' 33388 33389 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 33390 _Form of expected instruction(s):_ 'vsub.i16 D0, D0, D0' 33391 33392 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 33393 _Form of expected instruction(s):_ 'vsub.i8 D0, D0, D0' 33394 33395 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 33396 _Form of expected instruction(s):_ 'vsub.f32 D0, D0, D0' 33397 33398 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 33399 33400 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 33401 33402 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 33403 _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' 33404 33405 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 33406 _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' 33407 33408 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 33409 _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' 33410 33411 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 33412 _Form of expected instruction(s):_ 'vsub.i32 Q0, Q0, Q0' 33413 33414 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 33415 _Form of expected instruction(s):_ 'vsub.i16 Q0, Q0, Q0' 33416 33417 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 33418 _Form of expected instruction(s):_ 'vsub.i8 Q0, Q0, Q0' 33419 33420 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 33421 _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' 33422 33423 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 33424 _Form of expected instruction(s):_ 'vsub.i64 Q0, Q0, Q0' 33425 33426 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 33427 _Form of expected instruction(s):_ 'vsub.f32 Q0, Q0, Q0' 33428 33429 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 33430 _Form of expected instruction(s):_ 'vsubl.u32 Q0, D0, D0' 33431 33432 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 33433 _Form of expected instruction(s):_ 'vsubl.u16 Q0, D0, D0' 33434 33435 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 33436 _Form of expected instruction(s):_ 'vsubl.u8 Q0, D0, D0' 33437 33438 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 33439 _Form of expected instruction(s):_ 'vsubl.s32 Q0, D0, D0' 33440 33441 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 33442 _Form of expected instruction(s):_ 'vsubl.s16 Q0, D0, D0' 33443 33444 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 33445 _Form of expected instruction(s):_ 'vsubl.s8 Q0, D0, D0' 33446 33447 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 33448 _Form of expected instruction(s):_ 'vsubw.u32 Q0, Q0, D0' 33449 33450 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 33451 _Form of expected instruction(s):_ 'vsubw.u16 Q0, Q0, D0' 33452 33453 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 33454 _Form of expected instruction(s):_ 'vsubw.u8 Q0, Q0, D0' 33455 33456 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 33457 _Form of expected instruction(s):_ 'vsubw.s32 Q0, Q0, D0' 33458 33459 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 33460 _Form of expected instruction(s):_ 'vsubw.s16 Q0, Q0, D0' 33461 33462 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 33463 _Form of expected instruction(s):_ 'vsubw.s8 Q0, Q0, D0' 33464 33465 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 33466 _Form of expected instruction(s):_ 'vhsub.u32 D0, D0, D0' 33467 33468 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 33469 _Form of expected instruction(s):_ 'vhsub.u16 D0, D0, D0' 33470 33471 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 33472 _Form of expected instruction(s):_ 'vhsub.u8 D0, D0, D0' 33473 33474 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 33475 _Form of expected instruction(s):_ 'vhsub.s32 D0, D0, D0' 33476 33477 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 33478 _Form of expected instruction(s):_ 'vhsub.s16 D0, D0, D0' 33479 33480 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 33481 _Form of expected instruction(s):_ 'vhsub.s8 D0, D0, D0' 33482 33483 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 33484 _Form of expected instruction(s):_ 'vhsub.u32 Q0, Q0, Q0' 33485 33486 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 33487 _Form of expected instruction(s):_ 'vhsub.u16 Q0, Q0, Q0' 33488 33489 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 33490 _Form of expected instruction(s):_ 'vhsub.u8 Q0, Q0, Q0' 33491 33492 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 33493 _Form of expected instruction(s):_ 'vhsub.s32 Q0, Q0, Q0' 33494 33495 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 33496 _Form of expected instruction(s):_ 'vhsub.s16 Q0, Q0, Q0' 33497 33498 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 33499 _Form of expected instruction(s):_ 'vhsub.s8 Q0, Q0, Q0' 33500 33501 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 33502 _Form of expected instruction(s):_ 'vqsub.u32 D0, D0, D0' 33503 33504 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 33505 _Form of expected instruction(s):_ 'vqsub.u16 D0, D0, D0' 33506 33507 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 33508 _Form of expected instruction(s):_ 'vqsub.u8 D0, D0, D0' 33509 33510 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 33511 _Form of expected instruction(s):_ 'vqsub.s32 D0, D0, D0' 33512 33513 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 33514 _Form of expected instruction(s):_ 'vqsub.s16 D0, D0, D0' 33515 33516 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 33517 _Form of expected instruction(s):_ 'vqsub.s8 D0, D0, D0' 33518 33519 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 33520 _Form of expected instruction(s):_ 'vqsub.u64 D0, D0, D0' 33521 33522 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 33523 _Form of expected instruction(s):_ 'vqsub.s64 D0, D0, D0' 33524 33525 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 33526 _Form of expected instruction(s):_ 'vqsub.u32 Q0, Q0, Q0' 33527 33528 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 33529 _Form of expected instruction(s):_ 'vqsub.u16 Q0, Q0, Q0' 33530 33531 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 33532 _Form of expected instruction(s):_ 'vqsub.u8 Q0, Q0, Q0' 33533 33534 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 33535 _Form of expected instruction(s):_ 'vqsub.s32 Q0, Q0, Q0' 33536 33537 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 33538 _Form of expected instruction(s):_ 'vqsub.s16 Q0, Q0, Q0' 33539 33540 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 33541 _Form of expected instruction(s):_ 'vqsub.s8 Q0, Q0, Q0' 33542 33543 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 33544 _Form of expected instruction(s):_ 'vqsub.u64 Q0, Q0, Q0' 33545 33546 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 33547 _Form of expected instruction(s):_ 'vqsub.s64 Q0, Q0, Q0' 33548 33549 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 33550 _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' 33551 33552 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 33553 _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' 33554 33555 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 33556 _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' 33557 33558 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 33559 _Form of expected instruction(s):_ 'vsubhn.i64 D0, Q0, Q0' 33560 33561 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 33562 _Form of expected instruction(s):_ 'vsubhn.i32 D0, Q0, Q0' 33563 33564 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 33565 _Form of expected instruction(s):_ 'vsubhn.i16 D0, Q0, Q0' 33566 33567 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 33568 _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' 33569 33570 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 33571 _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' 33572 33573 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 33574 _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' 33575 33576 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 33577 _Form of expected instruction(s):_ 'vrsubhn.i64 D0, Q0, Q0' 33578 33579 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 33580 _Form of expected instruction(s):_ 'vrsubhn.i32 D0, Q0, Q0' 33581 33582 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 33583 _Form of expected instruction(s):_ 'vrsubhn.i16 D0, Q0, Q0' 33584 335856.57.6.13 Comparison (equal-to) 33586............................... 33587 33588 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 33589 _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' 33590 33591 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 33592 _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' 33593 33594 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 33595 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 33596 33597 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 33598 _Form of expected instruction(s):_ 'vceq.i32 D0, D0, D0' 33599 33600 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 33601 _Form of expected instruction(s):_ 'vceq.i16 D0, D0, D0' 33602 33603 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 33604 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 33605 33606 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 33607 _Form of expected instruction(s):_ 'vceq.f32 D0, D0, D0' 33608 33609 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 33610 _Form of expected instruction(s):_ 'vceq.i8 D0, D0, D0' 33611 33612 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 33613 _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' 33614 33615 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 33616 _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' 33617 33618 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 33619 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 33620 33621 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 33622 _Form of expected instruction(s):_ 'vceq.i32 Q0, Q0, Q0' 33623 33624 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 33625 _Form of expected instruction(s):_ 'vceq.i16 Q0, Q0, Q0' 33626 33627 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 33628 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 33629 33630 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 33631 _Form of expected instruction(s):_ 'vceq.f32 Q0, Q0, Q0' 33632 33633 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 33634 _Form of expected instruction(s):_ 'vceq.i8 Q0, Q0, Q0' 33635 336366.57.6.14 Comparison (greater-than-or-equal-to) 33637............................................... 33638 33639 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 33640 _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' 33641 33642 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 33643 _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' 33644 33645 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 33646 _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' 33647 33648 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 33649 _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' 33650 33651 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 33652 _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' 33653 33654 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 33655 _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' 33656 33657 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 33658 _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' 33659 33660 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 33661 _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' 33662 33663 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 33664 _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' 33665 33666 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 33667 _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' 33668 33669 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 33670 _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' 33671 33672 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 33673 _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' 33674 33675 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 33676 _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' 33677 33678 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 33679 _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' 33680 336816.57.6.15 Comparison (less-than-or-equal-to) 33682............................................ 33683 33684 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 33685 _Form of expected instruction(s):_ 'vcge.s32 D0, D0, D0' 33686 33687 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 33688 _Form of expected instruction(s):_ 'vcge.s16 D0, D0, D0' 33689 33690 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 33691 _Form of expected instruction(s):_ 'vcge.s8 D0, D0, D0' 33692 33693 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 33694 _Form of expected instruction(s):_ 'vcge.f32 D0, D0, D0' 33695 33696 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 33697 _Form of expected instruction(s):_ 'vcge.u32 D0, D0, D0' 33698 33699 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 33700 _Form of expected instruction(s):_ 'vcge.u16 D0, D0, D0' 33701 33702 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 33703 _Form of expected instruction(s):_ 'vcge.u8 D0, D0, D0' 33704 33705 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 33706 _Form of expected instruction(s):_ 'vcge.s32 Q0, Q0, Q0' 33707 33708 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 33709 _Form of expected instruction(s):_ 'vcge.s16 Q0, Q0, Q0' 33710 33711 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 33712 _Form of expected instruction(s):_ 'vcge.s8 Q0, Q0, Q0' 33713 33714 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 33715 _Form of expected instruction(s):_ 'vcge.f32 Q0, Q0, Q0' 33716 33717 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 33718 _Form of expected instruction(s):_ 'vcge.u32 Q0, Q0, Q0' 33719 33720 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 33721 _Form of expected instruction(s):_ 'vcge.u16 Q0, Q0, Q0' 33722 33723 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 33724 _Form of expected instruction(s):_ 'vcge.u8 Q0, Q0, Q0' 33725 337266.57.6.16 Comparison (greater-than) 33727................................... 33728 33729 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 33730 _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' 33731 33732 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 33733 _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' 33734 33735 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 33736 _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' 33737 33738 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 33739 _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' 33740 33741 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 33742 _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' 33743 33744 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 33745 _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' 33746 33747 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 33748 _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' 33749 33750 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 33751 _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' 33752 33753 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 33754 _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' 33755 33756 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 33757 _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' 33758 33759 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 33760 _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' 33761 33762 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 33763 _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' 33764 33765 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 33766 _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' 33767 33768 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 33769 _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' 33770 337716.57.6.17 Comparison (less-than) 33772................................ 33773 33774 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 33775 _Form of expected instruction(s):_ 'vcgt.s32 D0, D0, D0' 33776 33777 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 33778 _Form of expected instruction(s):_ 'vcgt.s16 D0, D0, D0' 33779 33780 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 33781 _Form of expected instruction(s):_ 'vcgt.s8 D0, D0, D0' 33782 33783 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 33784 _Form of expected instruction(s):_ 'vcgt.f32 D0, D0, D0' 33785 33786 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 33787 _Form of expected instruction(s):_ 'vcgt.u32 D0, D0, D0' 33788 33789 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 33790 _Form of expected instruction(s):_ 'vcgt.u16 D0, D0, D0' 33791 33792 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 33793 _Form of expected instruction(s):_ 'vcgt.u8 D0, D0, D0' 33794 33795 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 33796 _Form of expected instruction(s):_ 'vcgt.s32 Q0, Q0, Q0' 33797 33798 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 33799 _Form of expected instruction(s):_ 'vcgt.s16 Q0, Q0, Q0' 33800 33801 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 33802 _Form of expected instruction(s):_ 'vcgt.s8 Q0, Q0, Q0' 33803 33804 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 33805 _Form of expected instruction(s):_ 'vcgt.f32 Q0, Q0, Q0' 33806 33807 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 33808 _Form of expected instruction(s):_ 'vcgt.u32 Q0, Q0, Q0' 33809 33810 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 33811 _Form of expected instruction(s):_ 'vcgt.u16 Q0, Q0, Q0' 33812 33813 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 33814 _Form of expected instruction(s):_ 'vcgt.u8 Q0, Q0, Q0' 33815 338166.57.6.18 Comparison (absolute greater-than-or-equal-to) 33817........................................................ 33818 33819 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 33820 _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' 33821 33822 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 33823 _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' 33824 338256.57.6.19 Comparison (absolute less-than-or-equal-to) 33826..................................................... 33827 33828 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 33829 _Form of expected instruction(s):_ 'vacge.f32 D0, D0, D0' 33830 33831 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 33832 _Form of expected instruction(s):_ 'vacge.f32 Q0, Q0, Q0' 33833 338346.57.6.20 Comparison (absolute greater-than) 33835............................................ 33836 33837 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 33838 _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' 33839 33840 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 33841 _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' 33842 338436.57.6.21 Comparison (absolute less-than) 33844......................................... 33845 33846 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 33847 _Form of expected instruction(s):_ 'vacgt.f32 D0, D0, D0' 33848 33849 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 33850 _Form of expected instruction(s):_ 'vacgt.f32 Q0, Q0, Q0' 33851 338526.57.6.22 Test bits 33853................... 33854 33855 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 33856 _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' 33857 33858 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 33859 _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' 33860 33861 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 33862 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 33863 33864 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 33865 _Form of expected instruction(s):_ 'vtst.32 D0, D0, D0' 33866 33867 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 33868 _Form of expected instruction(s):_ 'vtst.16 D0, D0, D0' 33869 33870 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 33871 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 33872 33873 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 33874 _Form of expected instruction(s):_ 'vtst.8 D0, D0, D0' 33875 33876 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 33877 _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' 33878 33879 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 33880 _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' 33881 33882 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 33883 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 33884 33885 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 33886 _Form of expected instruction(s):_ 'vtst.32 Q0, Q0, Q0' 33887 33888 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 33889 _Form of expected instruction(s):_ 'vtst.16 Q0, Q0, Q0' 33890 33891 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 33892 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 33893 33894 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 33895 _Form of expected instruction(s):_ 'vtst.8 Q0, Q0, Q0' 33896 338976.57.6.23 Absolute difference 33898............................. 33899 33900 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 33901 _Form of expected instruction(s):_ 'vabd.u32 D0, D0, D0' 33902 33903 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 33904 _Form of expected instruction(s):_ 'vabd.u16 D0, D0, D0' 33905 33906 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 33907 _Form of expected instruction(s):_ 'vabd.u8 D0, D0, D0' 33908 33909 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 33910 _Form of expected instruction(s):_ 'vabd.s32 D0, D0, D0' 33911 33912 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 33913 _Form of expected instruction(s):_ 'vabd.s16 D0, D0, D0' 33914 33915 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 33916 _Form of expected instruction(s):_ 'vabd.s8 D0, D0, D0' 33917 33918 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 33919 _Form of expected instruction(s):_ 'vabd.f32 D0, D0, D0' 33920 33921 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 33922 _Form of expected instruction(s):_ 'vabd.u32 Q0, Q0, Q0' 33923 33924 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 33925 _Form of expected instruction(s):_ 'vabd.u16 Q0, Q0, Q0' 33926 33927 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 33928 _Form of expected instruction(s):_ 'vabd.u8 Q0, Q0, Q0' 33929 33930 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 33931 _Form of expected instruction(s):_ 'vabd.s32 Q0, Q0, Q0' 33932 33933 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 33934 _Form of expected instruction(s):_ 'vabd.s16 Q0, Q0, Q0' 33935 33936 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 33937 _Form of expected instruction(s):_ 'vabd.s8 Q0, Q0, Q0' 33938 33939 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 33940 _Form of expected instruction(s):_ 'vabd.f32 Q0, Q0, Q0' 33941 33942 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 33943 _Form of expected instruction(s):_ 'vabdl.u32 Q0, D0, D0' 33944 33945 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 33946 _Form of expected instruction(s):_ 'vabdl.u16 Q0, D0, D0' 33947 33948 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 33949 _Form of expected instruction(s):_ 'vabdl.u8 Q0, D0, D0' 33950 33951 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 33952 _Form of expected instruction(s):_ 'vabdl.s32 Q0, D0, D0' 33953 33954 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 33955 _Form of expected instruction(s):_ 'vabdl.s16 Q0, D0, D0' 33956 33957 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 33958 _Form of expected instruction(s):_ 'vabdl.s8 Q0, D0, D0' 33959 339606.57.6.24 Absolute difference and accumulate 33961............................................ 33962 33963 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 33964 _Form of expected instruction(s):_ 'vaba.u32 D0, D0, D0' 33965 33966 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 33967 _Form of expected instruction(s):_ 'vaba.u16 D0, D0, D0' 33968 33969 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 33970 _Form of expected instruction(s):_ 'vaba.u8 D0, D0, D0' 33971 33972 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 33973 _Form of expected instruction(s):_ 'vaba.s32 D0, D0, D0' 33974 33975 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 33976 _Form of expected instruction(s):_ 'vaba.s16 D0, D0, D0' 33977 33978 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 33979 _Form of expected instruction(s):_ 'vaba.s8 D0, D0, D0' 33980 33981 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 33982 _Form of expected instruction(s):_ 'vaba.u32 Q0, Q0, Q0' 33983 33984 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 33985 _Form of expected instruction(s):_ 'vaba.u16 Q0, Q0, Q0' 33986 33987 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 33988 _Form of expected instruction(s):_ 'vaba.u8 Q0, Q0, Q0' 33989 33990 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 33991 _Form of expected instruction(s):_ 'vaba.s32 Q0, Q0, Q0' 33992 33993 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 33994 _Form of expected instruction(s):_ 'vaba.s16 Q0, Q0, Q0' 33995 33996 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 33997 _Form of expected instruction(s):_ 'vaba.s8 Q0, Q0, Q0' 33998 33999 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 34000 _Form of expected instruction(s):_ 'vabal.u32 Q0, D0, D0' 34001 34002 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 34003 _Form of expected instruction(s):_ 'vabal.u16 Q0, D0, D0' 34004 34005 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 34006 _Form of expected instruction(s):_ 'vabal.u8 Q0, D0, D0' 34007 34008 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 34009 _Form of expected instruction(s):_ 'vabal.s32 Q0, D0, D0' 34010 34011 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 34012 _Form of expected instruction(s):_ 'vabal.s16 Q0, D0, D0' 34013 34014 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 34015 _Form of expected instruction(s):_ 'vabal.s8 Q0, D0, D0' 34016 340176.57.6.25 Maximum 34018................. 34019 34020 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 34021 _Form of expected instruction(s):_ 'vmax.u32 D0, D0, D0' 34022 34023 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 34024 _Form of expected instruction(s):_ 'vmax.u16 D0, D0, D0' 34025 34026 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 34027 _Form of expected instruction(s):_ 'vmax.u8 D0, D0, D0' 34028 34029 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 34030 _Form of expected instruction(s):_ 'vmax.s32 D0, D0, D0' 34031 34032 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 34033 _Form of expected instruction(s):_ 'vmax.s16 D0, D0, D0' 34034 34035 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 34036 _Form of expected instruction(s):_ 'vmax.s8 D0, D0, D0' 34037 34038 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 34039 _Form of expected instruction(s):_ 'vmax.f32 D0, D0, D0' 34040 34041 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 34042 _Form of expected instruction(s):_ 'vmax.u32 Q0, Q0, Q0' 34043 34044 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 34045 _Form of expected instruction(s):_ 'vmax.u16 Q0, Q0, Q0' 34046 34047 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 34048 _Form of expected instruction(s):_ 'vmax.u8 Q0, Q0, Q0' 34049 34050 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 34051 _Form of expected instruction(s):_ 'vmax.s32 Q0, Q0, Q0' 34052 34053 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 34054 _Form of expected instruction(s):_ 'vmax.s16 Q0, Q0, Q0' 34055 34056 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 34057 _Form of expected instruction(s):_ 'vmax.s8 Q0, Q0, Q0' 34058 34059 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 34060 _Form of expected instruction(s):_ 'vmax.f32 Q0, Q0, Q0' 34061 340626.57.6.26 Minimum 34063................. 34064 34065 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 34066 _Form of expected instruction(s):_ 'vmin.u32 D0, D0, D0' 34067 34068 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 34069 _Form of expected instruction(s):_ 'vmin.u16 D0, D0, D0' 34070 34071 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 34072 _Form of expected instruction(s):_ 'vmin.u8 D0, D0, D0' 34073 34074 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 34075 _Form of expected instruction(s):_ 'vmin.s32 D0, D0, D0' 34076 34077 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 34078 _Form of expected instruction(s):_ 'vmin.s16 D0, D0, D0' 34079 34080 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 34081 _Form of expected instruction(s):_ 'vmin.s8 D0, D0, D0' 34082 34083 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 34084 _Form of expected instruction(s):_ 'vmin.f32 D0, D0, D0' 34085 34086 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 34087 _Form of expected instruction(s):_ 'vmin.u32 Q0, Q0, Q0' 34088 34089 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 34090 _Form of expected instruction(s):_ 'vmin.u16 Q0, Q0, Q0' 34091 34092 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 34093 _Form of expected instruction(s):_ 'vmin.u8 Q0, Q0, Q0' 34094 34095 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 34096 _Form of expected instruction(s):_ 'vmin.s32 Q0, Q0, Q0' 34097 34098 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 34099 _Form of expected instruction(s):_ 'vmin.s16 Q0, Q0, Q0' 34100 34101 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 34102 _Form of expected instruction(s):_ 'vmin.s8 Q0, Q0, Q0' 34103 34104 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 34105 _Form of expected instruction(s):_ 'vmin.f32 Q0, Q0, Q0' 34106 341076.57.6.27 Pairwise add 34108...................... 34109 34110 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 34111 _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' 34112 34113 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 34114 _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' 34115 34116 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 34117 _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' 34118 34119 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 34120 _Form of expected instruction(s):_ 'vpadd.i32 D0, D0, D0' 34121 34122 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 34123 _Form of expected instruction(s):_ 'vpadd.i16 D0, D0, D0' 34124 34125 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 34126 _Form of expected instruction(s):_ 'vpadd.i8 D0, D0, D0' 34127 34128 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 34129 _Form of expected instruction(s):_ 'vpadd.f32 D0, D0, D0' 34130 34131 * uint64x1_t vpaddl_u32 (uint32x2_t) 34132 _Form of expected instruction(s):_ 'vpaddl.u32 D0, D0' 34133 34134 * uint32x2_t vpaddl_u16 (uint16x4_t) 34135 _Form of expected instruction(s):_ 'vpaddl.u16 D0, D0' 34136 34137 * uint16x4_t vpaddl_u8 (uint8x8_t) 34138 _Form of expected instruction(s):_ 'vpaddl.u8 D0, D0' 34139 34140 * int64x1_t vpaddl_s32 (int32x2_t) 34141 _Form of expected instruction(s):_ 'vpaddl.s32 D0, D0' 34142 34143 * int32x2_t vpaddl_s16 (int16x4_t) 34144 _Form of expected instruction(s):_ 'vpaddl.s16 D0, D0' 34145 34146 * int16x4_t vpaddl_s8 (int8x8_t) 34147 _Form of expected instruction(s):_ 'vpaddl.s8 D0, D0' 34148 34149 * uint64x2_t vpaddlq_u32 (uint32x4_t) 34150 _Form of expected instruction(s):_ 'vpaddl.u32 Q0, Q0' 34151 34152 * uint32x4_t vpaddlq_u16 (uint16x8_t) 34153 _Form of expected instruction(s):_ 'vpaddl.u16 Q0, Q0' 34154 34155 * uint16x8_t vpaddlq_u8 (uint8x16_t) 34156 _Form of expected instruction(s):_ 'vpaddl.u8 Q0, Q0' 34157 34158 * int64x2_t vpaddlq_s32 (int32x4_t) 34159 _Form of expected instruction(s):_ 'vpaddl.s32 Q0, Q0' 34160 34161 * int32x4_t vpaddlq_s16 (int16x8_t) 34162 _Form of expected instruction(s):_ 'vpaddl.s16 Q0, Q0' 34163 34164 * int16x8_t vpaddlq_s8 (int8x16_t) 34165 _Form of expected instruction(s):_ 'vpaddl.s8 Q0, Q0' 34166 341676.57.6.28 Pairwise add, single_opcode widen and accumulate 34168.......................................................... 34169 34170 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 34171 _Form of expected instruction(s):_ 'vpadal.u32 D0, D0' 34172 34173 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 34174 _Form of expected instruction(s):_ 'vpadal.u16 D0, D0' 34175 34176 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 34177 _Form of expected instruction(s):_ 'vpadal.u8 D0, D0' 34178 34179 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 34180 _Form of expected instruction(s):_ 'vpadal.s32 D0, D0' 34181 34182 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 34183 _Form of expected instruction(s):_ 'vpadal.s16 D0, D0' 34184 34185 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 34186 _Form of expected instruction(s):_ 'vpadal.s8 D0, D0' 34187 34188 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 34189 _Form of expected instruction(s):_ 'vpadal.u32 Q0, Q0' 34190 34191 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 34192 _Form of expected instruction(s):_ 'vpadal.u16 Q0, Q0' 34193 34194 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 34195 _Form of expected instruction(s):_ 'vpadal.u8 Q0, Q0' 34196 34197 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 34198 _Form of expected instruction(s):_ 'vpadal.s32 Q0, Q0' 34199 34200 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 34201 _Form of expected instruction(s):_ 'vpadal.s16 Q0, Q0' 34202 34203 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 34204 _Form of expected instruction(s):_ 'vpadal.s8 Q0, Q0' 34205 342066.57.6.29 Folding maximum 34207......................... 34208 34209 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 34210 _Form of expected instruction(s):_ 'vpmax.u32 D0, D0, D0' 34211 34212 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 34213 _Form of expected instruction(s):_ 'vpmax.u16 D0, D0, D0' 34214 34215 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 34216 _Form of expected instruction(s):_ 'vpmax.u8 D0, D0, D0' 34217 34218 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 34219 _Form of expected instruction(s):_ 'vpmax.s32 D0, D0, D0' 34220 34221 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 34222 _Form of expected instruction(s):_ 'vpmax.s16 D0, D0, D0' 34223 34224 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 34225 _Form of expected instruction(s):_ 'vpmax.s8 D0, D0, D0' 34226 34227 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 34228 _Form of expected instruction(s):_ 'vpmax.f32 D0, D0, D0' 34229 342306.57.6.30 Folding minimum 34231......................... 34232 34233 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 34234 _Form of expected instruction(s):_ 'vpmin.u32 D0, D0, D0' 34235 34236 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 34237 _Form of expected instruction(s):_ 'vpmin.u16 D0, D0, D0' 34238 34239 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 34240 _Form of expected instruction(s):_ 'vpmin.u8 D0, D0, D0' 34241 34242 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 34243 _Form of expected instruction(s):_ 'vpmin.s32 D0, D0, D0' 34244 34245 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 34246 _Form of expected instruction(s):_ 'vpmin.s16 D0, D0, D0' 34247 34248 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 34249 _Form of expected instruction(s):_ 'vpmin.s8 D0, D0, D0' 34250 34251 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 34252 _Form of expected instruction(s):_ 'vpmin.f32 D0, D0, D0' 34253 342546.57.6.31 Reciprocal step 34255......................... 34256 34257 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 34258 _Form of expected instruction(s):_ 'vrecps.f32 D0, D0, D0' 34259 34260 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 34261 _Form of expected instruction(s):_ 'vrecps.f32 Q0, Q0, Q0' 34262 34263 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 34264 _Form of expected instruction(s):_ 'vrsqrts.f32 D0, D0, D0' 34265 34266 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 34267 _Form of expected instruction(s):_ 'vrsqrts.f32 Q0, Q0, Q0' 34268 342696.57.6.32 Vector shift left 34270........................... 34271 34272 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 34273 _Form of expected instruction(s):_ 'vshl.u32 D0, D0, D0' 34274 34275 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 34276 _Form of expected instruction(s):_ 'vshl.u16 D0, D0, D0' 34277 34278 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 34279 _Form of expected instruction(s):_ 'vshl.u8 D0, D0, D0' 34280 34281 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 34282 _Form of expected instruction(s):_ 'vshl.s32 D0, D0, D0' 34283 34284 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 34285 _Form of expected instruction(s):_ 'vshl.s16 D0, D0, D0' 34286 34287 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 34288 _Form of expected instruction(s):_ 'vshl.s8 D0, D0, D0' 34289 34290 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 34291 _Form of expected instruction(s):_ 'vshl.u64 D0, D0, D0' 34292 34293 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 34294 _Form of expected instruction(s):_ 'vshl.s64 D0, D0, D0' 34295 34296 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 34297 _Form of expected instruction(s):_ 'vshl.u32 Q0, Q0, Q0' 34298 34299 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 34300 _Form of expected instruction(s):_ 'vshl.u16 Q0, Q0, Q0' 34301 34302 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 34303 _Form of expected instruction(s):_ 'vshl.u8 Q0, Q0, Q0' 34304 34305 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 34306 _Form of expected instruction(s):_ 'vshl.s32 Q0, Q0, Q0' 34307 34308 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 34309 _Form of expected instruction(s):_ 'vshl.s16 Q0, Q0, Q0' 34310 34311 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 34312 _Form of expected instruction(s):_ 'vshl.s8 Q0, Q0, Q0' 34313 34314 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 34315 _Form of expected instruction(s):_ 'vshl.u64 Q0, Q0, Q0' 34316 34317 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 34318 _Form of expected instruction(s):_ 'vshl.s64 Q0, Q0, Q0' 34319 34320 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 34321 _Form of expected instruction(s):_ 'vrshl.u32 D0, D0, D0' 34322 34323 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 34324 _Form of expected instruction(s):_ 'vrshl.u16 D0, D0, D0' 34325 34326 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 34327 _Form of expected instruction(s):_ 'vrshl.u8 D0, D0, D0' 34328 34329 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 34330 _Form of expected instruction(s):_ 'vrshl.s32 D0, D0, D0' 34331 34332 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 34333 _Form of expected instruction(s):_ 'vrshl.s16 D0, D0, D0' 34334 34335 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 34336 _Form of expected instruction(s):_ 'vrshl.s8 D0, D0, D0' 34337 34338 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 34339 _Form of expected instruction(s):_ 'vrshl.u64 D0, D0, D0' 34340 34341 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 34342 _Form of expected instruction(s):_ 'vrshl.s64 D0, D0, D0' 34343 34344 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 34345 _Form of expected instruction(s):_ 'vrshl.u32 Q0, Q0, Q0' 34346 34347 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 34348 _Form of expected instruction(s):_ 'vrshl.u16 Q0, Q0, Q0' 34349 34350 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 34351 _Form of expected instruction(s):_ 'vrshl.u8 Q0, Q0, Q0' 34352 34353 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 34354 _Form of expected instruction(s):_ 'vrshl.s32 Q0, Q0, Q0' 34355 34356 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 34357 _Form of expected instruction(s):_ 'vrshl.s16 Q0, Q0, Q0' 34358 34359 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 34360 _Form of expected instruction(s):_ 'vrshl.s8 Q0, Q0, Q0' 34361 34362 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 34363 _Form of expected instruction(s):_ 'vrshl.u64 Q0, Q0, Q0' 34364 34365 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 34366 _Form of expected instruction(s):_ 'vrshl.s64 Q0, Q0, Q0' 34367 34368 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 34369 _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, D0' 34370 34371 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 34372 _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, D0' 34373 34374 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 34375 _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, D0' 34376 34377 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 34378 _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, D0' 34379 34380 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 34381 _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, D0' 34382 34383 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 34384 _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, D0' 34385 34386 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 34387 _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, D0' 34388 34389 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 34390 _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, D0' 34391 34392 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 34393 _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, Q0' 34394 34395 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 34396 _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, Q0' 34397 34398 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 34399 _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, Q0' 34400 34401 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 34402 _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, Q0' 34403 34404 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 34405 _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, Q0' 34406 34407 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 34408 _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, Q0' 34409 34410 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 34411 _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, Q0' 34412 34413 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 34414 _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, Q0' 34415 34416 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 34417 _Form of expected instruction(s):_ 'vqrshl.u32 D0, D0, D0' 34418 34419 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 34420 _Form of expected instruction(s):_ 'vqrshl.u16 D0, D0, D0' 34421 34422 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 34423 _Form of expected instruction(s):_ 'vqrshl.u8 D0, D0, D0' 34424 34425 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 34426 _Form of expected instruction(s):_ 'vqrshl.s32 D0, D0, D0' 34427 34428 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 34429 _Form of expected instruction(s):_ 'vqrshl.s16 D0, D0, D0' 34430 34431 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 34432 _Form of expected instruction(s):_ 'vqrshl.s8 D0, D0, D0' 34433 34434 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 34435 _Form of expected instruction(s):_ 'vqrshl.u64 D0, D0, D0' 34436 34437 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 34438 _Form of expected instruction(s):_ 'vqrshl.s64 D0, D0, D0' 34439 34440 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 34441 _Form of expected instruction(s):_ 'vqrshl.u32 Q0, Q0, Q0' 34442 34443 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 34444 _Form of expected instruction(s):_ 'vqrshl.u16 Q0, Q0, Q0' 34445 34446 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 34447 _Form of expected instruction(s):_ 'vqrshl.u8 Q0, Q0, Q0' 34448 34449 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 34450 _Form of expected instruction(s):_ 'vqrshl.s32 Q0, Q0, Q0' 34451 34452 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 34453 _Form of expected instruction(s):_ 'vqrshl.s16 Q0, Q0, Q0' 34454 34455 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 34456 _Form of expected instruction(s):_ 'vqrshl.s8 Q0, Q0, Q0' 34457 34458 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 34459 _Form of expected instruction(s):_ 'vqrshl.u64 Q0, Q0, Q0' 34460 34461 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 34462 _Form of expected instruction(s):_ 'vqrshl.s64 Q0, Q0, Q0' 34463 344646.57.6.33 Vector shift left by constant 34465....................................... 34466 34467 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 34468 _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' 34469 34470 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 34471 _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' 34472 34473 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 34474 _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' 34475 34476 * int32x2_t vshl_n_s32 (int32x2_t, const int) 34477 _Form of expected instruction(s):_ 'vshl.i32 D0, D0, #0' 34478 34479 * int16x4_t vshl_n_s16 (int16x4_t, const int) 34480 _Form of expected instruction(s):_ 'vshl.i16 D0, D0, #0' 34481 34482 * int8x8_t vshl_n_s8 (int8x8_t, const int) 34483 _Form of expected instruction(s):_ 'vshl.i8 D0, D0, #0' 34484 34485 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 34486 _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' 34487 34488 * int64x1_t vshl_n_s64 (int64x1_t, const int) 34489 _Form of expected instruction(s):_ 'vshl.i64 D0, D0, #0' 34490 34491 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 34492 _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' 34493 34494 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 34495 _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' 34496 34497 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 34498 _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' 34499 34500 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 34501 _Form of expected instruction(s):_ 'vshl.i32 Q0, Q0, #0' 34502 34503 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 34504 _Form of expected instruction(s):_ 'vshl.i16 Q0, Q0, #0' 34505 34506 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 34507 _Form of expected instruction(s):_ 'vshl.i8 Q0, Q0, #0' 34508 34509 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 34510 _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' 34511 34512 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 34513 _Form of expected instruction(s):_ 'vshl.i64 Q0, Q0, #0' 34514 34515 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 34516 _Form of expected instruction(s):_ 'vqshl.u32 D0, D0, #0' 34517 34518 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 34519 _Form of expected instruction(s):_ 'vqshl.u16 D0, D0, #0' 34520 34521 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 34522 _Form of expected instruction(s):_ 'vqshl.u8 D0, D0, #0' 34523 34524 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 34525 _Form of expected instruction(s):_ 'vqshl.s32 D0, D0, #0' 34526 34527 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 34528 _Form of expected instruction(s):_ 'vqshl.s16 D0, D0, #0' 34529 34530 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 34531 _Form of expected instruction(s):_ 'vqshl.s8 D0, D0, #0' 34532 34533 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 34534 _Form of expected instruction(s):_ 'vqshl.u64 D0, D0, #0' 34535 34536 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 34537 _Form of expected instruction(s):_ 'vqshl.s64 D0, D0, #0' 34538 34539 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 34540 _Form of expected instruction(s):_ 'vqshl.u32 Q0, Q0, #0' 34541 34542 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 34543 _Form of expected instruction(s):_ 'vqshl.u16 Q0, Q0, #0' 34544 34545 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 34546 _Form of expected instruction(s):_ 'vqshl.u8 Q0, Q0, #0' 34547 34548 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 34549 _Form of expected instruction(s):_ 'vqshl.s32 Q0, Q0, #0' 34550 34551 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 34552 _Form of expected instruction(s):_ 'vqshl.s16 Q0, Q0, #0' 34553 34554 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 34555 _Form of expected instruction(s):_ 'vqshl.s8 Q0, Q0, #0' 34556 34557 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 34558 _Form of expected instruction(s):_ 'vqshl.u64 Q0, Q0, #0' 34559 34560 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 34561 _Form of expected instruction(s):_ 'vqshl.s64 Q0, Q0, #0' 34562 34563 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 34564 _Form of expected instruction(s):_ 'vqshlu.s64 D0, D0, #0' 34565 34566 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 34567 _Form of expected instruction(s):_ 'vqshlu.s32 D0, D0, #0' 34568 34569 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 34570 _Form of expected instruction(s):_ 'vqshlu.s16 D0, D0, #0' 34571 34572 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 34573 _Form of expected instruction(s):_ 'vqshlu.s8 D0, D0, #0' 34574 34575 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 34576 _Form of expected instruction(s):_ 'vqshlu.s64 Q0, Q0, #0' 34577 34578 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 34579 _Form of expected instruction(s):_ 'vqshlu.s32 Q0, Q0, #0' 34580 34581 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 34582 _Form of expected instruction(s):_ 'vqshlu.s16 Q0, Q0, #0' 34583 34584 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 34585 _Form of expected instruction(s):_ 'vqshlu.s8 Q0, Q0, #0' 34586 34587 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 34588 _Form of expected instruction(s):_ 'vshll.u32 Q0, D0, #0' 34589 34590 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 34591 _Form of expected instruction(s):_ 'vshll.u16 Q0, D0, #0' 34592 34593 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 34594 _Form of expected instruction(s):_ 'vshll.u8 Q0, D0, #0' 34595 34596 * int64x2_t vshll_n_s32 (int32x2_t, const int) 34597 _Form of expected instruction(s):_ 'vshll.s32 Q0, D0, #0' 34598 34599 * int32x4_t vshll_n_s16 (int16x4_t, const int) 34600 _Form of expected instruction(s):_ 'vshll.s16 Q0, D0, #0' 34601 34602 * int16x8_t vshll_n_s8 (int8x8_t, const int) 34603 _Form of expected instruction(s):_ 'vshll.s8 Q0, D0, #0' 34604 346056.57.6.34 Vector shift right by constant 34606........................................ 34607 34608 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 34609 _Form of expected instruction(s):_ 'vshr.u32 D0, D0, #0' 34610 34611 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 34612 _Form of expected instruction(s):_ 'vshr.u16 D0, D0, #0' 34613 34614 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 34615 _Form of expected instruction(s):_ 'vshr.u8 D0, D0, #0' 34616 34617 * int32x2_t vshr_n_s32 (int32x2_t, const int) 34618 _Form of expected instruction(s):_ 'vshr.s32 D0, D0, #0' 34619 34620 * int16x4_t vshr_n_s16 (int16x4_t, const int) 34621 _Form of expected instruction(s):_ 'vshr.s16 D0, D0, #0' 34622 34623 * int8x8_t vshr_n_s8 (int8x8_t, const int) 34624 _Form of expected instruction(s):_ 'vshr.s8 D0, D0, #0' 34625 34626 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 34627 _Form of expected instruction(s):_ 'vshr.u64 D0, D0, #0' 34628 34629 * int64x1_t vshr_n_s64 (int64x1_t, const int) 34630 _Form of expected instruction(s):_ 'vshr.s64 D0, D0, #0' 34631 34632 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 34633 _Form of expected instruction(s):_ 'vshr.u32 Q0, Q0, #0' 34634 34635 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 34636 _Form of expected instruction(s):_ 'vshr.u16 Q0, Q0, #0' 34637 34638 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 34639 _Form of expected instruction(s):_ 'vshr.u8 Q0, Q0, #0' 34640 34641 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 34642 _Form of expected instruction(s):_ 'vshr.s32 Q0, Q0, #0' 34643 34644 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 34645 _Form of expected instruction(s):_ 'vshr.s16 Q0, Q0, #0' 34646 34647 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 34648 _Form of expected instruction(s):_ 'vshr.s8 Q0, Q0, #0' 34649 34650 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 34651 _Form of expected instruction(s):_ 'vshr.u64 Q0, Q0, #0' 34652 34653 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 34654 _Form of expected instruction(s):_ 'vshr.s64 Q0, Q0, #0' 34655 34656 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 34657 _Form of expected instruction(s):_ 'vrshr.u32 D0, D0, #0' 34658 34659 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 34660 _Form of expected instruction(s):_ 'vrshr.u16 D0, D0, #0' 34661 34662 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 34663 _Form of expected instruction(s):_ 'vrshr.u8 D0, D0, #0' 34664 34665 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 34666 _Form of expected instruction(s):_ 'vrshr.s32 D0, D0, #0' 34667 34668 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 34669 _Form of expected instruction(s):_ 'vrshr.s16 D0, D0, #0' 34670 34671 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 34672 _Form of expected instruction(s):_ 'vrshr.s8 D0, D0, #0' 34673 34674 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 34675 _Form of expected instruction(s):_ 'vrshr.u64 D0, D0, #0' 34676 34677 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 34678 _Form of expected instruction(s):_ 'vrshr.s64 D0, D0, #0' 34679 34680 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 34681 _Form of expected instruction(s):_ 'vrshr.u32 Q0, Q0, #0' 34682 34683 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 34684 _Form of expected instruction(s):_ 'vrshr.u16 Q0, Q0, #0' 34685 34686 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 34687 _Form of expected instruction(s):_ 'vrshr.u8 Q0, Q0, #0' 34688 34689 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 34690 _Form of expected instruction(s):_ 'vrshr.s32 Q0, Q0, #0' 34691 34692 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 34693 _Form of expected instruction(s):_ 'vrshr.s16 Q0, Q0, #0' 34694 34695 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 34696 _Form of expected instruction(s):_ 'vrshr.s8 Q0, Q0, #0' 34697 34698 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 34699 _Form of expected instruction(s):_ 'vrshr.u64 Q0, Q0, #0' 34700 34701 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 34702 _Form of expected instruction(s):_ 'vrshr.s64 Q0, Q0, #0' 34703 34704 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 34705 _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' 34706 34707 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 34708 _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' 34709 34710 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 34711 _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' 34712 34713 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 34714 _Form of expected instruction(s):_ 'vshrn.i64 D0, Q0, #0' 34715 34716 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 34717 _Form of expected instruction(s):_ 'vshrn.i32 D0, Q0, #0' 34718 34719 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 34720 _Form of expected instruction(s):_ 'vshrn.i16 D0, Q0, #0' 34721 34722 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 34723 _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' 34724 34725 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 34726 _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' 34727 34728 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 34729 _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' 34730 34731 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 34732 _Form of expected instruction(s):_ 'vrshrn.i64 D0, Q0, #0' 34733 34734 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 34735 _Form of expected instruction(s):_ 'vrshrn.i32 D0, Q0, #0' 34736 34737 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 34738 _Form of expected instruction(s):_ 'vrshrn.i16 D0, Q0, #0' 34739 34740 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 34741 _Form of expected instruction(s):_ 'vqshrn.u64 D0, Q0, #0' 34742 34743 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 34744 _Form of expected instruction(s):_ 'vqshrn.u32 D0, Q0, #0' 34745 34746 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 34747 _Form of expected instruction(s):_ 'vqshrn.u16 D0, Q0, #0' 34748 34749 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 34750 _Form of expected instruction(s):_ 'vqshrn.s64 D0, Q0, #0' 34751 34752 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 34753 _Form of expected instruction(s):_ 'vqshrn.s32 D0, Q0, #0' 34754 34755 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 34756 _Form of expected instruction(s):_ 'vqshrn.s16 D0, Q0, #0' 34757 34758 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 34759 _Form of expected instruction(s):_ 'vqrshrn.u64 D0, Q0, #0' 34760 34761 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 34762 _Form of expected instruction(s):_ 'vqrshrn.u32 D0, Q0, #0' 34763 34764 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 34765 _Form of expected instruction(s):_ 'vqrshrn.u16 D0, Q0, #0' 34766 34767 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 34768 _Form of expected instruction(s):_ 'vqrshrn.s64 D0, Q0, #0' 34769 34770 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 34771 _Form of expected instruction(s):_ 'vqrshrn.s32 D0, Q0, #0' 34772 34773 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 34774 _Form of expected instruction(s):_ 'vqrshrn.s16 D0, Q0, #0' 34775 34776 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 34777 _Form of expected instruction(s):_ 'vqshrun.s64 D0, Q0, #0' 34778 34779 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 34780 _Form of expected instruction(s):_ 'vqshrun.s32 D0, Q0, #0' 34781 34782 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 34783 _Form of expected instruction(s):_ 'vqshrun.s16 D0, Q0, #0' 34784 34785 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 34786 _Form of expected instruction(s):_ 'vqrshrun.s64 D0, Q0, #0' 34787 34788 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 34789 _Form of expected instruction(s):_ 'vqrshrun.s32 D0, Q0, #0' 34790 34791 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 34792 _Form of expected instruction(s):_ 'vqrshrun.s16 D0, Q0, #0' 34793 347946.57.6.35 Vector shift right by constant and accumulate 34795....................................................... 34796 34797 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 34798 _Form of expected instruction(s):_ 'vsra.u32 D0, D0, #0' 34799 34800 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 34801 _Form of expected instruction(s):_ 'vsra.u16 D0, D0, #0' 34802 34803 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 34804 _Form of expected instruction(s):_ 'vsra.u8 D0, D0, #0' 34805 34806 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 34807 _Form of expected instruction(s):_ 'vsra.s32 D0, D0, #0' 34808 34809 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 34810 _Form of expected instruction(s):_ 'vsra.s16 D0, D0, #0' 34811 34812 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 34813 _Form of expected instruction(s):_ 'vsra.s8 D0, D0, #0' 34814 34815 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 34816 _Form of expected instruction(s):_ 'vsra.u64 D0, D0, #0' 34817 34818 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 34819 _Form of expected instruction(s):_ 'vsra.s64 D0, D0, #0' 34820 34821 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 34822 _Form of expected instruction(s):_ 'vsra.u32 Q0, Q0, #0' 34823 34824 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 34825 _Form of expected instruction(s):_ 'vsra.u16 Q0, Q0, #0' 34826 34827 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 34828 _Form of expected instruction(s):_ 'vsra.u8 Q0, Q0, #0' 34829 34830 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 34831 _Form of expected instruction(s):_ 'vsra.s32 Q0, Q0, #0' 34832 34833 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 34834 _Form of expected instruction(s):_ 'vsra.s16 Q0, Q0, #0' 34835 34836 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 34837 _Form of expected instruction(s):_ 'vsra.s8 Q0, Q0, #0' 34838 34839 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 34840 _Form of expected instruction(s):_ 'vsra.u64 Q0, Q0, #0' 34841 34842 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 34843 _Form of expected instruction(s):_ 'vsra.s64 Q0, Q0, #0' 34844 34845 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 34846 _Form of expected instruction(s):_ 'vrsra.u32 D0, D0, #0' 34847 34848 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 34849 _Form of expected instruction(s):_ 'vrsra.u16 D0, D0, #0' 34850 34851 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 34852 _Form of expected instruction(s):_ 'vrsra.u8 D0, D0, #0' 34853 34854 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 34855 _Form of expected instruction(s):_ 'vrsra.s32 D0, D0, #0' 34856 34857 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 34858 _Form of expected instruction(s):_ 'vrsra.s16 D0, D0, #0' 34859 34860 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 34861 _Form of expected instruction(s):_ 'vrsra.s8 D0, D0, #0' 34862 34863 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 34864 _Form of expected instruction(s):_ 'vrsra.u64 D0, D0, #0' 34865 34866 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 34867 _Form of expected instruction(s):_ 'vrsra.s64 D0, D0, #0' 34868 34869 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 34870 _Form of expected instruction(s):_ 'vrsra.u32 Q0, Q0, #0' 34871 34872 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 34873 _Form of expected instruction(s):_ 'vrsra.u16 Q0, Q0, #0' 34874 34875 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 34876 _Form of expected instruction(s):_ 'vrsra.u8 Q0, Q0, #0' 34877 34878 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 34879 _Form of expected instruction(s):_ 'vrsra.s32 Q0, Q0, #0' 34880 34881 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 34882 _Form of expected instruction(s):_ 'vrsra.s16 Q0, Q0, #0' 34883 34884 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 34885 _Form of expected instruction(s):_ 'vrsra.s8 Q0, Q0, #0' 34886 34887 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 34888 _Form of expected instruction(s):_ 'vrsra.u64 Q0, Q0, #0' 34889 34890 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 34891 _Form of expected instruction(s):_ 'vrsra.s64 Q0, Q0, #0' 34892 348936.57.6.36 Vector shift right and insert 34894....................................... 34895 34896 * poly64x1_t vsri_n_p64 (poly64x1_t, poly64x1_t, const int) 34897 _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' 34898 34899 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 34900 _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' 34901 34902 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 34903 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 34904 34905 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 34906 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 34907 34908 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 34909 _Form of expected instruction(s):_ 'vsri.32 D0, D0, #0' 34910 34911 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 34912 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 34913 34914 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 34915 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 34916 34917 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 34918 _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' 34919 34920 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 34921 _Form of expected instruction(s):_ 'vsri.64 D0, D0, #0' 34922 34923 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 34924 _Form of expected instruction(s):_ 'vsri.16 D0, D0, #0' 34925 34926 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 34927 _Form of expected instruction(s):_ 'vsri.8 D0, D0, #0' 34928 34929 * poly64x2_t vsriq_n_p64 (poly64x2_t, poly64x2_t, const int) 34930 _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' 34931 34932 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 34933 _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' 34934 34935 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 34936 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 34937 34938 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 34939 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 34940 34941 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 34942 _Form of expected instruction(s):_ 'vsri.32 Q0, Q0, #0' 34943 34944 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 34945 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 34946 34947 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 34948 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 34949 34950 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 34951 _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' 34952 34953 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 34954 _Form of expected instruction(s):_ 'vsri.64 Q0, Q0, #0' 34955 34956 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 34957 _Form of expected instruction(s):_ 'vsri.16 Q0, Q0, #0' 34958 34959 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 34960 _Form of expected instruction(s):_ 'vsri.8 Q0, Q0, #0' 34961 349626.57.6.37 Vector shift left and insert 34963...................................... 34964 34965 * poly64x1_t vsli_n_p64 (poly64x1_t, poly64x1_t, const int) 34966 _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' 34967 34968 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 34969 _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' 34970 34971 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 34972 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 34973 34974 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 34975 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 34976 34977 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 34978 _Form of expected instruction(s):_ 'vsli.32 D0, D0, #0' 34979 34980 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 34981 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 34982 34983 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 34984 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 34985 34986 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 34987 _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' 34988 34989 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 34990 _Form of expected instruction(s):_ 'vsli.64 D0, D0, #0' 34991 34992 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 34993 _Form of expected instruction(s):_ 'vsli.16 D0, D0, #0' 34994 34995 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 34996 _Form of expected instruction(s):_ 'vsli.8 D0, D0, #0' 34997 34998 * poly64x2_t vsliq_n_p64 (poly64x2_t, poly64x2_t, const int) 34999 _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' 35000 35001 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 35002 _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' 35003 35004 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 35005 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 35006 35007 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 35008 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 35009 35010 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 35011 _Form of expected instruction(s):_ 'vsli.32 Q0, Q0, #0' 35012 35013 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 35014 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 35015 35016 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 35017 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 35018 35019 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 35020 _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' 35021 35022 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 35023 _Form of expected instruction(s):_ 'vsli.64 Q0, Q0, #0' 35024 35025 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 35026 _Form of expected instruction(s):_ 'vsli.16 Q0, Q0, #0' 35027 35028 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 35029 _Form of expected instruction(s):_ 'vsli.8 Q0, Q0, #0' 35030 350316.57.6.38 Absolute value 35032........................ 35033 35034 * float32x2_t vabs_f32 (float32x2_t) 35035 _Form of expected instruction(s):_ 'vabs.f32 D0, D0' 35036 35037 * int32x2_t vabs_s32 (int32x2_t) 35038 _Form of expected instruction(s):_ 'vabs.s32 D0, D0' 35039 35040 * int16x4_t vabs_s16 (int16x4_t) 35041 _Form of expected instruction(s):_ 'vabs.s16 D0, D0' 35042 35043 * int8x8_t vabs_s8 (int8x8_t) 35044 _Form of expected instruction(s):_ 'vabs.s8 D0, D0' 35045 35046 * float32x4_t vabsq_f32 (float32x4_t) 35047 _Form of expected instruction(s):_ 'vabs.f32 Q0, Q0' 35048 35049 * int32x4_t vabsq_s32 (int32x4_t) 35050 _Form of expected instruction(s):_ 'vabs.s32 Q0, Q0' 35051 35052 * int16x8_t vabsq_s16 (int16x8_t) 35053 _Form of expected instruction(s):_ 'vabs.s16 Q0, Q0' 35054 35055 * int8x16_t vabsq_s8 (int8x16_t) 35056 _Form of expected instruction(s):_ 'vabs.s8 Q0, Q0' 35057 35058 * int32x2_t vqabs_s32 (int32x2_t) 35059 _Form of expected instruction(s):_ 'vqabs.s32 D0, D0' 35060 35061 * int16x4_t vqabs_s16 (int16x4_t) 35062 _Form of expected instruction(s):_ 'vqabs.s16 D0, D0' 35063 35064 * int8x8_t vqabs_s8 (int8x8_t) 35065 _Form of expected instruction(s):_ 'vqabs.s8 D0, D0' 35066 35067 * int32x4_t vqabsq_s32 (int32x4_t) 35068 _Form of expected instruction(s):_ 'vqabs.s32 Q0, Q0' 35069 35070 * int16x8_t vqabsq_s16 (int16x8_t) 35071 _Form of expected instruction(s):_ 'vqabs.s16 Q0, Q0' 35072 35073 * int8x16_t vqabsq_s8 (int8x16_t) 35074 _Form of expected instruction(s):_ 'vqabs.s8 Q0, Q0' 35075 350766.57.6.39 Negation 35077.................. 35078 35079 * float32x2_t vneg_f32 (float32x2_t) 35080 _Form of expected instruction(s):_ 'vneg.f32 D0, D0' 35081 35082 * int32x2_t vneg_s32 (int32x2_t) 35083 _Form of expected instruction(s):_ 'vneg.s32 D0, D0' 35084 35085 * int16x4_t vneg_s16 (int16x4_t) 35086 _Form of expected instruction(s):_ 'vneg.s16 D0, D0' 35087 35088 * int8x8_t vneg_s8 (int8x8_t) 35089 _Form of expected instruction(s):_ 'vneg.s8 D0, D0' 35090 35091 * float32x4_t vnegq_f32 (float32x4_t) 35092 _Form of expected instruction(s):_ 'vneg.f32 Q0, Q0' 35093 35094 * int32x4_t vnegq_s32 (int32x4_t) 35095 _Form of expected instruction(s):_ 'vneg.s32 Q0, Q0' 35096 35097 * int16x8_t vnegq_s16 (int16x8_t) 35098 _Form of expected instruction(s):_ 'vneg.s16 Q0, Q0' 35099 35100 * int8x16_t vnegq_s8 (int8x16_t) 35101 _Form of expected instruction(s):_ 'vneg.s8 Q0, Q0' 35102 35103 * int32x2_t vqneg_s32 (int32x2_t) 35104 _Form of expected instruction(s):_ 'vqneg.s32 D0, D0' 35105 35106 * int16x4_t vqneg_s16 (int16x4_t) 35107 _Form of expected instruction(s):_ 'vqneg.s16 D0, D0' 35108 35109 * int8x8_t vqneg_s8 (int8x8_t) 35110 _Form of expected instruction(s):_ 'vqneg.s8 D0, D0' 35111 35112 * int32x4_t vqnegq_s32 (int32x4_t) 35113 _Form of expected instruction(s):_ 'vqneg.s32 Q0, Q0' 35114 35115 * int16x8_t vqnegq_s16 (int16x8_t) 35116 _Form of expected instruction(s):_ 'vqneg.s16 Q0, Q0' 35117 35118 * int8x16_t vqnegq_s8 (int8x16_t) 35119 _Form of expected instruction(s):_ 'vqneg.s8 Q0, Q0' 35120 351216.57.6.40 Bitwise not 35122..................... 35123 35124 * uint32x2_t vmvn_u32 (uint32x2_t) 35125 _Form of expected instruction(s):_ 'vmvn D0, D0' 35126 35127 * uint16x4_t vmvn_u16 (uint16x4_t) 35128 _Form of expected instruction(s):_ 'vmvn D0, D0' 35129 35130 * uint8x8_t vmvn_u8 (uint8x8_t) 35131 _Form of expected instruction(s):_ 'vmvn D0, D0' 35132 35133 * int32x2_t vmvn_s32 (int32x2_t) 35134 _Form of expected instruction(s):_ 'vmvn D0, D0' 35135 35136 * int16x4_t vmvn_s16 (int16x4_t) 35137 _Form of expected instruction(s):_ 'vmvn D0, D0' 35138 35139 * int8x8_t vmvn_s8 (int8x8_t) 35140 _Form of expected instruction(s):_ 'vmvn D0, D0' 35141 35142 * poly8x8_t vmvn_p8 (poly8x8_t) 35143 _Form of expected instruction(s):_ 'vmvn D0, D0' 35144 35145 * uint32x4_t vmvnq_u32 (uint32x4_t) 35146 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35147 35148 * uint16x8_t vmvnq_u16 (uint16x8_t) 35149 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35150 35151 * uint8x16_t vmvnq_u8 (uint8x16_t) 35152 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35153 35154 * int32x4_t vmvnq_s32 (int32x4_t) 35155 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35156 35157 * int16x8_t vmvnq_s16 (int16x8_t) 35158 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35159 35160 * int8x16_t vmvnq_s8 (int8x16_t) 35161 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35162 35163 * poly8x16_t vmvnq_p8 (poly8x16_t) 35164 _Form of expected instruction(s):_ 'vmvn Q0, Q0' 35165 351666.57.6.41 Count leading sign bits 35167................................. 35168 35169 * int32x2_t vcls_s32 (int32x2_t) 35170 _Form of expected instruction(s):_ 'vcls.s32 D0, D0' 35171 35172 * int16x4_t vcls_s16 (int16x4_t) 35173 _Form of expected instruction(s):_ 'vcls.s16 D0, D0' 35174 35175 * int8x8_t vcls_s8 (int8x8_t) 35176 _Form of expected instruction(s):_ 'vcls.s8 D0, D0' 35177 35178 * int32x4_t vclsq_s32 (int32x4_t) 35179 _Form of expected instruction(s):_ 'vcls.s32 Q0, Q0' 35180 35181 * int16x8_t vclsq_s16 (int16x8_t) 35182 _Form of expected instruction(s):_ 'vcls.s16 Q0, Q0' 35183 35184 * int8x16_t vclsq_s8 (int8x16_t) 35185 _Form of expected instruction(s):_ 'vcls.s8 Q0, Q0' 35186 351876.57.6.42 Count leading zeros 35188............................. 35189 35190 * uint32x2_t vclz_u32 (uint32x2_t) 35191 _Form of expected instruction(s):_ 'vclz.i32 D0, D0' 35192 35193 * uint16x4_t vclz_u16 (uint16x4_t) 35194 _Form of expected instruction(s):_ 'vclz.i16 D0, D0' 35195 35196 * uint8x8_t vclz_u8 (uint8x8_t) 35197 _Form of expected instruction(s):_ 'vclz.i8 D0, D0' 35198 35199 * int32x2_t vclz_s32 (int32x2_t) 35200 _Form of expected instruction(s):_ 'vclz.i32 D0, D0' 35201 35202 * int16x4_t vclz_s16 (int16x4_t) 35203 _Form of expected instruction(s):_ 'vclz.i16 D0, D0' 35204 35205 * int8x8_t vclz_s8 (int8x8_t) 35206 _Form of expected instruction(s):_ 'vclz.i8 D0, D0' 35207 35208 * uint32x4_t vclzq_u32 (uint32x4_t) 35209 _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' 35210 35211 * uint16x8_t vclzq_u16 (uint16x8_t) 35212 _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' 35213 35214 * uint8x16_t vclzq_u8 (uint8x16_t) 35215 _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' 35216 35217 * int32x4_t vclzq_s32 (int32x4_t) 35218 _Form of expected instruction(s):_ 'vclz.i32 Q0, Q0' 35219 35220 * int16x8_t vclzq_s16 (int16x8_t) 35221 _Form of expected instruction(s):_ 'vclz.i16 Q0, Q0' 35222 35223 * int8x16_t vclzq_s8 (int8x16_t) 35224 _Form of expected instruction(s):_ 'vclz.i8 Q0, Q0' 35225 352266.57.6.43 Count number of set bits 35227.................................. 35228 35229 * uint8x8_t vcnt_u8 (uint8x8_t) 35230 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 35231 35232 * int8x8_t vcnt_s8 (int8x8_t) 35233 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 35234 35235 * poly8x8_t vcnt_p8 (poly8x8_t) 35236 _Form of expected instruction(s):_ 'vcnt.8 D0, D0' 35237 35238 * uint8x16_t vcntq_u8 (uint8x16_t) 35239 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 35240 35241 * int8x16_t vcntq_s8 (int8x16_t) 35242 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 35243 35244 * poly8x16_t vcntq_p8 (poly8x16_t) 35245 _Form of expected instruction(s):_ 'vcnt.8 Q0, Q0' 35246 352476.57.6.44 Reciprocal estimate 35248............................. 35249 35250 * float32x2_t vrecpe_f32 (float32x2_t) 35251 _Form of expected instruction(s):_ 'vrecpe.f32 D0, D0' 35252 35253 * uint32x2_t vrecpe_u32 (uint32x2_t) 35254 _Form of expected instruction(s):_ 'vrecpe.u32 D0, D0' 35255 35256 * float32x4_t vrecpeq_f32 (float32x4_t) 35257 _Form of expected instruction(s):_ 'vrecpe.f32 Q0, Q0' 35258 35259 * uint32x4_t vrecpeq_u32 (uint32x4_t) 35260 _Form of expected instruction(s):_ 'vrecpe.u32 Q0, Q0' 35261 352626.57.6.45 Reciprocal square-root estimate 35263......................................... 35264 35265 * float32x2_t vrsqrte_f32 (float32x2_t) 35266 _Form of expected instruction(s):_ 'vrsqrte.f32 D0, D0' 35267 35268 * uint32x2_t vrsqrte_u32 (uint32x2_t) 35269 _Form of expected instruction(s):_ 'vrsqrte.u32 D0, D0' 35270 35271 * float32x4_t vrsqrteq_f32 (float32x4_t) 35272 _Form of expected instruction(s):_ 'vrsqrte.f32 Q0, Q0' 35273 35274 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 35275 _Form of expected instruction(s):_ 'vrsqrte.u32 Q0, Q0' 35276 352776.57.6.46 Get lanes from a vector 35278................................. 35279 35280 * uint32_t vget_lane_u32 (uint32x2_t, const int) 35281 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35282 35283 * uint16_t vget_lane_u16 (uint16x4_t, const int) 35284 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 35285 35286 * uint8_t vget_lane_u8 (uint8x8_t, const int) 35287 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 35288 35289 * int32_t vget_lane_s32 (int32x2_t, const int) 35290 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35291 35292 * int16_t vget_lane_s16 (int16x4_t, const int) 35293 _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' 35294 35295 * int8_t vget_lane_s8 (int8x8_t, const int) 35296 _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' 35297 35298 * float32_t vget_lane_f32 (float32x2_t, const int) 35299 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35300 35301 * poly16_t vget_lane_p16 (poly16x4_t, const int) 35302 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 35303 35304 * poly8_t vget_lane_p8 (poly8x8_t, const int) 35305 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 35306 35307 * uint64_t vget_lane_u64 (uint64x1_t, const int) 35308 35309 * int64_t vget_lane_s64 (int64x1_t, const int) 35310 35311 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 35312 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35313 35314 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 35315 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 35316 35317 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 35318 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 35319 35320 * int32_t vgetq_lane_s32 (int32x4_t, const int) 35321 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35322 35323 * int16_t vgetq_lane_s16 (int16x8_t, const int) 35324 _Form of expected instruction(s):_ 'vmov.s16 R0, D0[0]' 35325 35326 * int8_t vgetq_lane_s8 (int8x16_t, const int) 35327 _Form of expected instruction(s):_ 'vmov.s8 R0, D0[0]' 35328 35329 * float32_t vgetq_lane_f32 (float32x4_t, const int) 35330 _Form of expected instruction(s):_ 'vmov.32 R0, D0[0]' 35331 35332 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 35333 _Form of expected instruction(s):_ 'vmov.u16 R0, D0[0]' 35334 35335 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 35336 _Form of expected instruction(s):_ 'vmov.u8 R0, D0[0]' 35337 35338 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 35339 _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd 35340 R0, R0, D0' 35341 35342 * int64_t vgetq_lane_s64 (int64x2_t, const int) 35343 _Form of expected instruction(s):_ 'vmov R0, R0, D0' _or_ 'fmrrd 35344 R0, R0, D0' 35345 353466.57.6.47 Set lanes in a vector 35347............................... 35348 35349 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 35350 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35351 35352 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 35353 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35354 35355 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 35356 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35357 35358 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 35359 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35360 35361 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 35362 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35363 35364 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 35365 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35366 35367 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 35368 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35369 35370 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 35371 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35372 35373 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 35374 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35375 35376 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 35377 35378 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 35379 35380 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 35381 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35382 35383 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 35384 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35385 35386 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 35387 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35388 35389 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 35390 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35391 35392 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 35393 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35394 35395 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 35396 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35397 35398 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 35399 _Form of expected instruction(s):_ 'vmov.32 D0[0], R0' 35400 35401 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 35402 _Form of expected instruction(s):_ 'vmov.16 D0[0], R0' 35403 35404 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 35405 _Form of expected instruction(s):_ 'vmov.8 D0[0], R0' 35406 35407 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 35408 _Form of expected instruction(s):_ 'vmov D0, R0, R0' 35409 35410 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 35411 _Form of expected instruction(s):_ 'vmov D0, R0, R0' 35412 354136.57.6.48 Create vector from literal bit pattern 35414................................................ 35415 35416 * poly64x1_t vcreate_p64 (uint64_t) 35417 35418 * uint32x2_t vcreate_u32 (uint64_t) 35419 35420 * uint16x4_t vcreate_u16 (uint64_t) 35421 35422 * uint8x8_t vcreate_u8 (uint64_t) 35423 35424 * int32x2_t vcreate_s32 (uint64_t) 35425 35426 * int16x4_t vcreate_s16 (uint64_t) 35427 35428 * int8x8_t vcreate_s8 (uint64_t) 35429 35430 * uint64x1_t vcreate_u64 (uint64_t) 35431 35432 * int64x1_t vcreate_s64 (uint64_t) 35433 35434 * float32x2_t vcreate_f32 (uint64_t) 35435 35436 * poly16x4_t vcreate_p16 (uint64_t) 35437 35438 * poly8x8_t vcreate_p8 (uint64_t) 35439 354406.57.6.49 Set all lanes to the same value 35441......................................... 35442 35443 * uint32x2_t vdup_n_u32 (uint32_t) 35444 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35445 35446 * uint16x4_t vdup_n_u16 (uint16_t) 35447 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35448 35449 * uint8x8_t vdup_n_u8 (uint8_t) 35450 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35451 35452 * int32x2_t vdup_n_s32 (int32_t) 35453 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35454 35455 * int16x4_t vdup_n_s16 (int16_t) 35456 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35457 35458 * int8x8_t vdup_n_s8 (int8_t) 35459 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35460 35461 * float32x2_t vdup_n_f32 (float32_t) 35462 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35463 35464 * poly16x4_t vdup_n_p16 (poly16_t) 35465 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35466 35467 * poly8x8_t vdup_n_p8 (poly8_t) 35468 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35469 35470 * poly64x1_t vdup_n_p64 (poly64_t) 35471 35472 * uint64x1_t vdup_n_u64 (uint64_t) 35473 35474 * int64x1_t vdup_n_s64 (int64_t) 35475 35476 * poly64x2_t vdupq_n_p64 (poly64_t) 35477 35478 * uint32x4_t vdupq_n_u32 (uint32_t) 35479 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35480 35481 * uint16x8_t vdupq_n_u16 (uint16_t) 35482 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35483 35484 * uint8x16_t vdupq_n_u8 (uint8_t) 35485 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35486 35487 * int32x4_t vdupq_n_s32 (int32_t) 35488 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35489 35490 * int16x8_t vdupq_n_s16 (int16_t) 35491 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35492 35493 * int8x16_t vdupq_n_s8 (int8_t) 35494 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35495 35496 * float32x4_t vdupq_n_f32 (float32_t) 35497 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35498 35499 * poly16x8_t vdupq_n_p16 (poly16_t) 35500 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35501 35502 * poly8x16_t vdupq_n_p8 (poly8_t) 35503 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35504 35505 * uint64x2_t vdupq_n_u64 (uint64_t) 35506 35507 * int64x2_t vdupq_n_s64 (int64_t) 35508 35509 * uint32x2_t vmov_n_u32 (uint32_t) 35510 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35511 35512 * uint16x4_t vmov_n_u16 (uint16_t) 35513 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35514 35515 * uint8x8_t vmov_n_u8 (uint8_t) 35516 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35517 35518 * int32x2_t vmov_n_s32 (int32_t) 35519 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35520 35521 * int16x4_t vmov_n_s16 (int16_t) 35522 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35523 35524 * int8x8_t vmov_n_s8 (int8_t) 35525 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35526 35527 * float32x2_t vmov_n_f32 (float32_t) 35528 _Form of expected instruction(s):_ 'vdup.32 D0, R0' 35529 35530 * poly16x4_t vmov_n_p16 (poly16_t) 35531 _Form of expected instruction(s):_ 'vdup.16 D0, R0' 35532 35533 * poly8x8_t vmov_n_p8 (poly8_t) 35534 _Form of expected instruction(s):_ 'vdup.8 D0, R0' 35535 35536 * uint64x1_t vmov_n_u64 (uint64_t) 35537 35538 * int64x1_t vmov_n_s64 (int64_t) 35539 35540 * uint32x4_t vmovq_n_u32 (uint32_t) 35541 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35542 35543 * uint16x8_t vmovq_n_u16 (uint16_t) 35544 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35545 35546 * uint8x16_t vmovq_n_u8 (uint8_t) 35547 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35548 35549 * int32x4_t vmovq_n_s32 (int32_t) 35550 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35551 35552 * int16x8_t vmovq_n_s16 (int16_t) 35553 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35554 35555 * int8x16_t vmovq_n_s8 (int8_t) 35556 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35557 35558 * float32x4_t vmovq_n_f32 (float32_t) 35559 _Form of expected instruction(s):_ 'vdup.32 Q0, R0' 35560 35561 * poly16x8_t vmovq_n_p16 (poly16_t) 35562 _Form of expected instruction(s):_ 'vdup.16 Q0, R0' 35563 35564 * poly8x16_t vmovq_n_p8 (poly8_t) 35565 _Form of expected instruction(s):_ 'vdup.8 Q0, R0' 35566 35567 * uint64x2_t vmovq_n_u64 (uint64_t) 35568 35569 * int64x2_t vmovq_n_s64 (int64_t) 35570 35571 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 35572 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 35573 35574 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 35575 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 35576 35577 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 35578 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 35579 35580 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 35581 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 35582 35583 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 35584 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 35585 35586 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 35587 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 35588 35589 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 35590 _Form of expected instruction(s):_ 'vdup.32 D0, D0[0]' 35591 35592 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 35593 _Form of expected instruction(s):_ 'vdup.16 D0, D0[0]' 35594 35595 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 35596 _Form of expected instruction(s):_ 'vdup.8 D0, D0[0]' 35597 35598 * poly64x1_t vdup_lane_p64 (poly64x1_t, const int) 35599 35600 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 35601 35602 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 35603 35604 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 35605 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 35606 35607 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 35608 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 35609 35610 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 35611 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 35612 35613 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 35614 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 35615 35616 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 35617 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 35618 35619 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 35620 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 35621 35622 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 35623 _Form of expected instruction(s):_ 'vdup.32 Q0, D0[0]' 35624 35625 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 35626 _Form of expected instruction(s):_ 'vdup.16 Q0, D0[0]' 35627 35628 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 35629 _Form of expected instruction(s):_ 'vdup.8 Q0, D0[0]' 35630 35631 * poly64x2_t vdupq_lane_p64 (poly64x1_t, const int) 35632 35633 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 35634 35635 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 35636 356376.57.6.50 Combining vectors 35638........................... 35639 35640 * poly64x2_t vcombine_p64 (poly64x1_t, poly64x1_t) 35641 35642 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 35643 35644 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 35645 35646 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 35647 35648 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 35649 35650 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 35651 35652 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 35653 35654 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 35655 35656 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 35657 35658 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 35659 35660 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 35661 35662 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 35663 356646.57.6.51 Splitting vectors 35665........................... 35666 35667 * poly64x1_t vget_high_p64 (poly64x2_t) 35668 35669 * uint32x2_t vget_high_u32 (uint32x4_t) 35670 35671 * uint16x4_t vget_high_u16 (uint16x8_t) 35672 35673 * uint8x8_t vget_high_u8 (uint8x16_t) 35674 35675 * int32x2_t vget_high_s32 (int32x4_t) 35676 35677 * int16x4_t vget_high_s16 (int16x8_t) 35678 35679 * int8x8_t vget_high_s8 (int8x16_t) 35680 35681 * uint64x1_t vget_high_u64 (uint64x2_t) 35682 35683 * int64x1_t vget_high_s64 (int64x2_t) 35684 35685 * float32x2_t vget_high_f32 (float32x4_t) 35686 35687 * poly16x4_t vget_high_p16 (poly16x8_t) 35688 35689 * poly8x8_t vget_high_p8 (poly8x16_t) 35690 35691 * uint32x2_t vget_low_u32 (uint32x4_t) 35692 _Form of expected instruction(s):_ 'vmov D0, D0' 35693 35694 * uint16x4_t vget_low_u16 (uint16x8_t) 35695 _Form of expected instruction(s):_ 'vmov D0, D0' 35696 35697 * uint8x8_t vget_low_u8 (uint8x16_t) 35698 _Form of expected instruction(s):_ 'vmov D0, D0' 35699 35700 * int32x2_t vget_low_s32 (int32x4_t) 35701 _Form of expected instruction(s):_ 'vmov D0, D0' 35702 35703 * int16x4_t vget_low_s16 (int16x8_t) 35704 _Form of expected instruction(s):_ 'vmov D0, D0' 35705 35706 * int8x8_t vget_low_s8 (int8x16_t) 35707 _Form of expected instruction(s):_ 'vmov D0, D0' 35708 35709 * float32x2_t vget_low_f32 (float32x4_t) 35710 _Form of expected instruction(s):_ 'vmov D0, D0' 35711 35712 * poly16x4_t vget_low_p16 (poly16x8_t) 35713 _Form of expected instruction(s):_ 'vmov D0, D0' 35714 35715 * poly8x8_t vget_low_p8 (poly8x16_t) 35716 _Form of expected instruction(s):_ 'vmov D0, D0' 35717 35718 * poly64x1_t vget_low_p64 (poly64x2_t) 35719 35720 * uint64x1_t vget_low_u64 (uint64x2_t) 35721 35722 * int64x1_t vget_low_s64 (int64x2_t) 35723 357246.57.6.52 Conversions 35725..................... 35726 35727 * float32x2_t vcvt_f32_u32 (uint32x2_t) 35728 _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0' 35729 35730 * float32x2_t vcvt_f32_s32 (int32x2_t) 35731 _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0' 35732 35733 * uint32x2_t vcvt_u32_f32 (float32x2_t) 35734 _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0' 35735 35736 * int32x2_t vcvt_s32_f32 (float32x2_t) 35737 _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0' 35738 35739 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 35740 _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0' 35741 35742 * float32x4_t vcvtq_f32_s32 (int32x4_t) 35743 _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0' 35744 35745 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 35746 _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0' 35747 35748 * int32x4_t vcvtq_s32_f32 (float32x4_t) 35749 _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0' 35750 35751 * float16x4_t vcvt_f16_f32 (float32x4_t) 35752 _Form of expected instruction(s):_ 'vcvt.f16.f32 D0, Q0' 35753 35754 * float32x4_t vcvt_f32_f16 (float16x4_t) 35755 _Form of expected instruction(s):_ 'vcvt.f32.f16 Q0, D0' 35756 35757 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 35758 _Form of expected instruction(s):_ 'vcvt.f32.u32 D0, D0, #0' 35759 35760 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 35761 _Form of expected instruction(s):_ 'vcvt.f32.s32 D0, D0, #0' 35762 35763 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 35764 _Form of expected instruction(s):_ 'vcvt.u32.f32 D0, D0, #0' 35765 35766 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 35767 _Form of expected instruction(s):_ 'vcvt.s32.f32 D0, D0, #0' 35768 35769 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 35770 _Form of expected instruction(s):_ 'vcvt.f32.u32 Q0, Q0, #0' 35771 35772 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 35773 _Form of expected instruction(s):_ 'vcvt.f32.s32 Q0, Q0, #0' 35774 35775 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 35776 _Form of expected instruction(s):_ 'vcvt.u32.f32 Q0, Q0, #0' 35777 35778 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 35779 _Form of expected instruction(s):_ 'vcvt.s32.f32 Q0, Q0, #0' 35780 357816.57.6.53 Move, single_opcode narrowing 35782....................................... 35783 35784 * uint32x2_t vmovn_u64 (uint64x2_t) 35785 _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' 35786 35787 * uint16x4_t vmovn_u32 (uint32x4_t) 35788 _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' 35789 35790 * uint8x8_t vmovn_u16 (uint16x8_t) 35791 _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' 35792 35793 * int32x2_t vmovn_s64 (int64x2_t) 35794 _Form of expected instruction(s):_ 'vmovn.i64 D0, Q0' 35795 35796 * int16x4_t vmovn_s32 (int32x4_t) 35797 _Form of expected instruction(s):_ 'vmovn.i32 D0, Q0' 35798 35799 * int8x8_t vmovn_s16 (int16x8_t) 35800 _Form of expected instruction(s):_ 'vmovn.i16 D0, Q0' 35801 35802 * uint32x2_t vqmovn_u64 (uint64x2_t) 35803 _Form of expected instruction(s):_ 'vqmovn.u64 D0, Q0' 35804 35805 * uint16x4_t vqmovn_u32 (uint32x4_t) 35806 _Form of expected instruction(s):_ 'vqmovn.u32 D0, Q0' 35807 35808 * uint8x8_t vqmovn_u16 (uint16x8_t) 35809 _Form of expected instruction(s):_ 'vqmovn.u16 D0, Q0' 35810 35811 * int32x2_t vqmovn_s64 (int64x2_t) 35812 _Form of expected instruction(s):_ 'vqmovn.s64 D0, Q0' 35813 35814 * int16x4_t vqmovn_s32 (int32x4_t) 35815 _Form of expected instruction(s):_ 'vqmovn.s32 D0, Q0' 35816 35817 * int8x8_t vqmovn_s16 (int16x8_t) 35818 _Form of expected instruction(s):_ 'vqmovn.s16 D0, Q0' 35819 35820 * uint32x2_t vqmovun_s64 (int64x2_t) 35821 _Form of expected instruction(s):_ 'vqmovun.s64 D0, Q0' 35822 35823 * uint16x4_t vqmovun_s32 (int32x4_t) 35824 _Form of expected instruction(s):_ 'vqmovun.s32 D0, Q0' 35825 35826 * uint8x8_t vqmovun_s16 (int16x8_t) 35827 _Form of expected instruction(s):_ 'vqmovun.s16 D0, Q0' 35828 358296.57.6.54 Move, single_opcode long 35830.................................. 35831 35832 * uint64x2_t vmovl_u32 (uint32x2_t) 35833 _Form of expected instruction(s):_ 'vmovl.u32 Q0, D0' 35834 35835 * uint32x4_t vmovl_u16 (uint16x4_t) 35836 _Form of expected instruction(s):_ 'vmovl.u16 Q0, D0' 35837 35838 * uint16x8_t vmovl_u8 (uint8x8_t) 35839 _Form of expected instruction(s):_ 'vmovl.u8 Q0, D0' 35840 35841 * int64x2_t vmovl_s32 (int32x2_t) 35842 _Form of expected instruction(s):_ 'vmovl.s32 Q0, D0' 35843 35844 * int32x4_t vmovl_s16 (int16x4_t) 35845 _Form of expected instruction(s):_ 'vmovl.s16 Q0, D0' 35846 35847 * int16x8_t vmovl_s8 (int8x8_t) 35848 _Form of expected instruction(s):_ 'vmovl.s8 Q0, D0' 35849 358506.57.6.55 Table lookup 35851...................... 35852 35853 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 35854 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 35855 35856 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 35857 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 35858 35859 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 35860 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0}, D0' 35861 35862 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 35863 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 35864 35865 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 35866 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 35867 35868 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 35869 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1}, D0' 35870 35871 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 35872 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 35873 35874 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 35875 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 35876 35877 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 35878 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2}, D0' 35879 35880 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 35881 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 35882 D0' 35883 35884 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 35885 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 35886 D0' 35887 35888 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 35889 _Form of expected instruction(s):_ 'vtbl.8 D0, {D0, D1, D2, D3}, 35890 D0' 35891 358926.57.6.56 Extended table lookup 35893............................... 35894 35895 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 35896 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 35897 35898 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 35899 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 35900 35901 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 35902 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0}, D0' 35903 35904 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 35905 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 35906 35907 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 35908 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 35909 35910 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 35911 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1}, D0' 35912 35913 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 35914 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 35915 35916 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 35917 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 35918 35919 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 35920 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2}, D0' 35921 35922 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 35923 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 35924 D0' 35925 35926 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 35927 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 35928 D0' 35929 35930 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 35931 _Form of expected instruction(s):_ 'vtbx.8 D0, {D0, D1, D2, D3}, 35932 D0' 35933 359346.57.6.57 Multiply, lane 35935........................ 35936 35937 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 35938 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' 35939 35940 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 35941 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 35942 35943 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 35944 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 35945 35946 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 35947 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 35948 35949 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 35950 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 35951 35952 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 35953 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' 35954 35955 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 35956 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 35957 35958 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 35959 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 35960 35961 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 35962 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 35963 35964 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 35965 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 35966 359676.57.6.58 Long multiply, lane 35968............................. 35969 35970 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 35971 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' 35972 35973 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 35974 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' 35975 35976 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 35977 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' 35978 35979 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 35980 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' 35981 359826.57.6.59 Saturating doubling long multiply, lane 35983................................................. 35984 35985 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 35986 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' 35987 35988 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 35989 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' 35990 359916.57.6.60 Saturating doubling multiply high, lane 35992................................................. 35993 35994 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 35995 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' 35996 35997 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 35998 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' 35999 36000 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 36001 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' 36002 36003 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 36004 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' 36005 36006 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 36007 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' 36008 36009 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 36010 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' 36011 36012 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 36013 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' 36014 36015 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 36016 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' 36017 360186.57.6.61 Multiply-accumulate, lane 36019................................... 36020 36021 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 36022 const int) 36023 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' 36024 36025 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const 36026 int) 36027 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 36028 36029 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const 36030 int) 36031 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 36032 36033 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 36034 int) 36035 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 36036 36037 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 36038 int) 36039 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 36040 36041 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 36042 const int) 36043 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' 36044 36045 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 36046 const int) 36047 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 36048 36049 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 36050 const int) 36051 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 36052 36053 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 36054 int) 36055 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 36056 36057 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 36058 int) 36059 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 36060 36061 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 36062 const int) 36063 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' 36064 36065 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 36066 const int) 36067 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' 36068 36069 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 36070 int) 36071 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' 36072 36073 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 36074 int) 36075 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' 36076 36077 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 36078 int) 36079 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' 36080 36081 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 36082 int) 36083 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' 36084 360856.57.6.62 Multiply-subtract, lane 36086................................. 36087 36088 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 36089 const int) 36090 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' 36091 36092 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, const 36093 int) 36094 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 36095 36096 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, const 36097 int) 36098 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 36099 36100 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 36101 int) 36102 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 36103 36104 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 36105 int) 36106 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 36107 36108 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 36109 const int) 36110 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' 36111 36112 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 36113 const int) 36114 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 36115 36116 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 36117 const int) 36118 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 36119 36120 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 36121 int) 36122 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 36123 36124 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 36125 int) 36126 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 36127 36128 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 36129 const int) 36130 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' 36131 36132 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 36133 const int) 36134 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' 36135 36136 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 36137 int) 36138 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' 36139 36140 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 36141 int) 36142 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' 36143 36144 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 36145 int) 36146 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' 36147 36148 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 36149 int) 36150 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' 36151 361526.57.6.63 Vector multiply by scalar 36153................................... 36154 36155 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 36156 _Form of expected instruction(s):_ 'vmul.f32 D0, D0, D0[0]' 36157 36158 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 36159 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 36160 36161 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 36162 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 36163 36164 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 36165 _Form of expected instruction(s):_ 'vmul.i32 D0, D0, D0[0]' 36166 36167 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 36168 _Form of expected instruction(s):_ 'vmul.i16 D0, D0, D0[0]' 36169 36170 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 36171 _Form of expected instruction(s):_ 'vmul.f32 Q0, Q0, D0[0]' 36172 36173 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 36174 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 36175 36176 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 36177 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 36178 36179 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 36180 _Form of expected instruction(s):_ 'vmul.i32 Q0, Q0, D0[0]' 36181 36182 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 36183 _Form of expected instruction(s):_ 'vmul.i16 Q0, Q0, D0[0]' 36184 361856.57.6.64 Vector long multiply by scalar 36186........................................ 36187 36188 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 36189 _Form of expected instruction(s):_ 'vmull.u32 Q0, D0, D0[0]' 36190 36191 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 36192 _Form of expected instruction(s):_ 'vmull.u16 Q0, D0, D0[0]' 36193 36194 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 36195 _Form of expected instruction(s):_ 'vmull.s32 Q0, D0, D0[0]' 36196 36197 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 36198 _Form of expected instruction(s):_ 'vmull.s16 Q0, D0, D0[0]' 36199 362006.57.6.65 Vector saturating doubling long multiply by scalar 36201............................................................ 36202 36203 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 36204 _Form of expected instruction(s):_ 'vqdmull.s32 Q0, D0, D0[0]' 36205 36206 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 36207 _Form of expected instruction(s):_ 'vqdmull.s16 Q0, D0, D0[0]' 36208 362096.57.6.66 Vector saturating doubling multiply high by scalar 36210............................................................ 36211 36212 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 36213 _Form of expected instruction(s):_ 'vqdmulh.s32 Q0, Q0, D0[0]' 36214 36215 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 36216 _Form of expected instruction(s):_ 'vqdmulh.s16 Q0, Q0, D0[0]' 36217 36218 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 36219 _Form of expected instruction(s):_ 'vqdmulh.s32 D0, D0, D0[0]' 36220 36221 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 36222 _Form of expected instruction(s):_ 'vqdmulh.s16 D0, D0, D0[0]' 36223 36224 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 36225 _Form of expected instruction(s):_ 'vqrdmulh.s32 Q0, Q0, D0[0]' 36226 36227 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 36228 _Form of expected instruction(s):_ 'vqrdmulh.s16 Q0, Q0, D0[0]' 36229 36230 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 36231 _Form of expected instruction(s):_ 'vqrdmulh.s32 D0, D0, D0[0]' 36232 36233 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 36234 _Form of expected instruction(s):_ 'vqrdmulh.s16 D0, D0, D0[0]' 36235 362366.57.6.67 Vector multiply-accumulate by scalar 36237.............................................. 36238 36239 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 36240 _Form of expected instruction(s):_ 'vmla.f32 D0, D0, D0[0]' 36241 36242 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 36243 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 36244 36245 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 36246 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 36247 36248 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 36249 _Form of expected instruction(s):_ 'vmla.i32 D0, D0, D0[0]' 36250 36251 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 36252 _Form of expected instruction(s):_ 'vmla.i16 D0, D0, D0[0]' 36253 36254 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 36255 _Form of expected instruction(s):_ 'vmla.f32 Q0, Q0, D0[0]' 36256 36257 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 36258 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 36259 36260 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 36261 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 36262 36263 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 36264 _Form of expected instruction(s):_ 'vmla.i32 Q0, Q0, D0[0]' 36265 36266 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 36267 _Form of expected instruction(s):_ 'vmla.i16 Q0, Q0, D0[0]' 36268 36269 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 36270 _Form of expected instruction(s):_ 'vmlal.u32 Q0, D0, D0[0]' 36271 36272 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 36273 _Form of expected instruction(s):_ 'vmlal.u16 Q0, D0, D0[0]' 36274 36275 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 36276 _Form of expected instruction(s):_ 'vmlal.s32 Q0, D0, D0[0]' 36277 36278 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 36279 _Form of expected instruction(s):_ 'vmlal.s16 Q0, D0, D0[0]' 36280 36281 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 36282 _Form of expected instruction(s):_ 'vqdmlal.s32 Q0, D0, D0[0]' 36283 36284 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 36285 _Form of expected instruction(s):_ 'vqdmlal.s16 Q0, D0, D0[0]' 36286 362876.57.6.68 Vector multiply-subtract by scalar 36288............................................ 36289 36290 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 36291 _Form of expected instruction(s):_ 'vmls.f32 D0, D0, D0[0]' 36292 36293 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 36294 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 36295 36296 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 36297 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 36298 36299 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 36300 _Form of expected instruction(s):_ 'vmls.i32 D0, D0, D0[0]' 36301 36302 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 36303 _Form of expected instruction(s):_ 'vmls.i16 D0, D0, D0[0]' 36304 36305 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 36306 _Form of expected instruction(s):_ 'vmls.f32 Q0, Q0, D0[0]' 36307 36308 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 36309 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 36310 36311 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 36312 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 36313 36314 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 36315 _Form of expected instruction(s):_ 'vmls.i32 Q0, Q0, D0[0]' 36316 36317 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 36318 _Form of expected instruction(s):_ 'vmls.i16 Q0, Q0, D0[0]' 36319 36320 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 36321 _Form of expected instruction(s):_ 'vmlsl.u32 Q0, D0, D0[0]' 36322 36323 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 36324 _Form of expected instruction(s):_ 'vmlsl.u16 Q0, D0, D0[0]' 36325 36326 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 36327 _Form of expected instruction(s):_ 'vmlsl.s32 Q0, D0, D0[0]' 36328 36329 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 36330 _Form of expected instruction(s):_ 'vmlsl.s16 Q0, D0, D0[0]' 36331 36332 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 36333 _Form of expected instruction(s):_ 'vqdmlsl.s32 Q0, D0, D0[0]' 36334 36335 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 36336 _Form of expected instruction(s):_ 'vqdmlsl.s16 Q0, D0, D0[0]' 36337 363386.57.6.69 Vector extract 36339........................ 36340 36341 * poly64x1_t vext_p64 (poly64x1_t, poly64x1_t, const int) 36342 _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' 36343 36344 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 36345 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 36346 36347 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 36348 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 36349 36350 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 36351 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 36352 36353 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 36354 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 36355 36356 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 36357 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 36358 36359 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 36360 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 36361 36362 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 36363 _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' 36364 36365 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 36366 _Form of expected instruction(s):_ 'vext.64 D0, D0, D0, #0' 36367 36368 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 36369 _Form of expected instruction(s):_ 'vext.32 D0, D0, D0, #0' 36370 36371 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 36372 _Form of expected instruction(s):_ 'vext.16 D0, D0, D0, #0' 36373 36374 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 36375 _Form of expected instruction(s):_ 'vext.8 D0, D0, D0, #0' 36376 36377 * poly64x2_t vextq_p64 (poly64x2_t, poly64x2_t, const int) 36378 _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' 36379 36380 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 36381 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 36382 36383 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 36384 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 36385 36386 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 36387 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 36388 36389 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 36390 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 36391 36392 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 36393 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 36394 36395 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 36396 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 36397 36398 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 36399 _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' 36400 36401 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 36402 _Form of expected instruction(s):_ 'vext.64 Q0, Q0, Q0, #0' 36403 36404 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 36405 _Form of expected instruction(s):_ 'vext.32 Q0, Q0, Q0, #0' 36406 36407 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 36408 _Form of expected instruction(s):_ 'vext.16 Q0, Q0, Q0, #0' 36409 36410 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 36411 _Form of expected instruction(s):_ 'vext.8 Q0, Q0, Q0, #0' 36412 364136.57.6.70 Reverse elements 36414.......................... 36415 36416 * uint32x2_t vrev64_u32 (uint32x2_t) 36417 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 36418 36419 * uint16x4_t vrev64_u16 (uint16x4_t) 36420 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 36421 36422 * uint8x8_t vrev64_u8 (uint8x8_t) 36423 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 36424 36425 * int32x2_t vrev64_s32 (int32x2_t) 36426 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 36427 36428 * int16x4_t vrev64_s16 (int16x4_t) 36429 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 36430 36431 * int8x8_t vrev64_s8 (int8x8_t) 36432 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 36433 36434 * float32x2_t vrev64_f32 (float32x2_t) 36435 _Form of expected instruction(s):_ 'vrev64.32 D0, D0' 36436 36437 * poly16x4_t vrev64_p16 (poly16x4_t) 36438 _Form of expected instruction(s):_ 'vrev64.16 D0, D0' 36439 36440 * poly8x8_t vrev64_p8 (poly8x8_t) 36441 _Form of expected instruction(s):_ 'vrev64.8 D0, D0' 36442 36443 * uint32x4_t vrev64q_u32 (uint32x4_t) 36444 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 36445 36446 * uint16x8_t vrev64q_u16 (uint16x8_t) 36447 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 36448 36449 * uint8x16_t vrev64q_u8 (uint8x16_t) 36450 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 36451 36452 * int32x4_t vrev64q_s32 (int32x4_t) 36453 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 36454 36455 * int16x8_t vrev64q_s16 (int16x8_t) 36456 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 36457 36458 * int8x16_t vrev64q_s8 (int8x16_t) 36459 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 36460 36461 * float32x4_t vrev64q_f32 (float32x4_t) 36462 _Form of expected instruction(s):_ 'vrev64.32 Q0, Q0' 36463 36464 * poly16x8_t vrev64q_p16 (poly16x8_t) 36465 _Form of expected instruction(s):_ 'vrev64.16 Q0, Q0' 36466 36467 * poly8x16_t vrev64q_p8 (poly8x16_t) 36468 _Form of expected instruction(s):_ 'vrev64.8 Q0, Q0' 36469 36470 * uint16x4_t vrev32_u16 (uint16x4_t) 36471 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 36472 36473 * int16x4_t vrev32_s16 (int16x4_t) 36474 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 36475 36476 * uint8x8_t vrev32_u8 (uint8x8_t) 36477 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 36478 36479 * int8x8_t vrev32_s8 (int8x8_t) 36480 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 36481 36482 * poly16x4_t vrev32_p16 (poly16x4_t) 36483 _Form of expected instruction(s):_ 'vrev32.16 D0, D0' 36484 36485 * poly8x8_t vrev32_p8 (poly8x8_t) 36486 _Form of expected instruction(s):_ 'vrev32.8 D0, D0' 36487 36488 * uint16x8_t vrev32q_u16 (uint16x8_t) 36489 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 36490 36491 * int16x8_t vrev32q_s16 (int16x8_t) 36492 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 36493 36494 * uint8x16_t vrev32q_u8 (uint8x16_t) 36495 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 36496 36497 * int8x16_t vrev32q_s8 (int8x16_t) 36498 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 36499 36500 * poly16x8_t vrev32q_p16 (poly16x8_t) 36501 _Form of expected instruction(s):_ 'vrev32.16 Q0, Q0' 36502 36503 * poly8x16_t vrev32q_p8 (poly8x16_t) 36504 _Form of expected instruction(s):_ 'vrev32.8 Q0, Q0' 36505 36506 * uint8x8_t vrev16_u8 (uint8x8_t) 36507 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 36508 36509 * int8x8_t vrev16_s8 (int8x8_t) 36510 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 36511 36512 * poly8x8_t vrev16_p8 (poly8x8_t) 36513 _Form of expected instruction(s):_ 'vrev16.8 D0, D0' 36514 36515 * uint8x16_t vrev16q_u8 (uint8x16_t) 36516 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 36517 36518 * int8x16_t vrev16q_s8 (int8x16_t) 36519 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 36520 36521 * poly8x16_t vrev16q_p8 (poly8x16_t) 36522 _Form of expected instruction(s):_ 'vrev16.8 Q0, Q0' 36523 365246.57.6.71 Bit selection 36525....................... 36526 36527 * poly64x1_t vbsl_p64 (uint64x1_t, poly64x1_t, poly64x1_t) 36528 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36529 D0, D0' _or_ 'vbif D0, D0, D0' 36530 36531 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 36532 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36533 D0, D0' _or_ 'vbif D0, D0, D0' 36534 36535 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 36536 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36537 D0, D0' _or_ 'vbif D0, D0, D0' 36538 36539 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 36540 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36541 D0, D0' _or_ 'vbif D0, D0, D0' 36542 36543 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 36544 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36545 D0, D0' _or_ 'vbif D0, D0, D0' 36546 36547 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 36548 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36549 D0, D0' _or_ 'vbif D0, D0, D0' 36550 36551 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 36552 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36553 D0, D0' _or_ 'vbif D0, D0, D0' 36554 36555 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 36556 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36557 D0, D0' _or_ 'vbif D0, D0, D0' 36558 36559 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 36560 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36561 D0, D0' _or_ 'vbif D0, D0, D0' 36562 36563 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 36564 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36565 D0, D0' _or_ 'vbif D0, D0, D0' 36566 36567 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 36568 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36569 D0, D0' _or_ 'vbif D0, D0, D0' 36570 36571 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 36572 _Form of expected instruction(s):_ 'vbsl D0, D0, D0' _or_ 'vbit D0, 36573 D0, D0' _or_ 'vbif D0, D0, D0' 36574 36575 * poly64x2_t vbslq_p64 (uint64x2_t, poly64x2_t, poly64x2_t) 36576 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36577 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36578 36579 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 36580 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36581 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36582 36583 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 36584 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36585 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36586 36587 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 36588 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36589 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36590 36591 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 36592 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36593 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36594 36595 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 36596 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36597 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36598 36599 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 36600 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36601 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36602 36603 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 36604 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36605 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36606 36607 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 36608 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36609 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36610 36611 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 36612 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36613 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36614 36615 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 36616 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36617 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36618 36619 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 36620 _Form of expected instruction(s):_ 'vbsl Q0, Q0, Q0' _or_ 'vbit Q0, 36621 Q0, Q0' _or_ 'vbif Q0, Q0, Q0' 36622 366236.57.6.72 Transpose elements 36624............................ 36625 36626 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 36627 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 36628 36629 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 36630 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 36631 36632 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 36633 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 36634 36635 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 36636 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 36637 36638 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 36639 _Form of expected instruction(s):_ 'vtrn.16 D0, D1' 36640 36641 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 36642 _Form of expected instruction(s):_ 'vtrn.8 D0, D1' 36643 36644 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 36645 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36646 36647 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 36648 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36649 36650 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 36651 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36652 36653 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 36654 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 36655 36656 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 36657 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 36658 36659 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 36660 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 36661 36662 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 36663 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 36664 36665 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 36666 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 36667 36668 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 36669 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 36670 36671 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 36672 _Form of expected instruction(s):_ 'vtrn.32 Q0, Q1' 36673 36674 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 36675 _Form of expected instruction(s):_ 'vtrn.16 Q0, Q1' 36676 36677 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 36678 _Form of expected instruction(s):_ 'vtrn.8 Q0, Q1' 36679 366806.57.6.73 Zip elements 36681...................... 36682 36683 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 36684 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 36685 36686 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 36687 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 36688 36689 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 36690 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 36691 36692 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 36693 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 36694 36695 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 36696 _Form of expected instruction(s):_ 'vzip.16 D0, D1' 36697 36698 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 36699 _Form of expected instruction(s):_ 'vzip.8 D0, D1' 36700 36701 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 36702 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36703 36704 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 36705 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36706 36707 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 36708 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36709 36710 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 36711 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 36712 36713 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 36714 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 36715 36716 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 36717 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 36718 36719 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 36720 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 36721 36722 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 36723 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 36724 36725 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 36726 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 36727 36728 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 36729 _Form of expected instruction(s):_ 'vzip.32 Q0, Q1' 36730 36731 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 36732 _Form of expected instruction(s):_ 'vzip.16 Q0, Q1' 36733 36734 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 36735 _Form of expected instruction(s):_ 'vzip.8 Q0, Q1' 36736 367376.57.6.74 Unzip elements 36738........................ 36739 36740 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 36741 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36742 36743 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 36744 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 36745 36746 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 36747 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 36748 36749 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 36750 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36751 36752 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 36753 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 36754 36755 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 36756 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 36757 36758 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 36759 _Form of expected instruction(s):_ 'vuzp.32 D0, D1' 36760 36761 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 36762 _Form of expected instruction(s):_ 'vuzp.16 D0, D1' 36763 36764 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 36765 _Form of expected instruction(s):_ 'vuzp.8 D0, D1' 36766 36767 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 36768 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 36769 36770 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 36771 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 36772 36773 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 36774 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 36775 36776 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 36777 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 36778 36779 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 36780 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 36781 36782 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 36783 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 36784 36785 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 36786 _Form of expected instruction(s):_ 'vuzp.32 Q0, Q1' 36787 36788 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 36789 _Form of expected instruction(s):_ 'vuzp.16 Q0, Q1' 36790 36791 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 36792 _Form of expected instruction(s):_ 'vuzp.8 Q0, Q1' 36793 367946.57.6.75 Element/structure loads, VLD1 variants 36795................................................ 36796 36797 * poly64x1_t vld1_p64 (const poly64_t *) 36798 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36799 36800 * uint32x2_t vld1_u32 (const uint32_t *) 36801 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 36802 36803 * uint16x4_t vld1_u16 (const uint16_t *) 36804 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 36805 36806 * uint8x8_t vld1_u8 (const uint8_t *) 36807 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 36808 36809 * int32x2_t vld1_s32 (const int32_t *) 36810 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 36811 36812 * int16x4_t vld1_s16 (const int16_t *) 36813 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 36814 36815 * int8x8_t vld1_s8 (const int8_t *) 36816 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 36817 36818 * uint64x1_t vld1_u64 (const uint64_t *) 36819 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36820 36821 * int64x1_t vld1_s64 (const int64_t *) 36822 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36823 36824 * float32x2_t vld1_f32 (const float32_t *) 36825 _Form of expected instruction(s):_ 'vld1.32 {D0}, [R0]' 36826 36827 * poly16x4_t vld1_p16 (const poly16_t *) 36828 _Form of expected instruction(s):_ 'vld1.16 {D0}, [R0]' 36829 36830 * poly8x8_t vld1_p8 (const poly8_t *) 36831 _Form of expected instruction(s):_ 'vld1.8 {D0}, [R0]' 36832 36833 * poly64x2_t vld1q_p64 (const poly64_t *) 36834 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 36835 36836 * uint32x4_t vld1q_u32 (const uint32_t *) 36837 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 36838 36839 * uint16x8_t vld1q_u16 (const uint16_t *) 36840 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 36841 36842 * uint8x16_t vld1q_u8 (const uint8_t *) 36843 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 36844 36845 * int32x4_t vld1q_s32 (const int32_t *) 36846 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 36847 36848 * int16x8_t vld1q_s16 (const int16_t *) 36849 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 36850 36851 * int8x16_t vld1q_s8 (const int8_t *) 36852 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 36853 36854 * uint64x2_t vld1q_u64 (const uint64_t *) 36855 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 36856 36857 * int64x2_t vld1q_s64 (const int64_t *) 36858 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 36859 36860 * float32x4_t vld1q_f32 (const float32_t *) 36861 _Form of expected instruction(s):_ 'vld1.32 {D0, D1}, [R0]' 36862 36863 * poly16x8_t vld1q_p16 (const poly16_t *) 36864 _Form of expected instruction(s):_ 'vld1.16 {D0, D1}, [R0]' 36865 36866 * poly8x16_t vld1q_p8 (const poly8_t *) 36867 _Form of expected instruction(s):_ 'vld1.8 {D0, D1}, [R0]' 36868 36869 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 36870 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36871 36872 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 36873 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36874 36875 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 36876 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36877 36878 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 36879 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36880 36881 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 36882 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36883 36884 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 36885 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36886 36887 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 36888 int) 36889 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36890 36891 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 36892 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36893 36894 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 36895 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36896 36897 * poly64x1_t vld1_lane_p64 (const poly64_t *, poly64x1_t, const int) 36898 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36899 36900 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 36901 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36902 36903 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 36904 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36905 36906 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 36907 36908 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36909 36910 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 36911 36912 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36913 36914 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 36915 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36916 36917 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 36918 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36919 36920 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 36921 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36922 36923 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 36924 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36925 36926 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 36927 int) 36928 _Form of expected instruction(s):_ 'vld1.32 {D0[0]}, [R0]' 36929 36930 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 36931 36932 _Form of expected instruction(s):_ 'vld1.16 {D0[0]}, [R0]' 36933 36934 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 36935 _Form of expected instruction(s):_ 'vld1.8 {D0[0]}, [R0]' 36936 36937 * poly64x2_t vld1q_lane_p64 (const poly64_t *, poly64x2_t, const int) 36938 36939 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36940 36941 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 36942 36943 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36944 36945 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 36946 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36947 36948 * uint32x2_t vld1_dup_u32 (const uint32_t *) 36949 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 36950 36951 * uint16x4_t vld1_dup_u16 (const uint16_t *) 36952 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 36953 36954 * uint8x8_t vld1_dup_u8 (const uint8_t *) 36955 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 36956 36957 * int32x2_t vld1_dup_s32 (const int32_t *) 36958 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 36959 36960 * int16x4_t vld1_dup_s16 (const int16_t *) 36961 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 36962 36963 * int8x8_t vld1_dup_s8 (const int8_t *) 36964 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 36965 36966 * float32x2_t vld1_dup_f32 (const float32_t *) 36967 _Form of expected instruction(s):_ 'vld1.32 {D0[]}, [R0]' 36968 36969 * poly16x4_t vld1_dup_p16 (const poly16_t *) 36970 _Form of expected instruction(s):_ 'vld1.16 {D0[]}, [R0]' 36971 36972 * poly8x8_t vld1_dup_p8 (const poly8_t *) 36973 _Form of expected instruction(s):_ 'vld1.8 {D0[]}, [R0]' 36974 36975 * poly64x1_t vld1_dup_p64 (const poly64_t *) 36976 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36977 36978 * uint64x1_t vld1_dup_u64 (const uint64_t *) 36979 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36980 36981 * int64x1_t vld1_dup_s64 (const int64_t *) 36982 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 36983 36984 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 36985 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 36986 36987 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 36988 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 36989 36990 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 36991 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 36992 36993 * int32x4_t vld1q_dup_s32 (const int32_t *) 36994 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 36995 36996 * int16x8_t vld1q_dup_s16 (const int16_t *) 36997 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 36998 36999 * int8x16_t vld1q_dup_s8 (const int8_t *) 37000 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 37001 37002 * float32x4_t vld1q_dup_f32 (const float32_t *) 37003 _Form of expected instruction(s):_ 'vld1.32 {D0[], D1[]}, [R0]' 37004 37005 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 37006 _Form of expected instruction(s):_ 'vld1.16 {D0[], D1[]}, [R0]' 37007 37008 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 37009 _Form of expected instruction(s):_ 'vld1.8 {D0[], D1[]}, [R0]' 37010 37011 * poly64x2_t vld1q_dup_p64 (const poly64_t *) 37012 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 37013 37014 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 37015 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 37016 37017 * int64x2_t vld1q_dup_s64 (const int64_t *) 37018 _Form of expected instruction(s):_ 'vld1.64 {D0}, [R0]' 37019 370206.57.6.76 Element/structure stores, VST1 variants 37021................................................. 37022 37023 * void vst1_p64 (poly64_t *, poly64x1_t) 37024 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37025 37026 * void vst1_u32 (uint32_t *, uint32x2_t) 37027 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 37028 37029 * void vst1_u16 (uint16_t *, uint16x4_t) 37030 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 37031 37032 * void vst1_u8 (uint8_t *, uint8x8_t) 37033 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 37034 37035 * void vst1_s32 (int32_t *, int32x2_t) 37036 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 37037 37038 * void vst1_s16 (int16_t *, int16x4_t) 37039 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 37040 37041 * void vst1_s8 (int8_t *, int8x8_t) 37042 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 37043 37044 * void vst1_u64 (uint64_t *, uint64x1_t) 37045 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37046 37047 * void vst1_s64 (int64_t *, int64x1_t) 37048 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37049 37050 * void vst1_f32 (float32_t *, float32x2_t) 37051 _Form of expected instruction(s):_ 'vst1.32 {D0}, [R0]' 37052 37053 * void vst1_p16 (poly16_t *, poly16x4_t) 37054 _Form of expected instruction(s):_ 'vst1.16 {D0}, [R0]' 37055 37056 * void vst1_p8 (poly8_t *, poly8x8_t) 37057 _Form of expected instruction(s):_ 'vst1.8 {D0}, [R0]' 37058 37059 * void vst1q_p64 (poly64_t *, poly64x2_t) 37060 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37061 37062 * void vst1q_u32 (uint32_t *, uint32x4_t) 37063 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 37064 37065 * void vst1q_u16 (uint16_t *, uint16x8_t) 37066 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 37067 37068 * void vst1q_u8 (uint8_t *, uint8x16_t) 37069 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 37070 37071 * void vst1q_s32 (int32_t *, int32x4_t) 37072 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 37073 37074 * void vst1q_s16 (int16_t *, int16x8_t) 37075 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 37076 37077 * void vst1q_s8 (int8_t *, int8x16_t) 37078 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 37079 37080 * void vst1q_u64 (uint64_t *, uint64x2_t) 37081 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37082 37083 * void vst1q_s64 (int64_t *, int64x2_t) 37084 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37085 37086 * void vst1q_f32 (float32_t *, float32x4_t) 37087 _Form of expected instruction(s):_ 'vst1.32 {D0, D1}, [R0]' 37088 37089 * void vst1q_p16 (poly16_t *, poly16x8_t) 37090 _Form of expected instruction(s):_ 'vst1.16 {D0, D1}, [R0]' 37091 37092 * void vst1q_p8 (poly8_t *, poly8x16_t) 37093 _Form of expected instruction(s):_ 'vst1.8 {D0, D1}, [R0]' 37094 37095 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 37096 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37097 37098 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 37099 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37100 37101 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 37102 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37103 37104 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 37105 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37106 37107 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 37108 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37109 37110 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 37111 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37112 37113 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 37114 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37115 37116 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 37117 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37118 37119 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 37120 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37121 37122 * void vst1_lane_p64 (poly64_t *, poly64x1_t, const int) 37123 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37124 37125 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 37126 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37127 37128 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 37129 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37130 37131 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 37132 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37133 37134 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 37135 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37136 37137 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 37138 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37139 37140 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 37141 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37142 37143 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 37144 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37145 37146 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 37147 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37148 37149 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 37150 _Form of expected instruction(s):_ 'vst1.32 {D0[0]}, [R0]' 37151 37152 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 37153 _Form of expected instruction(s):_ 'vst1.16 {D0[0]}, [R0]' 37154 37155 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 37156 _Form of expected instruction(s):_ 'vst1.8 {D0[0]}, [R0]' 37157 37158 * void vst1q_lane_p64 (poly64_t *, poly64x2_t, const int) 37159 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37160 37161 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 37162 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37163 37164 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 37165 _Form of expected instruction(s):_ 'vst1.64 {D0}, [R0]' 37166 371676.57.6.77 Element/structure loads, VLD2 variants 37168................................................ 37169 37170 * uint32x2x2_t vld2_u32 (const uint32_t *) 37171 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37172 37173 * uint16x4x2_t vld2_u16 (const uint16_t *) 37174 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37175 37176 * uint8x8x2_t vld2_u8 (const uint8_t *) 37177 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37178 37179 * int32x2x2_t vld2_s32 (const int32_t *) 37180 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37181 37182 * int16x4x2_t vld2_s16 (const int16_t *) 37183 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37184 37185 * int8x8x2_t vld2_s8 (const int8_t *) 37186 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37187 37188 * float32x2x2_t vld2_f32 (const float32_t *) 37189 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37190 37191 * poly16x4x2_t vld2_p16 (const poly16_t *) 37192 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37193 37194 * poly8x8x2_t vld2_p8 (const poly8_t *) 37195 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37196 37197 * poly64x1x2_t vld2_p64 (const poly64_t *) 37198 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37199 37200 * uint64x1x2_t vld2_u64 (const uint64_t *) 37201 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37202 37203 * int64x1x2_t vld2_s64 (const int64_t *) 37204 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37205 37206 * uint32x4x2_t vld2q_u32 (const uint32_t *) 37207 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37208 37209 * uint16x8x2_t vld2q_u16 (const uint16_t *) 37210 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37211 37212 * uint8x16x2_t vld2q_u8 (const uint8_t *) 37213 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37214 37215 * int32x4x2_t vld2q_s32 (const int32_t *) 37216 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37217 37218 * int16x8x2_t vld2q_s16 (const int16_t *) 37219 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37220 37221 * int8x16x2_t vld2q_s8 (const int8_t *) 37222 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37223 37224 * float32x4x2_t vld2q_f32 (const float32_t *) 37225 _Form of expected instruction(s):_ 'vld2.32 {D0, D1}, [R0]' 37226 37227 * poly16x8x2_t vld2q_p16 (const poly16_t *) 37228 _Form of expected instruction(s):_ 'vld2.16 {D0, D1}, [R0]' 37229 37230 * poly8x16x2_t vld2q_p8 (const poly8_t *) 37231 _Form of expected instruction(s):_ 'vld2.8 {D0, D1}, [R0]' 37232 37233 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 37234 int) 37235 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37236 37237 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 37238 int) 37239 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37240 37241 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 37242 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 37243 37244 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 37245 37246 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37247 37248 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 37249 37250 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37251 37252 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 37253 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 37254 37255 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 37256 const int) 37257 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37258 37259 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 37260 int) 37261 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37262 37263 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 37264 _Form of expected instruction(s):_ 'vld2.8 {D0[0], D1[0]}, [R0]' 37265 37266 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 37267 int) 37268 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37269 37270 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 37271 int) 37272 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37273 37274 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 37275 int) 37276 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37277 37278 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 37279 int) 37280 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37281 37282 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 37283 const int) 37284 _Form of expected instruction(s):_ 'vld2.32 {D0[0], D1[0]}, [R0]' 37285 37286 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 37287 int) 37288 _Form of expected instruction(s):_ 'vld2.16 {D0[0], D1[0]}, [R0]' 37289 37290 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 37291 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 37292 37293 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 37294 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 37295 37296 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 37297 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 37298 37299 * int32x2x2_t vld2_dup_s32 (const int32_t *) 37300 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 37301 37302 * int16x4x2_t vld2_dup_s16 (const int16_t *) 37303 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 37304 37305 * int8x8x2_t vld2_dup_s8 (const int8_t *) 37306 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 37307 37308 * float32x2x2_t vld2_dup_f32 (const float32_t *) 37309 _Form of expected instruction(s):_ 'vld2.32 {D0[], D1[]}, [R0]' 37310 37311 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 37312 _Form of expected instruction(s):_ 'vld2.16 {D0[], D1[]}, [R0]' 37313 37314 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 37315 _Form of expected instruction(s):_ 'vld2.8 {D0[], D1[]}, [R0]' 37316 37317 * poly64x1x2_t vld2_dup_p64 (const poly64_t *) 37318 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37319 37320 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 37321 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37322 37323 * int64x1x2_t vld2_dup_s64 (const int64_t *) 37324 _Form of expected instruction(s):_ 'vld1.64 {D0, D1}, [R0]' 37325 373266.57.6.78 Element/structure stores, VST2 variants 37327................................................. 37328 37329 * void vst2_u32 (uint32_t *, uint32x2x2_t) 37330 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37331 37332 * void vst2_u16 (uint16_t *, uint16x4x2_t) 37333 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37334 37335 * void vst2_u8 (uint8_t *, uint8x8x2_t) 37336 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37337 37338 * void vst2_s32 (int32_t *, int32x2x2_t) 37339 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37340 37341 * void vst2_s16 (int16_t *, int16x4x2_t) 37342 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37343 37344 * void vst2_s8 (int8_t *, int8x8x2_t) 37345 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37346 37347 * void vst2_f32 (float32_t *, float32x2x2_t) 37348 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37349 37350 * void vst2_p16 (poly16_t *, poly16x4x2_t) 37351 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37352 37353 * void vst2_p8 (poly8_t *, poly8x8x2_t) 37354 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37355 37356 * void vst2_p64 (poly64_t *, poly64x1x2_t) 37357 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37358 37359 * void vst2_u64 (uint64_t *, uint64x1x2_t) 37360 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37361 37362 * void vst2_s64 (int64_t *, int64x1x2_t) 37363 _Form of expected instruction(s):_ 'vst1.64 {D0, D1}, [R0]' 37364 37365 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 37366 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37367 37368 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 37369 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37370 37371 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 37372 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37373 37374 * void vst2q_s32 (int32_t *, int32x4x2_t) 37375 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37376 37377 * void vst2q_s16 (int16_t *, int16x8x2_t) 37378 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37379 37380 * void vst2q_s8 (int8_t *, int8x16x2_t) 37381 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37382 37383 * void vst2q_f32 (float32_t *, float32x4x2_t) 37384 _Form of expected instruction(s):_ 'vst2.32 {D0, D1}, [R0]' 37385 37386 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 37387 _Form of expected instruction(s):_ 'vst2.16 {D0, D1}, [R0]' 37388 37389 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 37390 _Form of expected instruction(s):_ 'vst2.8 {D0, D1}, [R0]' 37391 37392 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 37393 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37394 37395 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 37396 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37397 37398 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 37399 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 37400 37401 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 37402 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37403 37404 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 37405 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37406 37407 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 37408 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 37409 37410 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 37411 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37412 37413 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 37414 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37415 37416 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 37417 _Form of expected instruction(s):_ 'vst2.8 {D0[0], D1[0]}, [R0]' 37418 37419 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 37420 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37421 37422 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 37423 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37424 37425 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 37426 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37427 37428 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 37429 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37430 37431 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 37432 _Form of expected instruction(s):_ 'vst2.32 {D0[0], D1[0]}, [R0]' 37433 37434 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 37435 _Form of expected instruction(s):_ 'vst2.16 {D0[0], D1[0]}, [R0]' 37436 374376.57.6.79 Element/structure loads, VLD3 variants 37438................................................ 37439 37440 * uint32x2x3_t vld3_u32 (const uint32_t *) 37441 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37442 37443 * uint16x4x3_t vld3_u16 (const uint16_t *) 37444 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37445 37446 * uint8x8x3_t vld3_u8 (const uint8_t *) 37447 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37448 37449 * int32x2x3_t vld3_s32 (const int32_t *) 37450 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37451 37452 * int16x4x3_t vld3_s16 (const int16_t *) 37453 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37454 37455 * int8x8x3_t vld3_s8 (const int8_t *) 37456 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37457 37458 * float32x2x3_t vld3_f32 (const float32_t *) 37459 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37460 37461 * poly16x4x3_t vld3_p16 (const poly16_t *) 37462 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37463 37464 * poly8x8x3_t vld3_p8 (const poly8_t *) 37465 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37466 37467 * poly64x1x3_t vld3_p64 (const poly64_t *) 37468 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37469 37470 * uint64x1x3_t vld3_u64 (const uint64_t *) 37471 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37472 37473 * int64x1x3_t vld3_s64 (const int64_t *) 37474 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37475 37476 * uint32x4x3_t vld3q_u32 (const uint32_t *) 37477 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37478 37479 * uint16x8x3_t vld3q_u16 (const uint16_t *) 37480 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37481 37482 * uint8x16x3_t vld3q_u8 (const uint8_t *) 37483 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37484 37485 * int32x4x3_t vld3q_s32 (const int32_t *) 37486 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37487 37488 * int16x8x3_t vld3q_s16 (const int16_t *) 37489 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37490 37491 * int8x16x3_t vld3q_s8 (const int8_t *) 37492 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37493 37494 * float32x4x3_t vld3q_f32 (const float32_t *) 37495 _Form of expected instruction(s):_ 'vld3.32 {D0, D1, D2}, [R0]' 37496 37497 * poly16x8x3_t vld3q_p16 (const poly16_t *) 37498 _Form of expected instruction(s):_ 'vld3.16 {D0, D1, D2}, [R0]' 37499 37500 * poly8x16x3_t vld3q_p8 (const poly8_t *) 37501 _Form of expected instruction(s):_ 'vld3.8 {D0, D1, D2}, [R0]' 37502 37503 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 37504 int) 37505 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37506 [R0]' 37507 37508 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 37509 int) 37510 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37511 [R0]' 37512 37513 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 37514 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 37515 [R0]' 37516 37517 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 37518 37519 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37520 [R0]' 37521 37522 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 37523 37524 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37525 [R0]' 37526 37527 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 37528 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 37529 [R0]' 37530 37531 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 37532 const int) 37533 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37534 [R0]' 37535 37536 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 37537 int) 37538 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37539 [R0]' 37540 37541 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 37542 _Form of expected instruction(s):_ 'vld3.8 {D0[0], D1[0], D2[0]}, 37543 [R0]' 37544 37545 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 37546 int) 37547 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37548 [R0]' 37549 37550 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 37551 int) 37552 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37553 [R0]' 37554 37555 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 37556 int) 37557 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37558 [R0]' 37559 37560 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 37561 int) 37562 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37563 [R0]' 37564 37565 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 37566 const int) 37567 _Form of expected instruction(s):_ 'vld3.32 {D0[0], D1[0], D2[0]}, 37568 [R0]' 37569 37570 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 37571 int) 37572 _Form of expected instruction(s):_ 'vld3.16 {D0[0], D1[0], D2[0]}, 37573 [R0]' 37574 37575 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 37576 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 37577 [R0]' 37578 37579 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 37580 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 37581 [R0]' 37582 37583 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 37584 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 37585 [R0]' 37586 37587 * int32x2x3_t vld3_dup_s32 (const int32_t *) 37588 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 37589 [R0]' 37590 37591 * int16x4x3_t vld3_dup_s16 (const int16_t *) 37592 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 37593 [R0]' 37594 37595 * int8x8x3_t vld3_dup_s8 (const int8_t *) 37596 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 37597 [R0]' 37598 37599 * float32x2x3_t vld3_dup_f32 (const float32_t *) 37600 _Form of expected instruction(s):_ 'vld3.32 {D0[], D1[], D2[]}, 37601 [R0]' 37602 37603 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 37604 _Form of expected instruction(s):_ 'vld3.16 {D0[], D1[], D2[]}, 37605 [R0]' 37606 37607 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 37608 _Form of expected instruction(s):_ 'vld3.8 {D0[], D1[], D2[]}, 37609 [R0]' 37610 37611 * poly64x1x3_t vld3_dup_p64 (const poly64_t *) 37612 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37613 37614 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 37615 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37616 37617 * int64x1x3_t vld3_dup_s64 (const int64_t *) 37618 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2}, [R0]' 37619 376206.57.6.80 Element/structure stores, VST3 variants 37621................................................. 37622 37623 * void vst3_u32 (uint32_t *, uint32x2x3_t) 37624 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 37625 37626 * void vst3_u16 (uint16_t *, uint16x4x3_t) 37627 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 37628 37629 * void vst3_u8 (uint8_t *, uint8x8x3_t) 37630 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 37631 37632 * void vst3_s32 (int32_t *, int32x2x3_t) 37633 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 37634 37635 * void vst3_s16 (int16_t *, int16x4x3_t) 37636 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 37637 37638 * void vst3_s8 (int8_t *, int8x8x3_t) 37639 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 37640 37641 * void vst3_f32 (float32_t *, float32x2x3_t) 37642 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2, D3}, [R0]' 37643 37644 * void vst3_p16 (poly16_t *, poly16x4x3_t) 37645 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2, D3}, [R0]' 37646 37647 * void vst3_p8 (poly8_t *, poly8x8x3_t) 37648 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2, D3}, [R0]' 37649 37650 * void vst3_p64 (poly64_t *, poly64x1x3_t) 37651 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37652 37653 * void vst3_u64 (uint64_t *, uint64x1x3_t) 37654 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37655 37656 * void vst3_s64 (int64_t *, int64x1x3_t) 37657 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37658 37659 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 37660 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 37661 37662 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 37663 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 37664 37665 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 37666 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 37667 37668 * void vst3q_s32 (int32_t *, int32x4x3_t) 37669 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 37670 37671 * void vst3q_s16 (int16_t *, int16x8x3_t) 37672 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 37673 37674 * void vst3q_s8 (int8_t *, int8x16x3_t) 37675 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 37676 37677 * void vst3q_f32 (float32_t *, float32x4x3_t) 37678 _Form of expected instruction(s):_ 'vst3.32 {D0, D1, D2}, [R0]' 37679 37680 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 37681 _Form of expected instruction(s):_ 'vst3.16 {D0, D1, D2}, [R0]' 37682 37683 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 37684 _Form of expected instruction(s):_ 'vst3.8 {D0, D1, D2}, [R0]' 37685 37686 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 37687 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37688 [R0]' 37689 37690 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 37691 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37692 [R0]' 37693 37694 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 37695 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 37696 [R0]' 37697 37698 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 37699 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37700 [R0]' 37701 37702 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 37703 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37704 [R0]' 37705 37706 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 37707 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 37708 [R0]' 37709 37710 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 37711 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37712 [R0]' 37713 37714 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 37715 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37716 [R0]' 37717 37718 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 37719 _Form of expected instruction(s):_ 'vst3.8 {D0[0], D1[0], D2[0]}, 37720 [R0]' 37721 37722 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 37723 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37724 [R0]' 37725 37726 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 37727 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37728 [R0]' 37729 37730 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 37731 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37732 [R0]' 37733 37734 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 37735 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37736 [R0]' 37737 37738 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 37739 _Form of expected instruction(s):_ 'vst3.32 {D0[0], D1[0], D2[0]}, 37740 [R0]' 37741 37742 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 37743 _Form of expected instruction(s):_ 'vst3.16 {D0[0], D1[0], D2[0]}, 37744 [R0]' 37745 377466.57.6.81 Element/structure loads, VLD4 variants 37747................................................ 37748 37749 * uint32x2x4_t vld4_u32 (const uint32_t *) 37750 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37751 37752 * uint16x4x4_t vld4_u16 (const uint16_t *) 37753 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37754 37755 * uint8x8x4_t vld4_u8 (const uint8_t *) 37756 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37757 37758 * int32x2x4_t vld4_s32 (const int32_t *) 37759 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37760 37761 * int16x4x4_t vld4_s16 (const int16_t *) 37762 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37763 37764 * int8x8x4_t vld4_s8 (const int8_t *) 37765 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37766 37767 * float32x2x4_t vld4_f32 (const float32_t *) 37768 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37769 37770 * poly16x4x4_t vld4_p16 (const poly16_t *) 37771 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37772 37773 * poly8x8x4_t vld4_p8 (const poly8_t *) 37774 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37775 37776 * poly64x1x4_t vld4_p64 (const poly64_t *) 37777 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37778 37779 * uint64x1x4_t vld4_u64 (const uint64_t *) 37780 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37781 37782 * int64x1x4_t vld4_s64 (const int64_t *) 37783 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37784 37785 * uint32x4x4_t vld4q_u32 (const uint32_t *) 37786 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37787 37788 * uint16x8x4_t vld4q_u16 (const uint16_t *) 37789 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37790 37791 * uint8x16x4_t vld4q_u8 (const uint8_t *) 37792 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37793 37794 * int32x4x4_t vld4q_s32 (const int32_t *) 37795 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37796 37797 * int16x8x4_t vld4q_s16 (const int16_t *) 37798 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37799 37800 * int8x16x4_t vld4q_s8 (const int8_t *) 37801 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37802 37803 * float32x4x4_t vld4q_f32 (const float32_t *) 37804 _Form of expected instruction(s):_ 'vld4.32 {D0, D1, D2, D3}, [R0]' 37805 37806 * poly16x8x4_t vld4q_p16 (const poly16_t *) 37807 _Form of expected instruction(s):_ 'vld4.16 {D0, D1, D2, D3}, [R0]' 37808 37809 * poly8x16x4_t vld4q_p8 (const poly8_t *) 37810 _Form of expected instruction(s):_ 'vld4.8 {D0, D1, D2, D3}, [R0]' 37811 37812 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 37813 int) 37814 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37815 D3[0]}, [R0]' 37816 37817 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 37818 int) 37819 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37820 D3[0]}, [R0]' 37821 37822 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 37823 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 37824 D3[0]}, [R0]' 37825 37826 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 37827 37828 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37829 D3[0]}, [R0]' 37830 37831 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 37832 37833 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37834 D3[0]}, [R0]' 37835 37836 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 37837 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 37838 D3[0]}, [R0]' 37839 37840 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 37841 const int) 37842 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37843 D3[0]}, [R0]' 37844 37845 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 37846 int) 37847 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37848 D3[0]}, [R0]' 37849 37850 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 37851 _Form of expected instruction(s):_ 'vld4.8 {D0[0], D1[0], D2[0], 37852 D3[0]}, [R0]' 37853 37854 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 37855 int) 37856 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37857 D3[0]}, [R0]' 37858 37859 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 37860 int) 37861 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37862 D3[0]}, [R0]' 37863 37864 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 37865 int) 37866 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37867 D3[0]}, [R0]' 37868 37869 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 37870 int) 37871 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37872 D3[0]}, [R0]' 37873 37874 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 37875 const int) 37876 _Form of expected instruction(s):_ 'vld4.32 {D0[0], D1[0], D2[0], 37877 D3[0]}, [R0]' 37878 37879 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 37880 int) 37881 _Form of expected instruction(s):_ 'vld4.16 {D0[0], D1[0], D2[0], 37882 D3[0]}, [R0]' 37883 37884 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 37885 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 37886 D3[]}, [R0]' 37887 37888 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 37889 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 37890 D3[]}, [R0]' 37891 37892 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 37893 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 37894 D3[]}, [R0]' 37895 37896 * int32x2x4_t vld4_dup_s32 (const int32_t *) 37897 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 37898 D3[]}, [R0]' 37899 37900 * int16x4x4_t vld4_dup_s16 (const int16_t *) 37901 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 37902 D3[]}, [R0]' 37903 37904 * int8x8x4_t vld4_dup_s8 (const int8_t *) 37905 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 37906 D3[]}, [R0]' 37907 37908 * float32x2x4_t vld4_dup_f32 (const float32_t *) 37909 _Form of expected instruction(s):_ 'vld4.32 {D0[], D1[], D2[], 37910 D3[]}, [R0]' 37911 37912 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 37913 _Form of expected instruction(s):_ 'vld4.16 {D0[], D1[], D2[], 37914 D3[]}, [R0]' 37915 37916 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 37917 _Form of expected instruction(s):_ 'vld4.8 {D0[], D1[], D2[], 37918 D3[]}, [R0]' 37919 37920 * poly64x1x4_t vld4_dup_p64 (const poly64_t *) 37921 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37922 37923 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 37924 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37925 37926 * int64x1x4_t vld4_dup_s64 (const int64_t *) 37927 _Form of expected instruction(s):_ 'vld1.64 {D0, D1, D2, D3}, [R0]' 37928 379296.57.6.82 Element/structure stores, VST4 variants 37930................................................. 37931 37932 * void vst4_u32 (uint32_t *, uint32x2x4_t) 37933 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37934 37935 * void vst4_u16 (uint16_t *, uint16x4x4_t) 37936 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37937 37938 * void vst4_u8 (uint8_t *, uint8x8x4_t) 37939 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37940 37941 * void vst4_s32 (int32_t *, int32x2x4_t) 37942 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37943 37944 * void vst4_s16 (int16_t *, int16x4x4_t) 37945 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37946 37947 * void vst4_s8 (int8_t *, int8x8x4_t) 37948 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37949 37950 * void vst4_f32 (float32_t *, float32x2x4_t) 37951 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37952 37953 * void vst4_p16 (poly16_t *, poly16x4x4_t) 37954 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37955 37956 * void vst4_p8 (poly8_t *, poly8x8x4_t) 37957 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37958 37959 * void vst4_p64 (poly64_t *, poly64x1x4_t) 37960 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37961 37962 * void vst4_u64 (uint64_t *, uint64x1x4_t) 37963 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37964 37965 * void vst4_s64 (int64_t *, int64x1x4_t) 37966 _Form of expected instruction(s):_ 'vst1.64 {D0, D1, D2, D3}, [R0]' 37967 37968 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 37969 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37970 37971 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 37972 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37973 37974 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 37975 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37976 37977 * void vst4q_s32 (int32_t *, int32x4x4_t) 37978 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37979 37980 * void vst4q_s16 (int16_t *, int16x8x4_t) 37981 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37982 37983 * void vst4q_s8 (int8_t *, int8x16x4_t) 37984 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37985 37986 * void vst4q_f32 (float32_t *, float32x4x4_t) 37987 _Form of expected instruction(s):_ 'vst4.32 {D0, D1, D2, D3}, [R0]' 37988 37989 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 37990 _Form of expected instruction(s):_ 'vst4.16 {D0, D1, D2, D3}, [R0]' 37991 37992 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 37993 _Form of expected instruction(s):_ 'vst4.8 {D0, D1, D2, D3}, [R0]' 37994 37995 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 37996 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 37997 D3[0]}, [R0]' 37998 37999 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 38000 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38001 D3[0]}, [R0]' 38002 38003 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 38004 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 38005 D3[0]}, [R0]' 38006 38007 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 38008 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 38009 D3[0]}, [R0]' 38010 38011 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 38012 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38013 D3[0]}, [R0]' 38014 38015 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 38016 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 38017 D3[0]}, [R0]' 38018 38019 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 38020 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 38021 D3[0]}, [R0]' 38022 38023 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 38024 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38025 D3[0]}, [R0]' 38026 38027 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 38028 _Form of expected instruction(s):_ 'vst4.8 {D0[0], D1[0], D2[0], 38029 D3[0]}, [R0]' 38030 38031 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 38032 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 38033 D3[0]}, [R0]' 38034 38035 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 38036 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38037 D3[0]}, [R0]' 38038 38039 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 38040 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 38041 D3[0]}, [R0]' 38042 38043 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 38044 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38045 D3[0]}, [R0]' 38046 38047 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 38048 _Form of expected instruction(s):_ 'vst4.32 {D0[0], D1[0], D2[0], 38049 D3[0]}, [R0]' 38050 38051 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 38052 _Form of expected instruction(s):_ 'vst4.16 {D0[0], D1[0], D2[0], 38053 D3[0]}, [R0]' 38054 380556.57.6.83 Logical operations (AND) 38056.................................. 38057 38058 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 38059 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38060 38061 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 38062 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38063 38064 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 38065 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38066 38067 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 38068 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38069 38070 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 38071 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38072 38073 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 38074 _Form of expected instruction(s):_ 'vand D0, D0, D0' 38075 38076 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 38077 38078 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 38079 38080 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 38081 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38082 38083 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 38084 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38085 38086 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 38087 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38088 38089 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 38090 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38091 38092 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 38093 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38094 38095 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 38096 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38097 38098 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 38099 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38100 38101 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 38102 _Form of expected instruction(s):_ 'vand Q0, Q0, Q0' 38103 381046.57.6.84 Logical operations (OR) 38105................................. 38106 38107 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 38108 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38109 38110 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 38111 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38112 38113 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 38114 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38115 38116 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 38117 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38118 38119 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 38120 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38121 38122 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 38123 _Form of expected instruction(s):_ 'vorr D0, D0, D0' 38124 38125 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 38126 38127 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 38128 38129 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 38130 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38131 38132 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 38133 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38134 38135 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 38136 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38137 38138 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 38139 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38140 38141 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 38142 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38143 38144 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 38145 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38146 38147 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 38148 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38149 38150 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 38151 _Form of expected instruction(s):_ 'vorr Q0, Q0, Q0' 38152 381536.57.6.85 Logical operations (exclusive OR) 38154........................................... 38155 38156 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 38157 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38158 38159 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 38160 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38161 38162 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 38163 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38164 38165 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 38166 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38167 38168 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 38169 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38170 38171 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 38172 _Form of expected instruction(s):_ 'veor D0, D0, D0' 38173 38174 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 38175 38176 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 38177 38178 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 38179 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38180 38181 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 38182 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38183 38184 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 38185 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38186 38187 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 38188 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38189 38190 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 38191 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38192 38193 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 38194 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38195 38196 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 38197 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38198 38199 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 38200 _Form of expected instruction(s):_ 'veor Q0, Q0, Q0' 38201 382026.57.6.86 Logical operations (AND-NOT) 38203...................................... 38204 38205 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 38206 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38207 38208 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 38209 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38210 38211 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 38212 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38213 38214 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 38215 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38216 38217 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 38218 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38219 38220 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 38221 _Form of expected instruction(s):_ 'vbic D0, D0, D0' 38222 38223 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 38224 38225 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 38226 38227 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 38228 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38229 38230 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 38231 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38232 38233 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 38234 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38235 38236 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 38237 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38238 38239 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 38240 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38241 38242 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 38243 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38244 38245 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 38246 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38247 38248 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 38249 _Form of expected instruction(s):_ 'vbic Q0, Q0, Q0' 38250 382516.57.6.87 Logical operations (OR-NOT) 38252..................................... 38253 38254 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 38255 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38256 38257 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 38258 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38259 38260 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 38261 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38262 38263 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 38264 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38265 38266 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 38267 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38268 38269 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 38270 _Form of expected instruction(s):_ 'vorn D0, D0, D0' 38271 38272 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 38273 38274 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 38275 38276 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 38277 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38278 38279 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 38280 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38281 38282 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 38283 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38284 38285 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 38286 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38287 38288 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 38289 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38290 38291 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 38292 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38293 38294 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 38295 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38296 38297 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 38298 _Form of expected instruction(s):_ 'vorn Q0, Q0, Q0' 38299 383006.57.6.88 Reinterpret casts 38301........................... 38302 38303 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 38304 38305 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 38306 38307 * poly8x8_t vreinterpret_p8_p64 (poly64x1_t) 38308 38309 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 38310 38311 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 38312 38313 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 38314 38315 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 38316 38317 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 38318 38319 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 38320 38321 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 38322 38323 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 38324 38325 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 38326 38327 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 38328 38329 * poly16x4_t vreinterpret_p16_p64 (poly64x1_t) 38330 38331 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 38332 38333 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 38334 38335 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 38336 38337 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 38338 38339 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 38340 38341 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 38342 38343 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 38344 38345 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 38346 38347 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 38348 38349 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 38350 38351 * float32x2_t vreinterpret_f32_p64 (poly64x1_t) 38352 38353 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 38354 38355 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 38356 38357 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 38358 38359 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 38360 38361 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 38362 38363 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 38364 38365 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 38366 38367 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 38368 38369 * poly64x1_t vreinterpret_p64_p8 (poly8x8_t) 38370 38371 * poly64x1_t vreinterpret_p64_p16 (poly16x4_t) 38372 38373 * poly64x1_t vreinterpret_p64_f32 (float32x2_t) 38374 38375 * poly64x1_t vreinterpret_p64_s64 (int64x1_t) 38376 38377 * poly64x1_t vreinterpret_p64_u64 (uint64x1_t) 38378 38379 * poly64x1_t vreinterpret_p64_s8 (int8x8_t) 38380 38381 * poly64x1_t vreinterpret_p64_s16 (int16x4_t) 38382 38383 * poly64x1_t vreinterpret_p64_s32 (int32x2_t) 38384 38385 * poly64x1_t vreinterpret_p64_u8 (uint8x8_t) 38386 38387 * poly64x1_t vreinterpret_p64_u16 (uint16x4_t) 38388 38389 * poly64x1_t vreinterpret_p64_u32 (uint32x2_t) 38390 38391 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 38392 38393 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 38394 38395 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 38396 38397 * int64x1_t vreinterpret_s64_p64 (poly64x1_t) 38398 38399 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 38400 38401 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 38402 38403 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 38404 38405 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 38406 38407 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 38408 38409 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 38410 38411 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 38412 38413 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 38414 38415 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 38416 38417 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 38418 38419 * uint64x1_t vreinterpret_u64_p64 (poly64x1_t) 38420 38421 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 38422 38423 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 38424 38425 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 38426 38427 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 38428 38429 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 38430 38431 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 38432 38433 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 38434 38435 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 38436 38437 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 38438 38439 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 38440 38441 * int8x8_t vreinterpret_s8_p64 (poly64x1_t) 38442 38443 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 38444 38445 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 38446 38447 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 38448 38449 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 38450 38451 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 38452 38453 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 38454 38455 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 38456 38457 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 38458 38459 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 38460 38461 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 38462 38463 * int16x4_t vreinterpret_s16_p64 (poly64x1_t) 38464 38465 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 38466 38467 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 38468 38469 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 38470 38471 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 38472 38473 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 38474 38475 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 38476 38477 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 38478 38479 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 38480 38481 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 38482 38483 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 38484 38485 * int32x2_t vreinterpret_s32_p64 (poly64x1_t) 38486 38487 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 38488 38489 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 38490 38491 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 38492 38493 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 38494 38495 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 38496 38497 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 38498 38499 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 38500 38501 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 38502 38503 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 38504 38505 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 38506 38507 * uint8x8_t vreinterpret_u8_p64 (poly64x1_t) 38508 38509 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 38510 38511 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 38512 38513 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 38514 38515 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 38516 38517 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 38518 38519 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 38520 38521 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 38522 38523 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 38524 38525 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 38526 38527 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 38528 38529 * uint16x4_t vreinterpret_u16_p64 (poly64x1_t) 38530 38531 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 38532 38533 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 38534 38535 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 38536 38537 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 38538 38539 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 38540 38541 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 38542 38543 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 38544 38545 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 38546 38547 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 38548 38549 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 38550 38551 * uint32x2_t vreinterpret_u32_p64 (poly64x1_t) 38552 38553 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 38554 38555 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 38556 38557 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 38558 38559 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 38560 38561 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 38562 38563 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 38564 38565 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 38566 38567 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 38568 38569 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 38570 38571 * poly8x16_t vreinterpretq_p8_p64 (poly64x2_t) 38572 38573 * poly8x16_t vreinterpretq_p8_p128 (poly128_t) 38574 38575 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 38576 38577 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 38578 38579 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 38580 38581 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 38582 38583 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 38584 38585 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 38586 38587 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 38588 38589 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 38590 38591 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 38592 38593 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 38594 38595 * poly16x8_t vreinterpretq_p16_p64 (poly64x2_t) 38596 38597 * poly16x8_t vreinterpretq_p16_p128 (poly128_t) 38598 38599 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 38600 38601 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 38602 38603 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 38604 38605 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 38606 38607 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 38608 38609 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 38610 38611 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 38612 38613 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 38614 38615 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 38616 38617 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 38618 38619 * float32x4_t vreinterpretq_f32_p64 (poly64x2_t) 38620 38621 * float32x4_t vreinterpretq_f32_p128 (poly128_t) 38622 38623 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 38624 38625 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 38626 38627 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 38628 38629 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 38630 38631 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 38632 38633 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 38634 38635 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 38636 38637 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 38638 38639 * poly64x2_t vreinterpretq_p64_p8 (poly8x16_t) 38640 38641 * poly64x2_t vreinterpretq_p64_p16 (poly16x8_t) 38642 38643 * poly64x2_t vreinterpretq_p64_f32 (float32x4_t) 38644 38645 * poly64x2_t vreinterpretq_p64_p128 (poly128_t) 38646 38647 * poly64x2_t vreinterpretq_p64_s64 (int64x2_t) 38648 38649 * poly64x2_t vreinterpretq_p64_u64 (uint64x2_t) 38650 38651 * poly64x2_t vreinterpretq_p64_s8 (int8x16_t) 38652 38653 * poly64x2_t vreinterpretq_p64_s16 (int16x8_t) 38654 38655 * poly64x2_t vreinterpretq_p64_s32 (int32x4_t) 38656 38657 * poly64x2_t vreinterpretq_p64_u8 (uint8x16_t) 38658 38659 * poly64x2_t vreinterpretq_p64_u16 (uint16x8_t) 38660 38661 * poly64x2_t vreinterpretq_p64_u32 (uint32x4_t) 38662 38663 * poly128_t vreinterpretq_p128_p8 (poly8x16_t) 38664 38665 * poly128_t vreinterpretq_p128_p16 (poly16x8_t) 38666 38667 * poly128_t vreinterpretq_p128_f32 (float32x4_t) 38668 38669 * poly128_t vreinterpretq_p128_p64 (poly64x2_t) 38670 38671 * poly128_t vreinterpretq_p128_s64 (int64x2_t) 38672 38673 * poly128_t vreinterpretq_p128_u64 (uint64x2_t) 38674 38675 * poly128_t vreinterpretq_p128_s8 (int8x16_t) 38676 38677 * poly128_t vreinterpretq_p128_s16 (int16x8_t) 38678 38679 * poly128_t vreinterpretq_p128_s32 (int32x4_t) 38680 38681 * poly128_t vreinterpretq_p128_u8 (uint8x16_t) 38682 38683 * poly128_t vreinterpretq_p128_u16 (uint16x8_t) 38684 38685 * poly128_t vreinterpretq_p128_u32 (uint32x4_t) 38686 38687 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 38688 38689 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 38690 38691 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 38692 38693 * int64x2_t vreinterpretq_s64_p64 (poly64x2_t) 38694 38695 * int64x2_t vreinterpretq_s64_p128 (poly128_t) 38696 38697 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 38698 38699 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 38700 38701 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 38702 38703 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 38704 38705 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 38706 38707 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 38708 38709 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 38710 38711 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 38712 38713 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 38714 38715 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 38716 38717 * uint64x2_t vreinterpretq_u64_p64 (poly64x2_t) 38718 38719 * uint64x2_t vreinterpretq_u64_p128 (poly128_t) 38720 38721 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 38722 38723 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 38724 38725 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 38726 38727 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 38728 38729 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 38730 38731 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 38732 38733 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 38734 38735 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 38736 38737 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 38738 38739 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 38740 38741 * int8x16_t vreinterpretq_s8_p64 (poly64x2_t) 38742 38743 * int8x16_t vreinterpretq_s8_p128 (poly128_t) 38744 38745 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 38746 38747 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 38748 38749 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 38750 38751 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 38752 38753 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 38754 38755 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 38756 38757 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 38758 38759 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 38760 38761 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 38762 38763 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 38764 38765 * int16x8_t vreinterpretq_s16_p64 (poly64x2_t) 38766 38767 * int16x8_t vreinterpretq_s16_p128 (poly128_t) 38768 38769 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 38770 38771 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 38772 38773 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 38774 38775 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 38776 38777 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 38778 38779 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 38780 38781 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 38782 38783 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 38784 38785 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 38786 38787 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 38788 38789 * int32x4_t vreinterpretq_s32_p64 (poly64x2_t) 38790 38791 * int32x4_t vreinterpretq_s32_p128 (poly128_t) 38792 38793 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 38794 38795 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 38796 38797 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 38798 38799 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 38800 38801 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 38802 38803 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 38804 38805 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 38806 38807 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 38808 38809 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 38810 38811 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 38812 38813 * uint8x16_t vreinterpretq_u8_p64 (poly64x2_t) 38814 38815 * uint8x16_t vreinterpretq_u8_p128 (poly128_t) 38816 38817 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 38818 38819 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 38820 38821 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 38822 38823 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 38824 38825 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 38826 38827 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 38828 38829 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 38830 38831 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 38832 38833 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 38834 38835 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 38836 38837 * uint16x8_t vreinterpretq_u16_p64 (poly64x2_t) 38838 38839 * uint16x8_t vreinterpretq_u16_p128 (poly128_t) 38840 38841 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 38842 38843 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 38844 38845 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 38846 38847 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 38848 38849 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 38850 38851 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 38852 38853 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 38854 38855 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 38856 38857 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 38858 38859 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 38860 38861 * uint32x4_t vreinterpretq_u32_p64 (poly64x2_t) 38862 38863 * uint32x4_t vreinterpretq_u32_p128 (poly128_t) 38864 38865 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 38866 38867 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 38868 38869 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 38870 38871 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 38872 38873 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 38874 38875 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 38876 38877 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 38878 38879 * poly128_t vldrq_p128(poly128_t const *) 38880 38881 * void vstrq_p128(poly128_t *, poly128_t) 38882 38883 * uint64x1_t vceq_p64 (poly64x1_t, poly64x1_t) 38884 38885 * uint64x1_t vtst_p64 (poly64x1_t, poly64x1_t) 38886 38887 * uint32_t vsha1h_u32 (uint32_t) 38888 _Form of expected instruction(s):_ 'sha1h.32 Q0, Q1' 38889 38890 * uint32x4_t vsha1cq_u32 (uint32x4_t, uint32_t, uint32x4_t) 38891 _Form of expected instruction(s):_ 'sha1c.32 Q0, Q1, Q2' 38892 38893 * uint32x4_t vsha1pq_u32 (uint32x4_t, uint32_t, uint32x4_t) 38894 _Form of expected instruction(s):_ 'sha1p.32 Q0, Q1, Q2' 38895 38896 * uint32x4_t vsha1mq_u32 (uint32x4_t, uint32_t, uint32x4_t) 38897 _Form of expected instruction(s):_ 'sha1m.32 Q0, Q1, Q2' 38898 38899 * uint32x4_t vsha1su0q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 38900 _Form of expected instruction(s):_ 'sha1su0.32 Q0, Q1, Q2' 38901 38902 * uint32x4_t vsha1su1q_u32 (uint32x4_t, uint32x4_t) 38903 _Form of expected instruction(s):_ 'sha1su1.32 Q0, Q1, Q2' 38904 38905 * uint32x4_t vsha256hq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 38906 _Form of expected instruction(s):_ 'sha256h.32 Q0, Q1, Q2' 38907 38908 * uint32x4_t vsha256h2q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 38909 _Form of expected instruction(s):_ 'sha256h2.32 Q0, Q1, Q2' 38910 38911 * uint32x4_t vsha256su0q_u32 (uint32x4_t, uint32x4_t) 38912 _Form of expected instruction(s):_ 'sha256su0.32 Q0, Q1' 38913 38914 * uint32x4_t vsha256su1q_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 38915 _Form of expected instruction(s):_ 'sha256su1.32 Q0, Q1, Q2' 38916 38917 * poly128_t vmull_p64 (poly64_t a, poly64_t b) 38918 _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2' 38919 38920 * poly128_t vmull_high_p64 (poly64x2_t a, poly64x2_t b) 38921 _Form of expected instruction(s):_ 'vmull.p64 Q0, D1, D2' 38922 38923 38924File: gcc.info, Node: ARM ACLE Intrinsics, Next: AVR Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 38925 389266.57.7 ARM ACLE Intrinsics 38927-------------------------- 38928 389296.57.7.1 CRC32 intrinsics 38930......................... 38931 38932These intrinsics are available when the CRC32 architecture extension is 38933specified, e.g. when the '-march=armv8-a+crc' switch is used, or when 38934the target processor specified with '-mcpu' supports it. 38935 38936 * uint32_t __crc32b (uint32_t, uint8_t) 38937 _Form of expected instruction(s):_ 'crc32b R0, R0, R0' 38938 38939 * uint32_t __crc32h (uint32_t, uint16_t) 38940 _Form of expected instruction(s):_ 'crc32h R0, R0, R0' 38941 38942 * uint32_t __crc32w (uint32_t, uint32_t) 38943 _Form of expected instruction(s):_ 'crc32w R0, R0, R0' 38944 38945 * uint32_t __crc32d (uint32_t, uint64_t) 38946 _Form of expected instruction(s):_ Two 'crc32w R0, R0, R0' 38947 instructions. 38948 38949 * uint32_t __crc32cb (uint32_t, uint8_t) 38950 _Form of expected instruction(s):_ 'crc32cb R0, R0, R0' 38951 38952 * uint32_t __crc32ch (uint32_t, uint16_t) 38953 _Form of expected instruction(s):_ 'crc32ch R0, R0, R0' 38954 38955 * uint32_t __crc32cw (uint32_t, uint32_t) 38956 _Form of expected instruction(s):_ 'crc32cw R0, R0, R0' 38957 38958 * uint32_t __crc32cd (uint32_t, uint64_t) 38959 _Form of expected instruction(s):_ Two 'crc32cw R0, R0, R0' 38960 instructions. 38961 38962 38963File: gcc.info, Node: AVR Built-in Functions, Next: Blackfin Built-in Functions, Prev: ARM ACLE Intrinsics, Up: Target Builtins 38964 389656.57.8 AVR Built-in Functions 38966----------------------------- 38967 38968For each built-in function for AVR, there is an equally named, uppercase 38969built-in macro defined. That way users can easily query if or if not a 38970specific built-in is implemented or not. For example, if 38971'__builtin_avr_nop' is available the macro '__BUILTIN_AVR_NOP' is 38972defined to '1' and undefined otherwise. 38973 38974 The following built-in functions map to the respective machine 38975instruction, i.e. 'nop', 'sei', 'cli', 'sleep', 'wdr', 'swap', 'fmul', 38976'fmuls' resp. 'fmulsu'. The three 'fmul*' built-ins are implemented as 38977library call if no hardware multiplier is available. 38978 38979 void __builtin_avr_nop (void) 38980 void __builtin_avr_sei (void) 38981 void __builtin_avr_cli (void) 38982 void __builtin_avr_sleep (void) 38983 void __builtin_avr_wdr (void) 38984 unsigned char __builtin_avr_swap (unsigned char) 38985 unsigned int __builtin_avr_fmul (unsigned char, unsigned char) 38986 int __builtin_avr_fmuls (char, char) 38987 int __builtin_avr_fmulsu (char, unsigned char) 38988 38989 In order to delay execution for a specific number of cycles, GCC 38990implements 38991 void __builtin_avr_delay_cycles (unsigned long ticks) 38992 38993'ticks' is the number of ticks to delay execution. Note that this 38994built-in does not take into account the effect of interrupts that might 38995increase delay time. 'ticks' must be a compile-time integer constant; 38996delays with a variable number of cycles are not supported. 38997 38998 char __builtin_avr_flash_segment (const __memx void*) 38999 39000This built-in takes a byte address to the 24-bit *note address space: 39001AVR Named Address Spaces. '__memx' and returns the number of the flash 39002segment (the 64 KiB chunk) where the address points to. Counting starts 39003at '0'. If the address does not point to flash memory, return '-1'. 39004 39005 unsigned char __builtin_avr_insert_bits (unsigned long map, unsigned char bits, unsigned char val) 39006 39007Insert bits from BITS into VAL and return the resulting value. The 39008nibbles of MAP determine how the insertion is performed: Let X be the 39009N-th nibble of MAP 39010 1. If X is '0xf', then the N-th bit of VAL is returned unaltered. 39011 39012 2. If X is in the range 0...7, then the N-th result bit is set to the 39013 X-th bit of BITS 39014 39015 3. If X is in the range 8...'0xe', then the N-th result bit is 39016 undefined. 39017 39018One typical use case for this built-in is adjusting input and output 39019values to non-contiguous port layouts. Some examples: 39020 39021 // same as val, bits is unused 39022 __builtin_avr_insert_bits (0xffffffff, bits, val) 39023 39024 // same as bits, val is unused 39025 __builtin_avr_insert_bits (0x76543210, bits, val) 39026 39027 // same as rotating bits by 4 39028 __builtin_avr_insert_bits (0x32107654, bits, 0) 39029 39030 // high nibble of result is the high nibble of val 39031 // low nibble of result is the low nibble of bits 39032 __builtin_avr_insert_bits (0xffff3210, bits, val) 39033 39034 // reverse the bit order of bits 39035 __builtin_avr_insert_bits (0x01234567, bits, 0) 39036 39037 39038File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: AVR Built-in Functions, Up: Target Builtins 39039 390406.57.9 Blackfin Built-in Functions 39041---------------------------------- 39042 39043Currently, there are two Blackfin-specific built-in functions. These 39044are used for generating 'CSYNC' and 'SSYNC' machine insns without using 39045inline assembly; by using these built-in functions the compiler can 39046automatically add workarounds for hardware errata involving these 39047instructions. These functions are named as follows: 39048 39049 void __builtin_bfin_csync (void) 39050 void __builtin_bfin_ssync (void) 39051 39052 39053File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 39054 390556.57.10 FR-V Built-in Functions 39056------------------------------- 39057 39058GCC provides many FR-V-specific built-in functions. In general, these 39059functions are intended to be compatible with those described by 'FR-V 39060Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. The 39061two exceptions are '__MDUNPACKH' and '__MBTOHE', the GCC forms of which 39062pass 128-bit values by pointer rather than by value. 39063 39064 Most of the functions are named after specific FR-V instructions. Such 39065functions are said to be "directly mapped" and are summarized here in 39066tabular form. 39067 39068* Menu: 39069 39070* Argument Types:: 39071* Directly-mapped Integer Functions:: 39072* Directly-mapped Media Functions:: 39073* Raw read/write Functions:: 39074* Other Built-in Functions:: 39075 39076 39077File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 39078 390796.57.10.1 Argument Types 39080........................ 39081 39082The arguments to the built-in functions can be divided into three 39083groups: register numbers, compile-time constants and run-time values. 39084In order to make this classification clear at a glance, the arguments 39085and return values are given the following pseudo types: 39086 39087Pseudo type Real C type Constant? Description 39088'uh' 'unsigned short' No an unsigned halfword 39089'uw1' 'unsigned int' No an unsigned word 39090'sw1' 'int' No a signed word 39091'uw2' 'unsigned long long' No an unsigned doubleword 39092'sw2' 'long long' No a signed doubleword 39093'const' 'int' Yes an integer constant 39094'acc' 'int' Yes an ACC register number 39095'iacc' 'int' Yes an IACC register number 39096 39097 These pseudo types are not defined by GCC, they are simply a notational 39098convenience used in this manual. 39099 39100 Arguments of type 'uh', 'uw1', 'sw1', 'uw2' and 'sw2' are evaluated at 39101run time. They correspond to register operands in the underlying FR-V 39102instructions. 39103 39104 'const' arguments represent immediate operands in the underlying FR-V 39105instructions. They must be compile-time constants. 39106 39107 'acc' arguments are evaluated at compile time and specify the number of 39108an accumulator register. For example, an 'acc' argument of 2 selects 39109the ACC2 register. 39110 39111 'iacc' arguments are similar to 'acc' arguments but specify the number 39112of an IACC register. See *note Other Built-in Functions:: for more 39113details. 39114 39115 39116File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 39117 391186.57.10.2 Directly-mapped Integer Functions 39119........................................... 39120 39121The functions listed below map directly to FR-V I-type instructions. 39122 39123Function prototype Example usage Assembly output 39124'sw1 __ADDSS (sw1, sw1)' 'C = __ADDSS (A, B)' 'ADDSS A,B,C' 39125'sw1 __SCAN (sw1, sw1)' 'C = __SCAN (A, B)' 'SCAN A,B,C' 39126'sw1 __SCUTSS (sw1)' 'B = __SCUTSS (A)' 'SCUTSS A,B' 39127'sw1 __SLASS (sw1, sw1)' 'C = __SLASS (A, B)' 'SLASS A,B,C' 39128'void __SMASS (sw1, sw1)' '__SMASS (A, B)' 'SMASS A,B' 39129'void __SMSSS (sw1, sw1)' '__SMSSS (A, B)' 'SMSSS A,B' 39130'void __SMU (sw1, sw1)' '__SMU (A, B)' 'SMU A,B' 39131'sw2 __SMUL (sw1, sw1)' 'C = __SMUL (A, B)' 'SMUL A,B,C' 39132'sw1 __SUBSS (sw1, sw1)' 'C = __SUBSS (A, B)' 'SUBSS A,B,C' 39133'uw2 __UMUL (uw1, uw1)' 'C = __UMUL (A, B)' 'UMUL A,B,C' 39134 39135 39136File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 39137 391386.57.10.3 Directly-mapped Media Functions 39139......................................... 39140 39141The functions listed below map directly to FR-V M-type instructions. 39142 39143Function prototype Example usage Assembly output 39144'uw1 __MABSHS (sw1)' 'B = __MABSHS (A)' 'MABSHS A,B' 39145'void __MADDACCS (acc, acc)' '__MADDACCS (B, A)' 'MADDACCS A,B' 39146'sw1 __MADDHSS (sw1, sw1)' 'C = __MADDHSS (A, 'MADDHSS A,B,C' 39147 B)' 39148'uw1 __MADDHUS (uw1, uw1)' 'C = __MADDHUS (A, 'MADDHUS A,B,C' 39149 B)' 39150'uw1 __MAND (uw1, uw1)' 'C = __MAND (A, B)' 'MAND A,B,C' 39151'void __MASACCS (acc, acc)' '__MASACCS (B, A)' 'MASACCS A,B' 39152'uw1 __MAVEH (uw1, uw1)' 'C = __MAVEH (A, B)' 'MAVEH A,B,C' 39153'uw2 __MBTOH (uw1)' 'B = __MBTOH (A)' 'MBTOH A,B' 39154'void __MBTOHE (uw1 *, uw1)' '__MBTOHE (&B, A)' 'MBTOHE A,B' 39155'void __MCLRACC (acc)' '__MCLRACC (A)' 'MCLRACC A' 39156'void __MCLRACCA (void)' '__MCLRACCA ()' 'MCLRACCA' 39157'uw1 __Mcop1 (uw1, uw1)' 'C = __Mcop1 (A, B)' 'Mcop1 A,B,C' 39158'uw1 __Mcop2 (uw1, uw1)' 'C = __Mcop2 (A, B)' 'Mcop2 A,B,C' 39159'uw1 __MCPLHI (uw2, const)' 'C = __MCPLHI (A, B)' 'MCPLHI A,#B,C' 39160'uw1 __MCPLI (uw2, const)' 'C = __MCPLI (A, B)' 'MCPLI A,#B,C' 39161'void __MCPXIS (acc, sw1, '__MCPXIS (C, A, B)' 'MCPXIS A,B,C' 39162sw1)' 39163'void __MCPXIU (acc, uw1, '__MCPXIU (C, A, B)' 'MCPXIU A,B,C' 39164uw1)' 39165'void __MCPXRS (acc, sw1, '__MCPXRS (C, A, B)' 'MCPXRS A,B,C' 39166sw1)' 39167'void __MCPXRU (acc, uw1, '__MCPXRU (C, A, B)' 'MCPXRU A,B,C' 39168uw1)' 39169'uw1 __MCUT (acc, uw1)' 'C = __MCUT (A, B)' 'MCUT A,B,C' 39170'uw1 __MCUTSS (acc, sw1)' 'C = __MCUTSS (A, B)' 'MCUTSS A,B,C' 39171'void __MDADDACCS (acc, acc)' '__MDADDACCS (B, A)' 'MDADDACCS A,B' 39172'void __MDASACCS (acc, acc)' '__MDASACCS (B, A)' 'MDASACCS A,B' 39173'uw2 __MDCUTSSI (acc, const)' 'C = __MDCUTSSI (A, 'MDCUTSSI 39174 B)' A,#B,C' 39175'uw2 __MDPACKH (uw2, uw2)' 'C = __MDPACKH (A, 'MDPACKH A,B,C' 39176 B)' 39177'uw2 __MDROTLI (uw2, const)' 'C = __MDROTLI (A, 'MDROTLI 39178 B)' A,#B,C' 39179'void __MDSUBACCS (acc, acc)' '__MDSUBACCS (B, A)' 'MDSUBACCS A,B' 39180'void __MDUNPACKH (uw1 *, '__MDUNPACKH (&B, A)' 'MDUNPACKH A,B' 39181uw2)' 39182'uw2 __MEXPDHD (uw1, const)' 'C = __MEXPDHD (A, 'MEXPDHD 39183 B)' A,#B,C' 39184'uw1 __MEXPDHW (uw1, const)' 'C = __MEXPDHW (A, 'MEXPDHW 39185 B)' A,#B,C' 39186'uw1 __MHDSETH (uw1, const)' 'C = __MHDSETH (A, 'MHDSETH 39187 B)' A,#B,C' 39188'sw1 __MHDSETS (const)' 'B = __MHDSETS (A)' 'MHDSETS #A,B' 39189'uw1 __MHSETHIH (uw1, const)' 'B = __MHSETHIH (B, 'MHSETHIH #A,B' 39190 A)' 39191'sw1 __MHSETHIS (sw1, const)' 'B = __MHSETHIS (B, 'MHSETHIS #A,B' 39192 A)' 39193'uw1 __MHSETLOH (uw1, const)' 'B = __MHSETLOH (B, 'MHSETLOH #A,B' 39194 A)' 39195'sw1 __MHSETLOS (sw1, const)' 'B = __MHSETLOS (B, 'MHSETLOS #A,B' 39196 A)' 39197'uw1 __MHTOB (uw2)' 'B = __MHTOB (A)' 'MHTOB A,B' 39198'void __MMACHS (acc, sw1, '__MMACHS (C, A, B)' 'MMACHS A,B,C' 39199sw1)' 39200'void __MMACHU (acc, uw1, '__MMACHU (C, A, B)' 'MMACHU A,B,C' 39201uw1)' 39202'void __MMRDHS (acc, sw1, '__MMRDHS (C, A, B)' 'MMRDHS A,B,C' 39203sw1)' 39204'void __MMRDHU (acc, uw1, '__MMRDHU (C, A, B)' 'MMRDHU A,B,C' 39205uw1)' 39206'void __MMULHS (acc, sw1, '__MMULHS (C, A, B)' 'MMULHS A,B,C' 39207sw1)' 39208'void __MMULHU (acc, uw1, '__MMULHU (C, A, B)' 'MMULHU A,B,C' 39209uw1)' 39210'void __MMULXHS (acc, sw1, '__MMULXHS (C, A, B)' 'MMULXHS A,B,C' 39211sw1)' 39212'void __MMULXHU (acc, uw1, '__MMULXHU (C, A, B)' 'MMULXHU A,B,C' 39213uw1)' 39214'uw1 __MNOT (uw1)' 'B = __MNOT (A)' 'MNOT A,B' 39215'uw1 __MOR (uw1, uw1)' 'C = __MOR (A, B)' 'MOR A,B,C' 39216'uw1 __MPACKH (uh, uh)' 'C = __MPACKH (A, B)' 'MPACKH A,B,C' 39217'sw2 __MQADDHSS (sw2, sw2)' 'C = __MQADDHSS (A, 'MQADDHSS 39218 B)' A,B,C' 39219'uw2 __MQADDHUS (uw2, uw2)' 'C = __MQADDHUS (A, 'MQADDHUS 39220 B)' A,B,C' 39221'void __MQCPXIS (acc, sw2, '__MQCPXIS (C, A, B)' 'MQCPXIS A,B,C' 39222sw2)' 39223'void __MQCPXIU (acc, uw2, '__MQCPXIU (C, A, B)' 'MQCPXIU A,B,C' 39224uw2)' 39225'void __MQCPXRS (acc, sw2, '__MQCPXRS (C, A, B)' 'MQCPXRS A,B,C' 39226sw2)' 39227'void __MQCPXRU (acc, uw2, '__MQCPXRU (C, A, B)' 'MQCPXRU A,B,C' 39228uw2)' 39229'sw2 __MQLCLRHS (sw2, sw2)' 'C = __MQLCLRHS (A, 'MQLCLRHS 39230 B)' A,B,C' 39231'sw2 __MQLMTHS (sw2, sw2)' 'C = __MQLMTHS (A, 'MQLMTHS A,B,C' 39232 B)' 39233'void __MQMACHS (acc, sw2, '__MQMACHS (C, A, B)' 'MQMACHS A,B,C' 39234sw2)' 39235'void __MQMACHU (acc, uw2, '__MQMACHU (C, A, B)' 'MQMACHU A,B,C' 39236uw2)' 39237'void __MQMACXHS (acc, sw2, '__MQMACXHS (C, A, 'MQMACXHS 39238sw2)' B)' A,B,C' 39239'void __MQMULHS (acc, sw2, '__MQMULHS (C, A, B)' 'MQMULHS A,B,C' 39240sw2)' 39241'void __MQMULHU (acc, uw2, '__MQMULHU (C, A, B)' 'MQMULHU A,B,C' 39242uw2)' 39243'void __MQMULXHS (acc, sw2, '__MQMULXHS (C, A, 'MQMULXHS 39244sw2)' B)' A,B,C' 39245'void __MQMULXHU (acc, uw2, '__MQMULXHU (C, A, 'MQMULXHU 39246uw2)' B)' A,B,C' 39247'sw2 __MQSATHS (sw2, sw2)' 'C = __MQSATHS (A, 'MQSATHS A,B,C' 39248 B)' 39249'uw2 __MQSLLHI (uw2, int)' 'C = __MQSLLHI (A, 'MQSLLHI A,B,C' 39250 B)' 39251'sw2 __MQSRAHI (sw2, int)' 'C = __MQSRAHI (A, 'MQSRAHI A,B,C' 39252 B)' 39253'sw2 __MQSUBHSS (sw2, sw2)' 'C = __MQSUBHSS (A, 'MQSUBHSS 39254 B)' A,B,C' 39255'uw2 __MQSUBHUS (uw2, uw2)' 'C = __MQSUBHUS (A, 'MQSUBHUS 39256 B)' A,B,C' 39257'void __MQXMACHS (acc, sw2, '__MQXMACHS (C, A, 'MQXMACHS 39258sw2)' B)' A,B,C' 39259'void __MQXMACXHS (acc, sw2, '__MQXMACXHS (C, A, 'MQXMACXHS 39260sw2)' B)' A,B,C' 39261'uw1 __MRDACC (acc)' 'B = __MRDACC (A)' 'MRDACC A,B' 39262'uw1 __MRDACCG (acc)' 'B = __MRDACCG (A)' 'MRDACCG A,B' 39263'uw1 __MROTLI (uw1, const)' 'C = __MROTLI (A, B)' 'MROTLI A,#B,C' 39264'uw1 __MROTRI (uw1, const)' 'C = __MROTRI (A, B)' 'MROTRI A,#B,C' 39265'sw1 __MSATHS (sw1, sw1)' 'C = __MSATHS (A, B)' 'MSATHS A,B,C' 39266'uw1 __MSATHU (uw1, uw1)' 'C = __MSATHU (A, B)' 'MSATHU A,B,C' 39267'uw1 __MSLLHI (uw1, const)' 'C = __MSLLHI (A, B)' 'MSLLHI A,#B,C' 39268'sw1 __MSRAHI (sw1, const)' 'C = __MSRAHI (A, B)' 'MSRAHI A,#B,C' 39269'uw1 __MSRLHI (uw1, const)' 'C = __MSRLHI (A, B)' 'MSRLHI A,#B,C' 39270'void __MSUBACCS (acc, acc)' '__MSUBACCS (B, A)' 'MSUBACCS A,B' 39271'sw1 __MSUBHSS (sw1, sw1)' 'C = __MSUBHSS (A, 'MSUBHSS A,B,C' 39272 B)' 39273'uw1 __MSUBHUS (uw1, uw1)' 'C = __MSUBHUS (A, 'MSUBHUS A,B,C' 39274 B)' 39275'void __MTRAP (void)' '__MTRAP ()' 'MTRAP' 39276'uw2 __MUNPACKH (uw1)' 'B = __MUNPACKH (A)' 'MUNPACKH A,B' 39277'uw1 __MWCUT (uw2, uw1)' 'C = __MWCUT (A, B)' 'MWCUT A,B,C' 39278'void __MWTACC (acc, uw1)' '__MWTACC (B, A)' 'MWTACC A,B' 39279'void __MWTACCG (acc, uw1)' '__MWTACCG (B, A)' 'MWTACCG A,B' 39280'uw1 __MXOR (uw1, uw1)' 'C = __MXOR (A, B)' 'MXOR A,B,C' 39281 39282 39283File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 39284 392856.57.10.4 Raw read/write Functions 39286.................................. 39287 39288This sections describes built-in functions related to read and write 39289instructions to access memory. These functions generate 'membar' 39290instructions to flush the I/O load and stores where appropriate, as 39291described in Fujitsu's manual described above. 39292 39293'unsigned char __builtin_read8 (void *DATA)' 39294'unsigned short __builtin_read16 (void *DATA)' 39295'unsigned long __builtin_read32 (void *DATA)' 39296'unsigned long long __builtin_read64 (void *DATA)' 39297 39298'void __builtin_write8 (void *DATA, unsigned char DATUM)' 39299'void __builtin_write16 (void *DATA, unsigned short DATUM)' 39300'void __builtin_write32 (void *DATA, unsigned long DATUM)' 39301'void __builtin_write64 (void *DATA, unsigned long long DATUM)' 39302 39303 39304File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 39305 393066.57.10.5 Other Built-in Functions 39307.................................. 39308 39309This section describes built-in functions that are not named after a 39310specific FR-V instruction. 39311 39312'sw2 __IACCreadll (iacc REG)' 39313 Return the full 64-bit value of IACC0. The REG argument is 39314 reserved for future expansion and must be 0. 39315 39316'sw1 __IACCreadl (iacc REG)' 39317 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 39318 Other values of REG are rejected as invalid. 39319 39320'void __IACCsetll (iacc REG, sw2 X)' 39321 Set the full 64-bit value of IACC0 to X. The REG argument is 39322 reserved for future expansion and must be 0. 39323 39324'void __IACCsetl (iacc REG, sw1 X)' 39325 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 39326 values of REG are rejected as invalid. 39327 39328'void __data_prefetch0 (const void *X)' 39329 Use the 'dcpl' instruction to load the contents of address X into 39330 the data cache. 39331 39332'void __data_prefetch (const void *X)' 39333 Use the 'nldub' instruction to load the contents of address X into 39334 the data cache. The instruction is issued in slot I1. 39335 39336 39337File: gcc.info, Node: X86 Built-in Functions, Next: X86 transactional memory intrinsics, Prev: FR-V Built-in Functions, Up: Target Builtins 39338 393396.57.11 X86 Built-in Functions 39340------------------------------ 39341 39342These built-in functions are available for the i386 and x86-64 family of 39343computers, depending on the command-line switches used. 39344 39345 If you specify command-line switches such as '-msse', the compiler 39346could use the extended instruction sets even if the built-ins are not 39347used explicitly in the program. For this reason, applications that 39348perform run-time CPU detection must compile separate files for each 39349supported architecture, using the appropriate flags. In particular, the 39350file containing the CPU detection code should be compiled without these 39351options. 39352 39353 The following machine modes are available for use with MMX built-in 39354functions (*note Vector Extensions::): 'V2SI' for a vector of two 32-bit 39355integers, 'V4HI' for a vector of four 16-bit integers, and 'V8QI' for a 39356vector of eight 8-bit integers. Some of the built-in functions operate 39357on MMX registers as a whole 64-bit entity, these use 'V1DI' as their 39358mode. 39359 39360 If 3DNow! extensions are enabled, 'V2SF' is used as a mode for a vector 39361of two 32-bit floating-point values. 39362 39363 If SSE extensions are enabled, 'V4SF' is used for a vector of four 3936432-bit floating-point values. Some instructions use a vector of four 3936532-bit integers, these use 'V4SI'. Finally, some instructions operate 39366on an entire vector register, interpreting it as a 128-bit integer, 39367these use mode 'TI'. 39368 39369 In 64-bit mode, the x86-64 family of processors uses additional 39370built-in functions for efficient use of 'TF' ('__float128') 128-bit 39371floating point and 'TC' 128-bit complex floating-point values. 39372 39373 The following floating-point built-in functions are available in 64-bit 39374mode. All of them implement the function that is part of the name. 39375 39376 __float128 __builtin_fabsq (__float128) 39377 __float128 __builtin_copysignq (__float128, __float128) 39378 39379 The following built-in function is always available. 39380 39381'void __builtin_ia32_pause (void)' 39382 Generates the 'pause' machine instruction with a compiler memory 39383 barrier. 39384 39385 The following floating-point built-in functions are made available in 39386the 64-bit mode. 39387 39388'__float128 __builtin_infq (void)' 39389 Similar to '__builtin_inf', except the return type is '__float128'. 39390 39391'__float128 __builtin_huge_valq (void)' 39392 Similar to '__builtin_huge_val', except the return type is 39393 '__float128'. 39394 39395 The following built-in functions are always available and can be used 39396to check the target platform type. 39397 39398 -- Built-in Function: void __builtin_cpu_init (void) 39399 This function runs the CPU detection code to check the type of CPU 39400 and the features supported. This built-in function needs to be 39401 invoked along with the built-in functions to check CPU type and 39402 features, '__builtin_cpu_is' and '__builtin_cpu_supports', only 39403 when used in a function that is executed before any constructors 39404 are called. The CPU detection code is automatically executed in a 39405 very high priority constructor. 39406 39407 For example, this function has to be used in 'ifunc' resolvers that 39408 check for CPU type using the built-in functions '__builtin_cpu_is' 39409 and '__builtin_cpu_supports', or in constructors on targets that 39410 don't support constructor priority. 39411 39412 static void (*resolve_memcpy (void)) (void) 39413 { 39414 // ifunc resolvers fire before constructors, explicitly call the init 39415 // function. 39416 __builtin_cpu_init (); 39417 if (__builtin_cpu_supports ("ssse3")) 39418 return ssse3_memcpy; // super fast memcpy with ssse3 instructions. 39419 else 39420 return default_memcpy; 39421 } 39422 39423 void *memcpy (void *, const void *, size_t) 39424 __attribute__ ((ifunc ("resolve_memcpy"))); 39425 39426 -- Built-in Function: int __builtin_cpu_is (const char *CPUNAME) 39427 This function returns a positive integer if the run-time CPU is of 39428 type CPUNAME and returns '0' otherwise. The following CPU names 39429 can be detected: 39430 39431 'intel' 39432 Intel CPU. 39433 39434 'atom' 39435 Intel Atom CPU. 39436 39437 'core2' 39438 Intel Core 2 CPU. 39439 39440 'corei7' 39441 Intel Core i7 CPU. 39442 39443 'nehalem' 39444 Intel Core i7 Nehalem CPU. 39445 39446 'westmere' 39447 Intel Core i7 Westmere CPU. 39448 39449 'sandybridge' 39450 Intel Core i7 Sandy Bridge CPU. 39451 39452 'amd' 39453 AMD CPU. 39454 39455 'amdfam10h' 39456 AMD Family 10h CPU. 39457 39458 'barcelona' 39459 AMD Family 10h Barcelona CPU. 39460 39461 'shanghai' 39462 AMD Family 10h Shanghai CPU. 39463 39464 'istanbul' 39465 AMD Family 10h Istanbul CPU. 39466 39467 'btver1' 39468 AMD Family 14h CPU. 39469 39470 'amdfam15h' 39471 AMD Family 15h CPU. 39472 39473 'bdver1' 39474 AMD Family 15h Bulldozer version 1. 39475 39476 'bdver2' 39477 AMD Family 15h Bulldozer version 2. 39478 39479 'bdver3' 39480 AMD Family 15h Bulldozer version 3. 39481 39482 'bdver4' 39483 AMD Family 15h Bulldozer version 4. 39484 39485 'btver2' 39486 AMD Family 16h CPU. 39487 39488 Here is an example: 39489 if (__builtin_cpu_is ("corei7")) 39490 { 39491 do_corei7 (); // Core i7 specific implementation. 39492 } 39493 else 39494 { 39495 do_generic (); // Generic implementation. 39496 } 39497 39498 -- Built-in Function: int __builtin_cpu_supports (const char *FEATURE) 39499 This function returns a positive integer if the run-time CPU 39500 supports FEATURE and returns '0' otherwise. The following features 39501 can be detected: 39502 39503 'cmov' 39504 CMOV instruction. 39505 'mmx' 39506 MMX instructions. 39507 'popcnt' 39508 POPCNT instruction. 39509 'sse' 39510 SSE instructions. 39511 'sse2' 39512 SSE2 instructions. 39513 'sse3' 39514 SSE3 instructions. 39515 'ssse3' 39516 SSSE3 instructions. 39517 'sse4.1' 39518 SSE4.1 instructions. 39519 'sse4.2' 39520 SSE4.2 instructions. 39521 'avx' 39522 AVX instructions. 39523 'avx2' 39524 AVX2 instructions. 39525 39526 Here is an example: 39527 if (__builtin_cpu_supports ("popcnt")) 39528 { 39529 asm("popcnt %1,%0" : "=r"(count) : "rm"(n) : "cc"); 39530 } 39531 else 39532 { 39533 count = generic_countbits (n); //generic implementation. 39534 } 39535 39536 The following built-in functions are made available by '-mmmx'. All of 39537them generate the machine instruction that is part of the name. 39538 39539 v8qi __builtin_ia32_paddb (v8qi, v8qi) 39540 v4hi __builtin_ia32_paddw (v4hi, v4hi) 39541 v2si __builtin_ia32_paddd (v2si, v2si) 39542 v8qi __builtin_ia32_psubb (v8qi, v8qi) 39543 v4hi __builtin_ia32_psubw (v4hi, v4hi) 39544 v2si __builtin_ia32_psubd (v2si, v2si) 39545 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 39546 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 39547 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 39548 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 39549 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 39550 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 39551 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 39552 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 39553 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 39554 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 39555 di __builtin_ia32_pand (di, di) 39556 di __builtin_ia32_pandn (di,di) 39557 di __builtin_ia32_por (di, di) 39558 di __builtin_ia32_pxor (di, di) 39559 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 39560 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 39561 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 39562 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 39563 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 39564 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 39565 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 39566 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 39567 v2si __builtin_ia32_punpckhdq (v2si, v2si) 39568 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 39569 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 39570 v2si __builtin_ia32_punpckldq (v2si, v2si) 39571 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 39572 v4hi __builtin_ia32_packssdw (v2si, v2si) 39573 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 39574 39575 v4hi __builtin_ia32_psllw (v4hi, v4hi) 39576 v2si __builtin_ia32_pslld (v2si, v2si) 39577 v1di __builtin_ia32_psllq (v1di, v1di) 39578 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 39579 v2si __builtin_ia32_psrld (v2si, v2si) 39580 v1di __builtin_ia32_psrlq (v1di, v1di) 39581 v4hi __builtin_ia32_psraw (v4hi, v4hi) 39582 v2si __builtin_ia32_psrad (v2si, v2si) 39583 v4hi __builtin_ia32_psllwi (v4hi, int) 39584 v2si __builtin_ia32_pslldi (v2si, int) 39585 v1di __builtin_ia32_psllqi (v1di, int) 39586 v4hi __builtin_ia32_psrlwi (v4hi, int) 39587 v2si __builtin_ia32_psrldi (v2si, int) 39588 v1di __builtin_ia32_psrlqi (v1di, int) 39589 v4hi __builtin_ia32_psrawi (v4hi, int) 39590 v2si __builtin_ia32_psradi (v2si, int) 39591 39592 39593 The following built-in functions are made available either with 39594'-msse', or with a combination of '-m3dnow' and '-march=athlon'. All of 39595them generate the machine instruction that is part of the name. 39596 39597 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 39598 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 39599 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 39600 v1di __builtin_ia32_psadbw (v8qi, v8qi) 39601 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 39602 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 39603 v8qi __builtin_ia32_pminub (v8qi, v8qi) 39604 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 39605 int __builtin_ia32_pmovmskb (v8qi) 39606 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 39607 void __builtin_ia32_movntq (di *, di) 39608 void __builtin_ia32_sfence (void) 39609 39610 The following built-in functions are available when '-msse' is used. 39611All of them generate the machine instruction that is part of the name. 39612 39613 int __builtin_ia32_comieq (v4sf, v4sf) 39614 int __builtin_ia32_comineq (v4sf, v4sf) 39615 int __builtin_ia32_comilt (v4sf, v4sf) 39616 int __builtin_ia32_comile (v4sf, v4sf) 39617 int __builtin_ia32_comigt (v4sf, v4sf) 39618 int __builtin_ia32_comige (v4sf, v4sf) 39619 int __builtin_ia32_ucomieq (v4sf, v4sf) 39620 int __builtin_ia32_ucomineq (v4sf, v4sf) 39621 int __builtin_ia32_ucomilt (v4sf, v4sf) 39622 int __builtin_ia32_ucomile (v4sf, v4sf) 39623 int __builtin_ia32_ucomigt (v4sf, v4sf) 39624 int __builtin_ia32_ucomige (v4sf, v4sf) 39625 v4sf __builtin_ia32_addps (v4sf, v4sf) 39626 v4sf __builtin_ia32_subps (v4sf, v4sf) 39627 v4sf __builtin_ia32_mulps (v4sf, v4sf) 39628 v4sf __builtin_ia32_divps (v4sf, v4sf) 39629 v4sf __builtin_ia32_addss (v4sf, v4sf) 39630 v4sf __builtin_ia32_subss (v4sf, v4sf) 39631 v4sf __builtin_ia32_mulss (v4sf, v4sf) 39632 v4sf __builtin_ia32_divss (v4sf, v4sf) 39633 v4sf __builtin_ia32_cmpeqps (v4sf, v4sf) 39634 v4sf __builtin_ia32_cmpltps (v4sf, v4sf) 39635 v4sf __builtin_ia32_cmpleps (v4sf, v4sf) 39636 v4sf __builtin_ia32_cmpgtps (v4sf, v4sf) 39637 v4sf __builtin_ia32_cmpgeps (v4sf, v4sf) 39638 v4sf __builtin_ia32_cmpunordps (v4sf, v4sf) 39639 v4sf __builtin_ia32_cmpneqps (v4sf, v4sf) 39640 v4sf __builtin_ia32_cmpnltps (v4sf, v4sf) 39641 v4sf __builtin_ia32_cmpnleps (v4sf, v4sf) 39642 v4sf __builtin_ia32_cmpngtps (v4sf, v4sf) 39643 v4sf __builtin_ia32_cmpngeps (v4sf, v4sf) 39644 v4sf __builtin_ia32_cmpordps (v4sf, v4sf) 39645 v4sf __builtin_ia32_cmpeqss (v4sf, v4sf) 39646 v4sf __builtin_ia32_cmpltss (v4sf, v4sf) 39647 v4sf __builtin_ia32_cmpless (v4sf, v4sf) 39648 v4sf __builtin_ia32_cmpunordss (v4sf, v4sf) 39649 v4sf __builtin_ia32_cmpneqss (v4sf, v4sf) 39650 v4sf __builtin_ia32_cmpnltss (v4sf, v4sf) 39651 v4sf __builtin_ia32_cmpnless (v4sf, v4sf) 39652 v4sf __builtin_ia32_cmpordss (v4sf, v4sf) 39653 v4sf __builtin_ia32_maxps (v4sf, v4sf) 39654 v4sf __builtin_ia32_maxss (v4sf, v4sf) 39655 v4sf __builtin_ia32_minps (v4sf, v4sf) 39656 v4sf __builtin_ia32_minss (v4sf, v4sf) 39657 v4sf __builtin_ia32_andps (v4sf, v4sf) 39658 v4sf __builtin_ia32_andnps (v4sf, v4sf) 39659 v4sf __builtin_ia32_orps (v4sf, v4sf) 39660 v4sf __builtin_ia32_xorps (v4sf, v4sf) 39661 v4sf __builtin_ia32_movss (v4sf, v4sf) 39662 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 39663 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 39664 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 39665 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 39666 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 39667 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 39668 v2si __builtin_ia32_cvtps2pi (v4sf) 39669 int __builtin_ia32_cvtss2si (v4sf) 39670 v2si __builtin_ia32_cvttps2pi (v4sf) 39671 int __builtin_ia32_cvttss2si (v4sf) 39672 v4sf __builtin_ia32_rcpps (v4sf) 39673 v4sf __builtin_ia32_rsqrtps (v4sf) 39674 v4sf __builtin_ia32_sqrtps (v4sf) 39675 v4sf __builtin_ia32_rcpss (v4sf) 39676 v4sf __builtin_ia32_rsqrtss (v4sf) 39677 v4sf __builtin_ia32_sqrtss (v4sf) 39678 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 39679 void __builtin_ia32_movntps (float *, v4sf) 39680 int __builtin_ia32_movmskps (v4sf) 39681 39682 The following built-in functions are available when '-msse' is used. 39683 39684'v4sf __builtin_ia32_loadups (float *)' 39685 Generates the 'movups' machine instruction as a load from memory. 39686'void __builtin_ia32_storeups (float *, v4sf)' 39687 Generates the 'movups' machine instruction as a store to memory. 39688'v4sf __builtin_ia32_loadss (float *)' 39689 Generates the 'movss' machine instruction as a load from memory. 39690'v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 39691 Generates the 'movhps' machine instruction as a load from memory. 39692'v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 39693 Generates the 'movlps' machine instruction as a load from memory 39694'void __builtin_ia32_storehps (v2sf *, v4sf)' 39695 Generates the 'movhps' machine instruction as a store to memory. 39696'void __builtin_ia32_storelps (v2sf *, v4sf)' 39697 Generates the 'movlps' machine instruction as a store to memory. 39698 39699 The following built-in functions are available when '-msse2' is used. 39700All of them generate the machine instruction that is part of the name. 39701 39702 int __builtin_ia32_comisdeq (v2df, v2df) 39703 int __builtin_ia32_comisdlt (v2df, v2df) 39704 int __builtin_ia32_comisdle (v2df, v2df) 39705 int __builtin_ia32_comisdgt (v2df, v2df) 39706 int __builtin_ia32_comisdge (v2df, v2df) 39707 int __builtin_ia32_comisdneq (v2df, v2df) 39708 int __builtin_ia32_ucomisdeq (v2df, v2df) 39709 int __builtin_ia32_ucomisdlt (v2df, v2df) 39710 int __builtin_ia32_ucomisdle (v2df, v2df) 39711 int __builtin_ia32_ucomisdgt (v2df, v2df) 39712 int __builtin_ia32_ucomisdge (v2df, v2df) 39713 int __builtin_ia32_ucomisdneq (v2df, v2df) 39714 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 39715 v2df __builtin_ia32_cmpltpd (v2df, v2df) 39716 v2df __builtin_ia32_cmplepd (v2df, v2df) 39717 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 39718 v2df __builtin_ia32_cmpgepd (v2df, v2df) 39719 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 39720 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 39721 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 39722 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 39723 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 39724 v2df __builtin_ia32_cmpngepd (v2df, v2df) 39725 v2df __builtin_ia32_cmpordpd (v2df, v2df) 39726 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 39727 v2df __builtin_ia32_cmpltsd (v2df, v2df) 39728 v2df __builtin_ia32_cmplesd (v2df, v2df) 39729 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 39730 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 39731 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 39732 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 39733 v2df __builtin_ia32_cmpordsd (v2df, v2df) 39734 v2di __builtin_ia32_paddq (v2di, v2di) 39735 v2di __builtin_ia32_psubq (v2di, v2di) 39736 v2df __builtin_ia32_addpd (v2df, v2df) 39737 v2df __builtin_ia32_subpd (v2df, v2df) 39738 v2df __builtin_ia32_mulpd (v2df, v2df) 39739 v2df __builtin_ia32_divpd (v2df, v2df) 39740 v2df __builtin_ia32_addsd (v2df, v2df) 39741 v2df __builtin_ia32_subsd (v2df, v2df) 39742 v2df __builtin_ia32_mulsd (v2df, v2df) 39743 v2df __builtin_ia32_divsd (v2df, v2df) 39744 v2df __builtin_ia32_minpd (v2df, v2df) 39745 v2df __builtin_ia32_maxpd (v2df, v2df) 39746 v2df __builtin_ia32_minsd (v2df, v2df) 39747 v2df __builtin_ia32_maxsd (v2df, v2df) 39748 v2df __builtin_ia32_andpd (v2df, v2df) 39749 v2df __builtin_ia32_andnpd (v2df, v2df) 39750 v2df __builtin_ia32_orpd (v2df, v2df) 39751 v2df __builtin_ia32_xorpd (v2df, v2df) 39752 v2df __builtin_ia32_movsd (v2df, v2df) 39753 v2df __builtin_ia32_unpckhpd (v2df, v2df) 39754 v2df __builtin_ia32_unpcklpd (v2df, v2df) 39755 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 39756 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 39757 v4si __builtin_ia32_paddd128 (v4si, v4si) 39758 v2di __builtin_ia32_paddq128 (v2di, v2di) 39759 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 39760 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 39761 v4si __builtin_ia32_psubd128 (v4si, v4si) 39762 v2di __builtin_ia32_psubq128 (v2di, v2di) 39763 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 39764 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 39765 v2di __builtin_ia32_pand128 (v2di, v2di) 39766 v2di __builtin_ia32_pandn128 (v2di, v2di) 39767 v2di __builtin_ia32_por128 (v2di, v2di) 39768 v2di __builtin_ia32_pxor128 (v2di, v2di) 39769 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 39770 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 39771 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 39772 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 39773 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 39774 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 39775 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 39776 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 39777 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 39778 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 39779 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 39780 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 39781 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 39782 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 39783 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 39784 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 39785 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 39786 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 39787 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 39788 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 39789 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 39790 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 39791 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 39792 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 39793 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 39794 v2df __builtin_ia32_loadupd (double *) 39795 void __builtin_ia32_storeupd (double *, v2df) 39796 v2df __builtin_ia32_loadhpd (v2df, double const *) 39797 v2df __builtin_ia32_loadlpd (v2df, double const *) 39798 int __builtin_ia32_movmskpd (v2df) 39799 int __builtin_ia32_pmovmskb128 (v16qi) 39800 void __builtin_ia32_movnti (int *, int) 39801 void __builtin_ia32_movnti64 (long long int *, long long int) 39802 void __builtin_ia32_movntpd (double *, v2df) 39803 void __builtin_ia32_movntdq (v2df *, v2df) 39804 v4si __builtin_ia32_pshufd (v4si, int) 39805 v8hi __builtin_ia32_pshuflw (v8hi, int) 39806 v8hi __builtin_ia32_pshufhw (v8hi, int) 39807 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 39808 v2df __builtin_ia32_sqrtpd (v2df) 39809 v2df __builtin_ia32_sqrtsd (v2df) 39810 v2df __builtin_ia32_shufpd (v2df, v2df, int) 39811 v2df __builtin_ia32_cvtdq2pd (v4si) 39812 v4sf __builtin_ia32_cvtdq2ps (v4si) 39813 v4si __builtin_ia32_cvtpd2dq (v2df) 39814 v2si __builtin_ia32_cvtpd2pi (v2df) 39815 v4sf __builtin_ia32_cvtpd2ps (v2df) 39816 v4si __builtin_ia32_cvttpd2dq (v2df) 39817 v2si __builtin_ia32_cvttpd2pi (v2df) 39818 v2df __builtin_ia32_cvtpi2pd (v2si) 39819 int __builtin_ia32_cvtsd2si (v2df) 39820 int __builtin_ia32_cvttsd2si (v2df) 39821 long long __builtin_ia32_cvtsd2si64 (v2df) 39822 long long __builtin_ia32_cvttsd2si64 (v2df) 39823 v4si __builtin_ia32_cvtps2dq (v4sf) 39824 v2df __builtin_ia32_cvtps2pd (v4sf) 39825 v4si __builtin_ia32_cvttps2dq (v4sf) 39826 v2df __builtin_ia32_cvtsi2sd (v2df, int) 39827 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 39828 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 39829 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 39830 void __builtin_ia32_clflush (const void *) 39831 void __builtin_ia32_lfence (void) 39832 void __builtin_ia32_mfence (void) 39833 v16qi __builtin_ia32_loaddqu (const char *) 39834 void __builtin_ia32_storedqu (char *, v16qi) 39835 v1di __builtin_ia32_pmuludq (v2si, v2si) 39836 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 39837 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 39838 v4si __builtin_ia32_pslld128 (v4si, v4si) 39839 v2di __builtin_ia32_psllq128 (v2di, v2di) 39840 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 39841 v4si __builtin_ia32_psrld128 (v4si, v4si) 39842 v2di __builtin_ia32_psrlq128 (v2di, v2di) 39843 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 39844 v4si __builtin_ia32_psrad128 (v4si, v4si) 39845 v2di __builtin_ia32_pslldqi128 (v2di, int) 39846 v8hi __builtin_ia32_psllwi128 (v8hi, int) 39847 v4si __builtin_ia32_pslldi128 (v4si, int) 39848 v2di __builtin_ia32_psllqi128 (v2di, int) 39849 v2di __builtin_ia32_psrldqi128 (v2di, int) 39850 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 39851 v4si __builtin_ia32_psrldi128 (v4si, int) 39852 v2di __builtin_ia32_psrlqi128 (v2di, int) 39853 v8hi __builtin_ia32_psrawi128 (v8hi, int) 39854 v4si __builtin_ia32_psradi128 (v4si, int) 39855 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 39856 v2di __builtin_ia32_movq128 (v2di) 39857 39858 The following built-in functions are available when '-msse3' is used. 39859All of them generate the machine instruction that is part of the name. 39860 39861 v2df __builtin_ia32_addsubpd (v2df, v2df) 39862 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 39863 v2df __builtin_ia32_haddpd (v2df, v2df) 39864 v4sf __builtin_ia32_haddps (v4sf, v4sf) 39865 v2df __builtin_ia32_hsubpd (v2df, v2df) 39866 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 39867 v16qi __builtin_ia32_lddqu (char const *) 39868 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 39869 v4sf __builtin_ia32_movshdup (v4sf) 39870 v4sf __builtin_ia32_movsldup (v4sf) 39871 void __builtin_ia32_mwait (unsigned int, unsigned int) 39872 39873 The following built-in functions are available when '-mssse3' is used. 39874All of them generate the machine instruction that is part of the name. 39875 39876 v2si __builtin_ia32_phaddd (v2si, v2si) 39877 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 39878 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 39879 v2si __builtin_ia32_phsubd (v2si, v2si) 39880 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 39881 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 39882 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 39883 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 39884 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 39885 v8qi __builtin_ia32_psignb (v8qi, v8qi) 39886 v2si __builtin_ia32_psignd (v2si, v2si) 39887 v4hi __builtin_ia32_psignw (v4hi, v4hi) 39888 v1di __builtin_ia32_palignr (v1di, v1di, int) 39889 v8qi __builtin_ia32_pabsb (v8qi) 39890 v2si __builtin_ia32_pabsd (v2si) 39891 v4hi __builtin_ia32_pabsw (v4hi) 39892 39893 The following built-in functions are available when '-mssse3' is used. 39894All of them generate the machine instruction that is part of the name. 39895 39896 v4si __builtin_ia32_phaddd128 (v4si, v4si) 39897 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 39898 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 39899 v4si __builtin_ia32_phsubd128 (v4si, v4si) 39900 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 39901 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 39902 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 39903 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 39904 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 39905 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 39906 v4si __builtin_ia32_psignd128 (v4si, v4si) 39907 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 39908 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 39909 v16qi __builtin_ia32_pabsb128 (v16qi) 39910 v4si __builtin_ia32_pabsd128 (v4si) 39911 v8hi __builtin_ia32_pabsw128 (v8hi) 39912 39913 The following built-in functions are available when '-msse4.1' is used. 39914All of them generate the machine instruction that is part of the name. 39915 39916 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 39917 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 39918 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 39919 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 39920 v2df __builtin_ia32_dppd (v2df, v2df, const int) 39921 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 39922 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 39923 v2di __builtin_ia32_movntdqa (v2di *); 39924 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 39925 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 39926 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 39927 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 39928 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 39929 v8hi __builtin_ia32_phminposuw128 (v8hi) 39930 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 39931 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 39932 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 39933 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 39934 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 39935 v4si __builtin_ia32_pminsd128 (v4si, v4si) 39936 v4si __builtin_ia32_pminud128 (v4si, v4si) 39937 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 39938 v4si __builtin_ia32_pmovsxbd128 (v16qi) 39939 v2di __builtin_ia32_pmovsxbq128 (v16qi) 39940 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 39941 v2di __builtin_ia32_pmovsxdq128 (v4si) 39942 v4si __builtin_ia32_pmovsxwd128 (v8hi) 39943 v2di __builtin_ia32_pmovsxwq128 (v8hi) 39944 v4si __builtin_ia32_pmovzxbd128 (v16qi) 39945 v2di __builtin_ia32_pmovzxbq128 (v16qi) 39946 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 39947 v2di __builtin_ia32_pmovzxdq128 (v4si) 39948 v4si __builtin_ia32_pmovzxwd128 (v8hi) 39949 v2di __builtin_ia32_pmovzxwq128 (v8hi) 39950 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 39951 v4si __builtin_ia32_pmulld128 (v4si, v4si) 39952 int __builtin_ia32_ptestc128 (v2di, v2di) 39953 int __builtin_ia32_ptestnzc128 (v2di, v2di) 39954 int __builtin_ia32_ptestz128 (v2di, v2di) 39955 v2df __builtin_ia32_roundpd (v2df, const int) 39956 v4sf __builtin_ia32_roundps (v4sf, const int) 39957 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 39958 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 39959 39960 The following built-in functions are available when '-msse4.1' is used. 39961 39962'v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 39963 Generates the 'insertps' machine instruction. 39964'int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 39965 Generates the 'pextrb' machine instruction. 39966'v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 39967 Generates the 'pinsrb' machine instruction. 39968'v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 39969 Generates the 'pinsrd' machine instruction. 39970'v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 39971 Generates the 'pinsrq' machine instruction in 64bit mode. 39972 39973 The following built-in functions are changed to generate new SSE4.1 39974instructions when '-msse4.1' is used. 39975 39976'float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 39977 Generates the 'extractps' machine instruction. 39978'int __builtin_ia32_vec_ext_v4si (v4si, const int)' 39979 Generates the 'pextrd' machine instruction. 39980'long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 39981 Generates the 'pextrq' machine instruction in 64bit mode. 39982 39983 The following built-in functions are available when '-msse4.2' is used. 39984All of them generate the machine instruction that is part of the name. 39985 39986 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 39987 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 39988 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 39989 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 39990 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 39991 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 39992 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 39993 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 39994 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 39995 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 39996 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 39997 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 39998 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 39999 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 40000 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 40001 40002 The following built-in functions are available when '-msse4.2' is used. 40003 40004'unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 40005 Generates the 'crc32b' machine instruction. 40006'unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 40007 Generates the 'crc32w' machine instruction. 40008'unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 40009 Generates the 'crc32l' machine instruction. 40010'unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 40011 Generates the 'crc32q' machine instruction. 40012 40013 The following built-in functions are changed to generate new SSE4.2 40014instructions when '-msse4.2' is used. 40015 40016'int __builtin_popcount (unsigned int)' 40017 Generates the 'popcntl' machine instruction. 40018'int __builtin_popcountl (unsigned long)' 40019 Generates the 'popcntl' or 'popcntq' machine instruction, depending 40020 on the size of 'unsigned long'. 40021'int __builtin_popcountll (unsigned long long)' 40022 Generates the 'popcntq' machine instruction. 40023 40024 The following built-in functions are available when '-mavx' is used. 40025All of them generate the machine instruction that is part of the name. 40026 40027 v4df __builtin_ia32_addpd256 (v4df,v4df) 40028 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 40029 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 40030 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 40031 v4df __builtin_ia32_andnpd256 (v4df,v4df) 40032 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 40033 v4df __builtin_ia32_andpd256 (v4df,v4df) 40034 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 40035 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 40036 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 40037 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 40038 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 40039 v2df __builtin_ia32_cmppd (v2df,v2df,int) 40040 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 40041 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 40042 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 40043 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 40044 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 40045 v4df __builtin_ia32_cvtdq2pd256 (v4si) 40046 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 40047 v4si __builtin_ia32_cvtpd2dq256 (v4df) 40048 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 40049 v8si __builtin_ia32_cvtps2dq256 (v8sf) 40050 v4df __builtin_ia32_cvtps2pd256 (v4sf) 40051 v4si __builtin_ia32_cvttpd2dq256 (v4df) 40052 v8si __builtin_ia32_cvttps2dq256 (v8sf) 40053 v4df __builtin_ia32_divpd256 (v4df,v4df) 40054 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 40055 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 40056 v4df __builtin_ia32_haddpd256 (v4df,v4df) 40057 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 40058 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 40059 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 40060 v32qi __builtin_ia32_lddqu256 (pcchar) 40061 v32qi __builtin_ia32_loaddqu256 (pcchar) 40062 v4df __builtin_ia32_loadupd256 (pcdouble) 40063 v8sf __builtin_ia32_loadups256 (pcfloat) 40064 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 40065 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 40066 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 40067 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 40068 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 40069 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 40070 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 40071 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 40072 v4df __builtin_ia32_maxpd256 (v4df,v4df) 40073 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 40074 v4df __builtin_ia32_minpd256 (v4df,v4df) 40075 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 40076 v4df __builtin_ia32_movddup256 (v4df) 40077 int __builtin_ia32_movmskpd256 (v4df) 40078 int __builtin_ia32_movmskps256 (v8sf) 40079 v8sf __builtin_ia32_movshdup256 (v8sf) 40080 v8sf __builtin_ia32_movsldup256 (v8sf) 40081 v4df __builtin_ia32_mulpd256 (v4df,v4df) 40082 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 40083 v4df __builtin_ia32_orpd256 (v4df,v4df) 40084 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 40085 v2df __builtin_ia32_pd_pd256 (v4df) 40086 v4df __builtin_ia32_pd256_pd (v2df) 40087 v4sf __builtin_ia32_ps_ps256 (v8sf) 40088 v8sf __builtin_ia32_ps256_ps (v4sf) 40089 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 40090 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 40091 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 40092 v8sf __builtin_ia32_rcpps256 (v8sf) 40093 v4df __builtin_ia32_roundpd256 (v4df,int) 40094 v8sf __builtin_ia32_roundps256 (v8sf,int) 40095 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 40096 v8sf __builtin_ia32_rsqrtps256 (v8sf) 40097 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 40098 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 40099 v4si __builtin_ia32_si_si256 (v8si) 40100 v8si __builtin_ia32_si256_si (v4si) 40101 v4df __builtin_ia32_sqrtpd256 (v4df) 40102 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 40103 v8sf __builtin_ia32_sqrtps256 (v8sf) 40104 void __builtin_ia32_storedqu256 (pchar,v32qi) 40105 void __builtin_ia32_storeupd256 (pdouble,v4df) 40106 void __builtin_ia32_storeups256 (pfloat,v8sf) 40107 v4df __builtin_ia32_subpd256 (v4df,v4df) 40108 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 40109 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 40110 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 40111 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 40112 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 40113 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 40114 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 40115 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 40116 v4sf __builtin_ia32_vbroadcastss (pcfloat) 40117 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 40118 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 40119 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 40120 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 40121 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 40122 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 40123 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 40124 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 40125 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 40126 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 40127 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 40128 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 40129 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 40130 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 40131 v2df __builtin_ia32_vpermilpd (v2df,int) 40132 v4df __builtin_ia32_vpermilpd256 (v4df,int) 40133 v4sf __builtin_ia32_vpermilps (v4sf,int) 40134 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 40135 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 40136 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 40137 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 40138 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 40139 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 40140 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 40141 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 40142 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 40143 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 40144 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 40145 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 40146 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 40147 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 40148 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 40149 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 40150 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 40151 void __builtin_ia32_vzeroall (void) 40152 void __builtin_ia32_vzeroupper (void) 40153 v4df __builtin_ia32_xorpd256 (v4df,v4df) 40154 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 40155 40156 The following built-in functions are available when '-mavx2' is used. 40157All of them generate the machine instruction that is part of the name. 40158 40159 v32qi __builtin_ia32_mpsadbw256 (v32qi,v32qi,int) 40160 v32qi __builtin_ia32_pabsb256 (v32qi) 40161 v16hi __builtin_ia32_pabsw256 (v16hi) 40162 v8si __builtin_ia32_pabsd256 (v8si) 40163 v16hi __builtin_ia32_packssdw256 (v8si,v8si) 40164 v32qi __builtin_ia32_packsswb256 (v16hi,v16hi) 40165 v16hi __builtin_ia32_packusdw256 (v8si,v8si) 40166 v32qi __builtin_ia32_packuswb256 (v16hi,v16hi) 40167 v32qi __builtin_ia32_paddb256 (v32qi,v32qi) 40168 v16hi __builtin_ia32_paddw256 (v16hi,v16hi) 40169 v8si __builtin_ia32_paddd256 (v8si,v8si) 40170 v4di __builtin_ia32_paddq256 (v4di,v4di) 40171 v32qi __builtin_ia32_paddsb256 (v32qi,v32qi) 40172 v16hi __builtin_ia32_paddsw256 (v16hi,v16hi) 40173 v32qi __builtin_ia32_paddusb256 (v32qi,v32qi) 40174 v16hi __builtin_ia32_paddusw256 (v16hi,v16hi) 40175 v4di __builtin_ia32_palignr256 (v4di,v4di,int) 40176 v4di __builtin_ia32_andsi256 (v4di,v4di) 40177 v4di __builtin_ia32_andnotsi256 (v4di,v4di) 40178 v32qi __builtin_ia32_pavgb256 (v32qi,v32qi) 40179 v16hi __builtin_ia32_pavgw256 (v16hi,v16hi) 40180 v32qi __builtin_ia32_pblendvb256 (v32qi,v32qi,v32qi) 40181 v16hi __builtin_ia32_pblendw256 (v16hi,v16hi,int) 40182 v32qi __builtin_ia32_pcmpeqb256 (v32qi,v32qi) 40183 v16hi __builtin_ia32_pcmpeqw256 (v16hi,v16hi) 40184 v8si __builtin_ia32_pcmpeqd256 (c8si,v8si) 40185 v4di __builtin_ia32_pcmpeqq256 (v4di,v4di) 40186 v32qi __builtin_ia32_pcmpgtb256 (v32qi,v32qi) 40187 v16hi __builtin_ia32_pcmpgtw256 (16hi,v16hi) 40188 v8si __builtin_ia32_pcmpgtd256 (v8si,v8si) 40189 v4di __builtin_ia32_pcmpgtq256 (v4di,v4di) 40190 v16hi __builtin_ia32_phaddw256 (v16hi,v16hi) 40191 v8si __builtin_ia32_phaddd256 (v8si,v8si) 40192 v16hi __builtin_ia32_phaddsw256 (v16hi,v16hi) 40193 v16hi __builtin_ia32_phsubw256 (v16hi,v16hi) 40194 v8si __builtin_ia32_phsubd256 (v8si,v8si) 40195 v16hi __builtin_ia32_phsubsw256 (v16hi,v16hi) 40196 v32qi __builtin_ia32_pmaddubsw256 (v32qi,v32qi) 40197 v16hi __builtin_ia32_pmaddwd256 (v16hi,v16hi) 40198 v32qi __builtin_ia32_pmaxsb256 (v32qi,v32qi) 40199 v16hi __builtin_ia32_pmaxsw256 (v16hi,v16hi) 40200 v8si __builtin_ia32_pmaxsd256 (v8si,v8si) 40201 v32qi __builtin_ia32_pmaxub256 (v32qi,v32qi) 40202 v16hi __builtin_ia32_pmaxuw256 (v16hi,v16hi) 40203 v8si __builtin_ia32_pmaxud256 (v8si,v8si) 40204 v32qi __builtin_ia32_pminsb256 (v32qi,v32qi) 40205 v16hi __builtin_ia32_pminsw256 (v16hi,v16hi) 40206 v8si __builtin_ia32_pminsd256 (v8si,v8si) 40207 v32qi __builtin_ia32_pminub256 (v32qi,v32qi) 40208 v16hi __builtin_ia32_pminuw256 (v16hi,v16hi) 40209 v8si __builtin_ia32_pminud256 (v8si,v8si) 40210 int __builtin_ia32_pmovmskb256 (v32qi) 40211 v16hi __builtin_ia32_pmovsxbw256 (v16qi) 40212 v8si __builtin_ia32_pmovsxbd256 (v16qi) 40213 v4di __builtin_ia32_pmovsxbq256 (v16qi) 40214 v8si __builtin_ia32_pmovsxwd256 (v8hi) 40215 v4di __builtin_ia32_pmovsxwq256 (v8hi) 40216 v4di __builtin_ia32_pmovsxdq256 (v4si) 40217 v16hi __builtin_ia32_pmovzxbw256 (v16qi) 40218 v8si __builtin_ia32_pmovzxbd256 (v16qi) 40219 v4di __builtin_ia32_pmovzxbq256 (v16qi) 40220 v8si __builtin_ia32_pmovzxwd256 (v8hi) 40221 v4di __builtin_ia32_pmovzxwq256 (v8hi) 40222 v4di __builtin_ia32_pmovzxdq256 (v4si) 40223 v4di __builtin_ia32_pmuldq256 (v8si,v8si) 40224 v16hi __builtin_ia32_pmulhrsw256 (v16hi, v16hi) 40225 v16hi __builtin_ia32_pmulhuw256 (v16hi,v16hi) 40226 v16hi __builtin_ia32_pmulhw256 (v16hi,v16hi) 40227 v16hi __builtin_ia32_pmullw256 (v16hi,v16hi) 40228 v8si __builtin_ia32_pmulld256 (v8si,v8si) 40229 v4di __builtin_ia32_pmuludq256 (v8si,v8si) 40230 v4di __builtin_ia32_por256 (v4di,v4di) 40231 v16hi __builtin_ia32_psadbw256 (v32qi,v32qi) 40232 v32qi __builtin_ia32_pshufb256 (v32qi,v32qi) 40233 v8si __builtin_ia32_pshufd256 (v8si,int) 40234 v16hi __builtin_ia32_pshufhw256 (v16hi,int) 40235 v16hi __builtin_ia32_pshuflw256 (v16hi,int) 40236 v32qi __builtin_ia32_psignb256 (v32qi,v32qi) 40237 v16hi __builtin_ia32_psignw256 (v16hi,v16hi) 40238 v8si __builtin_ia32_psignd256 (v8si,v8si) 40239 v4di __builtin_ia32_pslldqi256 (v4di,int) 40240 v16hi __builtin_ia32_psllwi256 (16hi,int) 40241 v16hi __builtin_ia32_psllw256(v16hi,v8hi) 40242 v8si __builtin_ia32_pslldi256 (v8si,int) 40243 v8si __builtin_ia32_pslld256(v8si,v4si) 40244 v4di __builtin_ia32_psllqi256 (v4di,int) 40245 v4di __builtin_ia32_psllq256(v4di,v2di) 40246 v16hi __builtin_ia32_psrawi256 (v16hi,int) 40247 v16hi __builtin_ia32_psraw256 (v16hi,v8hi) 40248 v8si __builtin_ia32_psradi256 (v8si,int) 40249 v8si __builtin_ia32_psrad256 (v8si,v4si) 40250 v4di __builtin_ia32_psrldqi256 (v4di, int) 40251 v16hi __builtin_ia32_psrlwi256 (v16hi,int) 40252 v16hi __builtin_ia32_psrlw256 (v16hi,v8hi) 40253 v8si __builtin_ia32_psrldi256 (v8si,int) 40254 v8si __builtin_ia32_psrld256 (v8si,v4si) 40255 v4di __builtin_ia32_psrlqi256 (v4di,int) 40256 v4di __builtin_ia32_psrlq256(v4di,v2di) 40257 v32qi __builtin_ia32_psubb256 (v32qi,v32qi) 40258 v32hi __builtin_ia32_psubw256 (v16hi,v16hi) 40259 v8si __builtin_ia32_psubd256 (v8si,v8si) 40260 v4di __builtin_ia32_psubq256 (v4di,v4di) 40261 v32qi __builtin_ia32_psubsb256 (v32qi,v32qi) 40262 v16hi __builtin_ia32_psubsw256 (v16hi,v16hi) 40263 v32qi __builtin_ia32_psubusb256 (v32qi,v32qi) 40264 v16hi __builtin_ia32_psubusw256 (v16hi,v16hi) 40265 v32qi __builtin_ia32_punpckhbw256 (v32qi,v32qi) 40266 v16hi __builtin_ia32_punpckhwd256 (v16hi,v16hi) 40267 v8si __builtin_ia32_punpckhdq256 (v8si,v8si) 40268 v4di __builtin_ia32_punpckhqdq256 (v4di,v4di) 40269 v32qi __builtin_ia32_punpcklbw256 (v32qi,v32qi) 40270 v16hi __builtin_ia32_punpcklwd256 (v16hi,v16hi) 40271 v8si __builtin_ia32_punpckldq256 (v8si,v8si) 40272 v4di __builtin_ia32_punpcklqdq256 (v4di,v4di) 40273 v4di __builtin_ia32_pxor256 (v4di,v4di) 40274 v4di __builtin_ia32_movntdqa256 (pv4di) 40275 v4sf __builtin_ia32_vbroadcastss_ps (v4sf) 40276 v8sf __builtin_ia32_vbroadcastss_ps256 (v4sf) 40277 v4df __builtin_ia32_vbroadcastsd_pd256 (v2df) 40278 v4di __builtin_ia32_vbroadcastsi256 (v2di) 40279 v4si __builtin_ia32_pblendd128 (v4si,v4si) 40280 v8si __builtin_ia32_pblendd256 (v8si,v8si) 40281 v32qi __builtin_ia32_pbroadcastb256 (v16qi) 40282 v16hi __builtin_ia32_pbroadcastw256 (v8hi) 40283 v8si __builtin_ia32_pbroadcastd256 (v4si) 40284 v4di __builtin_ia32_pbroadcastq256 (v2di) 40285 v16qi __builtin_ia32_pbroadcastb128 (v16qi) 40286 v8hi __builtin_ia32_pbroadcastw128 (v8hi) 40287 v4si __builtin_ia32_pbroadcastd128 (v4si) 40288 v2di __builtin_ia32_pbroadcastq128 (v2di) 40289 v8si __builtin_ia32_permvarsi256 (v8si,v8si) 40290 v4df __builtin_ia32_permdf256 (v4df,int) 40291 v8sf __builtin_ia32_permvarsf256 (v8sf,v8sf) 40292 v4di __builtin_ia32_permdi256 (v4di,int) 40293 v4di __builtin_ia32_permti256 (v4di,v4di,int) 40294 v4di __builtin_ia32_extract128i256 (v4di,int) 40295 v4di __builtin_ia32_insert128i256 (v4di,v2di,int) 40296 v8si __builtin_ia32_maskloadd256 (pcv8si,v8si) 40297 v4di __builtin_ia32_maskloadq256 (pcv4di,v4di) 40298 v4si __builtin_ia32_maskloadd (pcv4si,v4si) 40299 v2di __builtin_ia32_maskloadq (pcv2di,v2di) 40300 void __builtin_ia32_maskstored256 (pv8si,v8si,v8si) 40301 void __builtin_ia32_maskstoreq256 (pv4di,v4di,v4di) 40302 void __builtin_ia32_maskstored (pv4si,v4si,v4si) 40303 void __builtin_ia32_maskstoreq (pv2di,v2di,v2di) 40304 v8si __builtin_ia32_psllv8si (v8si,v8si) 40305 v4si __builtin_ia32_psllv4si (v4si,v4si) 40306 v4di __builtin_ia32_psllv4di (v4di,v4di) 40307 v2di __builtin_ia32_psllv2di (v2di,v2di) 40308 v8si __builtin_ia32_psrav8si (v8si,v8si) 40309 v4si __builtin_ia32_psrav4si (v4si,v4si) 40310 v8si __builtin_ia32_psrlv8si (v8si,v8si) 40311 v4si __builtin_ia32_psrlv4si (v4si,v4si) 40312 v4di __builtin_ia32_psrlv4di (v4di,v4di) 40313 v2di __builtin_ia32_psrlv2di (v2di,v2di) 40314 v2df __builtin_ia32_gathersiv2df (v2df, pcdouble,v4si,v2df,int) 40315 v4df __builtin_ia32_gathersiv4df (v4df, pcdouble,v4si,v4df,int) 40316 v2df __builtin_ia32_gatherdiv2df (v2df, pcdouble,v2di,v2df,int) 40317 v4df __builtin_ia32_gatherdiv4df (v4df, pcdouble,v4di,v4df,int) 40318 v4sf __builtin_ia32_gathersiv4sf (v4sf, pcfloat,v4si,v4sf,int) 40319 v8sf __builtin_ia32_gathersiv8sf (v8sf, pcfloat,v8si,v8sf,int) 40320 v4sf __builtin_ia32_gatherdiv4sf (v4sf, pcfloat,v2di,v4sf,int) 40321 v4sf __builtin_ia32_gatherdiv4sf256 (v4sf, pcfloat,v4di,v4sf,int) 40322 v2di __builtin_ia32_gathersiv2di (v2di, pcint64,v4si,v2di,int) 40323 v4di __builtin_ia32_gathersiv4di (v4di, pcint64,v4si,v4di,int) 40324 v2di __builtin_ia32_gatherdiv2di (v2di, pcint64,v2di,v2di,int) 40325 v4di __builtin_ia32_gatherdiv4di (v4di, pcint64,v4di,v4di,int) 40326 v4si __builtin_ia32_gathersiv4si (v4si, pcint,v4si,v4si,int) 40327 v8si __builtin_ia32_gathersiv8si (v8si, pcint,v8si,v8si,int) 40328 v4si __builtin_ia32_gatherdiv4si (v4si, pcint,v2di,v4si,int) 40329 v4si __builtin_ia32_gatherdiv4si256 (v4si, pcint,v4di,v4si,int) 40330 40331 The following built-in functions are available when '-maes' is used. 40332All of them generate the machine instruction that is part of the name. 40333 40334 v2di __builtin_ia32_aesenc128 (v2di, v2di) 40335 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 40336 v2di __builtin_ia32_aesdec128 (v2di, v2di) 40337 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 40338 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 40339 v2di __builtin_ia32_aesimc128 (v2di) 40340 40341 The following built-in function is available when '-mpclmul' is used. 40342 40343'v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 40344 Generates the 'pclmulqdq' machine instruction. 40345 40346 The following built-in function is available when '-mfsgsbase' is used. 40347All of them generate the machine instruction that is part of the name. 40348 40349 unsigned int __builtin_ia32_rdfsbase32 (void) 40350 unsigned long long __builtin_ia32_rdfsbase64 (void) 40351 unsigned int __builtin_ia32_rdgsbase32 (void) 40352 unsigned long long __builtin_ia32_rdgsbase64 (void) 40353 void _writefsbase_u32 (unsigned int) 40354 void _writefsbase_u64 (unsigned long long) 40355 void _writegsbase_u32 (unsigned int) 40356 void _writegsbase_u64 (unsigned long long) 40357 40358 The following built-in function is available when '-mrdrnd' is used. 40359All of them generate the machine instruction that is part of the name. 40360 40361 unsigned int __builtin_ia32_rdrand16_step (unsigned short *) 40362 unsigned int __builtin_ia32_rdrand32_step (unsigned int *) 40363 unsigned int __builtin_ia32_rdrand64_step (unsigned long long *) 40364 40365 The following built-in functions are available when '-msse4a' is used. 40366All of them generate the machine instruction that is part of the name. 40367 40368 void __builtin_ia32_movntsd (double *, v2df) 40369 void __builtin_ia32_movntss (float *, v4sf) 40370 v2di __builtin_ia32_extrq (v2di, v16qi) 40371 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 40372 v2di __builtin_ia32_insertq (v2di, v2di) 40373 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 40374 40375 The following built-in functions are available when '-mxop' is used. 40376 v2df __builtin_ia32_vfrczpd (v2df) 40377 v4sf __builtin_ia32_vfrczps (v4sf) 40378 v2df __builtin_ia32_vfrczsd (v2df) 40379 v4sf __builtin_ia32_vfrczss (v4sf) 40380 v4df __builtin_ia32_vfrczpd256 (v4df) 40381 v8sf __builtin_ia32_vfrczps256 (v8sf) 40382 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 40383 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 40384 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 40385 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 40386 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 40387 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 40388 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 40389 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 40390 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 40391 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 40392 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 40393 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 40394 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 40395 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 40396 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40397 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 40398 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 40399 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 40400 v4si __builtin_ia32_vpcomequd (v4si, v4si) 40401 v2di __builtin_ia32_vpcomequq (v2di, v2di) 40402 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 40403 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 40404 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 40405 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 40406 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 40407 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 40408 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 40409 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 40410 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 40411 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 40412 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 40413 v4si __builtin_ia32_vpcomged (v4si, v4si) 40414 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 40415 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 40416 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 40417 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 40418 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 40419 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 40420 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 40421 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 40422 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 40423 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 40424 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 40425 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 40426 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 40427 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 40428 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 40429 v4si __builtin_ia32_vpcomled (v4si, v4si) 40430 v2di __builtin_ia32_vpcomleq (v2di, v2di) 40431 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 40432 v4si __builtin_ia32_vpcomleud (v4si, v4si) 40433 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 40434 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 40435 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 40436 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 40437 v4si __builtin_ia32_vpcomltd (v4si, v4si) 40438 v2di __builtin_ia32_vpcomltq (v2di, v2di) 40439 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 40440 v4si __builtin_ia32_vpcomltud (v4si, v4si) 40441 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 40442 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 40443 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 40444 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 40445 v4si __builtin_ia32_vpcomned (v4si, v4si) 40446 v2di __builtin_ia32_vpcomneq (v2di, v2di) 40447 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 40448 v4si __builtin_ia32_vpcomneud (v4si, v4si) 40449 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 40450 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 40451 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 40452 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 40453 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 40454 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 40455 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 40456 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 40457 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 40458 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 40459 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 40460 v4si __builtin_ia32_vphaddbd (v16qi) 40461 v2di __builtin_ia32_vphaddbq (v16qi) 40462 v8hi __builtin_ia32_vphaddbw (v16qi) 40463 v2di __builtin_ia32_vphadddq (v4si) 40464 v4si __builtin_ia32_vphaddubd (v16qi) 40465 v2di __builtin_ia32_vphaddubq (v16qi) 40466 v8hi __builtin_ia32_vphaddubw (v16qi) 40467 v2di __builtin_ia32_vphaddudq (v4si) 40468 v4si __builtin_ia32_vphadduwd (v8hi) 40469 v2di __builtin_ia32_vphadduwq (v8hi) 40470 v4si __builtin_ia32_vphaddwd (v8hi) 40471 v2di __builtin_ia32_vphaddwq (v8hi) 40472 v8hi __builtin_ia32_vphsubbw (v16qi) 40473 v2di __builtin_ia32_vphsubdq (v4si) 40474 v4si __builtin_ia32_vphsubwd (v8hi) 40475 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 40476 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 40477 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 40478 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 40479 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 40480 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 40481 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 40482 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 40483 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 40484 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 40485 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 40486 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 40487 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 40488 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 40489 v4si __builtin_ia32_vprotd (v4si, v4si) 40490 v2di __builtin_ia32_vprotq (v2di, v2di) 40491 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 40492 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 40493 v4si __builtin_ia32_vpshad (v4si, v4si) 40494 v2di __builtin_ia32_vpshaq (v2di, v2di) 40495 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 40496 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 40497 v4si __builtin_ia32_vpshld (v4si, v4si) 40498 v2di __builtin_ia32_vpshlq (v2di, v2di) 40499 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 40500 40501 The following built-in functions are available when '-mfma4' is used. 40502All of them generate the machine instruction that is part of the name. 40503 40504 v2df __builtin_ia32_vfmaddpd (v2df, v2df, v2df) 40505 v4sf __builtin_ia32_vfmaddps (v4sf, v4sf, v4sf) 40506 v2df __builtin_ia32_vfmaddsd (v2df, v2df, v2df) 40507 v4sf __builtin_ia32_vfmaddss (v4sf, v4sf, v4sf) 40508 v2df __builtin_ia32_vfmsubpd (v2df, v2df, v2df) 40509 v4sf __builtin_ia32_vfmsubps (v4sf, v4sf, v4sf) 40510 v2df __builtin_ia32_vfmsubsd (v2df, v2df, v2df) 40511 v4sf __builtin_ia32_vfmsubss (v4sf, v4sf, v4sf) 40512 v2df __builtin_ia32_vfnmaddpd (v2df, v2df, v2df) 40513 v4sf __builtin_ia32_vfnmaddps (v4sf, v4sf, v4sf) 40514 v2df __builtin_ia32_vfnmaddsd (v2df, v2df, v2df) 40515 v4sf __builtin_ia32_vfnmaddss (v4sf, v4sf, v4sf) 40516 v2df __builtin_ia32_vfnmsubpd (v2df, v2df, v2df) 40517 v4sf __builtin_ia32_vfnmsubps (v4sf, v4sf, v4sf) 40518 v2df __builtin_ia32_vfnmsubsd (v2df, v2df, v2df) 40519 v4sf __builtin_ia32_vfnmsubss (v4sf, v4sf, v4sf) 40520 v2df __builtin_ia32_vfmaddsubpd (v2df, v2df, v2df) 40521 v4sf __builtin_ia32_vfmaddsubps (v4sf, v4sf, v4sf) 40522 v2df __builtin_ia32_vfmsubaddpd (v2df, v2df, v2df) 40523 v4sf __builtin_ia32_vfmsubaddps (v4sf, v4sf, v4sf) 40524 v4df __builtin_ia32_vfmaddpd256 (v4df, v4df, v4df) 40525 v8sf __builtin_ia32_vfmaddps256 (v8sf, v8sf, v8sf) 40526 v4df __builtin_ia32_vfmsubpd256 (v4df, v4df, v4df) 40527 v8sf __builtin_ia32_vfmsubps256 (v8sf, v8sf, v8sf) 40528 v4df __builtin_ia32_vfnmaddpd256 (v4df, v4df, v4df) 40529 v8sf __builtin_ia32_vfnmaddps256 (v8sf, v8sf, v8sf) 40530 v4df __builtin_ia32_vfnmsubpd256 (v4df, v4df, v4df) 40531 v8sf __builtin_ia32_vfnmsubps256 (v8sf, v8sf, v8sf) 40532 v4df __builtin_ia32_vfmaddsubpd256 (v4df, v4df, v4df) 40533 v8sf __builtin_ia32_vfmaddsubps256 (v8sf, v8sf, v8sf) 40534 v4df __builtin_ia32_vfmsubaddpd256 (v4df, v4df, v4df) 40535 v8sf __builtin_ia32_vfmsubaddps256 (v8sf, v8sf, v8sf) 40536 40537 40538 The following built-in functions are available when '-mlwp' is used. 40539 40540 void __builtin_ia32_llwpcb16 (void *); 40541 void __builtin_ia32_llwpcb32 (void *); 40542 void __builtin_ia32_llwpcb64 (void *); 40543 void * __builtin_ia32_llwpcb16 (void); 40544 void * __builtin_ia32_llwpcb32 (void); 40545 void * __builtin_ia32_llwpcb64 (void); 40546 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 40547 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 40548 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 40549 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 40550 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 40551 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 40552 40553 The following built-in functions are available when '-mbmi' is used. 40554All of them generate the machine instruction that is part of the name. 40555 unsigned int __builtin_ia32_bextr_u32(unsigned int, unsigned int); 40556 unsigned long long __builtin_ia32_bextr_u64 (unsigned long long, unsigned long long); 40557 40558 The following built-in functions are available when '-mbmi2' is used. 40559All of them generate the machine instruction that is part of the name. 40560 unsigned int _bzhi_u32 (unsigned int, unsigned int) 40561 unsigned int _pdep_u32 (unsigned int, unsigned int) 40562 unsigned int _pext_u32 (unsigned int, unsigned int) 40563 unsigned long long _bzhi_u64 (unsigned long long, unsigned long long) 40564 unsigned long long _pdep_u64 (unsigned long long, unsigned long long) 40565 unsigned long long _pext_u64 (unsigned long long, unsigned long long) 40566 40567 The following built-in functions are available when '-mlzcnt' is used. 40568All of them generate the machine instruction that is part of the name. 40569 unsigned short __builtin_ia32_lzcnt_16(unsigned short); 40570 unsigned int __builtin_ia32_lzcnt_u32(unsigned int); 40571 unsigned long long __builtin_ia32_lzcnt_u64 (unsigned long long); 40572 40573 The following built-in functions are available when '-mfxsr' is used. 40574All of them generate the machine instruction that is part of the name. 40575 void __builtin_ia32_fxsave (void *) 40576 void __builtin_ia32_fxrstor (void *) 40577 void __builtin_ia32_fxsave64 (void *) 40578 void __builtin_ia32_fxrstor64 (void *) 40579 40580 The following built-in functions are available when '-mxsave' is used. 40581All of them generate the machine instruction that is part of the name. 40582 void __builtin_ia32_xsave (void *, long long) 40583 void __builtin_ia32_xrstor (void *, long long) 40584 void __builtin_ia32_xsave64 (void *, long long) 40585 void __builtin_ia32_xrstor64 (void *, long long) 40586 40587 The following built-in functions are available when '-mxsaveopt' is 40588used. All of them generate the machine instruction that is part of the 40589name. 40590 void __builtin_ia32_xsaveopt (void *, long long) 40591 void __builtin_ia32_xsaveopt64 (void *, long long) 40592 40593 The following built-in functions are available when '-mtbm' is used. 40594Both of them generate the immediate form of the bextr machine 40595instruction. 40596 unsigned int __builtin_ia32_bextri_u32 (unsigned int, const unsigned int); 40597 unsigned long long __builtin_ia32_bextri_u64 (unsigned long long, const unsigned long long); 40598 40599 The following built-in functions are available when '-m3dnow' is used. 40600All of them generate the machine instruction that is part of the name. 40601 40602 void __builtin_ia32_femms (void) 40603 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 40604 v2si __builtin_ia32_pf2id (v2sf) 40605 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 40606 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 40607 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 40608 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 40609 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 40610 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 40611 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 40612 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 40613 v2sf __builtin_ia32_pfrcp (v2sf) 40614 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 40615 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 40616 v2sf __builtin_ia32_pfrsqrt (v2sf) 40617 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 40618 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 40619 v2sf __builtin_ia32_pi2fd (v2si) 40620 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 40621 40622 The following built-in functions are available when both '-m3dnow' and 40623'-march=athlon' are used. All of them generate the machine instruction 40624that is part of the name. 40625 40626 v2si __builtin_ia32_pf2iw (v2sf) 40627 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 40628 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 40629 v2sf __builtin_ia32_pi2fw (v2si) 40630 v2sf __builtin_ia32_pswapdsf (v2sf) 40631 v2si __builtin_ia32_pswapdsi (v2si) 40632 40633 The following built-in functions are available when '-mrtm' is used 40634They are used for restricted transactional memory. These are the 40635internal low level functions. Normally the functions in *note X86 40636transactional memory intrinsics:: should be used instead. 40637 40638 int __builtin_ia32_xbegin () 40639 void __builtin_ia32_xend () 40640 void __builtin_ia32_xabort (status) 40641 int __builtin_ia32_xtest () 40642 40643 40644File: gcc.info, Node: X86 transactional memory intrinsics, Next: MIPS DSP Built-in Functions, Prev: X86 Built-in Functions, Up: Target Builtins 40645 406466.57.12 X86 transaction memory intrinsics 40647----------------------------------------- 40648 40649Hardware transactional memory intrinsics for i386. These allow to use 40650memory transactions with RTM (Restricted Transactional Memory). For 40651using HLE (Hardware Lock Elision) see *note x86 specific memory model 40652extensions for transactional memory:: instead. This support is enabled 40653with the '-mrtm' option. 40654 40655 A memory transaction commits all changes to memory in an atomic way, as 40656visible to other threads. If the transaction fails it is rolled back 40657and all side effects discarded. 40658 40659 Generally there is no guarantee that a memory transaction ever succeeds 40660and suitable fallback code always needs to be supplied. 40661 40662 -- RTM Function: unsigned _xbegin () 40663 Start a RTM (Restricted Transactional Memory) transaction. Returns 40664 _XBEGIN_STARTED when the transaction started successfully (note 40665 this is not 0, so the constant has to be explicitely tested). When 40666 the transaction aborts all side effects are undone and an abort 40667 code is returned. There is no guarantee any transaction ever 40668 succeeds, so there always needs to be a valid tested fallback path. 40669 40670 #include <immintrin.h> 40671 40672 if ((status = _xbegin ()) == _XBEGIN_STARTED) { 40673 ... transaction code... 40674 _xend (); 40675 } else { 40676 ... non transactional fallback path... 40677 } 40678 40679 Valid abort status bits (when the value is not '_XBEGIN_STARTED') are: 40680 40681'_XABORT_EXPLICIT' 40682 Transaction explicitely aborted with '_xabort'. The parameter 40683 passed to '_xabort' is available with '_XABORT_CODE(status)' 40684'_XABORT_RETRY' 40685 Transaction retry is possible. 40686'_XABORT_CONFLICT' 40687 Transaction abort due to a memory conflict with another thread 40688'_XABORT_CAPACITY' 40689 Transaction abort due to the transaction using too much memory 40690'_XABORT_DEBUG' 40691 Transaction abort due to a debug trap 40692'_XABORT_NESTED' 40693 Transaction abort in a inner nested transaction 40694 40695 -- RTM Function: void _xend () 40696 Commit the current transaction. When no transaction is active this 40697 will fault. All memory side effects of the transactions will 40698 become visible to other threads in an atomic matter. 40699 40700 -- RTM Function: int _xtest () 40701 Return a value not zero when a transaction is currently active, 40702 otherwise 0. 40703 40704 -- RTM Function: void _xabort (status) 40705 Abort the current transaction. When no transaction is active this 40706 is a no-op. status must be a 8bit constant, that is included in 40707 the status code returned by '_xbegin' 40708 40709 40710File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 transactional memory intrinsics, Up: Target Builtins 40711 407126.57.13 MIPS DSP Built-in Functions 40713----------------------------------- 40714 40715The MIPS DSP Application-Specific Extension (ASE) includes new 40716instructions that are designed to improve the performance of DSP and 40717media applications. It provides instructions that operate on packed 407188-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 40719 40720 GCC supports MIPS DSP operations using both the generic vector 40721extensions (*note Vector Extensions::) and a collection of MIPS-specific 40722built-in functions. Both kinds of support are enabled by the '-mdsp' 40723command-line option. 40724 40725 Revision 2 of the ASE was introduced in the second half of 2006. This 40726revision adds extra instructions to the original ASE, but is otherwise 40727backwards-compatible with it. You can select revision 2 using the 40728command-line option '-mdspr2'; this option implies '-mdsp'. 40729 40730 The SCOUNT and POS bits of the DSP control register are global. The 40731WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and POS 40732bits. During optimization, the compiler does not delete these 40733instructions and it does not delete calls to functions containing these 40734instructions. 40735 40736 At present, GCC only provides support for operations on 32-bit vectors. 40737The vector type associated with 8-bit integer data is usually called 40738'v4i8', the vector type associated with Q7 is usually called 'v4q7', the 40739vector type associated with 16-bit integer data is usually called 40740'v2i16', and the vector type associated with Q15 is usually called 40741'v2q15'. They can be defined in C as follows: 40742 40743 typedef signed char v4i8 __attribute__ ((vector_size(4))); 40744 typedef signed char v4q7 __attribute__ ((vector_size(4))); 40745 typedef short v2i16 __attribute__ ((vector_size(4))); 40746 typedef short v2q15 __attribute__ ((vector_size(4))); 40747 40748 'v4i8', 'v4q7', 'v2i16' and 'v2q15' values are initialized in the same 40749way as aggregates. For example: 40750 40751 v4i8 a = {1, 2, 3, 4}; 40752 v4i8 b; 40753 b = (v4i8) {5, 6, 7, 8}; 40754 40755 v2q15 c = {0x0fcb, 0x3a75}; 40756 v2q15 d; 40757 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 40758 40759 _Note:_ The CPU's endianness determines the order in which values are 40760packed. On little-endian targets, the first value is the least 40761significant and the last value is the most significant. The opposite 40762order applies to big-endian targets. For example, the code above sets 40763the lowest byte of 'a' to '1' on little-endian targets and '4' on 40764big-endian targets. 40765 40766 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 40767representation. As shown in this example, the integer representation of 40768a Q7 value can be obtained by multiplying the fractional value by 40769'0x1.0p7'. The equivalent for Q15 values is to multiply by '0x1.0p15'. 40770The equivalent for Q31 values is to multiply by '0x1.0p31'. 40771 40772 The table below lists the 'v4i8' and 'v2q15' operations for which 40773hardware support exists. 'a' and 'b' are 'v4i8' values, and 'c' and 'd' 40774are 'v2q15' values. 40775 40776C code MIPS instruction 40777'a + b' 'addu.qb' 40778'c + d' 'addq.ph' 40779'a - b' 'subu.qb' 40780'c - d' 'subq.ph' 40781 40782 The table below lists the 'v2i16' operation for which hardware support 40783exists for the DSP ASE REV 2. 'e' and 'f' are 'v2i16' values. 40784 40785C code MIPS instruction 40786'e * f' 'mul.ph' 40787 40788 It is easier to describe the DSP built-in functions if we first define 40789the following types: 40790 40791 typedef int q31; 40792 typedef int i32; 40793 typedef unsigned int ui32; 40794 typedef long long a64; 40795 40796 'q31' and 'i32' are actually the same as 'int', but we use 'q31' to 40797indicate a Q31 fractional value and 'i32' to indicate a 32-bit integer 40798value. Similarly, 'a64' is the same as 'long long', but we use 'a64' to 40799indicate values that are placed in one of the four DSP accumulators 40800('$ac0', '$ac1', '$ac2' or '$ac3'). 40801 40802 Also, some built-in functions prefer or require immediate numbers as 40803parameters, because the corresponding DSP instructions accept both 40804immediate numbers and register operands, or accept immediate numbers 40805only. The immediate parameters are listed as follows. 40806 40807 imm0_3: 0 to 3. 40808 imm0_7: 0 to 7. 40809 imm0_15: 0 to 15. 40810 imm0_31: 0 to 31. 40811 imm0_63: 0 to 63. 40812 imm0_255: 0 to 255. 40813 imm_n32_31: -32 to 31. 40814 imm_n512_511: -512 to 511. 40815 40816 The following built-in functions map directly to a particular MIPS DSP 40817instruction. Please refer to the architecture specification for details 40818on what each instruction does. 40819 40820 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 40821 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 40822 q31 __builtin_mips_addq_s_w (q31, q31) 40823 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 40824 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 40825 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 40826 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 40827 q31 __builtin_mips_subq_s_w (q31, q31) 40828 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 40829 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 40830 i32 __builtin_mips_addsc (i32, i32) 40831 i32 __builtin_mips_addwc (i32, i32) 40832 i32 __builtin_mips_modsub (i32, i32) 40833 i32 __builtin_mips_raddu_w_qb (v4i8) 40834 v2q15 __builtin_mips_absq_s_ph (v2q15) 40835 q31 __builtin_mips_absq_s_w (q31) 40836 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 40837 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 40838 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 40839 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 40840 q31 __builtin_mips_preceq_w_phl (v2q15) 40841 q31 __builtin_mips_preceq_w_phr (v2q15) 40842 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 40843 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 40844 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 40845 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 40846 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 40847 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 40848 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 40849 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 40850 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 40851 v4i8 __builtin_mips_shll_qb (v4i8, i32) 40852 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 40853 v2q15 __builtin_mips_shll_ph (v2q15, i32) 40854 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 40855 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 40856 q31 __builtin_mips_shll_s_w (q31, imm0_31) 40857 q31 __builtin_mips_shll_s_w (q31, i32) 40858 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 40859 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 40860 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 40861 v2q15 __builtin_mips_shra_ph (v2q15, i32) 40862 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 40863 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 40864 q31 __builtin_mips_shra_r_w (q31, imm0_31) 40865 q31 __builtin_mips_shra_r_w (q31, i32) 40866 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 40867 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 40868 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 40869 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 40870 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 40871 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 40872 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 40873 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 40874 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 40875 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 40876 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 40877 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 40878 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 40879 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 40880 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 40881 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 40882 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 40883 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 40884 i32 __builtin_mips_bitrev (i32) 40885 i32 __builtin_mips_insv (i32, i32) 40886 v4i8 __builtin_mips_repl_qb (imm0_255) 40887 v4i8 __builtin_mips_repl_qb (i32) 40888 v2q15 __builtin_mips_repl_ph (imm_n512_511) 40889 v2q15 __builtin_mips_repl_ph (i32) 40890 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 40891 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 40892 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 40893 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 40894 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 40895 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 40896 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 40897 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 40898 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 40899 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 40900 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 40901 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 40902 i32 __builtin_mips_extr_w (a64, imm0_31) 40903 i32 __builtin_mips_extr_w (a64, i32) 40904 i32 __builtin_mips_extr_r_w (a64, imm0_31) 40905 i32 __builtin_mips_extr_s_h (a64, i32) 40906 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 40907 i32 __builtin_mips_extr_rs_w (a64, i32) 40908 i32 __builtin_mips_extr_s_h (a64, imm0_31) 40909 i32 __builtin_mips_extr_r_w (a64, i32) 40910 i32 __builtin_mips_extp (a64, imm0_31) 40911 i32 __builtin_mips_extp (a64, i32) 40912 i32 __builtin_mips_extpdp (a64, imm0_31) 40913 i32 __builtin_mips_extpdp (a64, i32) 40914 a64 __builtin_mips_shilo (a64, imm_n32_31) 40915 a64 __builtin_mips_shilo (a64, i32) 40916 a64 __builtin_mips_mthlip (a64, i32) 40917 void __builtin_mips_wrdsp (i32, imm0_63) 40918 i32 __builtin_mips_rddsp (imm0_63) 40919 i32 __builtin_mips_lbux (void *, i32) 40920 i32 __builtin_mips_lhx (void *, i32) 40921 i32 __builtin_mips_lwx (void *, i32) 40922 a64 __builtin_mips_ldx (void *, i32) [MIPS64 only] 40923 i32 __builtin_mips_bposge32 (void) 40924 a64 __builtin_mips_madd (a64, i32, i32); 40925 a64 __builtin_mips_maddu (a64, ui32, ui32); 40926 a64 __builtin_mips_msub (a64, i32, i32); 40927 a64 __builtin_mips_msubu (a64, ui32, ui32); 40928 a64 __builtin_mips_mult (i32, i32); 40929 a64 __builtin_mips_multu (ui32, ui32); 40930 40931 The following built-in functions map directly to a particular MIPS DSP 40932REV 2 instruction. Please refer to the architecture specification for 40933details on what each instruction does. 40934 40935 v4q7 __builtin_mips_absq_s_qb (v4q7); 40936 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 40937 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 40938 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 40939 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 40940 i32 __builtin_mips_append (i32, i32, imm0_31); 40941 i32 __builtin_mips_balign (i32, i32, imm0_3); 40942 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 40943 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 40944 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 40945 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 40946 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 40947 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 40948 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 40949 q31 __builtin_mips_mulq_rs_w (q31, q31); 40950 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 40951 q31 __builtin_mips_mulq_s_w (q31, q31); 40952 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 40953 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 40954 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 40955 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 40956 i32 __builtin_mips_prepend (i32, i32, imm0_31); 40957 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 40958 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 40959 v4i8 __builtin_mips_shra_qb (v4i8, i32); 40960 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 40961 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 40962 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 40963 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 40964 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 40965 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 40966 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 40967 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 40968 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 40969 q31 __builtin_mips_addqh_w (q31, q31); 40970 q31 __builtin_mips_addqh_r_w (q31, q31); 40971 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 40972 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 40973 q31 __builtin_mips_subqh_w (q31, q31); 40974 q31 __builtin_mips_subqh_r_w (q31, q31); 40975 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 40976 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 40977 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 40978 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 40979 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 40980 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 40981 40982 40983File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 40984 409856.57.14 MIPS Paired-Single Support 40986---------------------------------- 40987 40988The MIPS64 architecture includes a number of instructions that operate 40989on pairs of single-precision floating-point values. Each pair is packed 40990into a 64-bit floating-point register, with one element being designated 40991the "upper half" and the other being designated the "lower half". 40992 40993 GCC supports paired-single operations using both the generic vector 40994extensions (*note Vector Extensions::) and a collection of MIPS-specific 40995built-in functions. Both kinds of support are enabled by the 40996'-mpaired-single' command-line option. 40997 40998 The vector type associated with paired-single values is usually called 40999'v2sf'. It can be defined in C as follows: 41000 41001 typedef float v2sf __attribute__ ((vector_size (8))); 41002 41003 'v2sf' values are initialized in the same way as aggregates. For 41004example: 41005 41006 v2sf a = {1.5, 9.1}; 41007 v2sf b; 41008 float e, f; 41009 b = (v2sf) {e, f}; 41010 41011 _Note:_ The CPU's endianness determines which value is stored in the 41012upper half of a register and which value is stored in the lower half. 41013On little-endian targets, the first value is the lower one and the 41014second value is the upper one. The opposite order applies to big-endian 41015targets. For example, the code above sets the lower half of 'a' to 41016'1.5' on little-endian targets and '9.1' on big-endian targets. 41017 41018 41019File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 41020 410216.57.15 MIPS Loongson Built-in Functions 41022---------------------------------------- 41023 41024GCC provides intrinsics to access the SIMD instructions provided by the 41025ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 41026available after inclusion of the 'loongson.h' header file, operate on 41027the following 64-bit vector types: 41028 41029 * 'uint8x8_t', a vector of eight unsigned 8-bit integers; 41030 * 'uint16x4_t', a vector of four unsigned 16-bit integers; 41031 * 'uint32x2_t', a vector of two unsigned 32-bit integers; 41032 * 'int8x8_t', a vector of eight signed 8-bit integers; 41033 * 'int16x4_t', a vector of four signed 16-bit integers; 41034 * 'int32x2_t', a vector of two signed 32-bit integers. 41035 41036 The intrinsics provided are listed below; each is named after the 41037machine instruction to which it corresponds, with suffixes added as 41038appropriate to distinguish intrinsics that expand to the same machine 41039instruction yet have different argument types. Refer to the 41040architecture documentation for a description of the functionality of 41041each instruction. 41042 41043 int16x4_t packsswh (int32x2_t s, int32x2_t t); 41044 int8x8_t packsshb (int16x4_t s, int16x4_t t); 41045 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 41046 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 41047 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 41048 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 41049 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 41050 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 41051 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 41052 uint64_t paddd_u (uint64_t s, uint64_t t); 41053 int64_t paddd_s (int64_t s, int64_t t); 41054 int16x4_t paddsh (int16x4_t s, int16x4_t t); 41055 int8x8_t paddsb (int8x8_t s, int8x8_t t); 41056 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 41057 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 41058 uint64_t pandn_ud (uint64_t s, uint64_t t); 41059 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 41060 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 41061 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 41062 int64_t pandn_sd (int64_t s, int64_t t); 41063 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 41064 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 41065 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 41066 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 41067 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 41068 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 41069 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 41070 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 41071 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 41072 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 41073 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 41074 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 41075 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 41076 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 41077 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 41078 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 41079 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 41080 uint16x4_t pextrh_u (uint16x4_t s, int field); 41081 int16x4_t pextrh_s (int16x4_t s, int field); 41082 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 41083 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 41084 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 41085 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 41086 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 41087 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 41088 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 41089 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 41090 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 41091 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 41092 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 41093 int16x4_t pminsh (int16x4_t s, int16x4_t t); 41094 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 41095 uint8x8_t pmovmskb_u (uint8x8_t s); 41096 int8x8_t pmovmskb_s (int8x8_t s); 41097 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 41098 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 41099 int16x4_t pmullh (int16x4_t s, int16x4_t t); 41100 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 41101 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 41102 uint16x4_t biadd (uint8x8_t s); 41103 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 41104 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 41105 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 41106 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 41107 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 41108 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 41109 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 41110 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 41111 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 41112 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 41113 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 41114 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 41115 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 41116 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 41117 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 41118 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 41119 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 41120 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 41121 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 41122 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 41123 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 41124 uint64_t psubd_u (uint64_t s, uint64_t t); 41125 int64_t psubd_s (int64_t s, int64_t t); 41126 int16x4_t psubsh (int16x4_t s, int16x4_t t); 41127 int8x8_t psubsb (int8x8_t s, int8x8_t t); 41128 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 41129 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 41130 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 41131 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 41132 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 41133 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 41134 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 41135 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 41136 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 41137 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 41138 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 41139 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 41140 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 41141 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 41142 41143* Menu: 41144 41145* Paired-Single Arithmetic:: 41146* Paired-Single Built-in Functions:: 41147* MIPS-3D Built-in Functions:: 41148 41149 41150File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 41151 411526.57.15.1 Paired-Single Arithmetic 41153.................................. 41154 41155The table below lists the 'v2sf' operations for which hardware support 41156exists. 'a', 'b' and 'c' are 'v2sf' values and 'x' is an integral 41157value. 41158 41159C code MIPS instruction 41160'a + b' 'add.ps' 41161'a - b' 'sub.ps' 41162'-a' 'neg.ps' 41163'a * b' 'mul.ps' 41164'a * b + c' 'madd.ps' 41165'a * b - c' 'msub.ps' 41166'-(a * b + c)' 'nmadd.ps' 41167'-(a * b - c)' 'nmsub.ps' 41168'x ? a : b' 'movn.ps'/'movz.ps' 41169 41170 Note that the multiply-accumulate instructions can be disabled using 41171the command-line option '-mno-fused-madd'. 41172 41173 41174File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 41175 411766.57.15.2 Paired-Single Built-in Functions 41177.......................................... 41178 41179The following paired-single functions map directly to a particular MIPS 41180instruction. Please refer to the architecture specification for details 41181on what each instruction does. 41182 41183'v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 41184 Pair lower lower ('pll.ps'). 41185 41186'v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 41187 Pair upper lower ('pul.ps'). 41188 41189'v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 41190 Pair lower upper ('plu.ps'). 41191 41192'v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 41193 Pair upper upper ('puu.ps'). 41194 41195'v2sf __builtin_mips_cvt_ps_s (float, float)' 41196 Convert pair to paired single ('cvt.ps.s'). 41197 41198'float __builtin_mips_cvt_s_pl (v2sf)' 41199 Convert pair lower to single ('cvt.s.pl'). 41200 41201'float __builtin_mips_cvt_s_pu (v2sf)' 41202 Convert pair upper to single ('cvt.s.pu'). 41203 41204'v2sf __builtin_mips_abs_ps (v2sf)' 41205 Absolute value ('abs.ps'). 41206 41207'v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 41208 Align variable ('alnv.ps'). 41209 41210 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 41211 otherwise the result is unpredictable. Please read the instruction 41212 description for details. 41213 41214 The following multi-instruction functions are also available. In each 41215case, COND can be any of the 16 floating-point conditions: 'f', 'un', 41216'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', 41217'lt', 'nge', 'le' or 'ngt'. 41218 41219'v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 41220'v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 41221 Conditional move based on floating-point comparison ('c.COND.ps', 41222 'movt.ps'/'movf.ps'). 41223 41224 The 'movt' functions return the value X computed by: 41225 41226 c.COND.ps CC,A,B 41227 mov.ps X,C 41228 movt.ps X,D,CC 41229 41230 The 'movf' functions are similar but use 'movf.ps' instead of 41231 'movt.ps'. 41232 41233'int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 41234'int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 41235 Comparison of two paired-single values ('c.COND.ps', 41236 'bc1t'/'bc1f'). 41237 41238 These functions compare A and B using 'c.COND.ps' and return either 41239 the upper or lower half of the result. For example: 41240 41241 v2sf a, b; 41242 if (__builtin_mips_upper_c_eq_ps (a, b)) 41243 upper_halves_are_equal (); 41244 else 41245 upper_halves_are_unequal (); 41246 41247 if (__builtin_mips_lower_c_eq_ps (a, b)) 41248 lower_halves_are_equal (); 41249 else 41250 lower_halves_are_unequal (); 41251 41252 41253File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 41254 412556.57.15.3 MIPS-3D Built-in Functions 41256.................................... 41257 41258The MIPS-3D Application-Specific Extension (ASE) includes additional 41259paired-single instructions that are designed to improve the performance 41260of 3D graphics operations. Support for these instructions is controlled 41261by the '-mips3d' command-line option. 41262 41263 The functions listed below map directly to a particular MIPS-3D 41264instruction. Please refer to the architecture specification for more 41265details on what each instruction does. 41266 41267'v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 41268 Reduction add ('addr.ps'). 41269 41270'v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 41271 Reduction multiply ('mulr.ps'). 41272 41273'v2sf __builtin_mips_cvt_pw_ps (v2sf)' 41274 Convert paired single to paired word ('cvt.pw.ps'). 41275 41276'v2sf __builtin_mips_cvt_ps_pw (v2sf)' 41277 Convert paired word to paired single ('cvt.ps.pw'). 41278 41279'float __builtin_mips_recip1_s (float)' 41280'double __builtin_mips_recip1_d (double)' 41281'v2sf __builtin_mips_recip1_ps (v2sf)' 41282 Reduced-precision reciprocal (sequence step 1) ('recip1.FMT'). 41283 41284'float __builtin_mips_recip2_s (float, float)' 41285'double __builtin_mips_recip2_d (double, double)' 41286'v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 41287 Reduced-precision reciprocal (sequence step 2) ('recip2.FMT'). 41288 41289'float __builtin_mips_rsqrt1_s (float)' 41290'double __builtin_mips_rsqrt1_d (double)' 41291'v2sf __builtin_mips_rsqrt1_ps (v2sf)' 41292 Reduced-precision reciprocal square root (sequence step 1) 41293 ('rsqrt1.FMT'). 41294 41295'float __builtin_mips_rsqrt2_s (float, float)' 41296'double __builtin_mips_rsqrt2_d (double, double)' 41297'v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 41298 Reduced-precision reciprocal square root (sequence step 2) 41299 ('rsqrt2.FMT'). 41300 41301 The following multi-instruction functions are also available. In each 41302case, COND can be any of the 16 floating-point conditions: 'f', 'un', 41303'eq', 'ueq', 'olt', 'ult', 'ole', 'ule', 'sf', 'ngle', 'seq', 'ngl', 41304'lt', 'nge', 'le' or 'ngt'. 41305 41306'int __builtin_mips_cabs_COND_s (float A, float B)' 41307'int __builtin_mips_cabs_COND_d (double A, double B)' 41308 Absolute comparison of two scalar values ('cabs.COND.FMT', 41309 'bc1t'/'bc1f'). 41310 41311 These functions compare A and B using 'cabs.COND.s' or 41312 'cabs.COND.d' and return the result as a boolean value. For 41313 example: 41314 41315 float a, b; 41316 if (__builtin_mips_cabs_eq_s (a, b)) 41317 true (); 41318 else 41319 false (); 41320 41321'int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 41322'int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 41323 Absolute comparison of two paired-single values ('cabs.COND.ps', 41324 'bc1t'/'bc1f'). 41325 41326 These functions compare A and B using 'cabs.COND.ps' and return 41327 either the upper or lower half of the result. For example: 41328 41329 v2sf a, b; 41330 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 41331 upper_halves_are_equal (); 41332 else 41333 upper_halves_are_unequal (); 41334 41335 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 41336 lower_halves_are_equal (); 41337 else 41338 lower_halves_are_unequal (); 41339 41340'v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 41341'v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 41342 Conditional move based on absolute comparison ('cabs.COND.ps', 41343 'movt.ps'/'movf.ps'). 41344 41345 The 'movt' functions return the value X computed by: 41346 41347 cabs.COND.ps CC,A,B 41348 mov.ps X,C 41349 movt.ps X,D,CC 41350 41351 The 'movf' functions are similar but use 'movf.ps' instead of 41352 'movt.ps'. 41353 41354'int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 41355'int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 41356'int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 41357'int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 41358 Comparison of two paired-single values ('c.COND.ps'/'cabs.COND.ps', 41359 'bc1any2t'/'bc1any2f'). 41360 41361 These functions compare A and B using 'c.COND.ps' or 41362 'cabs.COND.ps'. The 'any' forms return true if either result is 41363 true and the 'all' forms return true if both results are true. For 41364 example: 41365 41366 v2sf a, b; 41367 if (__builtin_mips_any_c_eq_ps (a, b)) 41368 one_is_true (); 41369 else 41370 both_are_false (); 41371 41372 if (__builtin_mips_all_c_eq_ps (a, b)) 41373 both_are_true (); 41374 else 41375 one_is_false (); 41376 41377'int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 41378'int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 41379'int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 41380'int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 41381 Comparison of four paired-single values 41382 ('c.COND.ps'/'cabs.COND.ps', 'bc1any4t'/'bc1any4f'). 41383 41384 These functions use 'c.COND.ps' or 'cabs.COND.ps' to compare A with 41385 B and to compare C with D. The 'any' forms return true if any of 41386 the four results are true and the 'all' forms return true if all 41387 four results are true. For example: 41388 41389 v2sf a, b, c, d; 41390 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 41391 some_are_true (); 41392 else 41393 all_are_false (); 41394 41395 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 41396 all_are_true (); 41397 else 41398 some_are_false (); 41399 41400 41401File: gcc.info, Node: Other MIPS Built-in Functions, Next: MSP430 Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 41402 414036.57.16 Other MIPS Built-in Functions 41404------------------------------------- 41405 41406GCC provides other MIPS-specific built-in functions: 41407 41408'void __builtin_mips_cache (int OP, const volatile void *ADDR)' 41409 Insert a 'cache' instruction with operands OP and ADDR. GCC 41410 defines the preprocessor macro '___GCC_HAVE_BUILTIN_MIPS_CACHE' 41411 when this function is available. 41412 41413'unsigned int __builtin_mips_get_fcsr (void)' 41414'void __builtin_mips_set_fcsr (unsigned int VALUE)' 41415 Get and set the contents of the floating-point control and status 41416 register (FPU control register 31). These functions are only 41417 available in hard-float code but can be called in both MIPS16 and 41418 non-MIPS16 contexts. 41419 41420 '__builtin_mips_set_fcsr' can be used to change any bit of the 41421 register except the condition codes, which GCC assumes are 41422 preserved. 41423 41424 41425File: gcc.info, Node: MSP430 Built-in Functions, Next: NDS32 Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 41426 414276.57.17 MSP430 Built-in Functions 41428--------------------------------- 41429 41430GCC provides a couple of special builtin functions to aid in the writing 41431of interrupt handlers in C. 41432 41433'__bic_SR_register_on_exit (int MASK)' 41434 This clears the indicated bits in the saved copy of the status 41435 register currently residing on the stack. This only works inside 41436 interrupt handlers and the changes to the status register will only 41437 take affect once the handler returns. 41438 41439'__bis_SR_register_on_exit (int MASK)' 41440 This sets the indicated bits in the saved copy of the status 41441 register currently residing on the stack. This only works inside 41442 interrupt handlers and the changes to the status register will only 41443 take affect once the handler returns. 41444 41445 41446File: gcc.info, Node: NDS32 Built-in Functions, Next: picoChip Built-in Functions, Prev: MSP430 Built-in Functions, Up: Target Builtins 41447 414486.57.18 NDS32 Built-in Functions 41449-------------------------------- 41450 41451These built-in functions are available for the NDS32 target: 41452 41453 -- Built-in Function: void __builtin_nds32_isync (int *ADDR) 41454 Insert an ISYNC instruction into the instruction stream where ADDR 41455 is an instruction address for serialization. 41456 41457 -- Built-in Function: void __builtin_nds32_isb (void) 41458 Insert an ISB instruction into the instruction stream. 41459 41460 -- Built-in Function: int __builtin_nds32_mfsr (int SR) 41461 Return the content of a system register which is mapped by SR. 41462 41463 -- Built-in Function: int __builtin_nds32_mfusr (int USR) 41464 Return the content of a user space register which is mapped by USR. 41465 41466 -- Built-in Function: void __builtin_nds32_mtsr (int VALUE, int SR) 41467 Move the VALUE to a system register which is mapped by SR. 41468 41469 -- Built-in Function: void __builtin_nds32_mtusr (int VALUE, int USR) 41470 Move the VALUE to a user space register which is mapped by USR. 41471 41472 -- Built-in Function: void __builtin_nds32_setgie_en (void) 41473 Enable global interrupt. 41474 41475 -- Built-in Function: void __builtin_nds32_setgie_dis (void) 41476 Disable global interrupt. 41477 41478 41479File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC Built-in Functions, Prev: NDS32 Built-in Functions, Up: Target Builtins 41480 414816.57.19 picoChip Built-in Functions 41482----------------------------------- 41483 41484GCC provides an interface to selected machine instructions from the 41485picoChip instruction set. 41486 41487'int __builtin_sbc (int VALUE)' 41488 Sign bit count. Return the number of consecutive bits in VALUE 41489 that have the same value as the sign bit. The result is the number 41490 of leading sign bits minus one, giving the number of redundant sign 41491 bits in VALUE. 41492 41493'int __builtin_byteswap (int VALUE)' 41494 Byte swap. Return the result of swapping the upper and lower bytes 41495 of VALUE. 41496 41497'int __builtin_brev (int VALUE)' 41498 Bit reversal. Return the result of reversing the bits in VALUE. 41499 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 41500 on. 41501 41502'int __builtin_adds (int X, int Y)' 41503 Saturating addition. Return the result of adding X and Y, storing 41504 the value 32767 if the result overflows. 41505 41506'int __builtin_subs (int X, int Y)' 41507 Saturating subtraction. Return the result of subtracting Y from X, 41508 storing the value -32768 if the result overflows. 41509 41510'void __builtin_halt (void)' 41511 Halt. The processor stops execution. This built-in is useful for 41512 implementing assertions. 41513 41514 41515File: gcc.info, Node: PowerPC Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 41516 415176.57.20 PowerPC Built-in Functions 41518---------------------------------- 41519 41520These built-in functions are available for the PowerPC family of 41521processors: 41522 float __builtin_recipdivf (float, float); 41523 float __builtin_rsqrtf (float); 41524 double __builtin_recipdiv (double, double); 41525 double __builtin_rsqrt (double); 41526 uint64_t __builtin_ppc_get_timebase (); 41527 unsigned long __builtin_ppc_mftb (); 41528 double __builtin_unpack_longdouble (long double, int); 41529 long double __builtin_pack_longdouble (double, double); 41530 41531 The 'vec_rsqrt', '__builtin_rsqrt', and '__builtin_rsqrtf' functions 41532generate multiple instructions to implement the reciprocal sqrt 41533functionality using reciprocal sqrt estimate instructions. 41534 41535 The '__builtin_recipdiv', and '__builtin_recipdivf' functions generate 41536multiple instructions to implement division using the reciprocal 41537estimate instructions. 41538 41539 The '__builtin_ppc_get_timebase' and '__builtin_ppc_mftb' functions 41540generate instructions to read the Time Base Register. The 41541'__builtin_ppc_get_timebase' function may generate multiple instructions 41542and always returns the 64 bits of the Time Base Register. The 41543'__builtin_ppc_mftb' function always generates one instruction and 41544returns the Time Base Register value as an unsigned long, throwing away 41545the most significant word on 32-bit environments. 41546 41547 The following built-in functions are available for the PowerPC family 41548of processors, starting with ISA 2.06 or later ('-mcpu=power7' or 41549'-mpopcntd'): 41550 long __builtin_bpermd (long, long); 41551 int __builtin_divwe (int, int); 41552 int __builtin_divweo (int, int); 41553 unsigned int __builtin_divweu (unsigned int, unsigned int); 41554 unsigned int __builtin_divweuo (unsigned int, unsigned int); 41555 long __builtin_divde (long, long); 41556 long __builtin_divdeo (long, long); 41557 unsigned long __builtin_divdeu (unsigned long, unsigned long); 41558 unsigned long __builtin_divdeuo (unsigned long, unsigned long); 41559 unsigned int cdtbcd (unsigned int); 41560 unsigned int cbcdtd (unsigned int); 41561 unsigned int addg6s (unsigned int, unsigned int); 41562 41563 The '__builtin_divde', '__builtin_divdeo', '__builitin_divdeu', 41564'__builtin_divdeou' functions require a 64-bit environment support ISA 415652.06 or later. 41566 41567 The following built-in functions are available for the PowerPC family 41568of processors when hardware decimal floating point ('-mhard-dfp') is 41569available: 41570 _Decimal64 __builtin_dxex (_Decimal64); 41571 _Decimal128 __builtin_dxexq (_Decimal128); 41572 _Decimal64 __builtin_ddedpd (int, _Decimal64); 41573 _Decimal128 __builtin_ddedpdq (int, _Decimal128); 41574 _Decimal64 __builtin_denbcd (int, _Decimal64); 41575 _Decimal128 __builtin_denbcdq (int, _Decimal128); 41576 _Decimal64 __builtin_diex (_Decimal64, _Decimal64); 41577 _Decimal128 _builtin_diexq (_Decimal128, _Decimal128); 41578 _Decimal64 __builtin_dscli (_Decimal64, int); 41579 _Decimal128 __builitn_dscliq (_Decimal128, int); 41580 _Decimal64 __builtin_dscri (_Decimal64, int); 41581 _Decimal128 __builitn_dscriq (_Decimal128, int); 41582 unsigned long long __builtin_unpack_dec128 (_Decimal128, int); 41583 _Decimal128 __builtin_pack_dec128 (unsigned long long, unsigned long long); 41584 41585 The following built-in functions are available for the PowerPC family 41586of processors when the Vector Scalar (vsx) instruction set is available: 41587 unsigned long long __builtin_unpack_vector_int128 (vector __int128_t, int); 41588 vector __int128_t __builtin_pack_vector_int128 (unsigned long long, 41589 unsigned long long); 41590 41591 41592File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: PowerPC Hardware Transactional Memory Built-in Functions, Prev: PowerPC Built-in Functions, Up: Target Builtins 41593 415946.57.21 PowerPC AltiVec Built-in Functions 41595------------------------------------------ 41596 41597GCC provides an interface for the PowerPC family of processors to access 41598the AltiVec operations described in Motorola's AltiVec Programming 41599Interface Manual. The interface is made available by including 41600'<altivec.h>' and using '-maltivec' and '-mabi=altivec'. The interface 41601supports the following vector types. 41602 41603 vector unsigned char 41604 vector signed char 41605 vector bool char 41606 41607 vector unsigned short 41608 vector signed short 41609 vector bool short 41610 vector pixel 41611 41612 vector unsigned int 41613 vector signed int 41614 vector bool int 41615 vector float 41616 41617 If '-mvsx' is used the following additional vector types are 41618implemented. 41619 41620 vector unsigned long 41621 vector signed long 41622 vector double 41623 41624 The long types are only implemented for 64-bit code generation, and the 41625long type is only used in the floating point/integer conversion 41626instructions. 41627 41628 GCC's implementation of the high-level language interface available 41629from C and C++ code differs from Motorola's documentation in several 41630ways. 41631 41632 * A vector constant is a list of constant expressions within curly 41633 braces. 41634 41635 * A vector initializer requires no cast if the vector constant is of 41636 the same type as the variable it is initializing. 41637 41638 * If 'signed' or 'unsigned' is omitted, the signedness of the vector 41639 type is the default signedness of the base type. The default 41640 varies depending on the operating system, so a portable program 41641 should always specify the signedness. 41642 41643 * Compiling with '-maltivec' adds keywords '__vector', 'vector', 41644 '__pixel', 'pixel', '__bool' and 'bool'. When compiling ISO C, the 41645 context-sensitive substitution of the keywords 'vector', 'pixel' 41646 and 'bool' is disabled. To use them, you must include 41647 '<altivec.h>' instead. 41648 41649 * GCC allows using a 'typedef' name as the type specifier for a 41650 vector type. 41651 41652 * For C, overloaded functions are implemented with macros so the 41653 following does not work: 41654 41655 vec_add ((vector signed int){1, 2, 3, 4}, foo); 41656 41657 Since 'vec_add' is a macro, the vector constant in the example is 41658 treated as four separate arguments. Wrap the entire argument in 41659 parentheses for this to work. 41660 41661 _Note:_ Only the '<altivec.h>' interface is supported. Internally, GCC 41662uses built-in functions to achieve the functionality in the 41663aforementioned header file, but they are not supported and are subject 41664to change without notice. 41665 41666 The following interfaces are supported for the generic and specific 41667AltiVec operations and the AltiVec predicates. In cases where there is 41668a direct mapping between generic and specific operations, only the 41669generic names are shown here, although the specific operations can also 41670be used. 41671 41672 Arguments that are documented as 'const int' require literal integral 41673values within the range required for that operation. 41674 41675 vector signed char vec_abs (vector signed char); 41676 vector signed short vec_abs (vector signed short); 41677 vector signed int vec_abs (vector signed int); 41678 vector float vec_abs (vector float); 41679 41680 vector signed char vec_abss (vector signed char); 41681 vector signed short vec_abss (vector signed short); 41682 vector signed int vec_abss (vector signed int); 41683 41684 vector signed char vec_add (vector bool char, vector signed char); 41685 vector signed char vec_add (vector signed char, vector bool char); 41686 vector signed char vec_add (vector signed char, vector signed char); 41687 vector unsigned char vec_add (vector bool char, vector unsigned char); 41688 vector unsigned char vec_add (vector unsigned char, vector bool char); 41689 vector unsigned char vec_add (vector unsigned char, 41690 vector unsigned char); 41691 vector signed short vec_add (vector bool short, vector signed short); 41692 vector signed short vec_add (vector signed short, vector bool short); 41693 vector signed short vec_add (vector signed short, vector signed short); 41694 vector unsigned short vec_add (vector bool short, 41695 vector unsigned short); 41696 vector unsigned short vec_add (vector unsigned short, 41697 vector bool short); 41698 vector unsigned short vec_add (vector unsigned short, 41699 vector unsigned short); 41700 vector signed int vec_add (vector bool int, vector signed int); 41701 vector signed int vec_add (vector signed int, vector bool int); 41702 vector signed int vec_add (vector signed int, vector signed int); 41703 vector unsigned int vec_add (vector bool int, vector unsigned int); 41704 vector unsigned int vec_add (vector unsigned int, vector bool int); 41705 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 41706 vector float vec_add (vector float, vector float); 41707 41708 vector float vec_vaddfp (vector float, vector float); 41709 41710 vector signed int vec_vadduwm (vector bool int, vector signed int); 41711 vector signed int vec_vadduwm (vector signed int, vector bool int); 41712 vector signed int vec_vadduwm (vector signed int, vector signed int); 41713 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 41714 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 41715 vector unsigned int vec_vadduwm (vector unsigned int, 41716 vector unsigned int); 41717 41718 vector signed short vec_vadduhm (vector bool short, 41719 vector signed short); 41720 vector signed short vec_vadduhm (vector signed short, 41721 vector bool short); 41722 vector signed short vec_vadduhm (vector signed short, 41723 vector signed short); 41724 vector unsigned short vec_vadduhm (vector bool short, 41725 vector unsigned short); 41726 vector unsigned short vec_vadduhm (vector unsigned short, 41727 vector bool short); 41728 vector unsigned short vec_vadduhm (vector unsigned short, 41729 vector unsigned short); 41730 41731 vector signed char vec_vaddubm (vector bool char, vector signed char); 41732 vector signed char vec_vaddubm (vector signed char, vector bool char); 41733 vector signed char vec_vaddubm (vector signed char, vector signed char); 41734 vector unsigned char vec_vaddubm (vector bool char, 41735 vector unsigned char); 41736 vector unsigned char vec_vaddubm (vector unsigned char, 41737 vector bool char); 41738 vector unsigned char vec_vaddubm (vector unsigned char, 41739 vector unsigned char); 41740 41741 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 41742 41743 vector unsigned char vec_adds (vector bool char, vector unsigned char); 41744 vector unsigned char vec_adds (vector unsigned char, vector bool char); 41745 vector unsigned char vec_adds (vector unsigned char, 41746 vector unsigned char); 41747 vector signed char vec_adds (vector bool char, vector signed char); 41748 vector signed char vec_adds (vector signed char, vector bool char); 41749 vector signed char vec_adds (vector signed char, vector signed char); 41750 vector unsigned short vec_adds (vector bool short, 41751 vector unsigned short); 41752 vector unsigned short vec_adds (vector unsigned short, 41753 vector bool short); 41754 vector unsigned short vec_adds (vector unsigned short, 41755 vector unsigned short); 41756 vector signed short vec_adds (vector bool short, vector signed short); 41757 vector signed short vec_adds (vector signed short, vector bool short); 41758 vector signed short vec_adds (vector signed short, vector signed short); 41759 vector unsigned int vec_adds (vector bool int, vector unsigned int); 41760 vector unsigned int vec_adds (vector unsigned int, vector bool int); 41761 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 41762 vector signed int vec_adds (vector bool int, vector signed int); 41763 vector signed int vec_adds (vector signed int, vector bool int); 41764 vector signed int vec_adds (vector signed int, vector signed int); 41765 41766 vector signed int vec_vaddsws (vector bool int, vector signed int); 41767 vector signed int vec_vaddsws (vector signed int, vector bool int); 41768 vector signed int vec_vaddsws (vector signed int, vector signed int); 41769 41770 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 41771 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 41772 vector unsigned int vec_vadduws (vector unsigned int, 41773 vector unsigned int); 41774 41775 vector signed short vec_vaddshs (vector bool short, 41776 vector signed short); 41777 vector signed short vec_vaddshs (vector signed short, 41778 vector bool short); 41779 vector signed short vec_vaddshs (vector signed short, 41780 vector signed short); 41781 41782 vector unsigned short vec_vadduhs (vector bool short, 41783 vector unsigned short); 41784 vector unsigned short vec_vadduhs (vector unsigned short, 41785 vector bool short); 41786 vector unsigned short vec_vadduhs (vector unsigned short, 41787 vector unsigned short); 41788 41789 vector signed char vec_vaddsbs (vector bool char, vector signed char); 41790 vector signed char vec_vaddsbs (vector signed char, vector bool char); 41791 vector signed char vec_vaddsbs (vector signed char, vector signed char); 41792 41793 vector unsigned char vec_vaddubs (vector bool char, 41794 vector unsigned char); 41795 vector unsigned char vec_vaddubs (vector unsigned char, 41796 vector bool char); 41797 vector unsigned char vec_vaddubs (vector unsigned char, 41798 vector unsigned char); 41799 41800 vector float vec_and (vector float, vector float); 41801 vector float vec_and (vector float, vector bool int); 41802 vector float vec_and (vector bool int, vector float); 41803 vector bool int vec_and (vector bool int, vector bool int); 41804 vector signed int vec_and (vector bool int, vector signed int); 41805 vector signed int vec_and (vector signed int, vector bool int); 41806 vector signed int vec_and (vector signed int, vector signed int); 41807 vector unsigned int vec_and (vector bool int, vector unsigned int); 41808 vector unsigned int vec_and (vector unsigned int, vector bool int); 41809 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 41810 vector bool short vec_and (vector bool short, vector bool short); 41811 vector signed short vec_and (vector bool short, vector signed short); 41812 vector signed short vec_and (vector signed short, vector bool short); 41813 vector signed short vec_and (vector signed short, vector signed short); 41814 vector unsigned short vec_and (vector bool short, 41815 vector unsigned short); 41816 vector unsigned short vec_and (vector unsigned short, 41817 vector bool short); 41818 vector unsigned short vec_and (vector unsigned short, 41819 vector unsigned short); 41820 vector signed char vec_and (vector bool char, vector signed char); 41821 vector bool char vec_and (vector bool char, vector bool char); 41822 vector signed char vec_and (vector signed char, vector bool char); 41823 vector signed char vec_and (vector signed char, vector signed char); 41824 vector unsigned char vec_and (vector bool char, vector unsigned char); 41825 vector unsigned char vec_and (vector unsigned char, vector bool char); 41826 vector unsigned char vec_and (vector unsigned char, 41827 vector unsigned char); 41828 41829 vector float vec_andc (vector float, vector float); 41830 vector float vec_andc (vector float, vector bool int); 41831 vector float vec_andc (vector bool int, vector float); 41832 vector bool int vec_andc (vector bool int, vector bool int); 41833 vector signed int vec_andc (vector bool int, vector signed int); 41834 vector signed int vec_andc (vector signed int, vector bool int); 41835 vector signed int vec_andc (vector signed int, vector signed int); 41836 vector unsigned int vec_andc (vector bool int, vector unsigned int); 41837 vector unsigned int vec_andc (vector unsigned int, vector bool int); 41838 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 41839 vector bool short vec_andc (vector bool short, vector bool short); 41840 vector signed short vec_andc (vector bool short, vector signed short); 41841 vector signed short vec_andc (vector signed short, vector bool short); 41842 vector signed short vec_andc (vector signed short, vector signed short); 41843 vector unsigned short vec_andc (vector bool short, 41844 vector unsigned short); 41845 vector unsigned short vec_andc (vector unsigned short, 41846 vector bool short); 41847 vector unsigned short vec_andc (vector unsigned short, 41848 vector unsigned short); 41849 vector signed char vec_andc (vector bool char, vector signed char); 41850 vector bool char vec_andc (vector bool char, vector bool char); 41851 vector signed char vec_andc (vector signed char, vector bool char); 41852 vector signed char vec_andc (vector signed char, vector signed char); 41853 vector unsigned char vec_andc (vector bool char, vector unsigned char); 41854 vector unsigned char vec_andc (vector unsigned char, vector bool char); 41855 vector unsigned char vec_andc (vector unsigned char, 41856 vector unsigned char); 41857 41858 vector unsigned char vec_avg (vector unsigned char, 41859 vector unsigned char); 41860 vector signed char vec_avg (vector signed char, vector signed char); 41861 vector unsigned short vec_avg (vector unsigned short, 41862 vector unsigned short); 41863 vector signed short vec_avg (vector signed short, vector signed short); 41864 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 41865 vector signed int vec_avg (vector signed int, vector signed int); 41866 41867 vector signed int vec_vavgsw (vector signed int, vector signed int); 41868 41869 vector unsigned int vec_vavguw (vector unsigned int, 41870 vector unsigned int); 41871 41872 vector signed short vec_vavgsh (vector signed short, 41873 vector signed short); 41874 41875 vector unsigned short vec_vavguh (vector unsigned short, 41876 vector unsigned short); 41877 41878 vector signed char vec_vavgsb (vector signed char, vector signed char); 41879 41880 vector unsigned char vec_vavgub (vector unsigned char, 41881 vector unsigned char); 41882 41883 vector float vec_copysign (vector float); 41884 41885 vector float vec_ceil (vector float); 41886 41887 vector signed int vec_cmpb (vector float, vector float); 41888 41889 vector bool char vec_cmpeq (vector signed char, vector signed char); 41890 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 41891 vector bool short vec_cmpeq (vector signed short, vector signed short); 41892 vector bool short vec_cmpeq (vector unsigned short, 41893 vector unsigned short); 41894 vector bool int vec_cmpeq (vector signed int, vector signed int); 41895 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 41896 vector bool int vec_cmpeq (vector float, vector float); 41897 41898 vector bool int vec_vcmpeqfp (vector float, vector float); 41899 41900 vector bool int vec_vcmpequw (vector signed int, vector signed int); 41901 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 41902 41903 vector bool short vec_vcmpequh (vector signed short, 41904 vector signed short); 41905 vector bool short vec_vcmpequh (vector unsigned short, 41906 vector unsigned short); 41907 41908 vector bool char vec_vcmpequb (vector signed char, vector signed char); 41909 vector bool char vec_vcmpequb (vector unsigned char, 41910 vector unsigned char); 41911 41912 vector bool int vec_cmpge (vector float, vector float); 41913 41914 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 41915 vector bool char vec_cmpgt (vector signed char, vector signed char); 41916 vector bool short vec_cmpgt (vector unsigned short, 41917 vector unsigned short); 41918 vector bool short vec_cmpgt (vector signed short, vector signed short); 41919 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 41920 vector bool int vec_cmpgt (vector signed int, vector signed int); 41921 vector bool int vec_cmpgt (vector float, vector float); 41922 41923 vector bool int vec_vcmpgtfp (vector float, vector float); 41924 41925 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 41926 41927 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 41928 41929 vector bool short vec_vcmpgtsh (vector signed short, 41930 vector signed short); 41931 41932 vector bool short vec_vcmpgtuh (vector unsigned short, 41933 vector unsigned short); 41934 41935 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 41936 41937 vector bool char vec_vcmpgtub (vector unsigned char, 41938 vector unsigned char); 41939 41940 vector bool int vec_cmple (vector float, vector float); 41941 41942 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 41943 vector bool char vec_cmplt (vector signed char, vector signed char); 41944 vector bool short vec_cmplt (vector unsigned short, 41945 vector unsigned short); 41946 vector bool short vec_cmplt (vector signed short, vector signed short); 41947 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 41948 vector bool int vec_cmplt (vector signed int, vector signed int); 41949 vector bool int vec_cmplt (vector float, vector float); 41950 41951 vector float vec_ctf (vector unsigned int, const int); 41952 vector float vec_ctf (vector signed int, const int); 41953 41954 vector float vec_vcfsx (vector signed int, const int); 41955 41956 vector float vec_vcfux (vector unsigned int, const int); 41957 41958 vector signed int vec_cts (vector float, const int); 41959 41960 vector unsigned int vec_ctu (vector float, const int); 41961 41962 void vec_dss (const int); 41963 41964 void vec_dssall (void); 41965 41966 void vec_dst (const vector unsigned char *, int, const int); 41967 void vec_dst (const vector signed char *, int, const int); 41968 void vec_dst (const vector bool char *, int, const int); 41969 void vec_dst (const vector unsigned short *, int, const int); 41970 void vec_dst (const vector signed short *, int, const int); 41971 void vec_dst (const vector bool short *, int, const int); 41972 void vec_dst (const vector pixel *, int, const int); 41973 void vec_dst (const vector unsigned int *, int, const int); 41974 void vec_dst (const vector signed int *, int, const int); 41975 void vec_dst (const vector bool int *, int, const int); 41976 void vec_dst (const vector float *, int, const int); 41977 void vec_dst (const unsigned char *, int, const int); 41978 void vec_dst (const signed char *, int, const int); 41979 void vec_dst (const unsigned short *, int, const int); 41980 void vec_dst (const short *, int, const int); 41981 void vec_dst (const unsigned int *, int, const int); 41982 void vec_dst (const int *, int, const int); 41983 void vec_dst (const unsigned long *, int, const int); 41984 void vec_dst (const long *, int, const int); 41985 void vec_dst (const float *, int, const int); 41986 41987 void vec_dstst (const vector unsigned char *, int, const int); 41988 void vec_dstst (const vector signed char *, int, const int); 41989 void vec_dstst (const vector bool char *, int, const int); 41990 void vec_dstst (const vector unsigned short *, int, const int); 41991 void vec_dstst (const vector signed short *, int, const int); 41992 void vec_dstst (const vector bool short *, int, const int); 41993 void vec_dstst (const vector pixel *, int, const int); 41994 void vec_dstst (const vector unsigned int *, int, const int); 41995 void vec_dstst (const vector signed int *, int, const int); 41996 void vec_dstst (const vector bool int *, int, const int); 41997 void vec_dstst (const vector float *, int, const int); 41998 void vec_dstst (const unsigned char *, int, const int); 41999 void vec_dstst (const signed char *, int, const int); 42000 void vec_dstst (const unsigned short *, int, const int); 42001 void vec_dstst (const short *, int, const int); 42002 void vec_dstst (const unsigned int *, int, const int); 42003 void vec_dstst (const int *, int, const int); 42004 void vec_dstst (const unsigned long *, int, const int); 42005 void vec_dstst (const long *, int, const int); 42006 void vec_dstst (const float *, int, const int); 42007 42008 void vec_dststt (const vector unsigned char *, int, const int); 42009 void vec_dststt (const vector signed char *, int, const int); 42010 void vec_dststt (const vector bool char *, int, const int); 42011 void vec_dststt (const vector unsigned short *, int, const int); 42012 void vec_dststt (const vector signed short *, int, const int); 42013 void vec_dststt (const vector bool short *, int, const int); 42014 void vec_dststt (const vector pixel *, int, const int); 42015 void vec_dststt (const vector unsigned int *, int, const int); 42016 void vec_dststt (const vector signed int *, int, const int); 42017 void vec_dststt (const vector bool int *, int, const int); 42018 void vec_dststt (const vector float *, int, const int); 42019 void vec_dststt (const unsigned char *, int, const int); 42020 void vec_dststt (const signed char *, int, const int); 42021 void vec_dststt (const unsigned short *, int, const int); 42022 void vec_dststt (const short *, int, const int); 42023 void vec_dststt (const unsigned int *, int, const int); 42024 void vec_dststt (const int *, int, const int); 42025 void vec_dststt (const unsigned long *, int, const int); 42026 void vec_dststt (const long *, int, const int); 42027 void vec_dststt (const float *, int, const int); 42028 42029 void vec_dstt (const vector unsigned char *, int, const int); 42030 void vec_dstt (const vector signed char *, int, const int); 42031 void vec_dstt (const vector bool char *, int, const int); 42032 void vec_dstt (const vector unsigned short *, int, const int); 42033 void vec_dstt (const vector signed short *, int, const int); 42034 void vec_dstt (const vector bool short *, int, const int); 42035 void vec_dstt (const vector pixel *, int, const int); 42036 void vec_dstt (const vector unsigned int *, int, const int); 42037 void vec_dstt (const vector signed int *, int, const int); 42038 void vec_dstt (const vector bool int *, int, const int); 42039 void vec_dstt (const vector float *, int, const int); 42040 void vec_dstt (const unsigned char *, int, const int); 42041 void vec_dstt (const signed char *, int, const int); 42042 void vec_dstt (const unsigned short *, int, const int); 42043 void vec_dstt (const short *, int, const int); 42044 void vec_dstt (const unsigned int *, int, const int); 42045 void vec_dstt (const int *, int, const int); 42046 void vec_dstt (const unsigned long *, int, const int); 42047 void vec_dstt (const long *, int, const int); 42048 void vec_dstt (const float *, int, const int); 42049 42050 vector float vec_expte (vector float); 42051 42052 vector float vec_floor (vector float); 42053 42054 vector float vec_ld (int, const vector float *); 42055 vector float vec_ld (int, const float *); 42056 vector bool int vec_ld (int, const vector bool int *); 42057 vector signed int vec_ld (int, const vector signed int *); 42058 vector signed int vec_ld (int, const int *); 42059 vector signed int vec_ld (int, const long *); 42060 vector unsigned int vec_ld (int, const vector unsigned int *); 42061 vector unsigned int vec_ld (int, const unsigned int *); 42062 vector unsigned int vec_ld (int, const unsigned long *); 42063 vector bool short vec_ld (int, const vector bool short *); 42064 vector pixel vec_ld (int, const vector pixel *); 42065 vector signed short vec_ld (int, const vector signed short *); 42066 vector signed short vec_ld (int, const short *); 42067 vector unsigned short vec_ld (int, const vector unsigned short *); 42068 vector unsigned short vec_ld (int, const unsigned short *); 42069 vector bool char vec_ld (int, const vector bool char *); 42070 vector signed char vec_ld (int, const vector signed char *); 42071 vector signed char vec_ld (int, const signed char *); 42072 vector unsigned char vec_ld (int, const vector unsigned char *); 42073 vector unsigned char vec_ld (int, const unsigned char *); 42074 42075 vector signed char vec_lde (int, const signed char *); 42076 vector unsigned char vec_lde (int, const unsigned char *); 42077 vector signed short vec_lde (int, const short *); 42078 vector unsigned short vec_lde (int, const unsigned short *); 42079 vector float vec_lde (int, const float *); 42080 vector signed int vec_lde (int, const int *); 42081 vector unsigned int vec_lde (int, const unsigned int *); 42082 vector signed int vec_lde (int, const long *); 42083 vector unsigned int vec_lde (int, const unsigned long *); 42084 42085 vector float vec_lvewx (int, float *); 42086 vector signed int vec_lvewx (int, int *); 42087 vector unsigned int vec_lvewx (int, unsigned int *); 42088 vector signed int vec_lvewx (int, long *); 42089 vector unsigned int vec_lvewx (int, unsigned long *); 42090 42091 vector signed short vec_lvehx (int, short *); 42092 vector unsigned short vec_lvehx (int, unsigned short *); 42093 42094 vector signed char vec_lvebx (int, char *); 42095 vector unsigned char vec_lvebx (int, unsigned char *); 42096 42097 vector float vec_ldl (int, const vector float *); 42098 vector float vec_ldl (int, const float *); 42099 vector bool int vec_ldl (int, const vector bool int *); 42100 vector signed int vec_ldl (int, const vector signed int *); 42101 vector signed int vec_ldl (int, const int *); 42102 vector signed int vec_ldl (int, const long *); 42103 vector unsigned int vec_ldl (int, const vector unsigned int *); 42104 vector unsigned int vec_ldl (int, const unsigned int *); 42105 vector unsigned int vec_ldl (int, const unsigned long *); 42106 vector bool short vec_ldl (int, const vector bool short *); 42107 vector pixel vec_ldl (int, const vector pixel *); 42108 vector signed short vec_ldl (int, const vector signed short *); 42109 vector signed short vec_ldl (int, const short *); 42110 vector unsigned short vec_ldl (int, const vector unsigned short *); 42111 vector unsigned short vec_ldl (int, const unsigned short *); 42112 vector bool char vec_ldl (int, const vector bool char *); 42113 vector signed char vec_ldl (int, const vector signed char *); 42114 vector signed char vec_ldl (int, const signed char *); 42115 vector unsigned char vec_ldl (int, const vector unsigned char *); 42116 vector unsigned char vec_ldl (int, const unsigned char *); 42117 42118 vector float vec_loge (vector float); 42119 42120 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 42121 vector unsigned char vec_lvsl (int, const volatile signed char *); 42122 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 42123 vector unsigned char vec_lvsl (int, const volatile short *); 42124 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 42125 vector unsigned char vec_lvsl (int, const volatile int *); 42126 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 42127 vector unsigned char vec_lvsl (int, const volatile long *); 42128 vector unsigned char vec_lvsl (int, const volatile float *); 42129 42130 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 42131 vector unsigned char vec_lvsr (int, const volatile signed char *); 42132 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 42133 vector unsigned char vec_lvsr (int, const volatile short *); 42134 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 42135 vector unsigned char vec_lvsr (int, const volatile int *); 42136 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 42137 vector unsigned char vec_lvsr (int, const volatile long *); 42138 vector unsigned char vec_lvsr (int, const volatile float *); 42139 42140 vector float vec_madd (vector float, vector float, vector float); 42141 42142 vector signed short vec_madds (vector signed short, 42143 vector signed short, 42144 vector signed short); 42145 42146 vector unsigned char vec_max (vector bool char, vector unsigned char); 42147 vector unsigned char vec_max (vector unsigned char, vector bool char); 42148 vector unsigned char vec_max (vector unsigned char, 42149 vector unsigned char); 42150 vector signed char vec_max (vector bool char, vector signed char); 42151 vector signed char vec_max (vector signed char, vector bool char); 42152 vector signed char vec_max (vector signed char, vector signed char); 42153 vector unsigned short vec_max (vector bool short, 42154 vector unsigned short); 42155 vector unsigned short vec_max (vector unsigned short, 42156 vector bool short); 42157 vector unsigned short vec_max (vector unsigned short, 42158 vector unsigned short); 42159 vector signed short vec_max (vector bool short, vector signed short); 42160 vector signed short vec_max (vector signed short, vector bool short); 42161 vector signed short vec_max (vector signed short, vector signed short); 42162 vector unsigned int vec_max (vector bool int, vector unsigned int); 42163 vector unsigned int vec_max (vector unsigned int, vector bool int); 42164 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 42165 vector signed int vec_max (vector bool int, vector signed int); 42166 vector signed int vec_max (vector signed int, vector bool int); 42167 vector signed int vec_max (vector signed int, vector signed int); 42168 vector float vec_max (vector float, vector float); 42169 42170 vector float vec_vmaxfp (vector float, vector float); 42171 42172 vector signed int vec_vmaxsw (vector bool int, vector signed int); 42173 vector signed int vec_vmaxsw (vector signed int, vector bool int); 42174 vector signed int vec_vmaxsw (vector signed int, vector signed int); 42175 42176 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 42177 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 42178 vector unsigned int vec_vmaxuw (vector unsigned int, 42179 vector unsigned int); 42180 42181 vector signed short vec_vmaxsh (vector bool short, vector signed short); 42182 vector signed short vec_vmaxsh (vector signed short, vector bool short); 42183 vector signed short vec_vmaxsh (vector signed short, 42184 vector signed short); 42185 42186 vector unsigned short vec_vmaxuh (vector bool short, 42187 vector unsigned short); 42188 vector unsigned short vec_vmaxuh (vector unsigned short, 42189 vector bool short); 42190 vector unsigned short vec_vmaxuh (vector unsigned short, 42191 vector unsigned short); 42192 42193 vector signed char vec_vmaxsb (vector bool char, vector signed char); 42194 vector signed char vec_vmaxsb (vector signed char, vector bool char); 42195 vector signed char vec_vmaxsb (vector signed char, vector signed char); 42196 42197 vector unsigned char vec_vmaxub (vector bool char, 42198 vector unsigned char); 42199 vector unsigned char vec_vmaxub (vector unsigned char, 42200 vector bool char); 42201 vector unsigned char vec_vmaxub (vector unsigned char, 42202 vector unsigned char); 42203 42204 vector bool char vec_mergeh (vector bool char, vector bool char); 42205 vector signed char vec_mergeh (vector signed char, vector signed char); 42206 vector unsigned char vec_mergeh (vector unsigned char, 42207 vector unsigned char); 42208 vector bool short vec_mergeh (vector bool short, vector bool short); 42209 vector pixel vec_mergeh (vector pixel, vector pixel); 42210 vector signed short vec_mergeh (vector signed short, 42211 vector signed short); 42212 vector unsigned short vec_mergeh (vector unsigned short, 42213 vector unsigned short); 42214 vector float vec_mergeh (vector float, vector float); 42215 vector bool int vec_mergeh (vector bool int, vector bool int); 42216 vector signed int vec_mergeh (vector signed int, vector signed int); 42217 vector unsigned int vec_mergeh (vector unsigned int, 42218 vector unsigned int); 42219 42220 vector float vec_vmrghw (vector float, vector float); 42221 vector bool int vec_vmrghw (vector bool int, vector bool int); 42222 vector signed int vec_vmrghw (vector signed int, vector signed int); 42223 vector unsigned int vec_vmrghw (vector unsigned int, 42224 vector unsigned int); 42225 42226 vector bool short vec_vmrghh (vector bool short, vector bool short); 42227 vector signed short vec_vmrghh (vector signed short, 42228 vector signed short); 42229 vector unsigned short vec_vmrghh (vector unsigned short, 42230 vector unsigned short); 42231 vector pixel vec_vmrghh (vector pixel, vector pixel); 42232 42233 vector bool char vec_vmrghb (vector bool char, vector bool char); 42234 vector signed char vec_vmrghb (vector signed char, vector signed char); 42235 vector unsigned char vec_vmrghb (vector unsigned char, 42236 vector unsigned char); 42237 42238 vector bool char vec_mergel (vector bool char, vector bool char); 42239 vector signed char vec_mergel (vector signed char, vector signed char); 42240 vector unsigned char vec_mergel (vector unsigned char, 42241 vector unsigned char); 42242 vector bool short vec_mergel (vector bool short, vector bool short); 42243 vector pixel vec_mergel (vector pixel, vector pixel); 42244 vector signed short vec_mergel (vector signed short, 42245 vector signed short); 42246 vector unsigned short vec_mergel (vector unsigned short, 42247 vector unsigned short); 42248 vector float vec_mergel (vector float, vector float); 42249 vector bool int vec_mergel (vector bool int, vector bool int); 42250 vector signed int vec_mergel (vector signed int, vector signed int); 42251 vector unsigned int vec_mergel (vector unsigned int, 42252 vector unsigned int); 42253 42254 vector float vec_vmrglw (vector float, vector float); 42255 vector signed int vec_vmrglw (vector signed int, vector signed int); 42256 vector unsigned int vec_vmrglw (vector unsigned int, 42257 vector unsigned int); 42258 vector bool int vec_vmrglw (vector bool int, vector bool int); 42259 42260 vector bool short vec_vmrglh (vector bool short, vector bool short); 42261 vector signed short vec_vmrglh (vector signed short, 42262 vector signed short); 42263 vector unsigned short vec_vmrglh (vector unsigned short, 42264 vector unsigned short); 42265 vector pixel vec_vmrglh (vector pixel, vector pixel); 42266 42267 vector bool char vec_vmrglb (vector bool char, vector bool char); 42268 vector signed char vec_vmrglb (vector signed char, vector signed char); 42269 vector unsigned char vec_vmrglb (vector unsigned char, 42270 vector unsigned char); 42271 42272 vector unsigned short vec_mfvscr (void); 42273 42274 vector unsigned char vec_min (vector bool char, vector unsigned char); 42275 vector unsigned char vec_min (vector unsigned char, vector bool char); 42276 vector unsigned char vec_min (vector unsigned char, 42277 vector unsigned char); 42278 vector signed char vec_min (vector bool char, vector signed char); 42279 vector signed char vec_min (vector signed char, vector bool char); 42280 vector signed char vec_min (vector signed char, vector signed char); 42281 vector unsigned short vec_min (vector bool short, 42282 vector unsigned short); 42283 vector unsigned short vec_min (vector unsigned short, 42284 vector bool short); 42285 vector unsigned short vec_min (vector unsigned short, 42286 vector unsigned short); 42287 vector signed short vec_min (vector bool short, vector signed short); 42288 vector signed short vec_min (vector signed short, vector bool short); 42289 vector signed short vec_min (vector signed short, vector signed short); 42290 vector unsigned int vec_min (vector bool int, vector unsigned int); 42291 vector unsigned int vec_min (vector unsigned int, vector bool int); 42292 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 42293 vector signed int vec_min (vector bool int, vector signed int); 42294 vector signed int vec_min (vector signed int, vector bool int); 42295 vector signed int vec_min (vector signed int, vector signed int); 42296 vector float vec_min (vector float, vector float); 42297 42298 vector float vec_vminfp (vector float, vector float); 42299 42300 vector signed int vec_vminsw (vector bool int, vector signed int); 42301 vector signed int vec_vminsw (vector signed int, vector bool int); 42302 vector signed int vec_vminsw (vector signed int, vector signed int); 42303 42304 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 42305 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 42306 vector unsigned int vec_vminuw (vector unsigned int, 42307 vector unsigned int); 42308 42309 vector signed short vec_vminsh (vector bool short, vector signed short); 42310 vector signed short vec_vminsh (vector signed short, vector bool short); 42311 vector signed short vec_vminsh (vector signed short, 42312 vector signed short); 42313 42314 vector unsigned short vec_vminuh (vector bool short, 42315 vector unsigned short); 42316 vector unsigned short vec_vminuh (vector unsigned short, 42317 vector bool short); 42318 vector unsigned short vec_vminuh (vector unsigned short, 42319 vector unsigned short); 42320 42321 vector signed char vec_vminsb (vector bool char, vector signed char); 42322 vector signed char vec_vminsb (vector signed char, vector bool char); 42323 vector signed char vec_vminsb (vector signed char, vector signed char); 42324 42325 vector unsigned char vec_vminub (vector bool char, 42326 vector unsigned char); 42327 vector unsigned char vec_vminub (vector unsigned char, 42328 vector bool char); 42329 vector unsigned char vec_vminub (vector unsigned char, 42330 vector unsigned char); 42331 42332 vector signed short vec_mladd (vector signed short, 42333 vector signed short, 42334 vector signed short); 42335 vector signed short vec_mladd (vector signed short, 42336 vector unsigned short, 42337 vector unsigned short); 42338 vector signed short vec_mladd (vector unsigned short, 42339 vector signed short, 42340 vector signed short); 42341 vector unsigned short vec_mladd (vector unsigned short, 42342 vector unsigned short, 42343 vector unsigned short); 42344 42345 vector signed short vec_mradds (vector signed short, 42346 vector signed short, 42347 vector signed short); 42348 42349 vector unsigned int vec_msum (vector unsigned char, 42350 vector unsigned char, 42351 vector unsigned int); 42352 vector signed int vec_msum (vector signed char, 42353 vector unsigned char, 42354 vector signed int); 42355 vector unsigned int vec_msum (vector unsigned short, 42356 vector unsigned short, 42357 vector unsigned int); 42358 vector signed int vec_msum (vector signed short, 42359 vector signed short, 42360 vector signed int); 42361 42362 vector signed int vec_vmsumshm (vector signed short, 42363 vector signed short, 42364 vector signed int); 42365 42366 vector unsigned int vec_vmsumuhm (vector unsigned short, 42367 vector unsigned short, 42368 vector unsigned int); 42369 42370 vector signed int vec_vmsummbm (vector signed char, 42371 vector unsigned char, 42372 vector signed int); 42373 42374 vector unsigned int vec_vmsumubm (vector unsigned char, 42375 vector unsigned char, 42376 vector unsigned int); 42377 42378 vector unsigned int vec_msums (vector unsigned short, 42379 vector unsigned short, 42380 vector unsigned int); 42381 vector signed int vec_msums (vector signed short, 42382 vector signed short, 42383 vector signed int); 42384 42385 vector signed int vec_vmsumshs (vector signed short, 42386 vector signed short, 42387 vector signed int); 42388 42389 vector unsigned int vec_vmsumuhs (vector unsigned short, 42390 vector unsigned short, 42391 vector unsigned int); 42392 42393 void vec_mtvscr (vector signed int); 42394 void vec_mtvscr (vector unsigned int); 42395 void vec_mtvscr (vector bool int); 42396 void vec_mtvscr (vector signed short); 42397 void vec_mtvscr (vector unsigned short); 42398 void vec_mtvscr (vector bool short); 42399 void vec_mtvscr (vector pixel); 42400 void vec_mtvscr (vector signed char); 42401 void vec_mtvscr (vector unsigned char); 42402 void vec_mtvscr (vector bool char); 42403 42404 vector unsigned short vec_mule (vector unsigned char, 42405 vector unsigned char); 42406 vector signed short vec_mule (vector signed char, 42407 vector signed char); 42408 vector unsigned int vec_mule (vector unsigned short, 42409 vector unsigned short); 42410 vector signed int vec_mule (vector signed short, vector signed short); 42411 42412 vector signed int vec_vmulesh (vector signed short, 42413 vector signed short); 42414 42415 vector unsigned int vec_vmuleuh (vector unsigned short, 42416 vector unsigned short); 42417 42418 vector signed short vec_vmulesb (vector signed char, 42419 vector signed char); 42420 42421 vector unsigned short vec_vmuleub (vector unsigned char, 42422 vector unsigned char); 42423 42424 vector unsigned short vec_mulo (vector unsigned char, 42425 vector unsigned char); 42426 vector signed short vec_mulo (vector signed char, vector signed char); 42427 vector unsigned int vec_mulo (vector unsigned short, 42428 vector unsigned short); 42429 vector signed int vec_mulo (vector signed short, vector signed short); 42430 42431 vector signed int vec_vmulosh (vector signed short, 42432 vector signed short); 42433 42434 vector unsigned int vec_vmulouh (vector unsigned short, 42435 vector unsigned short); 42436 42437 vector signed short vec_vmulosb (vector signed char, 42438 vector signed char); 42439 42440 vector unsigned short vec_vmuloub (vector unsigned char, 42441 vector unsigned char); 42442 42443 vector float vec_nmsub (vector float, vector float, vector float); 42444 42445 vector float vec_nor (vector float, vector float); 42446 vector signed int vec_nor (vector signed int, vector signed int); 42447 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 42448 vector bool int vec_nor (vector bool int, vector bool int); 42449 vector signed short vec_nor (vector signed short, vector signed short); 42450 vector unsigned short vec_nor (vector unsigned short, 42451 vector unsigned short); 42452 vector bool short vec_nor (vector bool short, vector bool short); 42453 vector signed char vec_nor (vector signed char, vector signed char); 42454 vector unsigned char vec_nor (vector unsigned char, 42455 vector unsigned char); 42456 vector bool char vec_nor (vector bool char, vector bool char); 42457 42458 vector float vec_or (vector float, vector float); 42459 vector float vec_or (vector float, vector bool int); 42460 vector float vec_or (vector bool int, vector float); 42461 vector bool int vec_or (vector bool int, vector bool int); 42462 vector signed int vec_or (vector bool int, vector signed int); 42463 vector signed int vec_or (vector signed int, vector bool int); 42464 vector signed int vec_or (vector signed int, vector signed int); 42465 vector unsigned int vec_or (vector bool int, vector unsigned int); 42466 vector unsigned int vec_or (vector unsigned int, vector bool int); 42467 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 42468 vector bool short vec_or (vector bool short, vector bool short); 42469 vector signed short vec_or (vector bool short, vector signed short); 42470 vector signed short vec_or (vector signed short, vector bool short); 42471 vector signed short vec_or (vector signed short, vector signed short); 42472 vector unsigned short vec_or (vector bool short, vector unsigned short); 42473 vector unsigned short vec_or (vector unsigned short, vector bool short); 42474 vector unsigned short vec_or (vector unsigned short, 42475 vector unsigned short); 42476 vector signed char vec_or (vector bool char, vector signed char); 42477 vector bool char vec_or (vector bool char, vector bool char); 42478 vector signed char vec_or (vector signed char, vector bool char); 42479 vector signed char vec_or (vector signed char, vector signed char); 42480 vector unsigned char vec_or (vector bool char, vector unsigned char); 42481 vector unsigned char vec_or (vector unsigned char, vector bool char); 42482 vector unsigned char vec_or (vector unsigned char, 42483 vector unsigned char); 42484 42485 vector signed char vec_pack (vector signed short, vector signed short); 42486 vector unsigned char vec_pack (vector unsigned short, 42487 vector unsigned short); 42488 vector bool char vec_pack (vector bool short, vector bool short); 42489 vector signed short vec_pack (vector signed int, vector signed int); 42490 vector unsigned short vec_pack (vector unsigned int, 42491 vector unsigned int); 42492 vector bool short vec_pack (vector bool int, vector bool int); 42493 42494 vector bool short vec_vpkuwum (vector bool int, vector bool int); 42495 vector signed short vec_vpkuwum (vector signed int, vector signed int); 42496 vector unsigned short vec_vpkuwum (vector unsigned int, 42497 vector unsigned int); 42498 42499 vector bool char vec_vpkuhum (vector bool short, vector bool short); 42500 vector signed char vec_vpkuhum (vector signed short, 42501 vector signed short); 42502 vector unsigned char vec_vpkuhum (vector unsigned short, 42503 vector unsigned short); 42504 42505 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 42506 42507 vector unsigned char vec_packs (vector unsigned short, 42508 vector unsigned short); 42509 vector signed char vec_packs (vector signed short, vector signed short); 42510 vector unsigned short vec_packs (vector unsigned int, 42511 vector unsigned int); 42512 vector signed short vec_packs (vector signed int, vector signed int); 42513 42514 vector signed short vec_vpkswss (vector signed int, vector signed int); 42515 42516 vector unsigned short vec_vpkuwus (vector unsigned int, 42517 vector unsigned int); 42518 42519 vector signed char vec_vpkshss (vector signed short, 42520 vector signed short); 42521 42522 vector unsigned char vec_vpkuhus (vector unsigned short, 42523 vector unsigned short); 42524 42525 vector unsigned char vec_packsu (vector unsigned short, 42526 vector unsigned short); 42527 vector unsigned char vec_packsu (vector signed short, 42528 vector signed short); 42529 vector unsigned short vec_packsu (vector unsigned int, 42530 vector unsigned int); 42531 vector unsigned short vec_packsu (vector signed int, vector signed int); 42532 42533 vector unsigned short vec_vpkswus (vector signed int, 42534 vector signed int); 42535 42536 vector unsigned char vec_vpkshus (vector signed short, 42537 vector signed short); 42538 42539 vector float vec_perm (vector float, 42540 vector float, 42541 vector unsigned char); 42542 vector signed int vec_perm (vector signed int, 42543 vector signed int, 42544 vector unsigned char); 42545 vector unsigned int vec_perm (vector unsigned int, 42546 vector unsigned int, 42547 vector unsigned char); 42548 vector bool int vec_perm (vector bool int, 42549 vector bool int, 42550 vector unsigned char); 42551 vector signed short vec_perm (vector signed short, 42552 vector signed short, 42553 vector unsigned char); 42554 vector unsigned short vec_perm (vector unsigned short, 42555 vector unsigned short, 42556 vector unsigned char); 42557 vector bool short vec_perm (vector bool short, 42558 vector bool short, 42559 vector unsigned char); 42560 vector pixel vec_perm (vector pixel, 42561 vector pixel, 42562 vector unsigned char); 42563 vector signed char vec_perm (vector signed char, 42564 vector signed char, 42565 vector unsigned char); 42566 vector unsigned char vec_perm (vector unsigned char, 42567 vector unsigned char, 42568 vector unsigned char); 42569 vector bool char vec_perm (vector bool char, 42570 vector bool char, 42571 vector unsigned char); 42572 42573 vector float vec_re (vector float); 42574 42575 vector signed char vec_rl (vector signed char, 42576 vector unsigned char); 42577 vector unsigned char vec_rl (vector unsigned char, 42578 vector unsigned char); 42579 vector signed short vec_rl (vector signed short, vector unsigned short); 42580 vector unsigned short vec_rl (vector unsigned short, 42581 vector unsigned short); 42582 vector signed int vec_rl (vector signed int, vector unsigned int); 42583 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 42584 42585 vector signed int vec_vrlw (vector signed int, vector unsigned int); 42586 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 42587 42588 vector signed short vec_vrlh (vector signed short, 42589 vector unsigned short); 42590 vector unsigned short vec_vrlh (vector unsigned short, 42591 vector unsigned short); 42592 42593 vector signed char vec_vrlb (vector signed char, vector unsigned char); 42594 vector unsigned char vec_vrlb (vector unsigned char, 42595 vector unsigned char); 42596 42597 vector float vec_round (vector float); 42598 42599 vector float vec_recip (vector float, vector float); 42600 42601 vector float vec_rsqrt (vector float); 42602 42603 vector float vec_rsqrte (vector float); 42604 42605 vector float vec_sel (vector float, vector float, vector bool int); 42606 vector float vec_sel (vector float, vector float, vector unsigned int); 42607 vector signed int vec_sel (vector signed int, 42608 vector signed int, 42609 vector bool int); 42610 vector signed int vec_sel (vector signed int, 42611 vector signed int, 42612 vector unsigned int); 42613 vector unsigned int vec_sel (vector unsigned int, 42614 vector unsigned int, 42615 vector bool int); 42616 vector unsigned int vec_sel (vector unsigned int, 42617 vector unsigned int, 42618 vector unsigned int); 42619 vector bool int vec_sel (vector bool int, 42620 vector bool int, 42621 vector bool int); 42622 vector bool int vec_sel (vector bool int, 42623 vector bool int, 42624 vector unsigned int); 42625 vector signed short vec_sel (vector signed short, 42626 vector signed short, 42627 vector bool short); 42628 vector signed short vec_sel (vector signed short, 42629 vector signed short, 42630 vector unsigned short); 42631 vector unsigned short vec_sel (vector unsigned short, 42632 vector unsigned short, 42633 vector bool short); 42634 vector unsigned short vec_sel (vector unsigned short, 42635 vector unsigned short, 42636 vector unsigned short); 42637 vector bool short vec_sel (vector bool short, 42638 vector bool short, 42639 vector bool short); 42640 vector bool short vec_sel (vector bool short, 42641 vector bool short, 42642 vector unsigned short); 42643 vector signed char vec_sel (vector signed char, 42644 vector signed char, 42645 vector bool char); 42646 vector signed char vec_sel (vector signed char, 42647 vector signed char, 42648 vector unsigned char); 42649 vector unsigned char vec_sel (vector unsigned char, 42650 vector unsigned char, 42651 vector bool char); 42652 vector unsigned char vec_sel (vector unsigned char, 42653 vector unsigned char, 42654 vector unsigned char); 42655 vector bool char vec_sel (vector bool char, 42656 vector bool char, 42657 vector bool char); 42658 vector bool char vec_sel (vector bool char, 42659 vector bool char, 42660 vector unsigned char); 42661 42662 vector signed char vec_sl (vector signed char, 42663 vector unsigned char); 42664 vector unsigned char vec_sl (vector unsigned char, 42665 vector unsigned char); 42666 vector signed short vec_sl (vector signed short, vector unsigned short); 42667 vector unsigned short vec_sl (vector unsigned short, 42668 vector unsigned short); 42669 vector signed int vec_sl (vector signed int, vector unsigned int); 42670 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 42671 42672 vector signed int vec_vslw (vector signed int, vector unsigned int); 42673 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 42674 42675 vector signed short vec_vslh (vector signed short, 42676 vector unsigned short); 42677 vector unsigned short vec_vslh (vector unsigned short, 42678 vector unsigned short); 42679 42680 vector signed char vec_vslb (vector signed char, vector unsigned char); 42681 vector unsigned char vec_vslb (vector unsigned char, 42682 vector unsigned char); 42683 42684 vector float vec_sld (vector float, vector float, const int); 42685 vector signed int vec_sld (vector signed int, 42686 vector signed int, 42687 const int); 42688 vector unsigned int vec_sld (vector unsigned int, 42689 vector unsigned int, 42690 const int); 42691 vector bool int vec_sld (vector bool int, 42692 vector bool int, 42693 const int); 42694 vector signed short vec_sld (vector signed short, 42695 vector signed short, 42696 const int); 42697 vector unsigned short vec_sld (vector unsigned short, 42698 vector unsigned short, 42699 const int); 42700 vector bool short vec_sld (vector bool short, 42701 vector bool short, 42702 const int); 42703 vector pixel vec_sld (vector pixel, 42704 vector pixel, 42705 const int); 42706 vector signed char vec_sld (vector signed char, 42707 vector signed char, 42708 const int); 42709 vector unsigned char vec_sld (vector unsigned char, 42710 vector unsigned char, 42711 const int); 42712 vector bool char vec_sld (vector bool char, 42713 vector bool char, 42714 const int); 42715 42716 vector signed int vec_sll (vector signed int, 42717 vector unsigned int); 42718 vector signed int vec_sll (vector signed int, 42719 vector unsigned short); 42720 vector signed int vec_sll (vector signed int, 42721 vector unsigned char); 42722 vector unsigned int vec_sll (vector unsigned int, 42723 vector unsigned int); 42724 vector unsigned int vec_sll (vector unsigned int, 42725 vector unsigned short); 42726 vector unsigned int vec_sll (vector unsigned int, 42727 vector unsigned char); 42728 vector bool int vec_sll (vector bool int, 42729 vector unsigned int); 42730 vector bool int vec_sll (vector bool int, 42731 vector unsigned short); 42732 vector bool int vec_sll (vector bool int, 42733 vector unsigned char); 42734 vector signed short vec_sll (vector signed short, 42735 vector unsigned int); 42736 vector signed short vec_sll (vector signed short, 42737 vector unsigned short); 42738 vector signed short vec_sll (vector signed short, 42739 vector unsigned char); 42740 vector unsigned short vec_sll (vector unsigned short, 42741 vector unsigned int); 42742 vector unsigned short vec_sll (vector unsigned short, 42743 vector unsigned short); 42744 vector unsigned short vec_sll (vector unsigned short, 42745 vector unsigned char); 42746 vector bool short vec_sll (vector bool short, vector unsigned int); 42747 vector bool short vec_sll (vector bool short, vector unsigned short); 42748 vector bool short vec_sll (vector bool short, vector unsigned char); 42749 vector pixel vec_sll (vector pixel, vector unsigned int); 42750 vector pixel vec_sll (vector pixel, vector unsigned short); 42751 vector pixel vec_sll (vector pixel, vector unsigned char); 42752 vector signed char vec_sll (vector signed char, vector unsigned int); 42753 vector signed char vec_sll (vector signed char, vector unsigned short); 42754 vector signed char vec_sll (vector signed char, vector unsigned char); 42755 vector unsigned char vec_sll (vector unsigned char, 42756 vector unsigned int); 42757 vector unsigned char vec_sll (vector unsigned char, 42758 vector unsigned short); 42759 vector unsigned char vec_sll (vector unsigned char, 42760 vector unsigned char); 42761 vector bool char vec_sll (vector bool char, vector unsigned int); 42762 vector bool char vec_sll (vector bool char, vector unsigned short); 42763 vector bool char vec_sll (vector bool char, vector unsigned char); 42764 42765 vector float vec_slo (vector float, vector signed char); 42766 vector float vec_slo (vector float, vector unsigned char); 42767 vector signed int vec_slo (vector signed int, vector signed char); 42768 vector signed int vec_slo (vector signed int, vector unsigned char); 42769 vector unsigned int vec_slo (vector unsigned int, vector signed char); 42770 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 42771 vector signed short vec_slo (vector signed short, vector signed char); 42772 vector signed short vec_slo (vector signed short, vector unsigned char); 42773 vector unsigned short vec_slo (vector unsigned short, 42774 vector signed char); 42775 vector unsigned short vec_slo (vector unsigned short, 42776 vector unsigned char); 42777 vector pixel vec_slo (vector pixel, vector signed char); 42778 vector pixel vec_slo (vector pixel, vector unsigned char); 42779 vector signed char vec_slo (vector signed char, vector signed char); 42780 vector signed char vec_slo (vector signed char, vector unsigned char); 42781 vector unsigned char vec_slo (vector unsigned char, vector signed char); 42782 vector unsigned char vec_slo (vector unsigned char, 42783 vector unsigned char); 42784 42785 vector signed char vec_splat (vector signed char, const int); 42786 vector unsigned char vec_splat (vector unsigned char, const int); 42787 vector bool char vec_splat (vector bool char, const int); 42788 vector signed short vec_splat (vector signed short, const int); 42789 vector unsigned short vec_splat (vector unsigned short, const int); 42790 vector bool short vec_splat (vector bool short, const int); 42791 vector pixel vec_splat (vector pixel, const int); 42792 vector float vec_splat (vector float, const int); 42793 vector signed int vec_splat (vector signed int, const int); 42794 vector unsigned int vec_splat (vector unsigned int, const int); 42795 vector bool int vec_splat (vector bool int, const int); 42796 42797 vector float vec_vspltw (vector float, const int); 42798 vector signed int vec_vspltw (vector signed int, const int); 42799 vector unsigned int vec_vspltw (vector unsigned int, const int); 42800 vector bool int vec_vspltw (vector bool int, const int); 42801 42802 vector bool short vec_vsplth (vector bool short, const int); 42803 vector signed short vec_vsplth (vector signed short, const int); 42804 vector unsigned short vec_vsplth (vector unsigned short, const int); 42805 vector pixel vec_vsplth (vector pixel, const int); 42806 42807 vector signed char vec_vspltb (vector signed char, const int); 42808 vector unsigned char vec_vspltb (vector unsigned char, const int); 42809 vector bool char vec_vspltb (vector bool char, const int); 42810 42811 vector signed char vec_splat_s8 (const int); 42812 42813 vector signed short vec_splat_s16 (const int); 42814 42815 vector signed int vec_splat_s32 (const int); 42816 42817 vector unsigned char vec_splat_u8 (const int); 42818 42819 vector unsigned short vec_splat_u16 (const int); 42820 42821 vector unsigned int vec_splat_u32 (const int); 42822 42823 vector signed char vec_sr (vector signed char, vector unsigned char); 42824 vector unsigned char vec_sr (vector unsigned char, 42825 vector unsigned char); 42826 vector signed short vec_sr (vector signed short, 42827 vector unsigned short); 42828 vector unsigned short vec_sr (vector unsigned short, 42829 vector unsigned short); 42830 vector signed int vec_sr (vector signed int, vector unsigned int); 42831 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 42832 42833 vector signed int vec_vsrw (vector signed int, vector unsigned int); 42834 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 42835 42836 vector signed short vec_vsrh (vector signed short, 42837 vector unsigned short); 42838 vector unsigned short vec_vsrh (vector unsigned short, 42839 vector unsigned short); 42840 42841 vector signed char vec_vsrb (vector signed char, vector unsigned char); 42842 vector unsigned char vec_vsrb (vector unsigned char, 42843 vector unsigned char); 42844 42845 vector signed char vec_sra (vector signed char, vector unsigned char); 42846 vector unsigned char vec_sra (vector unsigned char, 42847 vector unsigned char); 42848 vector signed short vec_sra (vector signed short, 42849 vector unsigned short); 42850 vector unsigned short vec_sra (vector unsigned short, 42851 vector unsigned short); 42852 vector signed int vec_sra (vector signed int, vector unsigned int); 42853 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 42854 42855 vector signed int vec_vsraw (vector signed int, vector unsigned int); 42856 vector unsigned int vec_vsraw (vector unsigned int, 42857 vector unsigned int); 42858 42859 vector signed short vec_vsrah (vector signed short, 42860 vector unsigned short); 42861 vector unsigned short vec_vsrah (vector unsigned short, 42862 vector unsigned short); 42863 42864 vector signed char vec_vsrab (vector signed char, vector unsigned char); 42865 vector unsigned char vec_vsrab (vector unsigned char, 42866 vector unsigned char); 42867 42868 vector signed int vec_srl (vector signed int, vector unsigned int); 42869 vector signed int vec_srl (vector signed int, vector unsigned short); 42870 vector signed int vec_srl (vector signed int, vector unsigned char); 42871 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 42872 vector unsigned int vec_srl (vector unsigned int, 42873 vector unsigned short); 42874 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 42875 vector bool int vec_srl (vector bool int, vector unsigned int); 42876 vector bool int vec_srl (vector bool int, vector unsigned short); 42877 vector bool int vec_srl (vector bool int, vector unsigned char); 42878 vector signed short vec_srl (vector signed short, vector unsigned int); 42879 vector signed short vec_srl (vector signed short, 42880 vector unsigned short); 42881 vector signed short vec_srl (vector signed short, vector unsigned char); 42882 vector unsigned short vec_srl (vector unsigned short, 42883 vector unsigned int); 42884 vector unsigned short vec_srl (vector unsigned short, 42885 vector unsigned short); 42886 vector unsigned short vec_srl (vector unsigned short, 42887 vector unsigned char); 42888 vector bool short vec_srl (vector bool short, vector unsigned int); 42889 vector bool short vec_srl (vector bool short, vector unsigned short); 42890 vector bool short vec_srl (vector bool short, vector unsigned char); 42891 vector pixel vec_srl (vector pixel, vector unsigned int); 42892 vector pixel vec_srl (vector pixel, vector unsigned short); 42893 vector pixel vec_srl (vector pixel, vector unsigned char); 42894 vector signed char vec_srl (vector signed char, vector unsigned int); 42895 vector signed char vec_srl (vector signed char, vector unsigned short); 42896 vector signed char vec_srl (vector signed char, vector unsigned char); 42897 vector unsigned char vec_srl (vector unsigned char, 42898 vector unsigned int); 42899 vector unsigned char vec_srl (vector unsigned char, 42900 vector unsigned short); 42901 vector unsigned char vec_srl (vector unsigned char, 42902 vector unsigned char); 42903 vector bool char vec_srl (vector bool char, vector unsigned int); 42904 vector bool char vec_srl (vector bool char, vector unsigned short); 42905 vector bool char vec_srl (vector bool char, vector unsigned char); 42906 42907 vector float vec_sro (vector float, vector signed char); 42908 vector float vec_sro (vector float, vector unsigned char); 42909 vector signed int vec_sro (vector signed int, vector signed char); 42910 vector signed int vec_sro (vector signed int, vector unsigned char); 42911 vector unsigned int vec_sro (vector unsigned int, vector signed char); 42912 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 42913 vector signed short vec_sro (vector signed short, vector signed char); 42914 vector signed short vec_sro (vector signed short, vector unsigned char); 42915 vector unsigned short vec_sro (vector unsigned short, 42916 vector signed char); 42917 vector unsigned short vec_sro (vector unsigned short, 42918 vector unsigned char); 42919 vector pixel vec_sro (vector pixel, vector signed char); 42920 vector pixel vec_sro (vector pixel, vector unsigned char); 42921 vector signed char vec_sro (vector signed char, vector signed char); 42922 vector signed char vec_sro (vector signed char, vector unsigned char); 42923 vector unsigned char vec_sro (vector unsigned char, vector signed char); 42924 vector unsigned char vec_sro (vector unsigned char, 42925 vector unsigned char); 42926 42927 void vec_st (vector float, int, vector float *); 42928 void vec_st (vector float, int, float *); 42929 void vec_st (vector signed int, int, vector signed int *); 42930 void vec_st (vector signed int, int, int *); 42931 void vec_st (vector unsigned int, int, vector unsigned int *); 42932 void vec_st (vector unsigned int, int, unsigned int *); 42933 void vec_st (vector bool int, int, vector bool int *); 42934 void vec_st (vector bool int, int, unsigned int *); 42935 void vec_st (vector bool int, int, int *); 42936 void vec_st (vector signed short, int, vector signed short *); 42937 void vec_st (vector signed short, int, short *); 42938 void vec_st (vector unsigned short, int, vector unsigned short *); 42939 void vec_st (vector unsigned short, int, unsigned short *); 42940 void vec_st (vector bool short, int, vector bool short *); 42941 void vec_st (vector bool short, int, unsigned short *); 42942 void vec_st (vector pixel, int, vector pixel *); 42943 void vec_st (vector pixel, int, unsigned short *); 42944 void vec_st (vector pixel, int, short *); 42945 void vec_st (vector bool short, int, short *); 42946 void vec_st (vector signed char, int, vector signed char *); 42947 void vec_st (vector signed char, int, signed char *); 42948 void vec_st (vector unsigned char, int, vector unsigned char *); 42949 void vec_st (vector unsigned char, int, unsigned char *); 42950 void vec_st (vector bool char, int, vector bool char *); 42951 void vec_st (vector bool char, int, unsigned char *); 42952 void vec_st (vector bool char, int, signed char *); 42953 42954 void vec_ste (vector signed char, int, signed char *); 42955 void vec_ste (vector unsigned char, int, unsigned char *); 42956 void vec_ste (vector bool char, int, signed char *); 42957 void vec_ste (vector bool char, int, unsigned char *); 42958 void vec_ste (vector signed short, int, short *); 42959 void vec_ste (vector unsigned short, int, unsigned short *); 42960 void vec_ste (vector bool short, int, short *); 42961 void vec_ste (vector bool short, int, unsigned short *); 42962 void vec_ste (vector pixel, int, short *); 42963 void vec_ste (vector pixel, int, unsigned short *); 42964 void vec_ste (vector float, int, float *); 42965 void vec_ste (vector signed int, int, int *); 42966 void vec_ste (vector unsigned int, int, unsigned int *); 42967 void vec_ste (vector bool int, int, int *); 42968 void vec_ste (vector bool int, int, unsigned int *); 42969 42970 void vec_stvewx (vector float, int, float *); 42971 void vec_stvewx (vector signed int, int, int *); 42972 void vec_stvewx (vector unsigned int, int, unsigned int *); 42973 void vec_stvewx (vector bool int, int, int *); 42974 void vec_stvewx (vector bool int, int, unsigned int *); 42975 42976 void vec_stvehx (vector signed short, int, short *); 42977 void vec_stvehx (vector unsigned short, int, unsigned short *); 42978 void vec_stvehx (vector bool short, int, short *); 42979 void vec_stvehx (vector bool short, int, unsigned short *); 42980 void vec_stvehx (vector pixel, int, short *); 42981 void vec_stvehx (vector pixel, int, unsigned short *); 42982 42983 void vec_stvebx (vector signed char, int, signed char *); 42984 void vec_stvebx (vector unsigned char, int, unsigned char *); 42985 void vec_stvebx (vector bool char, int, signed char *); 42986 void vec_stvebx (vector bool char, int, unsigned char *); 42987 42988 void vec_stl (vector float, int, vector float *); 42989 void vec_stl (vector float, int, float *); 42990 void vec_stl (vector signed int, int, vector signed int *); 42991 void vec_stl (vector signed int, int, int *); 42992 void vec_stl (vector unsigned int, int, vector unsigned int *); 42993 void vec_stl (vector unsigned int, int, unsigned int *); 42994 void vec_stl (vector bool int, int, vector bool int *); 42995 void vec_stl (vector bool int, int, unsigned int *); 42996 void vec_stl (vector bool int, int, int *); 42997 void vec_stl (vector signed short, int, vector signed short *); 42998 void vec_stl (vector signed short, int, short *); 42999 void vec_stl (vector unsigned short, int, vector unsigned short *); 43000 void vec_stl (vector unsigned short, int, unsigned short *); 43001 void vec_stl (vector bool short, int, vector bool short *); 43002 void vec_stl (vector bool short, int, unsigned short *); 43003 void vec_stl (vector bool short, int, short *); 43004 void vec_stl (vector pixel, int, vector pixel *); 43005 void vec_stl (vector pixel, int, unsigned short *); 43006 void vec_stl (vector pixel, int, short *); 43007 void vec_stl (vector signed char, int, vector signed char *); 43008 void vec_stl (vector signed char, int, signed char *); 43009 void vec_stl (vector unsigned char, int, vector unsigned char *); 43010 void vec_stl (vector unsigned char, int, unsigned char *); 43011 void vec_stl (vector bool char, int, vector bool char *); 43012 void vec_stl (vector bool char, int, unsigned char *); 43013 void vec_stl (vector bool char, int, signed char *); 43014 43015 vector signed char vec_sub (vector bool char, vector signed char); 43016 vector signed char vec_sub (vector signed char, vector bool char); 43017 vector signed char vec_sub (vector signed char, vector signed char); 43018 vector unsigned char vec_sub (vector bool char, vector unsigned char); 43019 vector unsigned char vec_sub (vector unsigned char, vector bool char); 43020 vector unsigned char vec_sub (vector unsigned char, 43021 vector unsigned char); 43022 vector signed short vec_sub (vector bool short, vector signed short); 43023 vector signed short vec_sub (vector signed short, vector bool short); 43024 vector signed short vec_sub (vector signed short, vector signed short); 43025 vector unsigned short vec_sub (vector bool short, 43026 vector unsigned short); 43027 vector unsigned short vec_sub (vector unsigned short, 43028 vector bool short); 43029 vector unsigned short vec_sub (vector unsigned short, 43030 vector unsigned short); 43031 vector signed int vec_sub (vector bool int, vector signed int); 43032 vector signed int vec_sub (vector signed int, vector bool int); 43033 vector signed int vec_sub (vector signed int, vector signed int); 43034 vector unsigned int vec_sub (vector bool int, vector unsigned int); 43035 vector unsigned int vec_sub (vector unsigned int, vector bool int); 43036 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 43037 vector float vec_sub (vector float, vector float); 43038 43039 vector float vec_vsubfp (vector float, vector float); 43040 43041 vector signed int vec_vsubuwm (vector bool int, vector signed int); 43042 vector signed int vec_vsubuwm (vector signed int, vector bool int); 43043 vector signed int vec_vsubuwm (vector signed int, vector signed int); 43044 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 43045 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 43046 vector unsigned int vec_vsubuwm (vector unsigned int, 43047 vector unsigned int); 43048 43049 vector signed short vec_vsubuhm (vector bool short, 43050 vector signed short); 43051 vector signed short vec_vsubuhm (vector signed short, 43052 vector bool short); 43053 vector signed short vec_vsubuhm (vector signed short, 43054 vector signed short); 43055 vector unsigned short vec_vsubuhm (vector bool short, 43056 vector unsigned short); 43057 vector unsigned short vec_vsubuhm (vector unsigned short, 43058 vector bool short); 43059 vector unsigned short vec_vsubuhm (vector unsigned short, 43060 vector unsigned short); 43061 43062 vector signed char vec_vsububm (vector bool char, vector signed char); 43063 vector signed char vec_vsububm (vector signed char, vector bool char); 43064 vector signed char vec_vsububm (vector signed char, vector signed char); 43065 vector unsigned char vec_vsububm (vector bool char, 43066 vector unsigned char); 43067 vector unsigned char vec_vsububm (vector unsigned char, 43068 vector bool char); 43069 vector unsigned char vec_vsububm (vector unsigned char, 43070 vector unsigned char); 43071 43072 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 43073 43074 vector unsigned char vec_subs (vector bool char, vector unsigned char); 43075 vector unsigned char vec_subs (vector unsigned char, vector bool char); 43076 vector unsigned char vec_subs (vector unsigned char, 43077 vector unsigned char); 43078 vector signed char vec_subs (vector bool char, vector signed char); 43079 vector signed char vec_subs (vector signed char, vector bool char); 43080 vector signed char vec_subs (vector signed char, vector signed char); 43081 vector unsigned short vec_subs (vector bool short, 43082 vector unsigned short); 43083 vector unsigned short vec_subs (vector unsigned short, 43084 vector bool short); 43085 vector unsigned short vec_subs (vector unsigned short, 43086 vector unsigned short); 43087 vector signed short vec_subs (vector bool short, vector signed short); 43088 vector signed short vec_subs (vector signed short, vector bool short); 43089 vector signed short vec_subs (vector signed short, vector signed short); 43090 vector unsigned int vec_subs (vector bool int, vector unsigned int); 43091 vector unsigned int vec_subs (vector unsigned int, vector bool int); 43092 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 43093 vector signed int vec_subs (vector bool int, vector signed int); 43094 vector signed int vec_subs (vector signed int, vector bool int); 43095 vector signed int vec_subs (vector signed int, vector signed int); 43096 43097 vector signed int vec_vsubsws (vector bool int, vector signed int); 43098 vector signed int vec_vsubsws (vector signed int, vector bool int); 43099 vector signed int vec_vsubsws (vector signed int, vector signed int); 43100 43101 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 43102 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 43103 vector unsigned int vec_vsubuws (vector unsigned int, 43104 vector unsigned int); 43105 43106 vector signed short vec_vsubshs (vector bool short, 43107 vector signed short); 43108 vector signed short vec_vsubshs (vector signed short, 43109 vector bool short); 43110 vector signed short vec_vsubshs (vector signed short, 43111 vector signed short); 43112 43113 vector unsigned short vec_vsubuhs (vector bool short, 43114 vector unsigned short); 43115 vector unsigned short vec_vsubuhs (vector unsigned short, 43116 vector bool short); 43117 vector unsigned short vec_vsubuhs (vector unsigned short, 43118 vector unsigned short); 43119 43120 vector signed char vec_vsubsbs (vector bool char, vector signed char); 43121 vector signed char vec_vsubsbs (vector signed char, vector bool char); 43122 vector signed char vec_vsubsbs (vector signed char, vector signed char); 43123 43124 vector unsigned char vec_vsububs (vector bool char, 43125 vector unsigned char); 43126 vector unsigned char vec_vsububs (vector unsigned char, 43127 vector bool char); 43128 vector unsigned char vec_vsububs (vector unsigned char, 43129 vector unsigned char); 43130 43131 vector unsigned int vec_sum4s (vector unsigned char, 43132 vector unsigned int); 43133 vector signed int vec_sum4s (vector signed char, vector signed int); 43134 vector signed int vec_sum4s (vector signed short, vector signed int); 43135 43136 vector signed int vec_vsum4shs (vector signed short, vector signed int); 43137 43138 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 43139 43140 vector unsigned int vec_vsum4ubs (vector unsigned char, 43141 vector unsigned int); 43142 43143 vector signed int vec_sum2s (vector signed int, vector signed int); 43144 43145 vector signed int vec_sums (vector signed int, vector signed int); 43146 43147 vector float vec_trunc (vector float); 43148 43149 vector signed short vec_unpackh (vector signed char); 43150 vector bool short vec_unpackh (vector bool char); 43151 vector signed int vec_unpackh (vector signed short); 43152 vector bool int vec_unpackh (vector bool short); 43153 vector unsigned int vec_unpackh (vector pixel); 43154 43155 vector bool int vec_vupkhsh (vector bool short); 43156 vector signed int vec_vupkhsh (vector signed short); 43157 43158 vector unsigned int vec_vupkhpx (vector pixel); 43159 43160 vector bool short vec_vupkhsb (vector bool char); 43161 vector signed short vec_vupkhsb (vector signed char); 43162 43163 vector signed short vec_unpackl (vector signed char); 43164 vector bool short vec_unpackl (vector bool char); 43165 vector unsigned int vec_unpackl (vector pixel); 43166 vector signed int vec_unpackl (vector signed short); 43167 vector bool int vec_unpackl (vector bool short); 43168 43169 vector unsigned int vec_vupklpx (vector pixel); 43170 43171 vector bool int vec_vupklsh (vector bool short); 43172 vector signed int vec_vupklsh (vector signed short); 43173 43174 vector bool short vec_vupklsb (vector bool char); 43175 vector signed short vec_vupklsb (vector signed char); 43176 43177 vector float vec_xor (vector float, vector float); 43178 vector float vec_xor (vector float, vector bool int); 43179 vector float vec_xor (vector bool int, vector float); 43180 vector bool int vec_xor (vector bool int, vector bool int); 43181 vector signed int vec_xor (vector bool int, vector signed int); 43182 vector signed int vec_xor (vector signed int, vector bool int); 43183 vector signed int vec_xor (vector signed int, vector signed int); 43184 vector unsigned int vec_xor (vector bool int, vector unsigned int); 43185 vector unsigned int vec_xor (vector unsigned int, vector bool int); 43186 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 43187 vector bool short vec_xor (vector bool short, vector bool short); 43188 vector signed short vec_xor (vector bool short, vector signed short); 43189 vector signed short vec_xor (vector signed short, vector bool short); 43190 vector signed short vec_xor (vector signed short, vector signed short); 43191 vector unsigned short vec_xor (vector bool short, 43192 vector unsigned short); 43193 vector unsigned short vec_xor (vector unsigned short, 43194 vector bool short); 43195 vector unsigned short vec_xor (vector unsigned short, 43196 vector unsigned short); 43197 vector signed char vec_xor (vector bool char, vector signed char); 43198 vector bool char vec_xor (vector bool char, vector bool char); 43199 vector signed char vec_xor (vector signed char, vector bool char); 43200 vector signed char vec_xor (vector signed char, vector signed char); 43201 vector unsigned char vec_xor (vector bool char, vector unsigned char); 43202 vector unsigned char vec_xor (vector unsigned char, vector bool char); 43203 vector unsigned char vec_xor (vector unsigned char, 43204 vector unsigned char); 43205 43206 int vec_all_eq (vector signed char, vector bool char); 43207 int vec_all_eq (vector signed char, vector signed char); 43208 int vec_all_eq (vector unsigned char, vector bool char); 43209 int vec_all_eq (vector unsigned char, vector unsigned char); 43210 int vec_all_eq (vector bool char, vector bool char); 43211 int vec_all_eq (vector bool char, vector unsigned char); 43212 int vec_all_eq (vector bool char, vector signed char); 43213 int vec_all_eq (vector signed short, vector bool short); 43214 int vec_all_eq (vector signed short, vector signed short); 43215 int vec_all_eq (vector unsigned short, vector bool short); 43216 int vec_all_eq (vector unsigned short, vector unsigned short); 43217 int vec_all_eq (vector bool short, vector bool short); 43218 int vec_all_eq (vector bool short, vector unsigned short); 43219 int vec_all_eq (vector bool short, vector signed short); 43220 int vec_all_eq (vector pixel, vector pixel); 43221 int vec_all_eq (vector signed int, vector bool int); 43222 int vec_all_eq (vector signed int, vector signed int); 43223 int vec_all_eq (vector unsigned int, vector bool int); 43224 int vec_all_eq (vector unsigned int, vector unsigned int); 43225 int vec_all_eq (vector bool int, vector bool int); 43226 int vec_all_eq (vector bool int, vector unsigned int); 43227 int vec_all_eq (vector bool int, vector signed int); 43228 int vec_all_eq (vector float, vector float); 43229 43230 int vec_all_ge (vector bool char, vector unsigned char); 43231 int vec_all_ge (vector unsigned char, vector bool char); 43232 int vec_all_ge (vector unsigned char, vector unsigned char); 43233 int vec_all_ge (vector bool char, vector signed char); 43234 int vec_all_ge (vector signed char, vector bool char); 43235 int vec_all_ge (vector signed char, vector signed char); 43236 int vec_all_ge (vector bool short, vector unsigned short); 43237 int vec_all_ge (vector unsigned short, vector bool short); 43238 int vec_all_ge (vector unsigned short, vector unsigned short); 43239 int vec_all_ge (vector signed short, vector signed short); 43240 int vec_all_ge (vector bool short, vector signed short); 43241 int vec_all_ge (vector signed short, vector bool short); 43242 int vec_all_ge (vector bool int, vector unsigned int); 43243 int vec_all_ge (vector unsigned int, vector bool int); 43244 int vec_all_ge (vector unsigned int, vector unsigned int); 43245 int vec_all_ge (vector bool int, vector signed int); 43246 int vec_all_ge (vector signed int, vector bool int); 43247 int vec_all_ge (vector signed int, vector signed int); 43248 int vec_all_ge (vector float, vector float); 43249 43250 int vec_all_gt (vector bool char, vector unsigned char); 43251 int vec_all_gt (vector unsigned char, vector bool char); 43252 int vec_all_gt (vector unsigned char, vector unsigned char); 43253 int vec_all_gt (vector bool char, vector signed char); 43254 int vec_all_gt (vector signed char, vector bool char); 43255 int vec_all_gt (vector signed char, vector signed char); 43256 int vec_all_gt (vector bool short, vector unsigned short); 43257 int vec_all_gt (vector unsigned short, vector bool short); 43258 int vec_all_gt (vector unsigned short, vector unsigned short); 43259 int vec_all_gt (vector bool short, vector signed short); 43260 int vec_all_gt (vector signed short, vector bool short); 43261 int vec_all_gt (vector signed short, vector signed short); 43262 int vec_all_gt (vector bool int, vector unsigned int); 43263 int vec_all_gt (vector unsigned int, vector bool int); 43264 int vec_all_gt (vector unsigned int, vector unsigned int); 43265 int vec_all_gt (vector bool int, vector signed int); 43266 int vec_all_gt (vector signed int, vector bool int); 43267 int vec_all_gt (vector signed int, vector signed int); 43268 int vec_all_gt (vector float, vector float); 43269 43270 int vec_all_in (vector float, vector float); 43271 43272 int vec_all_le (vector bool char, vector unsigned char); 43273 int vec_all_le (vector unsigned char, vector bool char); 43274 int vec_all_le (vector unsigned char, vector unsigned char); 43275 int vec_all_le (vector bool char, vector signed char); 43276 int vec_all_le (vector signed char, vector bool char); 43277 int vec_all_le (vector signed char, vector signed char); 43278 int vec_all_le (vector bool short, vector unsigned short); 43279 int vec_all_le (vector unsigned short, vector bool short); 43280 int vec_all_le (vector unsigned short, vector unsigned short); 43281 int vec_all_le (vector bool short, vector signed short); 43282 int vec_all_le (vector signed short, vector bool short); 43283 int vec_all_le (vector signed short, vector signed short); 43284 int vec_all_le (vector bool int, vector unsigned int); 43285 int vec_all_le (vector unsigned int, vector bool int); 43286 int vec_all_le (vector unsigned int, vector unsigned int); 43287 int vec_all_le (vector bool int, vector signed int); 43288 int vec_all_le (vector signed int, vector bool int); 43289 int vec_all_le (vector signed int, vector signed int); 43290 int vec_all_le (vector float, vector float); 43291 43292 int vec_all_lt (vector bool char, vector unsigned char); 43293 int vec_all_lt (vector unsigned char, vector bool char); 43294 int vec_all_lt (vector unsigned char, vector unsigned char); 43295 int vec_all_lt (vector bool char, vector signed char); 43296 int vec_all_lt (vector signed char, vector bool char); 43297 int vec_all_lt (vector signed char, vector signed char); 43298 int vec_all_lt (vector bool short, vector unsigned short); 43299 int vec_all_lt (vector unsigned short, vector bool short); 43300 int vec_all_lt (vector unsigned short, vector unsigned short); 43301 int vec_all_lt (vector bool short, vector signed short); 43302 int vec_all_lt (vector signed short, vector bool short); 43303 int vec_all_lt (vector signed short, vector signed short); 43304 int vec_all_lt (vector bool int, vector unsigned int); 43305 int vec_all_lt (vector unsigned int, vector bool int); 43306 int vec_all_lt (vector unsigned int, vector unsigned int); 43307 int vec_all_lt (vector bool int, vector signed int); 43308 int vec_all_lt (vector signed int, vector bool int); 43309 int vec_all_lt (vector signed int, vector signed int); 43310 int vec_all_lt (vector float, vector float); 43311 43312 int vec_all_nan (vector float); 43313 43314 int vec_all_ne (vector signed char, vector bool char); 43315 int vec_all_ne (vector signed char, vector signed char); 43316 int vec_all_ne (vector unsigned char, vector bool char); 43317 int vec_all_ne (vector unsigned char, vector unsigned char); 43318 int vec_all_ne (vector bool char, vector bool char); 43319 int vec_all_ne (vector bool char, vector unsigned char); 43320 int vec_all_ne (vector bool char, vector signed char); 43321 int vec_all_ne (vector signed short, vector bool short); 43322 int vec_all_ne (vector signed short, vector signed short); 43323 int vec_all_ne (vector unsigned short, vector bool short); 43324 int vec_all_ne (vector unsigned short, vector unsigned short); 43325 int vec_all_ne (vector bool short, vector bool short); 43326 int vec_all_ne (vector bool short, vector unsigned short); 43327 int vec_all_ne (vector bool short, vector signed short); 43328 int vec_all_ne (vector pixel, vector pixel); 43329 int vec_all_ne (vector signed int, vector bool int); 43330 int vec_all_ne (vector signed int, vector signed int); 43331 int vec_all_ne (vector unsigned int, vector bool int); 43332 int vec_all_ne (vector unsigned int, vector unsigned int); 43333 int vec_all_ne (vector bool int, vector bool int); 43334 int vec_all_ne (vector bool int, vector unsigned int); 43335 int vec_all_ne (vector bool int, vector signed int); 43336 int vec_all_ne (vector float, vector float); 43337 43338 int vec_all_nge (vector float, vector float); 43339 43340 int vec_all_ngt (vector float, vector float); 43341 43342 int vec_all_nle (vector float, vector float); 43343 43344 int vec_all_nlt (vector float, vector float); 43345 43346 int vec_all_numeric (vector float); 43347 43348 int vec_any_eq (vector signed char, vector bool char); 43349 int vec_any_eq (vector signed char, vector signed char); 43350 int vec_any_eq (vector unsigned char, vector bool char); 43351 int vec_any_eq (vector unsigned char, vector unsigned char); 43352 int vec_any_eq (vector bool char, vector bool char); 43353 int vec_any_eq (vector bool char, vector unsigned char); 43354 int vec_any_eq (vector bool char, vector signed char); 43355 int vec_any_eq (vector signed short, vector bool short); 43356 int vec_any_eq (vector signed short, vector signed short); 43357 int vec_any_eq (vector unsigned short, vector bool short); 43358 int vec_any_eq (vector unsigned short, vector unsigned short); 43359 int vec_any_eq (vector bool short, vector bool short); 43360 int vec_any_eq (vector bool short, vector unsigned short); 43361 int vec_any_eq (vector bool short, vector signed short); 43362 int vec_any_eq (vector pixel, vector pixel); 43363 int vec_any_eq (vector signed int, vector bool int); 43364 int vec_any_eq (vector signed int, vector signed int); 43365 int vec_any_eq (vector unsigned int, vector bool int); 43366 int vec_any_eq (vector unsigned int, vector unsigned int); 43367 int vec_any_eq (vector bool int, vector bool int); 43368 int vec_any_eq (vector bool int, vector unsigned int); 43369 int vec_any_eq (vector bool int, vector signed int); 43370 int vec_any_eq (vector float, vector float); 43371 43372 int vec_any_ge (vector signed char, vector bool char); 43373 int vec_any_ge (vector unsigned char, vector bool char); 43374 int vec_any_ge (vector unsigned char, vector unsigned char); 43375 int vec_any_ge (vector signed char, vector signed char); 43376 int vec_any_ge (vector bool char, vector unsigned char); 43377 int vec_any_ge (vector bool char, vector signed char); 43378 int vec_any_ge (vector unsigned short, vector bool short); 43379 int vec_any_ge (vector unsigned short, vector unsigned short); 43380 int vec_any_ge (vector signed short, vector signed short); 43381 int vec_any_ge (vector signed short, vector bool short); 43382 int vec_any_ge (vector bool short, vector unsigned short); 43383 int vec_any_ge (vector bool short, vector signed short); 43384 int vec_any_ge (vector signed int, vector bool int); 43385 int vec_any_ge (vector unsigned int, vector bool int); 43386 int vec_any_ge (vector unsigned int, vector unsigned int); 43387 int vec_any_ge (vector signed int, vector signed int); 43388 int vec_any_ge (vector bool int, vector unsigned int); 43389 int vec_any_ge (vector bool int, vector signed int); 43390 int vec_any_ge (vector float, vector float); 43391 43392 int vec_any_gt (vector bool char, vector unsigned char); 43393 int vec_any_gt (vector unsigned char, vector bool char); 43394 int vec_any_gt (vector unsigned char, vector unsigned char); 43395 int vec_any_gt (vector bool char, vector signed char); 43396 int vec_any_gt (vector signed char, vector bool char); 43397 int vec_any_gt (vector signed char, vector signed char); 43398 int vec_any_gt (vector bool short, vector unsigned short); 43399 int vec_any_gt (vector unsigned short, vector bool short); 43400 int vec_any_gt (vector unsigned short, vector unsigned short); 43401 int vec_any_gt (vector bool short, vector signed short); 43402 int vec_any_gt (vector signed short, vector bool short); 43403 int vec_any_gt (vector signed short, vector signed short); 43404 int vec_any_gt (vector bool int, vector unsigned int); 43405 int vec_any_gt (vector unsigned int, vector bool int); 43406 int vec_any_gt (vector unsigned int, vector unsigned int); 43407 int vec_any_gt (vector bool int, vector signed int); 43408 int vec_any_gt (vector signed int, vector bool int); 43409 int vec_any_gt (vector signed int, vector signed int); 43410 int vec_any_gt (vector float, vector float); 43411 43412 int vec_any_le (vector bool char, vector unsigned char); 43413 int vec_any_le (vector unsigned char, vector bool char); 43414 int vec_any_le (vector unsigned char, vector unsigned char); 43415 int vec_any_le (vector bool char, vector signed char); 43416 int vec_any_le (vector signed char, vector bool char); 43417 int vec_any_le (vector signed char, vector signed char); 43418 int vec_any_le (vector bool short, vector unsigned short); 43419 int vec_any_le (vector unsigned short, vector bool short); 43420 int vec_any_le (vector unsigned short, vector unsigned short); 43421 int vec_any_le (vector bool short, vector signed short); 43422 int vec_any_le (vector signed short, vector bool short); 43423 int vec_any_le (vector signed short, vector signed short); 43424 int vec_any_le (vector bool int, vector unsigned int); 43425 int vec_any_le (vector unsigned int, vector bool int); 43426 int vec_any_le (vector unsigned int, vector unsigned int); 43427 int vec_any_le (vector bool int, vector signed int); 43428 int vec_any_le (vector signed int, vector bool int); 43429 int vec_any_le (vector signed int, vector signed int); 43430 int vec_any_le (vector float, vector float); 43431 43432 int vec_any_lt (vector bool char, vector unsigned char); 43433 int vec_any_lt (vector unsigned char, vector bool char); 43434 int vec_any_lt (vector unsigned char, vector unsigned char); 43435 int vec_any_lt (vector bool char, vector signed char); 43436 int vec_any_lt (vector signed char, vector bool char); 43437 int vec_any_lt (vector signed char, vector signed char); 43438 int vec_any_lt (vector bool short, vector unsigned short); 43439 int vec_any_lt (vector unsigned short, vector bool short); 43440 int vec_any_lt (vector unsigned short, vector unsigned short); 43441 int vec_any_lt (vector bool short, vector signed short); 43442 int vec_any_lt (vector signed short, vector bool short); 43443 int vec_any_lt (vector signed short, vector signed short); 43444 int vec_any_lt (vector bool int, vector unsigned int); 43445 int vec_any_lt (vector unsigned int, vector bool int); 43446 int vec_any_lt (vector unsigned int, vector unsigned int); 43447 int vec_any_lt (vector bool int, vector signed int); 43448 int vec_any_lt (vector signed int, vector bool int); 43449 int vec_any_lt (vector signed int, vector signed int); 43450 int vec_any_lt (vector float, vector float); 43451 43452 int vec_any_nan (vector float); 43453 43454 int vec_any_ne (vector signed char, vector bool char); 43455 int vec_any_ne (vector signed char, vector signed char); 43456 int vec_any_ne (vector unsigned char, vector bool char); 43457 int vec_any_ne (vector unsigned char, vector unsigned char); 43458 int vec_any_ne (vector bool char, vector bool char); 43459 int vec_any_ne (vector bool char, vector unsigned char); 43460 int vec_any_ne (vector bool char, vector signed char); 43461 int vec_any_ne (vector signed short, vector bool short); 43462 int vec_any_ne (vector signed short, vector signed short); 43463 int vec_any_ne (vector unsigned short, vector bool short); 43464 int vec_any_ne (vector unsigned short, vector unsigned short); 43465 int vec_any_ne (vector bool short, vector bool short); 43466 int vec_any_ne (vector bool short, vector unsigned short); 43467 int vec_any_ne (vector bool short, vector signed short); 43468 int vec_any_ne (vector pixel, vector pixel); 43469 int vec_any_ne (vector signed int, vector bool int); 43470 int vec_any_ne (vector signed int, vector signed int); 43471 int vec_any_ne (vector unsigned int, vector bool int); 43472 int vec_any_ne (vector unsigned int, vector unsigned int); 43473 int vec_any_ne (vector bool int, vector bool int); 43474 int vec_any_ne (vector bool int, vector unsigned int); 43475 int vec_any_ne (vector bool int, vector signed int); 43476 int vec_any_ne (vector float, vector float); 43477 43478 int vec_any_nge (vector float, vector float); 43479 43480 int vec_any_ngt (vector float, vector float); 43481 43482 int vec_any_nle (vector float, vector float); 43483 43484 int vec_any_nlt (vector float, vector float); 43485 43486 int vec_any_numeric (vector float); 43487 43488 int vec_any_out (vector float, vector float); 43489 43490 If the vector/scalar (VSX) instruction set is available, the following 43491additional functions are available: 43492 43493 vector double vec_abs (vector double); 43494 vector double vec_add (vector double, vector double); 43495 vector double vec_and (vector double, vector double); 43496 vector double vec_and (vector double, vector bool long); 43497 vector double vec_and (vector bool long, vector double); 43498 vector double vec_andc (vector double, vector double); 43499 vector double vec_andc (vector double, vector bool long); 43500 vector double vec_andc (vector bool long, vector double); 43501 vector double vec_ceil (vector double); 43502 vector bool long vec_cmpeq (vector double, vector double); 43503 vector bool long vec_cmpge (vector double, vector double); 43504 vector bool long vec_cmpgt (vector double, vector double); 43505 vector bool long vec_cmple (vector double, vector double); 43506 vector bool long vec_cmplt (vector double, vector double); 43507 vector float vec_div (vector float, vector float); 43508 vector double vec_div (vector double, vector double); 43509 vector double vec_floor (vector double); 43510 vector double vec_ld (int, const vector double *); 43511 vector double vec_ld (int, const double *); 43512 vector double vec_ldl (int, const vector double *); 43513 vector double vec_ldl (int, const double *); 43514 vector unsigned char vec_lvsl (int, const volatile double *); 43515 vector unsigned char vec_lvsr (int, const volatile double *); 43516 vector double vec_madd (vector double, vector double, vector double); 43517 vector double vec_max (vector double, vector double); 43518 vector double vec_min (vector double, vector double); 43519 vector float vec_msub (vector float, vector float, vector float); 43520 vector double vec_msub (vector double, vector double, vector double); 43521 vector float vec_mul (vector float, vector float); 43522 vector double vec_mul (vector double, vector double); 43523 vector float vec_nearbyint (vector float); 43524 vector double vec_nearbyint (vector double); 43525 vector float vec_nmadd (vector float, vector float, vector float); 43526 vector double vec_nmadd (vector double, vector double, vector double); 43527 vector double vec_nmsub (vector double, vector double, vector double); 43528 vector double vec_nor (vector double, vector double); 43529 vector double vec_or (vector double, vector double); 43530 vector double vec_or (vector double, vector bool long); 43531 vector double vec_or (vector bool long, vector double); 43532 vector double vec_perm (vector double, 43533 vector double, 43534 vector unsigned char); 43535 vector double vec_rint (vector double); 43536 vector double vec_recip (vector double, vector double); 43537 vector double vec_rsqrt (vector double); 43538 vector double vec_rsqrte (vector double); 43539 vector double vec_sel (vector double, vector double, vector bool long); 43540 vector double vec_sel (vector double, vector double, vector unsigned long); 43541 vector double vec_sub (vector double, vector double); 43542 vector float vec_sqrt (vector float); 43543 vector double vec_sqrt (vector double); 43544 void vec_st (vector double, int, vector double *); 43545 void vec_st (vector double, int, double *); 43546 vector double vec_trunc (vector double); 43547 vector double vec_xor (vector double, vector double); 43548 vector double vec_xor (vector double, vector bool long); 43549 vector double vec_xor (vector bool long, vector double); 43550 int vec_all_eq (vector double, vector double); 43551 int vec_all_ge (vector double, vector double); 43552 int vec_all_gt (vector double, vector double); 43553 int vec_all_le (vector double, vector double); 43554 int vec_all_lt (vector double, vector double); 43555 int vec_all_nan (vector double); 43556 int vec_all_ne (vector double, vector double); 43557 int vec_all_nge (vector double, vector double); 43558 int vec_all_ngt (vector double, vector double); 43559 int vec_all_nle (vector double, vector double); 43560 int vec_all_nlt (vector double, vector double); 43561 int vec_all_numeric (vector double); 43562 int vec_any_eq (vector double, vector double); 43563 int vec_any_ge (vector double, vector double); 43564 int vec_any_gt (vector double, vector double); 43565 int vec_any_le (vector double, vector double); 43566 int vec_any_lt (vector double, vector double); 43567 int vec_any_nan (vector double); 43568 int vec_any_ne (vector double, vector double); 43569 int vec_any_nge (vector double, vector double); 43570 int vec_any_ngt (vector double, vector double); 43571 int vec_any_nle (vector double, vector double); 43572 int vec_any_nlt (vector double, vector double); 43573 int vec_any_numeric (vector double); 43574 43575 vector double vec_vsx_ld (int, const vector double *); 43576 vector double vec_vsx_ld (int, const double *); 43577 vector float vec_vsx_ld (int, const vector float *); 43578 vector float vec_vsx_ld (int, const float *); 43579 vector bool int vec_vsx_ld (int, const vector bool int *); 43580 vector signed int vec_vsx_ld (int, const vector signed int *); 43581 vector signed int vec_vsx_ld (int, const int *); 43582 vector signed int vec_vsx_ld (int, const long *); 43583 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 43584 vector unsigned int vec_vsx_ld (int, const unsigned int *); 43585 vector unsigned int vec_vsx_ld (int, const unsigned long *); 43586 vector bool short vec_vsx_ld (int, const vector bool short *); 43587 vector pixel vec_vsx_ld (int, const vector pixel *); 43588 vector signed short vec_vsx_ld (int, const vector signed short *); 43589 vector signed short vec_vsx_ld (int, const short *); 43590 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 43591 vector unsigned short vec_vsx_ld (int, const unsigned short *); 43592 vector bool char vec_vsx_ld (int, const vector bool char *); 43593 vector signed char vec_vsx_ld (int, const vector signed char *); 43594 vector signed char vec_vsx_ld (int, const signed char *); 43595 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 43596 vector unsigned char vec_vsx_ld (int, const unsigned char *); 43597 43598 void vec_vsx_st (vector double, int, vector double *); 43599 void vec_vsx_st (vector double, int, double *); 43600 void vec_vsx_st (vector float, int, vector float *); 43601 void vec_vsx_st (vector float, int, float *); 43602 void vec_vsx_st (vector signed int, int, vector signed int *); 43603 void vec_vsx_st (vector signed int, int, int *); 43604 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 43605 void vec_vsx_st (vector unsigned int, int, unsigned int *); 43606 void vec_vsx_st (vector bool int, int, vector bool int *); 43607 void vec_vsx_st (vector bool int, int, unsigned int *); 43608 void vec_vsx_st (vector bool int, int, int *); 43609 void vec_vsx_st (vector signed short, int, vector signed short *); 43610 void vec_vsx_st (vector signed short, int, short *); 43611 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 43612 void vec_vsx_st (vector unsigned short, int, unsigned short *); 43613 void vec_vsx_st (vector bool short, int, vector bool short *); 43614 void vec_vsx_st (vector bool short, int, unsigned short *); 43615 void vec_vsx_st (vector pixel, int, vector pixel *); 43616 void vec_vsx_st (vector pixel, int, unsigned short *); 43617 void vec_vsx_st (vector pixel, int, short *); 43618 void vec_vsx_st (vector bool short, int, short *); 43619 void vec_vsx_st (vector signed char, int, vector signed char *); 43620 void vec_vsx_st (vector signed char, int, signed char *); 43621 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 43622 void vec_vsx_st (vector unsigned char, int, unsigned char *); 43623 void vec_vsx_st (vector bool char, int, vector bool char *); 43624 void vec_vsx_st (vector bool char, int, unsigned char *); 43625 void vec_vsx_st (vector bool char, int, signed char *); 43626 43627 vector double vec_xxpermdi (vector double, vector double, int); 43628 vector float vec_xxpermdi (vector float, vector float, int); 43629 vector long long vec_xxpermdi (vector long long, vector long long, int); 43630 vector unsigned long long vec_xxpermdi (vector unsigned long long, 43631 vector unsigned long long, int); 43632 vector int vec_xxpermdi (vector int, vector int, int); 43633 vector unsigned int vec_xxpermdi (vector unsigned int, 43634 vector unsigned int, int); 43635 vector short vec_xxpermdi (vector short, vector short, int); 43636 vector unsigned short vec_xxpermdi (vector unsigned short, 43637 vector unsigned short, int); 43638 vector signed char vec_xxpermdi (vector signed char, vector signed char, int); 43639 vector unsigned char vec_xxpermdi (vector unsigned char, 43640 vector unsigned char, int); 43641 43642 vector double vec_xxsldi (vector double, vector double, int); 43643 vector float vec_xxsldi (vector float, vector float, int); 43644 vector long long vec_xxsldi (vector long long, vector long long, int); 43645 vector unsigned long long vec_xxsldi (vector unsigned long long, 43646 vector unsigned long long, int); 43647 vector int vec_xxsldi (vector int, vector int, int); 43648 vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); 43649 vector short vec_xxsldi (vector short, vector short, int); 43650 vector unsigned short vec_xxsldi (vector unsigned short, 43651 vector unsigned short, int); 43652 vector signed char vec_xxsldi (vector signed char, vector signed char, int); 43653 vector unsigned char vec_xxsldi (vector unsigned char, 43654 vector unsigned char, int); 43655 43656 Note that the 'vec_ld' and 'vec_st' built-in functions always generate 43657the AltiVec 'LVX' and 'STVX' instructions even if the VSX instruction 43658set is available. The 'vec_vsx_ld' and 'vec_vsx_st' built-in functions 43659always generate the VSX 'LXVD2X', 'LXVW4X', 'STXVD2X', and 'STXVW4X' 43660instructions. 43661 43662 If the ISA 2.07 additions to the vector/scalar (power8-vector) 43663instruction set is available, the following additional functions are 43664available for both 32-bit and 64-bit targets. For 64-bit targets, you 43665can use VECTOR LONG instead of VECTOR LONG LONG, VECTOR BOOL LONG 43666instead of VECTOR BOOL LONG LONG, and VECTOR UNSIGNED LONG instead of 43667VECTOR UNSIGNED LONG LONG. 43668 43669 vector long long vec_abs (vector long long); 43670 43671 vector long long vec_add (vector long long, vector long long); 43672 vector unsigned long long vec_add (vector unsigned long long, 43673 vector unsigned long long); 43674 43675 int vec_all_eq (vector long long, vector long long); 43676 int vec_all_ge (vector long long, vector long long); 43677 int vec_all_gt (vector long long, vector long long); 43678 int vec_all_le (vector long long, vector long long); 43679 int vec_all_lt (vector long long, vector long long); 43680 int vec_all_ne (vector long long, vector long long); 43681 int vec_any_eq (vector long long, vector long long); 43682 int vec_any_ge (vector long long, vector long long); 43683 int vec_any_gt (vector long long, vector long long); 43684 int vec_any_le (vector long long, vector long long); 43685 int vec_any_lt (vector long long, vector long long); 43686 int vec_any_ne (vector long long, vector long long); 43687 43688 vector long long vec_eqv (vector long long, vector long long); 43689 vector long long vec_eqv (vector bool long long, vector long long); 43690 vector long long vec_eqv (vector long long, vector bool long long); 43691 vector unsigned long long vec_eqv (vector unsigned long long, 43692 vector unsigned long long); 43693 vector unsigned long long vec_eqv (vector bool long long, 43694 vector unsigned long long); 43695 vector unsigned long long vec_eqv (vector unsigned long long, 43696 vector bool long long); 43697 vector int vec_eqv (vector int, vector int); 43698 vector int vec_eqv (vector bool int, vector int); 43699 vector int vec_eqv (vector int, vector bool int); 43700 vector unsigned int vec_eqv (vector unsigned int, vector unsigned int); 43701 vector unsigned int vec_eqv (vector bool unsigned int, 43702 vector unsigned int); 43703 vector unsigned int vec_eqv (vector unsigned int, 43704 vector bool unsigned int); 43705 vector short vec_eqv (vector short, vector short); 43706 vector short vec_eqv (vector bool short, vector short); 43707 vector short vec_eqv (vector short, vector bool short); 43708 vector unsigned short vec_eqv (vector unsigned short, vector unsigned short); 43709 vector unsigned short vec_eqv (vector bool unsigned short, 43710 vector unsigned short); 43711 vector unsigned short vec_eqv (vector unsigned short, 43712 vector bool unsigned short); 43713 vector signed char vec_eqv (vector signed char, vector signed char); 43714 vector signed char vec_eqv (vector bool signed char, vector signed char); 43715 vector signed char vec_eqv (vector signed char, vector bool signed char); 43716 vector unsigned char vec_eqv (vector unsigned char, vector unsigned char); 43717 vector unsigned char vec_eqv (vector bool unsigned char, vector unsigned char); 43718 vector unsigned char vec_eqv (vector unsigned char, vector bool unsigned char); 43719 43720 vector long long vec_max (vector long long, vector long long); 43721 vector unsigned long long vec_max (vector unsigned long long, 43722 vector unsigned long long); 43723 43724 vector long long vec_min (vector long long, vector long long); 43725 vector unsigned long long vec_min (vector unsigned long long, 43726 vector unsigned long long); 43727 43728 vector long long vec_nand (vector long long, vector long long); 43729 vector long long vec_nand (vector bool long long, vector long long); 43730 vector long long vec_nand (vector long long, vector bool long long); 43731 vector unsigned long long vec_nand (vector unsigned long long, 43732 vector unsigned long long); 43733 vector unsigned long long vec_nand (vector bool long long, 43734 vector unsigned long long); 43735 vector unsigned long long vec_nand (vector unsigned long long, 43736 vector bool long long); 43737 vector int vec_nand (vector int, vector int); 43738 vector int vec_nand (vector bool int, vector int); 43739 vector int vec_nand (vector int, vector bool int); 43740 vector unsigned int vec_nand (vector unsigned int, vector unsigned int); 43741 vector unsigned int vec_nand (vector bool unsigned int, 43742 vector unsigned int); 43743 vector unsigned int vec_nand (vector unsigned int, 43744 vector bool unsigned int); 43745 vector short vec_nand (vector short, vector short); 43746 vector short vec_nand (vector bool short, vector short); 43747 vector short vec_nand (vector short, vector bool short); 43748 vector unsigned short vec_nand (vector unsigned short, vector unsigned short); 43749 vector unsigned short vec_nand (vector bool unsigned short, 43750 vector unsigned short); 43751 vector unsigned short vec_nand (vector unsigned short, 43752 vector bool unsigned short); 43753 vector signed char vec_nand (vector signed char, vector signed char); 43754 vector signed char vec_nand (vector bool signed char, vector signed char); 43755 vector signed char vec_nand (vector signed char, vector bool signed char); 43756 vector unsigned char vec_nand (vector unsigned char, vector unsigned char); 43757 vector unsigned char vec_nand (vector bool unsigned char, vector unsigned char); 43758 vector unsigned char vec_nand (vector unsigned char, vector bool unsigned char); 43759 43760 vector long long vec_orc (vector long long, vector long long); 43761 vector long long vec_orc (vector bool long long, vector long long); 43762 vector long long vec_orc (vector long long, vector bool long long); 43763 vector unsigned long long vec_orc (vector unsigned long long, 43764 vector unsigned long long); 43765 vector unsigned long long vec_orc (vector bool long long, 43766 vector unsigned long long); 43767 vector unsigned long long vec_orc (vector unsigned long long, 43768 vector bool long long); 43769 vector int vec_orc (vector int, vector int); 43770 vector int vec_orc (vector bool int, vector int); 43771 vector int vec_orc (vector int, vector bool int); 43772 vector unsigned int vec_orc (vector unsigned int, vector unsigned int); 43773 vector unsigned int vec_orc (vector bool unsigned int, 43774 vector unsigned int); 43775 vector unsigned int vec_orc (vector unsigned int, 43776 vector bool unsigned int); 43777 vector short vec_orc (vector short, vector short); 43778 vector short vec_orc (vector bool short, vector short); 43779 vector short vec_orc (vector short, vector bool short); 43780 vector unsigned short vec_orc (vector unsigned short, vector unsigned short); 43781 vector unsigned short vec_orc (vector bool unsigned short, 43782 vector unsigned short); 43783 vector unsigned short vec_orc (vector unsigned short, 43784 vector bool unsigned short); 43785 vector signed char vec_orc (vector signed char, vector signed char); 43786 vector signed char vec_orc (vector bool signed char, vector signed char); 43787 vector signed char vec_orc (vector signed char, vector bool signed char); 43788 vector unsigned char vec_orc (vector unsigned char, vector unsigned char); 43789 vector unsigned char vec_orc (vector bool unsigned char, vector unsigned char); 43790 vector unsigned char vec_orc (vector unsigned char, vector bool unsigned char); 43791 43792 vector int vec_pack (vector long long, vector long long); 43793 vector unsigned int vec_pack (vector unsigned long long, 43794 vector unsigned long long); 43795 vector bool int vec_pack (vector bool long long, vector bool long long); 43796 43797 vector int vec_packs (vector long long, vector long long); 43798 vector unsigned int vec_packs (vector unsigned long long, 43799 vector unsigned long long); 43800 43801 vector unsigned int vec_packsu (vector long long, vector long long); 43802 43803 vector long long vec_rl (vector long long, 43804 vector unsigned long long); 43805 vector long long vec_rl (vector unsigned long long, 43806 vector unsigned long long); 43807 43808 vector long long vec_sl (vector long long, vector unsigned long long); 43809 vector long long vec_sl (vector unsigned long long, 43810 vector unsigned long long); 43811 43812 vector long long vec_sr (vector long long, vector unsigned long long); 43813 vector unsigned long long char vec_sr (vector unsigned long long, 43814 vector unsigned long long); 43815 43816 vector long long vec_sra (vector long long, vector unsigned long long); 43817 vector unsigned long long vec_sra (vector unsigned long long, 43818 vector unsigned long long); 43819 43820 vector long long vec_sub (vector long long, vector long long); 43821 vector unsigned long long vec_sub (vector unsigned long long, 43822 vector unsigned long long); 43823 43824 vector long long vec_unpackh (vector int); 43825 vector unsigned long long vec_unpackh (vector unsigned int); 43826 43827 vector long long vec_unpackl (vector int); 43828 vector unsigned long long vec_unpackl (vector unsigned int); 43829 43830 vector long long vec_vaddudm (vector long long, vector long long); 43831 vector long long vec_vaddudm (vector bool long long, vector long long); 43832 vector long long vec_vaddudm (vector long long, vector bool long long); 43833 vector unsigned long long vec_vaddudm (vector unsigned long long, 43834 vector unsigned long long); 43835 vector unsigned long long vec_vaddudm (vector bool unsigned long long, 43836 vector unsigned long long); 43837 vector unsigned long long vec_vaddudm (vector unsigned long long, 43838 vector bool unsigned long long); 43839 43840 vector long long vec_vbpermq (vector signed char, vector signed char); 43841 vector long long vec_vbpermq (vector unsigned char, vector unsigned char); 43842 43843 vector long long vec_vclz (vector long long); 43844 vector unsigned long long vec_vclz (vector unsigned long long); 43845 vector int vec_vclz (vector int); 43846 vector unsigned int vec_vclz (vector int); 43847 vector short vec_vclz (vector short); 43848 vector unsigned short vec_vclz (vector unsigned short); 43849 vector signed char vec_vclz (vector signed char); 43850 vector unsigned char vec_vclz (vector unsigned char); 43851 43852 vector signed char vec_vclzb (vector signed char); 43853 vector unsigned char vec_vclzb (vector unsigned char); 43854 43855 vector long long vec_vclzd (vector long long); 43856 vector unsigned long long vec_vclzd (vector unsigned long long); 43857 43858 vector short vec_vclzh (vector short); 43859 vector unsigned short vec_vclzh (vector unsigned short); 43860 43861 vector int vec_vclzw (vector int); 43862 vector unsigned int vec_vclzw (vector int); 43863 43864 vector signed char vec_vgbbd (vector signed char); 43865 vector unsigned char vec_vgbbd (vector unsigned char); 43866 43867 vector long long vec_vmaxsd (vector long long, vector long long); 43868 43869 vector unsigned long long vec_vmaxud (vector unsigned long long, 43870 unsigned vector long long); 43871 43872 vector long long vec_vminsd (vector long long, vector long long); 43873 43874 vector unsigned long long vec_vminud (vector long long, 43875 vector long long); 43876 43877 vector int vec_vpksdss (vector long long, vector long long); 43878 vector unsigned int vec_vpksdss (vector long long, vector long long); 43879 43880 vector unsigned int vec_vpkudus (vector unsigned long long, 43881 vector unsigned long long); 43882 43883 vector int vec_vpkudum (vector long long, vector long long); 43884 vector unsigned int vec_vpkudum (vector unsigned long long, 43885 vector unsigned long long); 43886 vector bool int vec_vpkudum (vector bool long long, vector bool long long); 43887 43888 vector long long vec_vpopcnt (vector long long); 43889 vector unsigned long long vec_vpopcnt (vector unsigned long long); 43890 vector int vec_vpopcnt (vector int); 43891 vector unsigned int vec_vpopcnt (vector int); 43892 vector short vec_vpopcnt (vector short); 43893 vector unsigned short vec_vpopcnt (vector unsigned short); 43894 vector signed char vec_vpopcnt (vector signed char); 43895 vector unsigned char vec_vpopcnt (vector unsigned char); 43896 43897 vector signed char vec_vpopcntb (vector signed char); 43898 vector unsigned char vec_vpopcntb (vector unsigned char); 43899 43900 vector long long vec_vpopcntd (vector long long); 43901 vector unsigned long long vec_vpopcntd (vector unsigned long long); 43902 43903 vector short vec_vpopcnth (vector short); 43904 vector unsigned short vec_vpopcnth (vector unsigned short); 43905 43906 vector int vec_vpopcntw (vector int); 43907 vector unsigned int vec_vpopcntw (vector int); 43908 43909 vector long long vec_vrld (vector long long, vector unsigned long long); 43910 vector unsigned long long vec_vrld (vector unsigned long long, 43911 vector unsigned long long); 43912 43913 vector long long vec_vsld (vector long long, vector unsigned long long); 43914 vector long long vec_vsld (vector unsigned long long, 43915 vector unsigned long long); 43916 43917 vector long long vec_vsrad (vector long long, vector unsigned long long); 43918 vector unsigned long long vec_vsrad (vector unsigned long long, 43919 vector unsigned long long); 43920 43921 vector long long vec_vsrd (vector long long, vector unsigned long long); 43922 vector unsigned long long char vec_vsrd (vector unsigned long long, 43923 vector unsigned long long); 43924 43925 vector long long vec_vsubudm (vector long long, vector long long); 43926 vector long long vec_vsubudm (vector bool long long, vector long long); 43927 vector long long vec_vsubudm (vector long long, vector bool long long); 43928 vector unsigned long long vec_vsubudm (vector unsigned long long, 43929 vector unsigned long long); 43930 vector unsigned long long vec_vsubudm (vector bool long long, 43931 vector unsigned long long); 43932 vector unsigned long long vec_vsubudm (vector unsigned long long, 43933 vector bool long long); 43934 43935 vector long long vec_vupkhsw (vector int); 43936 vector unsigned long long vec_vupkhsw (vector unsigned int); 43937 43938 vector long long vec_vupklsw (vector int); 43939 vector unsigned long long vec_vupklsw (vector int); 43940 43941 If the ISA 2.07 additions to the vector/scalar (power8-vector) 43942instruction set is available, the following additional functions are 43943available for 64-bit targets. New vector types (VECTOR __INT128_T and 43944VECTOR __UINT128_T) are available to hold the __INT128_T and __UINT128_T 43945types to use these builtins. 43946 43947 The normal vector extract, and set operations work on VECTOR __INT128_T 43948and VECTOR __UINT128_T types, but the index value must be 0. 43949 43950 vector __int128_t vec_vaddcuq (vector __int128_t, vector __int128_t); 43951 vector __uint128_t vec_vaddcuq (vector __uint128_t, vector __uint128_t); 43952 43953 vector __int128_t vec_vadduqm (vector __int128_t, vector __int128_t); 43954 vector __uint128_t vec_vadduqm (vector __uint128_t, vector __uint128_t); 43955 43956 vector __int128_t vec_vaddecuq (vector __int128_t, vector __int128_t, 43957 vector __int128_t); 43958 vector __uint128_t vec_vaddecuq (vector __uint128_t, vector __uint128_t, 43959 vector __uint128_t); 43960 43961 vector __int128_t vec_vaddeuqm (vector __int128_t, vector __int128_t, 43962 vector __int128_t); 43963 vector __uint128_t vec_vaddeuqm (vector __uint128_t, vector __uint128_t, 43964 vector __uint128_t); 43965 43966 vector __int128_t vec_vsubecuq (vector __int128_t, vector __int128_t, 43967 vector __int128_t); 43968 vector __uint128_t vec_vsubecuq (vector __uint128_t, vector __uint128_t, 43969 vector __uint128_t); 43970 43971 vector __int128_t vec_vsubeuqm (vector __int128_t, vector __int128_t, 43972 vector __int128_t); 43973 vector __uint128_t vec_vsubeuqm (vector __uint128_t, vector __uint128_t, 43974 vector __uint128_t); 43975 43976 vector __int128_t vec_vsubcuq (vector __int128_t, vector __int128_t); 43977 vector __uint128_t vec_vsubcuq (vector __uint128_t, vector __uint128_t); 43978 43979 __int128_t vec_vsubuqm (__int128_t, __int128_t); 43980 __uint128_t vec_vsubuqm (__uint128_t, __uint128_t); 43981 43982 vector __int128_t __builtin_bcdadd (vector __int128_t, vector__int128_t); 43983 int __builtin_bcdadd_lt (vector __int128_t, vector__int128_t); 43984 int __builtin_bcdadd_eq (vector __int128_t, vector__int128_t); 43985 int __builtin_bcdadd_gt (vector __int128_t, vector__int128_t); 43986 int __builtin_bcdadd_ov (vector __int128_t, vector__int128_t); 43987 vector __int128_t bcdsub (vector __int128_t, vector__int128_t); 43988 int __builtin_bcdsub_lt (vector __int128_t, vector__int128_t); 43989 int __builtin_bcdsub_eq (vector __int128_t, vector__int128_t); 43990 int __builtin_bcdsub_gt (vector __int128_t, vector__int128_t); 43991 int __builtin_bcdsub_ov (vector __int128_t, vector__int128_t); 43992 43993 If the cryptographic instructions are enabled ('-mcrypto' or 43994'-mcpu=power8'), the following builtins are enabled. 43995 43996 vector unsigned long long __builtin_crypto_vsbox (vector unsigned long long); 43997 43998 vector unsigned long long __builtin_crypto_vcipher (vector unsigned long long, 43999 vector unsigned long long); 44000 44001 vector unsigned long long __builtin_crypto_vcipherlast 44002 (vector unsigned long long, 44003 vector unsigned long long); 44004 44005 vector unsigned long long __builtin_crypto_vncipher (vector unsigned long long, 44006 vector unsigned long long); 44007 44008 vector unsigned long long __builtin_crypto_vncipherlast 44009 (vector unsigned long long, 44010 vector unsigned long long); 44011 44012 vector unsigned char __builtin_crypto_vpermxor (vector unsigned char, 44013 vector unsigned char, 44014 vector unsigned char); 44015 44016 vector unsigned short __builtin_crypto_vpermxor (vector unsigned short, 44017 vector unsigned short, 44018 vector unsigned short); 44019 44020 vector unsigned int __builtin_crypto_vpermxor (vector unsigned int, 44021 vector unsigned int, 44022 vector unsigned int); 44023 44024 vector unsigned long long __builtin_crypto_vpermxor (vector unsigned long long, 44025 vector unsigned long long, 44026 vector unsigned long long); 44027 44028 vector unsigned char __builtin_crypto_vpmsumb (vector unsigned char, 44029 vector unsigned char); 44030 44031 vector unsigned short __builtin_crypto_vpmsumb (vector unsigned short, 44032 vector unsigned short); 44033 44034 vector unsigned int __builtin_crypto_vpmsumb (vector unsigned int, 44035 vector unsigned int); 44036 44037 vector unsigned long long __builtin_crypto_vpmsumb (vector unsigned long long, 44038 vector unsigned long long); 44039 44040 vector unsigned long long __builtin_crypto_vshasigmad 44041 (vector unsigned long long, int, int); 44042 44043 vector unsigned int __builtin_crypto_vshasigmaw (vector unsigned int, 44044 int, int); 44045 44046 The second argument to the __BUILTIN_CRYPTO_VSHASIGMAD and 44047__BUILTIN_CRYPTO_VSHASIGMAW builtin functions must be a constant integer 44048that is 0 or 1. The third argument to these builtin functions must be a 44049constant integer in the range of 0 to 15. 44050 44051 44052File: gcc.info, Node: PowerPC Hardware Transactional Memory Built-in Functions, Next: RX Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 44053 440546.57.22 PowerPC Hardware Transactional Memory Built-in Functions 44055---------------------------------------------------------------- 44056 44057GCC provides two interfaces for accessing the Hardware Transactional 44058Memory (HTM) instructions available on some of the PowerPC family of 44059prcoessors (eg, POWER8). The two interfaces come in a low level 44060interface, consisting of built-in functions specific to PowerPC and a 44061higher level interface consisting of inline functions that are common 44062between PowerPC and S/390. 44063 440646.57.22.1 PowerPC HTM Low Level Built-in Functions 44065.................................................. 44066 44067The following low level built-in functions are available with '-mhtm' or 44068'-mcpu=CPU' where CPU is 'power8' or later. They all generate the 44069machine instruction that is part of the name. 44070 44071 The HTM built-ins return true or false depending on their success and 44072their arguments match exactly the type and order of the associated 44073hardware instruction's operands. Refer to the ISA manual for a 44074description of each instruction's operands. 44075 44076 unsigned int __builtin_tbegin (unsigned int) 44077 unsigned int __builtin_tend (unsigned int) 44078 44079 unsigned int __builtin_tabort (unsigned int) 44080 unsigned int __builtin_tabortdc (unsigned int, unsigned int, unsigned int) 44081 unsigned int __builtin_tabortdci (unsigned int, unsigned int, int) 44082 unsigned int __builtin_tabortwc (unsigned int, unsigned int, unsigned int) 44083 unsigned int __builtin_tabortwci (unsigned int, unsigned int, int) 44084 44085 unsigned int __builtin_tcheck (unsigned int) 44086 unsigned int __builtin_treclaim (unsigned int) 44087 unsigned int __builtin_trechkpt (void) 44088 unsigned int __builtin_tsr (unsigned int) 44089 44090 In addition to the above HTM built-ins, we have added built-ins for 44091some common extended mnemonics of the HTM instructions: 44092 44093 unsigned int __builtin_tendall (void) 44094 unsigned int __builtin_tresume (void) 44095 unsigned int __builtin_tsuspend (void) 44096 44097 The following set of built-in functions are available to gain access to 44098the HTM specific special purpose registers. 44099 44100 unsigned long __builtin_get_texasr (void) 44101 unsigned long __builtin_get_texasru (void) 44102 unsigned long __builtin_get_tfhar (void) 44103 unsigned long __builtin_get_tfiar (void) 44104 44105 void __builtin_set_texasr (unsigned long); 44106 void __builtin_set_texasru (unsigned long); 44107 void __builtin_set_tfhar (unsigned long); 44108 void __builtin_set_tfiar (unsigned long); 44109 44110 Example usage of these low level built-in functions may look like: 44111 44112 #include <htmintrin.h> 44113 44114 int num_retries = 10; 44115 44116 while (1) 44117 { 44118 if (__builtin_tbegin (0)) 44119 { 44120 /* Transaction State Initiated. */ 44121 if (is_locked (lock)) 44122 __builtin_tabort (0); 44123 ... transaction code... 44124 __builtin_tend (0); 44125 break; 44126 } 44127 else 44128 { 44129 /* Transaction State Failed. Use locks if the transaction 44130 failure is "persistent" or we've tried too many times. */ 44131 if (num_retries-- <= 0 44132 || _TEXASRU_FAILURE_PERSISTENT (__builtin_get_texasru ())) 44133 { 44134 acquire_lock (lock); 44135 ... non transactional fallback path... 44136 release_lock (lock); 44137 break; 44138 } 44139 } 44140 } 44141 44142 One final built-in function has been added that returns the value of 44143the 2-bit Transaction State field of the Machine Status Register (MSR) 44144as stored in 'CR0'. 44145 44146 unsigned long __builtin_ttest (void) 44147 44148 This built-in can be used to determine the current transaction state 44149using the following code example: 44150 44151 #include <htmintrin.h> 44152 44153 unsigned char tx_state = _HTM_STATE (__builtin_ttest ()); 44154 44155 if (tx_state == _HTM_TRANSACTIONAL) 44156 { 44157 /* Code to use in transactional state. */ 44158 } 44159 else if (tx_state == _HTM_NONTRANSACTIONAL) 44160 { 44161 /* Code to use in non-transactional state. */ 44162 } 44163 else if (tx_state == _HTM_SUSPENDED) 44164 { 44165 /* Code to use in transaction suspended state. */ 44166 } 44167 441686.57.22.2 PowerPC HTM High Level Inline Functions 44169................................................. 44170 44171The following high level HTM interface is made available by including 44172'<htmxlintrin.h>' and using '-mhtm' or '-mcpu=CPU' where CPU is 'power8' 44173or later. This interface is common between PowerPC and S/390, allowing 44174users to write one HTM source implementation that can be compiled and 44175executed on either system. 44176 44177 long __TM_simple_begin (void) 44178 long __TM_begin (void* const TM_buff) 44179 long __TM_end (void) 44180 void __TM_abort (void) 44181 void __TM_named_abort (unsigned char const code) 44182 void __TM_resume (void) 44183 void __TM_suspend (void) 44184 44185 long __TM_is_user_abort (void* const TM_buff) 44186 long __TM_is_named_user_abort (void* const TM_buff, unsigned char *code) 44187 long __TM_is_illegal (void* const TM_buff) 44188 long __TM_is_footprint_exceeded (void* const TM_buff) 44189 long __TM_nesting_depth (void* const TM_buff) 44190 long __TM_is_nested_too_deep(void* const TM_buff) 44191 long __TM_is_conflict(void* const TM_buff) 44192 long __TM_is_failure_persistent(void* const TM_buff) 44193 long __TM_failure_address(void* const TM_buff) 44194 long long __TM_failure_code(void* const TM_buff) 44195 44196 Using these common set of HTM inline functions, we can create a more 44197portable version of the HTM example in the previous section that will 44198work on either PowerPC or S/390: 44199 44200 #include <htmxlintrin.h> 44201 44202 int num_retries = 10; 44203 TM_buff_type TM_buff; 44204 44205 while (1) 44206 { 44207 if (__TM_begin (TM_buff)) 44208 { 44209 /* Transaction State Initiated. */ 44210 if (is_locked (lock)) 44211 __TM_abort (); 44212 ... transaction code... 44213 __TM_end (); 44214 break; 44215 } 44216 else 44217 { 44218 /* Transaction State Failed. Use locks if the transaction 44219 failure is "persistent" or we've tried too many times. */ 44220 if (num_retries-- <= 0 44221 || __TM_is_failure_persistent (TM_buff)) 44222 { 44223 acquire_lock (lock); 44224 ... non transactional fallback path... 44225 release_lock (lock); 44226 break; 44227 } 44228 } 44229 } 44230 44231 44232File: gcc.info, Node: RX Built-in Functions, Next: S/390 System z Built-in Functions, Prev: PowerPC Hardware Transactional Memory Built-in Functions, Up: Target Builtins 44233 442346.57.23 RX Built-in Functions 44235----------------------------- 44236 44237GCC supports some of the RX instructions which cannot be expressed in 44238the C programming language via the use of built-in functions. The 44239following functions are supported: 44240 44241 -- Built-in Function: void __builtin_rx_brk (void) 44242 Generates the 'brk' machine instruction. 44243 44244 -- Built-in Function: void __builtin_rx_clrpsw (int) 44245 Generates the 'clrpsw' machine instruction to clear the specified 44246 bit in the processor status word. 44247 44248 -- Built-in Function: void __builtin_rx_int (int) 44249 Generates the 'int' machine instruction to generate an interrupt 44250 with the specified value. 44251 44252 -- Built-in Function: void __builtin_rx_machi (int, int) 44253 Generates the 'machi' machine instruction to add the result of 44254 multiplying the top 16 bits of the two arguments into the 44255 accumulator. 44256 44257 -- Built-in Function: void __builtin_rx_maclo (int, int) 44258 Generates the 'maclo' machine instruction to add the result of 44259 multiplying the bottom 16 bits of the two arguments into the 44260 accumulator. 44261 44262 -- Built-in Function: void __builtin_rx_mulhi (int, int) 44263 Generates the 'mulhi' machine instruction to place the result of 44264 multiplying the top 16 bits of the two arguments into the 44265 accumulator. 44266 44267 -- Built-in Function: void __builtin_rx_mullo (int, int) 44268 Generates the 'mullo' machine instruction to place the result of 44269 multiplying the bottom 16 bits of the two arguments into the 44270 accumulator. 44271 44272 -- Built-in Function: int __builtin_rx_mvfachi (void) 44273 Generates the 'mvfachi' machine instruction to read the top 32 bits 44274 of the accumulator. 44275 44276 -- Built-in Function: int __builtin_rx_mvfacmi (void) 44277 Generates the 'mvfacmi' machine instruction to read the middle 32 44278 bits of the accumulator. 44279 44280 -- Built-in Function: int __builtin_rx_mvfc (int) 44281 Generates the 'mvfc' machine instruction which reads the control 44282 register specified in its argument and returns its value. 44283 44284 -- Built-in Function: void __builtin_rx_mvtachi (int) 44285 Generates the 'mvtachi' machine instruction to set the top 32 bits 44286 of the accumulator. 44287 44288 -- Built-in Function: void __builtin_rx_mvtaclo (int) 44289 Generates the 'mvtaclo' machine instruction to set the bottom 32 44290 bits of the accumulator. 44291 44292 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 44293 Generates the 'mvtc' machine instruction which sets control 44294 register number 'reg' to 'val'. 44295 44296 -- Built-in Function: void __builtin_rx_mvtipl (int) 44297 Generates the 'mvtipl' machine instruction set the interrupt 44298 priority level. 44299 44300 -- Built-in Function: void __builtin_rx_racw (int) 44301 Generates the 'racw' machine instruction to round the accumulator 44302 according to the specified mode. 44303 44304 -- Built-in Function: int __builtin_rx_revw (int) 44305 Generates the 'revw' machine instruction which swaps the bytes in 44306 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 44307 and also bits 16-23 occupy bits 24-31 and vice versa. 44308 44309 -- Built-in Function: void __builtin_rx_rmpa (void) 44310 Generates the 'rmpa' machine instruction which initiates a repeated 44311 multiply and accumulate sequence. 44312 44313 -- Built-in Function: void __builtin_rx_round (float) 44314 Generates the 'round' machine instruction which returns the 44315 floating-point argument rounded according to the current rounding 44316 mode set in the floating-point status word register. 44317 44318 -- Built-in Function: int __builtin_rx_sat (int) 44319 Generates the 'sat' machine instruction which returns the saturated 44320 value of the argument. 44321 44322 -- Built-in Function: void __builtin_rx_setpsw (int) 44323 Generates the 'setpsw' machine instruction to set the specified bit 44324 in the processor status word. 44325 44326 -- Built-in Function: void __builtin_rx_wait (void) 44327 Generates the 'wait' machine instruction. 44328 44329 44330File: gcc.info, Node: S/390 System z Built-in Functions, Next: SH Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 44331 443326.57.24 S/390 System z Built-in Functions 44333----------------------------------------- 44334 44335 -- Built-in Function: int __builtin_tbegin (void*) 44336 Generates the 'tbegin' machine instruction starting a 44337 non-constraint hardware transaction. If the parameter is non-NULL 44338 the memory area is used to store the transaction diagnostic buffer 44339 and will be passed as first operand to 'tbegin'. This buffer can 44340 be defined using the 'struct __htm_tdb' C struct defined in 44341 'htmintrin.h' and must reside on a double-word boundary. The 44342 second tbegin operand is set to '0xff0c'. This enables 44343 save/restore of all GPRs and disables aborts for FPR and AR 44344 manipulations inside the transaction body. The condition code set 44345 by the tbegin instruction is returned as integer value. The tbegin 44346 instruction by definition overwrites the content of all FPRs. The 44347 compiler will generate code which saves and restores the FPRs. For 44348 soft-float code it is recommended to used the '*_nofloat' variant. 44349 In order to prevent a TDB from being written it is required to pass 44350 an constant zero value as parameter. Passing the zero value 44351 through a variable is not sufficient. Although modifications of 44352 access registers inside the transaction will not trigger an 44353 transaction abort it is not supported to actually modify them. 44354 Access registers do not get saved when entering a transaction. 44355 They will have undefined state when reaching the abort code. 44356 44357 Macros for the possible return codes of tbegin are defined in the 44358'htmintrin.h' header file: 44359 44360'_HTM_TBEGIN_STARTED' 44361 'tbegin' has been executed as part of normal processing. The 44362 transaction body is supposed to be executed. 44363'_HTM_TBEGIN_INDETERMINATE' 44364 The transaction was aborted due to an indeterminate condition which 44365 might be persistent. 44366'_HTM_TBEGIN_TRANSIENT' 44367 The transaction aborted due to a transient failure. The 44368 transaction should be re-executed in that case. 44369'_HTM_TBEGIN_PERSISTENT' 44370 The transaction aborted due to a persistent failure. Re-execution 44371 under same circumstances will not be productive. 44372 44373 -- Macro: _HTM_FIRST_USER_ABORT_CODE 44374 The '_HTM_FIRST_USER_ABORT_CODE' defined in 'htmintrin.h' specifies 44375 the first abort code which can be used for '__builtin_tabort'. 44376 Values below this threshold are reserved for machine use. 44377 44378 -- Data type: struct __htm_tdb 44379 The 'struct __htm_tdb' defined in 'htmintrin.h' describes the 44380 structure of the transaction diagnostic block as specified in the 44381 Principles of Operation manual chapter 5-91. 44382 44383 -- Built-in Function: int __builtin_tbegin_nofloat (void*) 44384 Same as '__builtin_tbegin' but without FPR saves and restores. 44385 Using this variant in code making use of FPRs will leave the FPRs 44386 in undefined state when entering the transaction abort handler 44387 code. 44388 44389 -- Built-in Function: int __builtin_tbegin_retry (void*, int) 44390 In addition to '__builtin_tbegin' a loop for transient failures is 44391 generated. If tbegin returns a condition code of 2 the transaction 44392 will be retried as often as specified in the second argument. The 44393 perform processor assist instruction is used to tell the CPU about 44394 the number of fails so far. 44395 44396 -- Built-in Function: int __builtin_tbegin_retry_nofloat (void*, int) 44397 Same as '__builtin_tbegin_retry' but without FPR saves and 44398 restores. Using this variant in code making use of FPRs will leave 44399 the FPRs in undefined state when entering the transaction abort 44400 handler code. 44401 44402 -- Built-in Function: void __builtin_tbeginc (void) 44403 Generates the 'tbeginc' machine instruction starting a constraint 44404 hardware transaction. The second operand is set to '0xff08'. 44405 44406 -- Built-in Function: int __builtin_tend (void) 44407 Generates the 'tend' machine instruction finishing a transaction 44408 and making the changes visible to other threads. The condition 44409 code generated by tend is returned as integer value. 44410 44411 -- Built-in Function: void __builtin_tabort (int) 44412 Generates the 'tabort' machine instruction with the specified abort 44413 code. Abort codes from 0 through 255 are reserved and will result 44414 in an error message. 44415 44416 -- Built-in Function: void __builtin_tx_assist (int) 44417 Generates the 'ppa rX,rY,1' machine instruction. Where the integer 44418 parameter is loaded into rX and a value of zero is loaded into rY. 44419 The integer parameter specifies the number of times the transaction 44420 repeatedly aborted. 44421 44422 -- Built-in Function: int __builtin_tx_nesting_depth (void) 44423 Generates the 'etnd' machine instruction. The current nesting 44424 depth is returned as integer value. For a nesting depth of 0 the 44425 code is not executed as part of an transaction. 44426 44427 -- Built-in Function: void __builtin_non_tx_store (uint64_t *, 44428 uint64_t) 44429 44430 Generates the 'ntstg' machine instruction. The second argument is 44431 written to the first arguments location. The store operation will 44432 not be rolled-back in case of an transaction abort. 44433 44434 44435File: gcc.info, Node: SH Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: S/390 System z Built-in Functions, Up: Target Builtins 44436 444376.57.25 SH Built-in Functions 44438----------------------------- 44439 44440The following built-in functions are supported on the SH1, SH2, SH3 and 44441SH4 families of processors: 44442 44443 -- Built-in Function: void __builtin_set_thread_pointer (void *PTR) 44444 Sets the 'GBR' register to the specified value PTR. This is 44445 usually used by system code that manages threads and execution 44446 contexts. The compiler normally does not generate code that 44447 modifies the contents of 'GBR' and thus the value is preserved 44448 across function calls. Changing the 'GBR' value in user code must 44449 be done with caution, since the compiler might use 'GBR' in order 44450 to access thread local variables. 44451 44452 -- Built-in Function: void * __builtin_thread_pointer (void) 44453 Returns the value that is currently set in the 'GBR' register. 44454 Memory loads and stores that use the thread pointer as a base 44455 address are turned into 'GBR' based displacement loads and stores, 44456 if possible. For example: 44457 struct my_tcb 44458 { 44459 int a, b, c, d, e; 44460 }; 44461 44462 int get_tcb_value (void) 44463 { 44464 // Generate 'mov.l @(8,gbr),r0' instruction 44465 return ((my_tcb*)__builtin_thread_pointer ())->c; 44466 } 44467 44468 44469 44470File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: SH Built-in Functions, Up: Target Builtins 44471 444726.57.26 SPARC VIS Built-in Functions 44473------------------------------------ 44474 44475GCC supports SIMD operations on the SPARC using both the generic vector 44476extensions (*note Vector Extensions::) as well as built-in functions for 44477the SPARC Visual Instruction Set (VIS). When you use the '-mvis' switch, 44478the VIS extension is exposed as the following built-in functions: 44479 44480 typedef int v1si __attribute__ ((vector_size (4))); 44481 typedef int v2si __attribute__ ((vector_size (8))); 44482 typedef short v4hi __attribute__ ((vector_size (8))); 44483 typedef short v2hi __attribute__ ((vector_size (4))); 44484 typedef unsigned char v8qi __attribute__ ((vector_size (8))); 44485 typedef unsigned char v4qi __attribute__ ((vector_size (4))); 44486 44487 void __builtin_vis_write_gsr (int64_t); 44488 int64_t __builtin_vis_read_gsr (void); 44489 44490 void * __builtin_vis_alignaddr (void *, long); 44491 void * __builtin_vis_alignaddrl (void *, long); 44492 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 44493 v2si __builtin_vis_faligndatav2si (v2si, v2si); 44494 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 44495 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 44496 44497 v4hi __builtin_vis_fexpand (v4qi); 44498 44499 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 44500 v4hi __builtin_vis_fmul8x16au (v4qi, v2hi); 44501 v4hi __builtin_vis_fmul8x16al (v4qi, v2hi); 44502 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 44503 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 44504 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 44505 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 44506 44507 v4qi __builtin_vis_fpack16 (v4hi); 44508 v8qi __builtin_vis_fpack32 (v2si, v8qi); 44509 v2hi __builtin_vis_fpackfix (v2si); 44510 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 44511 44512 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 44513 44514 long __builtin_vis_edge8 (void *, void *); 44515 long __builtin_vis_edge8l (void *, void *); 44516 long __builtin_vis_edge16 (void *, void *); 44517 long __builtin_vis_edge16l (void *, void *); 44518 long __builtin_vis_edge32 (void *, void *); 44519 long __builtin_vis_edge32l (void *, void *); 44520 44521 long __builtin_vis_fcmple16 (v4hi, v4hi); 44522 long __builtin_vis_fcmple32 (v2si, v2si); 44523 long __builtin_vis_fcmpne16 (v4hi, v4hi); 44524 long __builtin_vis_fcmpne32 (v2si, v2si); 44525 long __builtin_vis_fcmpgt16 (v4hi, v4hi); 44526 long __builtin_vis_fcmpgt32 (v2si, v2si); 44527 long __builtin_vis_fcmpeq16 (v4hi, v4hi); 44528 long __builtin_vis_fcmpeq32 (v2si, v2si); 44529 44530 v4hi __builtin_vis_fpadd16 (v4hi, v4hi); 44531 v2hi __builtin_vis_fpadd16s (v2hi, v2hi); 44532 v2si __builtin_vis_fpadd32 (v2si, v2si); 44533 v1si __builtin_vis_fpadd32s (v1si, v1si); 44534 v4hi __builtin_vis_fpsub16 (v4hi, v4hi); 44535 v2hi __builtin_vis_fpsub16s (v2hi, v2hi); 44536 v2si __builtin_vis_fpsub32 (v2si, v2si); 44537 v1si __builtin_vis_fpsub32s (v1si, v1si); 44538 44539 long __builtin_vis_array8 (long, long); 44540 long __builtin_vis_array16 (long, long); 44541 long __builtin_vis_array32 (long, long); 44542 44543 When you use the '-mvis2' switch, the VIS version 2.0 built-in 44544functions also become available: 44545 44546 long __builtin_vis_bmask (long, long); 44547 int64_t __builtin_vis_bshuffledi (int64_t, int64_t); 44548 v2si __builtin_vis_bshufflev2si (v2si, v2si); 44549 v4hi __builtin_vis_bshufflev2si (v4hi, v4hi); 44550 v8qi __builtin_vis_bshufflev2si (v8qi, v8qi); 44551 44552 long __builtin_vis_edge8n (void *, void *); 44553 long __builtin_vis_edge8ln (void *, void *); 44554 long __builtin_vis_edge16n (void *, void *); 44555 long __builtin_vis_edge16ln (void *, void *); 44556 long __builtin_vis_edge32n (void *, void *); 44557 long __builtin_vis_edge32ln (void *, void *); 44558 44559 When you use the '-mvis3' switch, the VIS version 3.0 built-in 44560functions also become available: 44561 44562 void __builtin_vis_cmask8 (long); 44563 void __builtin_vis_cmask16 (long); 44564 void __builtin_vis_cmask32 (long); 44565 44566 v4hi __builtin_vis_fchksm16 (v4hi, v4hi); 44567 44568 v4hi __builtin_vis_fsll16 (v4hi, v4hi); 44569 v4hi __builtin_vis_fslas16 (v4hi, v4hi); 44570 v4hi __builtin_vis_fsrl16 (v4hi, v4hi); 44571 v4hi __builtin_vis_fsra16 (v4hi, v4hi); 44572 v2si __builtin_vis_fsll16 (v2si, v2si); 44573 v2si __builtin_vis_fslas16 (v2si, v2si); 44574 v2si __builtin_vis_fsrl16 (v2si, v2si); 44575 v2si __builtin_vis_fsra16 (v2si, v2si); 44576 44577 long __builtin_vis_pdistn (v8qi, v8qi); 44578 44579 v4hi __builtin_vis_fmean16 (v4hi, v4hi); 44580 44581 int64_t __builtin_vis_fpadd64 (int64_t, int64_t); 44582 int64_t __builtin_vis_fpsub64 (int64_t, int64_t); 44583 44584 v4hi __builtin_vis_fpadds16 (v4hi, v4hi); 44585 v2hi __builtin_vis_fpadds16s (v2hi, v2hi); 44586 v4hi __builtin_vis_fpsubs16 (v4hi, v4hi); 44587 v2hi __builtin_vis_fpsubs16s (v2hi, v2hi); 44588 v2si __builtin_vis_fpadds32 (v2si, v2si); 44589 v1si __builtin_vis_fpadds32s (v1si, v1si); 44590 v2si __builtin_vis_fpsubs32 (v2si, v2si); 44591 v1si __builtin_vis_fpsubs32s (v1si, v1si); 44592 44593 long __builtin_vis_fucmple8 (v8qi, v8qi); 44594 long __builtin_vis_fucmpne8 (v8qi, v8qi); 44595 long __builtin_vis_fucmpgt8 (v8qi, v8qi); 44596 long __builtin_vis_fucmpeq8 (v8qi, v8qi); 44597 44598 float __builtin_vis_fhadds (float, float); 44599 double __builtin_vis_fhaddd (double, double); 44600 float __builtin_vis_fhsubs (float, float); 44601 double __builtin_vis_fhsubd (double, double); 44602 float __builtin_vis_fnhadds (float, float); 44603 double __builtin_vis_fnhaddd (double, double); 44604 44605 int64_t __builtin_vis_umulxhi (int64_t, int64_t); 44606 int64_t __builtin_vis_xmulx (int64_t, int64_t); 44607 int64_t __builtin_vis_xmulxhi (int64_t, int64_t); 44608 44609 44610File: gcc.info, Node: SPU Built-in Functions, Next: TI C6X Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 44611 446126.57.27 SPU Built-in Functions 44613------------------------------ 44614 44615GCC provides extensions for the SPU processor as described in the 44616Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 44617found at <http://cell.scei.co.jp/> or 44618<http://www.ibm.com/developerworks/power/cell/>. GCC's implementation 44619differs in several ways. 44620 44621 * The optional extension of specifying vector constants in 44622 parentheses is not supported. 44623 44624 * A vector initializer requires no cast if the vector constant is of 44625 the same type as the variable it is initializing. 44626 44627 * If 'signed' or 'unsigned' is omitted, the signedness of the vector 44628 type is the default signedness of the base type. The default 44629 varies depending on the operating system, so a portable program 44630 should always specify the signedness. 44631 44632 * By default, the keyword '__vector' is added. The macro 'vector' is 44633 defined in '<spu_intrinsics.h>' and can be undefined. 44634 44635 * GCC allows using a 'typedef' name as the type specifier for a 44636 vector type. 44637 44638 * For C, overloaded functions are implemented with macros so the 44639 following does not work: 44640 44641 spu_add ((vector signed int){1, 2, 3, 4}, foo); 44642 44643 Since 'spu_add' is a macro, the vector constant in the example is 44644 treated as four separate arguments. Wrap the entire argument in 44645 parentheses for this to work. 44646 44647 * The extended version of '__builtin_expect' is not supported. 44648 44649 _Note:_ Only the interface described in the aforementioned 44650specification is supported. Internally, GCC uses built-in functions to 44651implement the required functionality, but these are not supported and 44652are subject to change without notice. 44653 44654 44655File: gcc.info, Node: TI C6X Built-in Functions, Next: TILE-Gx Built-in Functions, Prev: SPU Built-in Functions, Up: Target Builtins 44656 446576.57.28 TI C6X Built-in Functions 44658--------------------------------- 44659 44660GCC provides intrinsics to access certain instructions of the TI C6X 44661processors. These intrinsics, listed below, are available after 44662inclusion of the 'c6x_intrinsics.h' header file. They map directly to 44663C6X instructions. 44664 44665 44666 int _sadd (int, int) 44667 int _ssub (int, int) 44668 int _sadd2 (int, int) 44669 int _ssub2 (int, int) 44670 long long _mpy2 (int, int) 44671 long long _smpy2 (int, int) 44672 int _add4 (int, int) 44673 int _sub4 (int, int) 44674 int _saddu4 (int, int) 44675 44676 int _smpy (int, int) 44677 int _smpyh (int, int) 44678 int _smpyhl (int, int) 44679 int _smpylh (int, int) 44680 44681 int _sshl (int, int) 44682 int _subc (int, int) 44683 44684 int _avg2 (int, int) 44685 int _avgu4 (int, int) 44686 44687 int _clrr (int, int) 44688 int _extr (int, int) 44689 int _extru (int, int) 44690 int _abs (int) 44691 int _abs2 (int) 44692 44693 44694 44695File: gcc.info, Node: TILE-Gx Built-in Functions, Next: TILEPro Built-in Functions, Prev: TI C6X Built-in Functions, Up: Target Builtins 44696 446976.57.29 TILE-Gx Built-in Functions 44698---------------------------------- 44699 44700GCC provides intrinsics to access every instruction of the TILE-Gx 44701processor. The intrinsics are of the form: 44702 44703 44704 unsigned long long __insn_OP (...) 44705 44706 44707 Where OP is the name of the instruction. Refer to the ISA manual for 44708the complete list of instructions. 44709 44710 GCC also provides intrinsics to directly access the network registers. 44711The intrinsics are: 44712 44713 44714 unsigned long long __tile_idn0_receive (void) 44715 unsigned long long __tile_idn1_receive (void) 44716 unsigned long long __tile_udn0_receive (void) 44717 unsigned long long __tile_udn1_receive (void) 44718 unsigned long long __tile_udn2_receive (void) 44719 unsigned long long __tile_udn3_receive (void) 44720 void __tile_idn_send (unsigned long long) 44721 void __tile_udn_send (unsigned long long) 44722 44723 44724 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee 44725that no network operations before it are reordered with those after it. 44726 44727 44728File: gcc.info, Node: TILEPro Built-in Functions, Prev: TILE-Gx Built-in Functions, Up: Target Builtins 44729 447306.57.30 TILEPro Built-in Functions 44731---------------------------------- 44732 44733GCC provides intrinsics to access every instruction of the TILEPro 44734processor. The intrinsics are of the form: 44735 44736 44737 unsigned __insn_OP (...) 44738 44739 44740where OP is the name of the instruction. Refer to the ISA manual for 44741the complete list of instructions. 44742 44743 GCC also provides intrinsics to directly access the network registers. 44744The intrinsics are: 44745 44746 44747 unsigned __tile_idn0_receive (void) 44748 unsigned __tile_idn1_receive (void) 44749 unsigned __tile_sn_receive (void) 44750 unsigned __tile_udn0_receive (void) 44751 unsigned __tile_udn1_receive (void) 44752 unsigned __tile_udn2_receive (void) 44753 unsigned __tile_udn3_receive (void) 44754 void __tile_idn_send (unsigned) 44755 void __tile_sn_send (unsigned) 44756 void __tile_udn_send (unsigned) 44757 44758 44759 The intrinsic 'void __tile_network_barrier (void)' is used to guarantee 44760that no network operations before it are reordered with those after it. 44761 44762 44763File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 44764 447656.58 Format Checks Specific to Particular Target Machines 44766========================================================= 44767 44768For some target machines, GCC supports additional options to the format 44769attribute (*note Declaring Attributes of Functions: Function 44770Attributes.). 44771 44772* Menu: 44773 44774* Solaris Format Checks:: 44775* Darwin Format Checks:: 44776 44777 44778File: gcc.info, Node: Solaris Format Checks, Next: Darwin Format Checks, Up: Target Format Checks 44779 447806.58.1 Solaris Format Checks 44781---------------------------- 44782 44783Solaris targets support the 'cmn_err' (or '__cmn_err__') format check. 44784'cmn_err' accepts a subset of the standard 'printf' conversions, and the 44785two-argument '%b' conversion for displaying bit-fields. See the Solaris 44786man page for 'cmn_err' for more information. 44787 44788 44789File: gcc.info, Node: Darwin Format Checks, Prev: Solaris Format Checks, Up: Target Format Checks 44790 447916.58.2 Darwin Format Checks 44792--------------------------- 44793 44794Darwin targets support the 'CFString' (or '__CFString__') in the format 44795attribute context. Declarations made with such attribution are parsed 44796for correct syntax and format argument types. However, parsing of the 44797format string itself is currently undefined and is not carried out by 44798this version of the compiler. 44799 44800 Additionally, 'CFStringRefs' (defined by the 'CoreFoundation' headers) 44801may also be used as format arguments. Note that the relevant headers 44802are only likely to be available on Darwin (OSX) installations. On such 44803installations, the XCode and system documentation provide descriptions 44804of 'CFString', 'CFStringRefs' and associated functions. 44805 44806 44807File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 44808 448096.59 Pragmas Accepted by GCC 44810============================ 44811 44812GCC supports several types of pragmas, primarily in order to compile 44813code originally written for other compilers. Note that in general we do 44814not recommend the use of pragmas; *Note Function Attributes::, for 44815further explanation. 44816 44817* Menu: 44818 44819* ARM Pragmas:: 44820* M32C Pragmas:: 44821* MeP Pragmas:: 44822* RS/6000 and PowerPC Pragmas:: 44823* Darwin Pragmas:: 44824* Solaris Pragmas:: 44825* Symbol-Renaming Pragmas:: 44826* Structure-Packing Pragmas:: 44827* Weak Pragmas:: 44828* Diagnostic Pragmas:: 44829* Visibility Pragmas:: 44830* Push/Pop Macro Pragmas:: 44831* Function Specific Option Pragmas:: 44832* Loop-Specific Pragmas:: 44833 44834 44835File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 44836 448376.59.1 ARM Pragmas 44838------------------ 44839 44840The ARM target defines pragmas for controlling the default addition of 44841'long_call' and 'short_call' attributes to functions. *Note Function 44842Attributes::, for information about the effects of these attributes. 44843 44844'long_calls' 44845 Set all subsequent functions to have the 'long_call' attribute. 44846 44847'no_long_calls' 44848 Set all subsequent functions to have the 'short_call' attribute. 44849 44850'long_calls_off' 44851 Do not affect the 'long_call' or 'short_call' attributes of 44852 subsequent functions. 44853 44854 44855File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 44856 448576.59.2 M32C Pragmas 44858------------------- 44859 44860'GCC memregs NUMBER' 44861 Overrides the command-line option '-memregs=' for the current file. 44862 Use with care! This pragma must be before any function in the 44863 file, and mixing different memregs values in different objects may 44864 make them incompatible. This pragma is useful when a 44865 performance-critical function uses a memreg for temporary values, 44866 as it may allow you to reduce the number of memregs used. 44867 44868'ADDRESS NAME ADDRESS' 44869 For any declared symbols matching NAME, this does three things to 44870 that symbol: it forces the symbol to be located at the given 44871 address (a number), it forces the symbol to be volatile, and it 44872 changes the symbol's scope to be static. This pragma exists for 44873 compatibility with other compilers, but note that the common 44874 '1234H' numeric syntax is not supported (use '0x1234' instead). 44875 Example: 44876 44877 #pragma ADDRESS port3 0x103 44878 char port3; 44879 44880 44881File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 44882 448836.59.3 MeP Pragmas 44884------------------ 44885 44886'custom io_volatile (on|off)' 44887 Overrides the command-line option '-mio-volatile' for the current 44888 file. Note that for compatibility with future GCC releases, this 44889 option should only be used once before any 'io' variables in each 44890 file. 44891 44892'GCC coprocessor available REGISTERS' 44893 Specifies which coprocessor registers are available to the register 44894 allocator. REGISTERS may be a single register, register range 44895 separated by ellipses, or comma-separated list of those. Example: 44896 44897 #pragma GCC coprocessor available $c0...$c10, $c28 44898 44899'GCC coprocessor call_saved REGISTERS' 44900 Specifies which coprocessor registers are to be saved and restored 44901 by any function using them. REGISTERS may be a single register, 44902 register range separated by ellipses, or comma-separated list of 44903 those. Example: 44904 44905 #pragma GCC coprocessor call_saved $c4...$c6, $c31 44906 44907'GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 44908 Creates and defines a register class. These register classes can 44909 be used by inline 'asm' constructs. REGISTERS may be a single 44910 register, register range separated by ellipses, or comma-separated 44911 list of those. Example: 44912 44913 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 44914 44915 asm ("cpfoo %0" : "=B" (x)); 44916 44917'GCC disinterrupt NAME , NAME ...' 44918 For the named functions, the compiler adds code to disable 44919 interrupts for the duration of those functions. If any functions 44920 so named are not encountered in the source, a warning is emitted 44921 that the pragma is not used. Examples: 44922 44923 #pragma disinterrupt foo 44924 #pragma disinterrupt bar, grill 44925 int foo () { ... } 44926 44927'GCC call NAME , NAME ...' 44928 For the named functions, the compiler always uses a 44929 register-indirect call model when calling the named functions. 44930 Examples: 44931 44932 extern int foo (); 44933 #pragma call foo 44934 44935 44936File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 44937 449386.59.4 RS/6000 and PowerPC Pragmas 44939---------------------------------- 44940 44941The RS/6000 and PowerPC targets define one pragma for controlling 44942whether or not the 'longcall' attribute is added to function 44943declarations by default. This pragma overrides the '-mlongcall' option, 44944but not the 'longcall' and 'shortcall' attributes. *Note RS/6000 and 44945PowerPC Options::, for more information about when long calls are and 44946are not necessary. 44947 44948'longcall (1)' 44949 Apply the 'longcall' attribute to all subsequent function 44950 declarations. 44951 44952'longcall (0)' 44953 Do not apply the 'longcall' attribute to subsequent function 44954 declarations. 44955 44956 44957File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 44958 449596.59.5 Darwin Pragmas 44960--------------------- 44961 44962The following pragmas are available for all architectures running the 44963Darwin operating system. These are useful for compatibility with other 44964Mac OS compilers. 44965 44966'mark TOKENS...' 44967 This pragma is accepted, but has no effect. 44968 44969'options align=ALIGNMENT' 44970 This pragma sets the alignment of fields in structures. The values 44971 of ALIGNMENT may be 'mac68k', to emulate m68k alignment, or 44972 'power', to emulate PowerPC alignment. Uses of this pragma nest 44973 properly; to restore the previous setting, use 'reset' for the 44974 ALIGNMENT. 44975 44976'segment TOKENS...' 44977 This pragma is accepted, but has no effect. 44978 44979'unused (VAR [, VAR]...)' 44980 This pragma declares variables to be possibly unused. GCC does not 44981 produce warnings for the listed variables. The effect is similar 44982 to that of the 'unused' attribute, except that this pragma may 44983 appear anywhere within the variables' scopes. 44984 44985 44986File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 44987 449886.59.6 Solaris Pragmas 44989---------------------- 44990 44991The Solaris target supports '#pragma redefine_extname' (*note 44992Symbol-Renaming Pragmas::). It also supports additional '#pragma' 44993directives for compatibility with the system compiler. 44994 44995'align ALIGNMENT (VARIABLE [, VARIABLE]...)' 44996 44997 Increase the minimum alignment of each VARIABLE to ALIGNMENT. This 44998 is the same as GCC's 'aligned' attribute *note Variable 44999 Attributes::). Macro expansion occurs on the arguments to this 45000 pragma when compiling C and Objective-C. It does not currently 45001 occur when compiling C++, but this is a bug which may be fixed in a 45002 future release. 45003 45004'fini (FUNCTION [, FUNCTION]...)' 45005 45006 This pragma causes each listed FUNCTION to be called after main, or 45007 during shared module unloading, by adding a call to the '.fini' 45008 section. 45009 45010'init (FUNCTION [, FUNCTION]...)' 45011 45012 This pragma causes each listed FUNCTION to be called during 45013 initialization (before 'main') or during shared module loading, by 45014 adding a call to the '.init' section. 45015 45016 45017File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 45018 450196.59.7 Symbol-Renaming Pragmas 45020------------------------------ 45021 45022For compatibility with the Solaris system headers, GCC supports two 45023'#pragma' directives that change the name used in assembly for a given 45024declaration. To get this effect on all platforms supported by GCC, use 45025the asm labels extension (*note Asm Labels::). 45026 45027'redefine_extname OLDNAME NEWNAME' 45028 45029 This pragma gives the C function OLDNAME the assembly symbol 45030 NEWNAME. The preprocessor macro '__PRAGMA_REDEFINE_EXTNAME' is 45031 defined if this pragma is available (currently on all platforms). 45032 45033 This pragma and the asm labels extension interact in a complicated 45034manner. Here are some corner cases you may want to be aware of. 45035 45036 1. Both pragmas silently apply only to declarations with external 45037 linkage. Asm labels do not have this restriction. 45038 45039 2. In C++, both pragmas silently apply only to declarations with "C" 45040 linkage. Again, asm labels do not have this restriction. 45041 45042 3. If any of the three ways of changing the assembly name of a 45043 declaration is applied to a declaration whose assembly name has 45044 already been determined (either by a previous use of one of these 45045 features, or because the compiler needed the assembly name in order 45046 to generate code), and the new name is different, a warning issues 45047 and the name does not change. 45048 45049 4. The OLDNAME used by '#pragma redefine_extname' is always the 45050 C-language name. 45051 45052 45053File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 45054 450556.59.8 Structure-Packing Pragmas 45056-------------------------------- 45057 45058For compatibility with Microsoft Windows compilers, GCC supports a set 45059of '#pragma' directives that change the maximum alignment of members of 45060structures (other than zero-width bit-fields), unions, and classes 45061subsequently defined. The N value below always is required to be a 45062small power of two and specifies the new alignment in bytes. 45063 45064 1. '#pragma pack(N)' simply sets the new alignment. 45065 2. '#pragma pack()' sets the alignment to the one that was in effect 45066 when compilation started (see also command-line option 45067 '-fpack-struct[=N]' *note Code Gen Options::). 45068 3. '#pragma pack(push[,N])' pushes the current alignment setting on an 45069 internal stack and then optionally sets the new alignment. 45070 4. '#pragma pack(pop)' restores the alignment setting to the one saved 45071 at the top of the internal stack (and removes that stack entry). 45072 Note that '#pragma pack([N])' does not influence this internal 45073 stack; thus it is possible to have '#pragma pack(push)' followed by 45074 multiple '#pragma pack(N)' instances and finalized by a single 45075 '#pragma pack(pop)'. 45076 45077 Some targets, e.g. i386 and PowerPC, support the 'ms_struct' '#pragma' 45078which lays out a structure as the documented '__attribute__ 45079((ms_struct))'. 45080 1. '#pragma ms_struct on' turns on the layout for structures declared. 45081 2. '#pragma ms_struct off' turns off the layout for structures 45082 declared. 45083 3. '#pragma ms_struct reset' goes back to the default layout. 45084 45085 45086File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 45087 450886.59.9 Weak Pragmas 45089------------------- 45090 45091For compatibility with SVR4, GCC supports a set of '#pragma' directives 45092for declaring symbols to be weak, and defining weak aliases. 45093 45094'#pragma weak SYMBOL' 45095 This pragma declares SYMBOL to be weak, as if the declaration had 45096 the attribute of the same name. The pragma may appear before or 45097 after the declaration of SYMBOL. It is not an error for SYMBOL to 45098 never be defined at all. 45099 45100'#pragma weak SYMBOL1 = SYMBOL2' 45101 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 45102 an error if SYMBOL2 is not defined in the current translation unit. 45103 45104 45105File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 45106 451076.59.10 Diagnostic Pragmas 45108-------------------------- 45109 45110GCC allows the user to selectively enable or disable certain types of 45111diagnostics, and change the kind of the diagnostic. For example, a 45112project's policy might require that all sources compile with '-Werror' 45113but certain files might have exceptions allowing specific types of 45114warnings. Or, a project might selectively enable diagnostics and treat 45115them as errors depending on which preprocessor macros are defined. 45116 45117'#pragma GCC diagnostic KIND OPTION' 45118 45119 Modifies the disposition of a diagnostic. Note that not all 45120 diagnostics are modifiable; at the moment only warnings (normally 45121 controlled by '-W...') can be controlled, and not all of them. Use 45122 '-fdiagnostics-show-option' to determine which diagnostics are 45123 controllable and which option controls them. 45124 45125 KIND is 'error' to treat this diagnostic as an error, 'warning' to 45126 treat it like a warning (even if '-Werror' is in effect), or 45127 'ignored' if the diagnostic is to be ignored. OPTION is a double 45128 quoted string that matches the command-line option. 45129 45130 #pragma GCC diagnostic warning "-Wformat" 45131 #pragma GCC diagnostic error "-Wformat" 45132 #pragma GCC diagnostic ignored "-Wformat" 45133 45134 Note that these pragmas override any command-line options. GCC 45135 keeps track of the location of each pragma, and issues diagnostics 45136 according to the state as of that point in the source file. Thus, 45137 pragmas occurring after a line do not affect diagnostics caused by 45138 that line. 45139 45140'#pragma GCC diagnostic push' 45141'#pragma GCC diagnostic pop' 45142 45143 Causes GCC to remember the state of the diagnostics as of each 45144 'push', and restore to that point at each 'pop'. If a 'pop' has no 45145 matching 'push', the command-line options are restored. 45146 45147 #pragma GCC diagnostic error "-Wuninitialized" 45148 foo(a); /* error is given for this one */ 45149 #pragma GCC diagnostic push 45150 #pragma GCC diagnostic ignored "-Wuninitialized" 45151 foo(b); /* no diagnostic for this one */ 45152 #pragma GCC diagnostic pop 45153 foo(c); /* error is given for this one */ 45154 #pragma GCC diagnostic pop 45155 foo(d); /* depends on command-line options */ 45156 45157 GCC also offers a simple mechanism for printing messages during 45158compilation. 45159 45160'#pragma message STRING' 45161 45162 Prints STRING as a compiler message on compilation. The message is 45163 informational only, and is neither a compilation warning nor an 45164 error. 45165 45166 #pragma message "Compiling " __FILE__ "..." 45167 45168 STRING may be parenthesized, and is printed with location 45169 information. For example, 45170 45171 #define DO_PRAGMA(x) _Pragma (#x) 45172 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 45173 45174 TODO(Remember to fix this) 45175 45176 prints '/tmp/file.c:4: note: #pragma message: TODO - Remember to 45177 fix this'. 45178 45179 45180File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 45181 451826.59.11 Visibility Pragmas 45183-------------------------- 45184 45185'#pragma GCC visibility push(VISIBILITY)' 45186'#pragma GCC visibility pop' 45187 45188 This pragma allows the user to set the visibility for multiple 45189 declarations without having to give each a visibility attribute 45190 *Note Function Attributes::, for more information about visibility 45191 and the attribute syntax. 45192 45193 In C++, '#pragma GCC visibility' affects only namespace-scope 45194 declarations. Class members and template specializations are not 45195 affected; if you want to override the visibility for a particular 45196 member or instantiation, you must use an attribute. 45197 45198 45199File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 45200 452016.59.12 Push/Pop Macro Pragmas 45202------------------------------ 45203 45204For compatibility with Microsoft Windows compilers, GCC supports 45205'#pragma push_macro("MACRO_NAME")' and '#pragma 45206pop_macro("MACRO_NAME")'. 45207 45208'#pragma push_macro("MACRO_NAME")' 45209 This pragma saves the value of the macro named as MACRO_NAME to the 45210 top of the stack for this macro. 45211 45212'#pragma pop_macro("MACRO_NAME")' 45213 This pragma sets the value of the macro named as MACRO_NAME to the 45214 value on top of the stack for this macro. If the stack for 45215 MACRO_NAME is empty, the value of the macro remains unchanged. 45216 45217 For example: 45218 45219 #define X 1 45220 #pragma push_macro("X") 45221 #undef X 45222 #define X -1 45223 #pragma pop_macro("X") 45224 int x [X]; 45225 45226In this example, the definition of X as 1 is saved by '#pragma 45227push_macro' and restored by '#pragma pop_macro'. 45228 45229 45230File: gcc.info, Node: Function Specific Option Pragmas, Next: Loop-Specific Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 45231 452326.59.13 Function Specific Option Pragmas 45233---------------------------------------- 45234 45235'#pragma GCC target ("STRING"...)' 45236 45237 This pragma allows you to set target specific options for functions 45238 defined later in the source file. One or more strings can be 45239 specified. Each function that is defined after this point is as if 45240 'attribute((target("STRING")))' was specified for that function. 45241 The parenthesis around the options is optional. *Note Function 45242 Attributes::, for more information about the 'target' attribute and 45243 the attribute syntax. 45244 45245 The '#pragma GCC target' pragma is presently implemented for 45246 i386/x86_64, PowerPC, and Nios II targets only. 45247 45248'#pragma GCC optimize ("STRING"...)' 45249 45250 This pragma allows you to set global optimization options for 45251 functions defined later in the source file. One or more strings 45252 can be specified. Each function that is defined after this point 45253 is as if 'attribute((optimize("STRING")))' was specified for that 45254 function. The parenthesis around the options is optional. *Note 45255 Function Attributes::, for more information about the 'optimize' 45256 attribute and the attribute syntax. 45257 45258 The '#pragma GCC optimize' pragma is not implemented in GCC 45259 versions earlier than 4.4. 45260 45261'#pragma GCC push_options' 45262'#pragma GCC pop_options' 45263 45264 These pragmas maintain a stack of the current target and 45265 optimization options. It is intended for include files where you 45266 temporarily want to switch to using a different '#pragma GCC 45267 target' or '#pragma GCC optimize' and then to pop back to the 45268 previous options. 45269 45270 The '#pragma GCC push_options' and '#pragma GCC pop_options' 45271 pragmas are not implemented in GCC versions earlier than 4.4. 45272 45273'#pragma GCC reset_options' 45274 45275 This pragma clears the current '#pragma GCC target' and '#pragma 45276 GCC optimize' to use the default switches as specified on the 45277 command line. 45278 45279 The '#pragma GCC reset_options' pragma is not implemented in GCC 45280 versions earlier than 4.4. 45281 45282 45283File: gcc.info, Node: Loop-Specific Pragmas, Prev: Function Specific Option Pragmas, Up: Pragmas 45284 452856.59.14 Loop-Specific Pragmas 45286----------------------------- 45287 45288'#pragma GCC ivdep' 45289 45290 With this pragma, the programmer asserts that there are no loop-carried 45291dependencies which would prevent that consecutive iterations of the 45292following loop can be executed concurrently with SIMD (single 45293instruction multiple data) instructions. 45294 45295 For example, the compiler can only unconditionally vectorize the 45296following loop with the pragma: 45297 45298 void foo (int n, int *a, int *b, int *c) 45299 { 45300 int i, j; 45301 #pragma GCC ivdep 45302 for (i = 0; i < n; ++i) 45303 a[i] = b[i] + c[i]; 45304 } 45305 45306In this example, using the 'restrict' qualifier had the same effect. In 45307the following example, that would not be possible. Assume k < -m or k 45308>= m. Only with the pragma, the compiler knows that it can 45309unconditionally vectorize the following loop: 45310 45311 void ignore_vec_dep (int *a, int k, int c, int m) 45312 { 45313 #pragma GCC ivdep 45314 for (int i = 0; i < m; i++) 45315 a[i] = a[i + k] * c; 45316 } 45317 45318 45319File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 45320 453216.60 Unnamed struct/union fields within structs/unions 45322====================================================== 45323 45324As permitted by ISO C11 and for compatibility with other compilers, GCC 45325allows you to define a structure or union that contains, as fields, 45326structures and unions without names. For example: 45327 45328 struct { 45329 int a; 45330 union { 45331 int b; 45332 float c; 45333 }; 45334 int d; 45335 } foo; 45336 45337In this example, you are able to access members of the unnamed union 45338with code like 'foo.b'. Note that only unnamed structs and unions are 45339allowed, you may not have, for example, an unnamed 'int'. 45340 45341 You must never create such structures that cause ambiguous field 45342definitions. For example, in this structure: 45343 45344 struct { 45345 int a; 45346 struct { 45347 int a; 45348 }; 45349 } foo; 45350 45351it is ambiguous which 'a' is being referred to with 'foo.a'. The 45352compiler gives errors for such constructs. 45353 45354 Unless '-fms-extensions' is used, the unnamed field must be a structure 45355or union definition without a tag (for example, 'struct { int a; };'). 45356If '-fms-extensions' is used, the field may also be a definition with a 45357tag such as 'struct foo { int a; };', a reference to a previously 45358defined structure or union such as 'struct foo;', or a reference to a 45359'typedef' name for a previously defined structure or union type. 45360 45361 The option '-fplan9-extensions' enables '-fms-extensions' as well as 45362two other extensions. First, a pointer to a structure is automatically 45363converted to a pointer to an anonymous field for assignments and 45364function calls. For example: 45365 45366 struct s1 { int a; }; 45367 struct s2 { struct s1; }; 45368 extern void f1 (struct s1 *); 45369 void f2 (struct s2 *p) { f1 (p); } 45370 45371In the call to 'f1' inside 'f2', the pointer 'p' is converted into a 45372pointer to the anonymous field. 45373 45374 Second, when the type of an anonymous field is a 'typedef' for a 45375'struct' or 'union', code may refer to the field using the name of the 45376'typedef'. 45377 45378 typedef struct { int a; } s1; 45379 struct s2 { s1; }; 45380 s1 f1 (struct s2 *p) { return p->s1; } 45381 45382 These usages are only permitted when they are not ambiguous. 45383 45384 45385File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 45386 453876.61 Thread-Local Storage 45388========================= 45389 45390Thread-local storage (TLS) is a mechanism by which variables are 45391allocated such that there is one instance of the variable per extant 45392thread. The runtime model GCC uses to implement this originates in the 45393IA-64 processor-specific ABI, but has since been migrated to other 45394processors as well. It requires significant support from the linker 45395('ld'), dynamic linker ('ld.so'), and system libraries ('libc.so' and 45396'libpthread.so'), so it is not available everywhere. 45397 45398 At the user level, the extension is visible with a new storage class 45399keyword: '__thread'. For example: 45400 45401 __thread int i; 45402 extern __thread struct state s; 45403 static __thread char *p; 45404 45405 The '__thread' specifier may be used alone, with the 'extern' or 45406'static' specifiers, but with no other storage class specifier. When 45407used with 'extern' or 'static', '__thread' must appear immediately after 45408the other storage class specifier. 45409 45410 The '__thread' specifier may be applied to any global, file-scoped 45411static, function-scoped static, or static data member of a class. It 45412may not be applied to block-scoped automatic or non-static data member. 45413 45414 When the address-of operator is applied to a thread-local variable, it 45415is evaluated at run time and returns the address of the current thread's 45416instance of that variable. An address so obtained may be used by any 45417thread. When a thread terminates, any pointers to thread-local 45418variables in that thread become invalid. 45419 45420 No static initialization may refer to the address of a thread-local 45421variable. 45422 45423 In C++, if an initializer is present for a thread-local variable, it 45424must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 45425standard. 45426 45427 See ELF Handling For Thread-Local Storage 45428(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 45429the four thread-local storage addressing models, and how the runtime is 45430expected to function. 45431 45432* Menu: 45433 45434* C99 Thread-Local Edits:: 45435* C++98 Thread-Local Edits:: 45436 45437 45438File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 45439 454406.61.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 45441------------------------------------------------------- 45442 45443The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 45444document the exact semantics of the language extension. 45445 45446 * '5.1.2 Execution environments' 45447 45448 Add new text after paragraph 1 45449 45450 Within either execution environment, a "thread" is a flow of 45451 control within a program. It is implementation defined 45452 whether or not there may be more than one thread associated 45453 with a program. It is implementation defined how threads 45454 beyond the first are created, the name and type of the 45455 function called at thread startup, and how threads may be 45456 terminated. However, objects with thread storage duration 45457 shall be initialized before thread startup. 45458 45459 * '6.2.4 Storage durations of objects' 45460 45461 Add new text before paragraph 3 45462 45463 An object whose identifier is declared with the storage-class 45464 specifier '__thread' has "thread storage duration". Its 45465 lifetime is the entire execution of the thread, and its stored 45466 value is initialized only once, prior to thread startup. 45467 45468 * '6.4.1 Keywords' 45469 45470 Add '__thread'. 45471 45472 * '6.7.1 Storage-class specifiers' 45473 45474 Add '__thread' to the list of storage class specifiers in paragraph 45475 1. 45476 45477 Change paragraph 2 to 45478 45479 With the exception of '__thread', at most one storage-class 45480 specifier may be given [...]. The '__thread' specifier may be 45481 used alone, or immediately following 'extern' or 'static'. 45482 45483 Add new text after paragraph 6 45484 45485 The declaration of an identifier for a variable that has block 45486 scope that specifies '__thread' shall also specify either 45487 'extern' or 'static'. 45488 45489 The '__thread' specifier shall be used only with variables. 45490 45491 45492File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 45493 454946.61.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 45495-------------------------------------------------------- 45496 45497The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 45498that document the exact semantics of the language extension. 45499 45500 * [intro.execution] 45501 45502 New text after paragraph 4 45503 45504 A "thread" is a flow of control within the abstract machine. 45505 It is implementation defined whether or not there may be more 45506 than one thread. 45507 45508 New text after paragraph 7 45509 45510 It is unspecified whether additional action must be taken to 45511 ensure when and whether side effects are visible to other 45512 threads. 45513 45514 * [lex.key] 45515 45516 Add '__thread'. 45517 45518 * [basic.start.main] 45519 45520 Add after paragraph 5 45521 45522 The thread that begins execution at the 'main' function is 45523 called the "main thread". It is implementation defined how 45524 functions beginning threads other than the main thread are 45525 designated or typed. A function so designated, as well as the 45526 'main' function, is called a "thread startup function". It is 45527 implementation defined what happens if a thread startup 45528 function returns. It is implementation defined what happens 45529 to other threads when any thread calls 'exit'. 45530 45531 * [basic.start.init] 45532 45533 Add after paragraph 4 45534 45535 The storage for an object of thread storage duration shall be 45536 statically initialized before the first statement of the 45537 thread startup function. An object of thread storage duration 45538 shall not require dynamic initialization. 45539 45540 * [basic.start.term] 45541 45542 Add after paragraph 3 45543 45544 The type of an object with thread storage duration shall not 45545 have a non-trivial destructor, nor shall it be an array type 45546 whose elements (directly or indirectly) have non-trivial 45547 destructors. 45548 45549 * [basic.stc] 45550 45551 Add "thread storage duration" to the list in paragraph 1. 45552 45553 Change paragraph 2 45554 45555 Thread, static, and automatic storage durations are associated 45556 with objects introduced by declarations [...]. 45557 45558 Add '__thread' to the list of specifiers in paragraph 3. 45559 45560 * [basic.stc.thread] 45561 45562 New section before [basic.stc.static] 45563 45564 The keyword '__thread' applied to a non-local object gives the 45565 object thread storage duration. 45566 45567 A local variable or class data member declared both 'static' 45568 and '__thread' gives the variable or member thread storage 45569 duration. 45570 45571 * [basic.stc.static] 45572 45573 Change paragraph 1 45574 45575 All objects that have neither thread storage duration, dynamic 45576 storage duration nor are local [...]. 45577 45578 * [dcl.stc] 45579 45580 Add '__thread' to the list in paragraph 1. 45581 45582 Change paragraph 1 45583 45584 With the exception of '__thread', at most one 45585 STORAGE-CLASS-SPECIFIER shall appear in a given 45586 DECL-SPECIFIER-SEQ. The '__thread' specifier may be used 45587 alone, or immediately following the 'extern' or 'static' 45588 specifiers. [...] 45589 45590 Add after paragraph 5 45591 45592 The '__thread' specifier can be applied only to the names of 45593 objects and to anonymous unions. 45594 45595 * [class.mem] 45596 45597 Add after paragraph 6 45598 45599 Non-'static' members shall not be '__thread'. 45600 45601 45602File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 45603 456046.62 Binary constants using the '0b' prefix 45605=========================================== 45606 45607Integer constants can be written as binary constants, consisting of a 45608sequence of '0' and '1' digits, prefixed by '0b' or '0B'. This is 45609particularly useful in environments that operate a lot on the bit level 45610(like microcontrollers). 45611 45612 The following statements are identical: 45613 45614 i = 42; 45615 i = 0x2a; 45616 i = 052; 45617 i = 0b101010; 45618 45619 The type of these constants follows the same rules as for octal or 45620hexadecimal integer constants, so suffixes like 'L' or 'UL' can be 45621applied. 45622 45623 45624File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 45625 456267 Extensions to the C++ Language 45627******************************** 45628 45629The GNU compiler provides these extensions to the C++ language (and you 45630can also use most of the C language extensions in your C++ programs). 45631If you want to write code that checks whether these features are 45632available, you can test for the GNU compiler the same way as for C 45633programs: check for a predefined macro '__GNUC__'. You can also use 45634'__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 45635(cpp)Common Predefined Macros.). 45636 45637* Menu: 45638 45639* C++ Volatiles:: What constitutes an access to a volatile object. 45640* Restricted Pointers:: C99 restricted pointers and references. 45641* Vague Linkage:: Where G++ puts inlines, vtables and such. 45642* C++ Interface:: You can use a single C++ header file for both 45643 declarations and definitions. 45644* Template Instantiation:: Methods for ensuring that exactly one copy of 45645 each needed template instantiation is emitted. 45646* Bound member functions:: You can extract a function pointer to the 45647 method denoted by a '->*' or '.*' expression. 45648* C++ Attributes:: Variable, function, and type attributes for C++ only. 45649* Function Multiversioning:: Declaring multiple function versions. 45650* Namespace Association:: Strong using-directives for namespace association. 45651* Type Traits:: Compiler support for type traits 45652* Java Exceptions:: Tweaking exception handling to work with Java. 45653* Deprecated Features:: Things will disappear from G++. 45654* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 45655 45656 45657File: gcc.info, Node: C++ Volatiles, Next: Restricted Pointers, Up: C++ Extensions 45658 456597.1 When is a Volatile C++ Object Accessed? 45660=========================================== 45661 45662The C++ standard differs from the C standard in its treatment of 45663volatile objects. It fails to specify what constitutes a volatile 45664access, except to say that C++ should behave in a similar manner to C 45665with respect to volatiles, where possible. However, the different 45666lvalueness of expressions between C and C++ complicate the behavior. 45667G++ behaves the same as GCC for volatile access, *Note Volatiles: C 45668Extensions, for a description of GCC's behavior. 45669 45670 The C and C++ language specifications differ when an object is accessed 45671in a void context: 45672 45673 volatile int *src = SOMEVALUE; 45674 *src; 45675 45676 The C++ standard specifies that such expressions do not undergo lvalue 45677to rvalue conversion, and that the type of the dereferenced object may 45678be incomplete. The C++ standard does not specify explicitly that it is 45679lvalue to rvalue conversion that is responsible for causing an access. 45680There is reason to believe that it is, because otherwise certain simple 45681expressions become undefined. However, because it would surprise most 45682programmers, G++ treats dereferencing a pointer to volatile object of 45683complete type as GCC would do for an equivalent type in C. When the 45684object has incomplete type, G++ issues a warning; if you wish to force 45685an error, you must force a conversion to rvalue with, for instance, a 45686static cast. 45687 45688 When using a reference to volatile, G++ does not treat equivalent 45689expressions as accesses to volatiles, but instead issues a warning that 45690no volatile is accessed. The rationale for this is that otherwise it 45691becomes difficult to determine where volatile access occur, and not 45692possible to ignore the return value from functions returning volatile 45693references. Again, if you wish to force a read, cast the reference to 45694an rvalue. 45695 45696 G++ implements the same behavior as GCC does when assigning to a 45697volatile object--there is no reread of the assigned-to object, the 45698assigned rvalue is reused. Note that in C++ assignment expressions are 45699lvalues, and if used as an lvalue, the volatile object is referred to. 45700For instance, VREF refers to VOBJ, as expected, in the following 45701example: 45702 45703 volatile int vobj; 45704 volatile int &vref = vobj = SOMETHING; 45705 45706 45707File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: C++ Volatiles, Up: C++ Extensions 45708 457097.2 Restricting Pointer Aliasing 45710================================ 45711 45712As with the C front end, G++ understands the C99 feature of restricted 45713pointers, specified with the '__restrict__', or '__restrict' type 45714qualifier. Because you cannot compile C++ by specifying the '-std=c99' 45715language flag, 'restrict' is not a keyword in C++. 45716 45717 In addition to allowing restricted pointers, you can specify restricted 45718references, which indicate that the reference is not aliased in the 45719local context. 45720 45721 void fn (int *__restrict__ rptr, int &__restrict__ rref) 45722 { 45723 /* ... */ 45724 } 45725 45726In the body of 'fn', RPTR points to an unaliased integer and RREF refers 45727to a (different) unaliased integer. 45728 45729 You may also specify whether a member function's THIS pointer is 45730unaliased by using '__restrict__' as a member function qualifier. 45731 45732 void T::fn () __restrict__ 45733 { 45734 /* ... */ 45735 } 45736 45737Within the body of 'T::fn', THIS has the effective definition 'T 45738*__restrict__ const this'. Notice that the interpretation of a 45739'__restrict__' member function qualifier is different to that of 'const' 45740or 'volatile' qualifier, in that it is applied to the pointer rather 45741than the object. This is consistent with other compilers that implement 45742restricted pointers. 45743 45744 As with all outermost parameter qualifiers, '__restrict__' is ignored 45745in function definition matching. This means you only need to specify 45746'__restrict__' in a function definition, rather than in a function 45747prototype as well. 45748 45749 45750File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 45751 457527.3 Vague Linkage 45753================= 45754 45755There are several constructs in C++ that require space in the object 45756file but are not clearly tied to a single translation unit. We say that 45757these constructs have "vague linkage". Typically such constructs are 45758emitted wherever they are needed, though sometimes we can be more 45759clever. 45760 45761Inline Functions 45762 Inline functions are typically defined in a header file which can 45763 be included in many different compilations. Hopefully they can 45764 usually be inlined, but sometimes an out-of-line copy is necessary, 45765 if the address of the function is taken or if inlining fails. In 45766 general, we emit an out-of-line copy in all translation units where 45767 one is needed. As an exception, we only emit inline virtual 45768 functions with the vtable, since it always requires a copy. 45769 45770 Local static variables and string constants used in an inline 45771 function are also considered to have vague linkage, since they must 45772 be shared between all inlined and out-of-line instances of the 45773 function. 45774 45775VTables 45776 C++ virtual functions are implemented in most compilers using a 45777 lookup table, known as a vtable. The vtable contains pointers to 45778 the virtual functions provided by a class, and each object of the 45779 class contains a pointer to its vtable (or vtables, in some 45780 multiple-inheritance situations). If the class declares any 45781 non-inline, non-pure virtual functions, the first one is chosen as 45782 the "key method" for the class, and the vtable is only emitted in 45783 the translation unit where the key method is defined. 45784 45785 _Note:_ If the chosen key method is later defined as inline, the 45786 vtable is still emitted in every translation unit that defines it. 45787 Make sure that any inline virtuals are declared inline in the class 45788 body, even if they are not defined there. 45789 45790'type_info' objects 45791 C++ requires information about types to be written out in order to 45792 implement 'dynamic_cast', 'typeid' and exception handling. For 45793 polymorphic classes (classes with virtual functions), the 45794 'type_info' object is written out along with the vtable so that 45795 'dynamic_cast' can determine the dynamic type of a class object at 45796 run time. For all other types, we write out the 'type_info' object 45797 when it is used: when applying 'typeid' to an expression, throwing 45798 an object, or referring to a type in a catch clause or exception 45799 specification. 45800 45801Template Instantiations 45802 Most everything in this section also applies to template 45803 instantiations, but there are other options as well. *Note Where's 45804 the Template?: Template Instantiation. 45805 45806 When used with GNU ld version 2.8 or later on an ELF system such as 45807GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 45808these constructs will be discarded at link time. This is known as 45809COMDAT support. 45810 45811 On targets that don't support COMDAT, but do support weak symbols, GCC 45812uses them. This way one copy overrides all the others, but the unused 45813copies still take up space in the executable. 45814 45815 For targets that do not support either COMDAT or weak symbols, most 45816entities with vague linkage are emitted as local symbols to avoid 45817duplicate definition errors from the linker. This does not happen for 45818local statics in inlines, however, as having multiple copies almost 45819certainly breaks things. 45820 45821 *Note Declarations and Definitions in One Header: C++ Interface, for 45822another way to control placement of these constructs. 45823 45824 45825File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 45826 458277.4 #pragma interface and implementation 45828======================================== 45829 45830'#pragma interface' and '#pragma implementation' provide the user with a 45831way of explicitly directing the compiler to emit entities with vague 45832linkage (and debugging information) in a particular translation unit. 45833 45834 _Note:_ As of GCC 2.7.2, these '#pragma's are not useful in most cases, 45835because of COMDAT support and the "key method" heuristic mentioned in 45836*note Vague Linkage::. Using them can actually cause your program to 45837grow due to unnecessary out-of-line copies of inline functions. 45838Currently (3.4) the only benefit of these '#pragma's is reduced 45839duplication of debugging information, and that should be addressed soon 45840on DWARF 2 targets with the use of COMDAT groups. 45841 45842'#pragma interface' 45843'#pragma interface "SUBDIR/OBJECTS.h"' 45844 Use this directive in _header files_ that define object classes, to 45845 save space in most of the object files that use those classes. 45846 Normally, local copies of certain information (backup copies of 45847 inline member functions, debugging information, and the internal 45848 tables that implement virtual functions) must be kept in each 45849 object file that includes class definitions. You can use this 45850 pragma to avoid such duplication. When a header file containing 45851 '#pragma interface' is included in a compilation, this auxiliary 45852 information is not generated (unless the main input source file 45853 itself uses '#pragma implementation'). Instead, the object files 45854 contain references to be resolved at link time. 45855 45856 The second form of this directive is useful for the case where you 45857 have multiple headers with the same name in different directories. 45858 If you use this form, you must specify the same string to '#pragma 45859 implementation'. 45860 45861'#pragma implementation' 45862'#pragma implementation "OBJECTS.h"' 45863 Use this pragma in a _main input file_, when you want full output 45864 from included header files to be generated (and made globally 45865 visible). The included header file, in turn, should use '#pragma 45866 interface'. Backup copies of inline member functions, debugging 45867 information, and the internal tables used to implement virtual 45868 functions are all generated in implementation files. 45869 45870 If you use '#pragma implementation' with no argument, it applies to 45871 an include file with the same basename(1) as your source file. For 45872 example, in 'allclass.cc', giving just '#pragma implementation' by 45873 itself is equivalent to '#pragma implementation "allclass.h"'. 45874 45875 In versions of GNU C++ prior to 2.6.0 'allclass.h' was treated as 45876 an implementation file whenever you would include it from 45877 'allclass.cc' even if you never specified '#pragma implementation'. 45878 This was deemed to be more trouble than it was worth, however, and 45879 disabled. 45880 45881 Use the string argument if you want a single implementation file to 45882 include code from multiple header files. (You must also use 45883 '#include' to include the header file; '#pragma implementation' 45884 only specifies how to use the file--it doesn't actually include 45885 it.) 45886 45887 There is no way to split up the contents of a single header file 45888 into multiple implementation files. 45889 45890 '#pragma implementation' and '#pragma interface' also have an effect on 45891function inlining. 45892 45893 If you define a class in a header file marked with '#pragma interface', 45894the effect on an inline function defined in that class is similar to an 45895explicit 'extern' declaration--the compiler emits no code at all to 45896define an independent version of the function. Its definition is used 45897only for inlining with its callers. 45898 45899 Conversely, when you include the same header file in a main source file 45900that declares it as '#pragma implementation', the compiler emits code 45901for the function itself; this defines a version of the function that can 45902be found via pointers (or by callers compiled without inlining). If all 45903calls to the function can be inlined, you can avoid emitting the 45904function by compiling with '-fno-implement-inlines'. If any calls are 45905not inlined, you will get linker errors. 45906 45907 ---------- Footnotes ---------- 45908 45909 (1) A file's "basename" is the name stripped of all leading path 45910information and of trailing suffixes, such as '.h' or '.C' or '.cc'. 45911 45912 45913File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 45914 459157.5 Where's the Template? 45916========================= 45917 45918C++ templates are the first language feature to require more 45919intelligence from the environment than one usually finds on a UNIX 45920system. Somehow the compiler and linker have to make sure that each 45921template instance occurs exactly once in the executable if it is needed, 45922and not at all otherwise. There are two basic approaches to this 45923problem, which are referred to as the Borland model and the Cfront 45924model. 45925 45926Borland model 45927 Borland C++ solved the template instantiation problem by adding the 45928 code equivalent of common blocks to their linker; the compiler 45929 emits template instances in each translation unit that uses them, 45930 and the linker collapses them together. The advantage of this 45931 model is that the linker only has to consider the object files 45932 themselves; there is no external complexity to worry about. This 45933 disadvantage is that compilation time is increased because the 45934 template code is being compiled repeatedly. Code written for this 45935 model tends to include definitions of all templates in the header 45936 file, since they must be seen to be instantiated. 45937 45938Cfront model 45939 The AT&T C++ translator, Cfront, solved the template instantiation 45940 problem by creating the notion of a template repository, an 45941 automatically maintained place where template instances are stored. 45942 A more modern version of the repository works as follows: As 45943 individual object files are built, the compiler places any template 45944 definitions and instantiations encountered in the repository. At 45945 link time, the link wrapper adds in the objects in the repository 45946 and compiles any needed instances that were not previously emitted. 45947 The advantages of this model are more optimal compilation speed and 45948 the ability to use the system linker; to implement the Borland 45949 model a compiler vendor also needs to replace the linker. The 45950 disadvantages are vastly increased complexity, and thus potential 45951 for error; for some code this can be just as transparent, but in 45952 practice it can been very difficult to build multiple programs in 45953 one directory and one program in multiple directories. Code 45954 written for this model tends to separate definitions of non-inline 45955 member templates into a separate file, which should be compiled 45956 separately. 45957 45958 When used with GNU ld version 2.8 or later on an ELF system such as 45959GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 45960Borland model. On other systems, G++ implements neither automatic 45961model. 45962 45963 You have the following options for dealing with template 45964instantiations: 45965 45966 1. Compile your template-using code with '-frepo'. The compiler 45967 generates files with the extension '.rpo' listing all of the 45968 template instantiations used in the corresponding object files that 45969 could be instantiated there; the link wrapper, 'collect2', then 45970 updates the '.rpo' files to tell the compiler where to place those 45971 instantiations and rebuild any affected object files. The 45972 link-time overhead is negligible after the first pass, as the 45973 compiler continues to place the instantiations in the same files. 45974 45975 This is your best option for application code written for the 45976 Borland model, as it just works. Code written for the Cfront model 45977 needs to be modified so that the template definitions are available 45978 at one or more points of instantiation; usually this is as simple 45979 as adding '#include <tmethods.cc>' to the end of each template 45980 header. 45981 45982 For library code, if you want the library to provide all of the 45983 template instantiations it needs, just try to link all of its 45984 object files together; the link will fail, but cause the 45985 instantiations to be generated as a side effect. Be warned, 45986 however, that this may cause conflicts if multiple libraries try to 45987 provide the same instantiations. For greater control, use explicit 45988 instantiation as described in the next option. 45989 45990 2. Compile your code with '-fno-implicit-templates' to disable the 45991 implicit generation of template instances, and explicitly 45992 instantiate all the ones you use. This approach requires more 45993 knowledge of exactly which instances you need than do the others, 45994 but it's less mysterious and allows greater control. You can 45995 scatter the explicit instantiations throughout your program, 45996 perhaps putting them in the translation units where the instances 45997 are used or the translation units that define the templates 45998 themselves; you can put all of the explicit instantiations you need 45999 into one big file; or you can create small files like 46000 46001 #include "Foo.h" 46002 #include "Foo.cc" 46003 46004 template class Foo<int>; 46005 template ostream& operator << 46006 (ostream&, const Foo<int>&); 46007 46008 for each of the instances you need, and create a template 46009 instantiation library from those. 46010 46011 If you are using Cfront-model code, you can probably get away with 46012 not using '-fno-implicit-templates' when compiling files that don't 46013 '#include' the member template definitions. 46014 46015 If you use one big file to do the instantiations, you may want to 46016 compile it without '-fno-implicit-templates' so you get all of the 46017 instances required by your explicit instantiations (but not by any 46018 other files) without having to specify them as well. 46019 46020 The ISO C++ 2011 standard allows forward declaration of explicit 46021 instantiations (with 'extern'). G++ supports explicit 46022 instantiation declarations in C++98 mode and has extended the 46023 template instantiation syntax to support instantiation of the 46024 compiler support data for a template class (i.e. the vtable) 46025 without instantiating any of its members (with 'inline'), and 46026 instantiation of only the static data members of a template class, 46027 without the support data or member functions (with ('static'): 46028 46029 extern template int max (int, int); 46030 inline template class Foo<int>; 46031 static template class Foo<int>; 46032 46033 3. Do nothing. Pretend G++ does implement automatic instantiation 46034 management. Code written for the Borland model works fine, but 46035 each translation unit contains instances of each of the templates 46036 it uses. In a large program, this can lead to an unacceptable 46037 amount of code duplication. 46038 46039 46040File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 46041 460427.6 Extracting the function pointer from a bound pointer to member function 46043=========================================================================== 46044 46045In C++, pointer to member functions (PMFs) are implemented using a wide 46046pointer of sorts to handle all the possible call mechanisms; the PMF 46047needs to store information about how to adjust the 'this' pointer, and 46048if the function pointed to is virtual, where to find the vtable, and 46049where in the vtable to look for the member function. If you are using 46050PMFs in an inner loop, you should really reconsider that decision. If 46051that is not an option, you can extract the pointer to the function that 46052would be called for a given object/PMF pair and call it directly inside 46053the inner loop, to save a bit of time. 46054 46055 Note that you still pay the penalty for the call through a function 46056pointer; on most modern architectures, such a call defeats the branch 46057prediction features of the CPU. This is also true of normal virtual 46058function calls. 46059 46060 The syntax for this extension is 46061 46062 extern A a; 46063 extern int (A::*fp)(); 46064 typedef int (*fptr)(A *); 46065 46066 fptr p = (fptr)(a.*fp); 46067 46068 For PMF constants (i.e. expressions of the form '&Klasse::Member'), no 46069object is needed to obtain the address of the function. They can be 46070converted to function pointers directly: 46071 46072 fptr p1 = (fptr)(&A::foo); 46073 46074 You must specify '-Wno-pmf-conversions' to use this extension. 46075 46076 46077File: gcc.info, Node: C++ Attributes, Next: Function Multiversioning, Prev: Bound member functions, Up: C++ Extensions 46078 460797.7 C++-Specific Variable, Function, and Type Attributes 46080======================================================== 46081 46082Some attributes only make sense for C++ programs. 46083 46084'abi_tag ("TAG", ...)' 46085 The 'abi_tag' attribute can be applied to a function or class 46086 declaration. It modifies the mangled name of the function or class 46087 to incorporate the tag name, in order to distinguish the function 46088 or class from an earlier version with a different ABI; perhaps the 46089 class has changed size, or the function has a different return type 46090 that is not encoded in the mangled name. 46091 46092 The argument can be a list of strings of arbitrary length. The 46093 strings are sorted on output, so the order of the list is 46094 unimportant. 46095 46096 A redeclaration of a function or class must not add new ABI tags, 46097 since doing so would change the mangled name. 46098 46099 The ABI tags apply to a name, so all instantiations and 46100 specializations of a template have the same tags. The attribute 46101 will be ignored if applied to an explicit specialization or 46102 instantiation. 46103 46104 The '-Wabi-tag' flag enables a warning about a class which does not 46105 have all the ABI tags used by its subobjects and virtual functions; 46106 for users with code that needs to coexist with an earlier ABI, 46107 using this option can help to find all affected types that need to 46108 be tagged. 46109 46110'init_priority (PRIORITY)' 46111 46112 In Standard C++, objects defined at namespace scope are guaranteed 46113 to be initialized in an order in strict accordance with that of 46114 their definitions _in a given translation unit_. No guarantee is 46115 made for initializations across translation units. However, GNU 46116 C++ allows users to control the order of initialization of objects 46117 defined at namespace scope with the 'init_priority' attribute by 46118 specifying a relative PRIORITY, a constant integral expression 46119 currently bounded between 101 and 65535 inclusive. Lower numbers 46120 indicate a higher priority. 46121 46122 In the following example, 'A' would normally be created before 'B', 46123 but the 'init_priority' attribute reverses that order: 46124 46125 Some_Class A __attribute__ ((init_priority (2000))); 46126 Some_Class B __attribute__ ((init_priority (543))); 46127 46128 Note that the particular values of PRIORITY do not matter; only 46129 their relative ordering. 46130 46131'java_interface' 46132 46133 This type attribute informs C++ that the class is a Java interface. 46134 It may only be applied to classes declared within an 'extern 46135 "Java"' block. Calls to methods declared in this interface are 46136 dispatched using GCJ's interface table mechanism, instead of 46137 regular virtual table dispatch. 46138 46139'warn_unused' 46140 46141 For C++ types with non-trivial constructors and/or destructors it 46142 is impossible for the compiler to determine whether a variable of 46143 this type is truly unused if it is not referenced. This type 46144 attribute informs the compiler that variables of this type should 46145 be warned about if they appear to be unused, just like variables of 46146 fundamental types. 46147 46148 This attribute is appropriate for types which just represent a 46149 value, such as 'std::string'; it is not appropriate for types which 46150 control a resource, such as 'std::mutex'. 46151 46152 This attribute is also accepted in C, but it is unnecessary because 46153 C does not have constructors or destructors. 46154 46155 See also *note Namespace Association::. 46156 46157 46158File: gcc.info, Node: Function Multiversioning, Next: Namespace Association, Prev: C++ Attributes, Up: C++ Extensions 46159 461607.8 Function Multiversioning 46161============================ 46162 46163With the GNU C++ front end, for target i386, you may specify multiple 46164versions of a function, where each function is specialized for a 46165specific target feature. At runtime, the appropriate version of the 46166function is automatically executed depending on the characteristics of 46167the execution platform. Here is an example. 46168 46169 __attribute__ ((target ("default"))) 46170 int foo () 46171 { 46172 // The default version of foo. 46173 return 0; 46174 } 46175 46176 __attribute__ ((target ("sse4.2"))) 46177 int foo () 46178 { 46179 // foo version for SSE4.2 46180 return 1; 46181 } 46182 46183 __attribute__ ((target ("arch=atom"))) 46184 int foo () 46185 { 46186 // foo version for the Intel ATOM processor 46187 return 2; 46188 } 46189 46190 __attribute__ ((target ("arch=amdfam10"))) 46191 int foo () 46192 { 46193 // foo version for the AMD Family 0x10 processors. 46194 return 3; 46195 } 46196 46197 int main () 46198 { 46199 int (*p)() = &foo; 46200 assert ((*p) () == foo ()); 46201 return 0; 46202 } 46203 46204 In the above example, four versions of function foo are created. The 46205first version of foo with the target attribute "default" is the default 46206version. This version gets executed when no other target specific 46207version qualifies for execution on a particular platform. A new version 46208of foo is created by using the same function signature but with a 46209different target string. Function foo is called or a pointer to it is 46210taken just like a regular function. GCC takes care of doing the 46211dispatching to call the right version at runtime. Refer to the GCC wiki 46212on Function Multiversioning 46213(http://gcc.gnu.org/wiki/FunctionMultiVersioning) for more details. 46214 46215 46216File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: Function Multiversioning, Up: C++ Extensions 46217 462187.9 Namespace Association 46219========================= 46220 46221*Caution:* The semantics of this extension are equivalent to C++ 2011 46222inline namespaces. Users should use inline namespaces instead as this 46223extension will be removed in future versions of G++. 46224 46225 A using-directive with '__attribute ((strong))' is stronger than a 46226normal using-directive in two ways: 46227 46228 * Templates from the used namespace can be specialized and explicitly 46229 instantiated as though they were members of the using namespace. 46230 46231 * The using namespace is considered an associated namespace of all 46232 templates in the used namespace for purposes of argument-dependent 46233 name lookup. 46234 46235 The used namespace must be nested within the using namespace so that 46236normal unqualified lookup works properly. 46237 46238 This is useful for composing a namespace transparently from 46239implementation namespaces. For example: 46240 46241 namespace std { 46242 namespace debug { 46243 template <class T> struct A { }; 46244 } 46245 using namespace debug __attribute ((__strong__)); 46246 template <> struct A<int> { }; // OK to specialize 46247 46248 template <class T> void f (A<T>); 46249 } 46250 46251 int main() 46252 { 46253 f (std::A<float>()); // lookup finds std::f 46254 f (std::A<int>()); 46255 } 46256 46257 46258File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 46259 462607.10 Type Traits 46261================ 46262 46263The C++ front end implements syntactic extensions that allow 46264compile-time determination of various characteristics of a type (or of a 46265pair of types). 46266 46267'__has_nothrow_assign (type)' 46268 If 'type' is const qualified or is a reference type then the trait 46269 is false. Otherwise if '__has_trivial_assign (type)' is true then 46270 the trait is true, else if 'type' is a cv class or union type with 46271 copy assignment operators that are known not to throw an exception 46272 then the trait is true, else it is false. Requires: 'type' shall 46273 be a complete type, (possibly cv-qualified) 'void', or an array of 46274 unknown bound. 46275 46276'__has_nothrow_copy (type)' 46277 If '__has_trivial_copy (type)' is true then the trait is true, else 46278 if 'type' is a cv class or union type with copy constructors that 46279 are known not to throw an exception then the trait is true, else it 46280 is false. Requires: 'type' shall be a complete type, (possibly 46281 cv-qualified) 'void', or an array of unknown bound. 46282 46283'__has_nothrow_constructor (type)' 46284 If '__has_trivial_constructor (type)' is true then the trait is 46285 true, else if 'type' is a cv class or union type (or array thereof) 46286 with a default constructor that is known not to throw an exception 46287 then the trait is true, else it is false. Requires: 'type' shall 46288 be a complete type, (possibly cv-qualified) 'void', or an array of 46289 unknown bound. 46290 46291'__has_trivial_assign (type)' 46292 If 'type' is const qualified or is a reference type then the trait 46293 is false. Otherwise if '__is_pod (type)' is true then the trait is 46294 true, else if 'type' is a cv class or union type with a trivial 46295 copy assignment ([class.copy]) then the trait is true, else it is 46296 false. Requires: 'type' shall be a complete type, (possibly 46297 cv-qualified) 'void', or an array of unknown bound. 46298 46299'__has_trivial_copy (type)' 46300 If '__is_pod (type)' is true or 'type' is a reference type then the 46301 trait is true, else if 'type' is a cv class or union type with a 46302 trivial copy constructor ([class.copy]) then the trait is true, 46303 else it is false. Requires: 'type' shall be a complete type, 46304 (possibly cv-qualified) 'void', or an array of unknown bound. 46305 46306'__has_trivial_constructor (type)' 46307 If '__is_pod (type)' is true then the trait is true, else if 'type' 46308 is a cv class or union type (or array thereof) with a trivial 46309 default constructor ([class.ctor]) then the trait is true, else it 46310 is false. Requires: 'type' shall be a complete type, (possibly 46311 cv-qualified) 'void', or an array of unknown bound. 46312 46313'__has_trivial_destructor (type)' 46314 If '__is_pod (type)' is true or 'type' is a reference type then the 46315 trait is true, else if 'type' is a cv class or union type (or array 46316 thereof) with a trivial destructor ([class.dtor]) then the trait is 46317 true, else it is false. Requires: 'type' shall be a complete type, 46318 (possibly cv-qualified) 'void', or an array of unknown bound. 46319 46320'__has_virtual_destructor (type)' 46321 If 'type' is a class type with a virtual destructor ([class.dtor]) 46322 then the trait is true, else it is false. Requires: 'type' shall 46323 be a complete type, (possibly cv-qualified) 'void', or an array of 46324 unknown bound. 46325 46326'__is_abstract (type)' 46327 If 'type' is an abstract class ([class.abstract]) then the trait is 46328 true, else it is false. Requires: 'type' shall be a complete type, 46329 (possibly cv-qualified) 'void', or an array of unknown bound. 46330 46331'__is_base_of (base_type, derived_type)' 46332 If 'base_type' is a base class of 'derived_type' ([class.derived]) 46333 then the trait is true, otherwise it is false. Top-level cv 46334 qualifications of 'base_type' and 'derived_type' are ignored. For 46335 the purposes of this trait, a class type is considered is own base. 46336 Requires: if '__is_class (base_type)' and '__is_class 46337 (derived_type)' are true and 'base_type' and 'derived_type' are not 46338 the same type (disregarding cv-qualifiers), 'derived_type' shall be 46339 a complete type. Diagnostic is produced if this requirement is not 46340 met. 46341 46342'__is_class (type)' 46343 If 'type' is a cv class type, and not a union type 46344 ([basic.compound]) the trait is true, else it is false. 46345 46346'__is_empty (type)' 46347 If '__is_class (type)' is false then the trait is false. Otherwise 46348 'type' is considered empty if and only if: 'type' has no non-static 46349 data members, or all non-static data members, if any, are 46350 bit-fields of length 0, and 'type' has no virtual members, and 46351 'type' has no virtual base classes, and 'type' has no base classes 46352 'base_type' for which '__is_empty (base_type)' is false. Requires: 46353 'type' shall be a complete type, (possibly cv-qualified) 'void', or 46354 an array of unknown bound. 46355 46356'__is_enum (type)' 46357 If 'type' is a cv enumeration type ([basic.compound]) the trait is 46358 true, else it is false. 46359 46360'__is_literal_type (type)' 46361 If 'type' is a literal type ([basic.types]) the trait is true, else 46362 it is false. Requires: 'type' shall be a complete type, (possibly 46363 cv-qualified) 'void', or an array of unknown bound. 46364 46365'__is_pod (type)' 46366 If 'type' is a cv POD type ([basic.types]) then the trait is true, 46367 else it is false. Requires: 'type' shall be a complete type, 46368 (possibly cv-qualified) 'void', or an array of unknown bound. 46369 46370'__is_polymorphic (type)' 46371 If 'type' is a polymorphic class ([class.virtual]) then the trait 46372 is true, else it is false. Requires: 'type' shall be a complete 46373 type, (possibly cv-qualified) 'void', or an array of unknown bound. 46374 46375'__is_standard_layout (type)' 46376 If 'type' is a standard-layout type ([basic.types]) the trait is 46377 true, else it is false. Requires: 'type' shall be a complete type, 46378 (possibly cv-qualified) 'void', or an array of unknown bound. 46379 46380'__is_trivial (type)' 46381 If 'type' is a trivial type ([basic.types]) the trait is true, else 46382 it is false. Requires: 'type' shall be a complete type, (possibly 46383 cv-qualified) 'void', or an array of unknown bound. 46384 46385'__is_union (type)' 46386 If 'type' is a cv union type ([basic.compound]) the trait is true, 46387 else it is false. 46388 46389'__underlying_type (type)' 46390 The underlying type of 'type'. Requires: 'type' shall be an 46391 enumeration type ([dcl.enum]). 46392 46393 46394File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 46395 463967.11 Java Exceptions 46397==================== 46398 46399The Java language uses a slightly different exception handling model 46400from C++. Normally, GNU C++ automatically detects when you are writing 46401C++ code that uses Java exceptions, and handle them appropriately. 46402However, if C++ code only needs to execute destructors when Java 46403exceptions are thrown through it, GCC guesses incorrectly. Sample 46404problematic code is: 46405 46406 struct S { ~S(); }; 46407 extern void bar(); // is written in Java, and may throw exceptions 46408 void foo() 46409 { 46410 S s; 46411 bar(); 46412 } 46413 46414The usual effect of an incorrect guess is a link failure, complaining of 46415a missing routine called '__gxx_personality_v0'. 46416 46417 You can inform the compiler that Java exceptions are to be used in a 46418translation unit, irrespective of what it might think, by writing 46419'#pragma GCC java_exceptions' at the head of the file. This '#pragma' 46420must appear before any functions that throw or catch exceptions, or run 46421destructors when exceptions are thrown through them. 46422 46423 You cannot mix Java and C++ exceptions in the same translation unit. 46424It is believed to be safe to throw a C++ exception from one file through 46425another file compiled for the Java exception model, or vice versa, but 46426there may be bugs in this area. 46427 46428 46429File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 46430 464317.12 Deprecated Features 46432======================== 46433 46434In the past, the GNU C++ compiler was extended to experiment with new 46435features, at a time when the C++ language was still evolving. Now that 46436the C++ standard is complete, some of those features are superseded by 46437superior alternatives. Using the old features might cause a warning in 46438some cases that the feature will be dropped in the future. In other 46439cases, the feature might be gone already. 46440 46441 While the list below is not exhaustive, it documents some of the 46442options that are now deprecated: 46443 46444'-fexternal-templates' 46445'-falt-external-templates' 46446 These are two of the many ways for G++ to implement template 46447 instantiation. *Note Template Instantiation::. The C++ standard 46448 clearly defines how template definitions have to be organized 46449 across implementation units. G++ has an implicit instantiation 46450 mechanism that should work just fine for standard-conforming code. 46451 46452'-fstrict-prototype' 46453'-fno-strict-prototype' 46454 Previously it was possible to use an empty prototype parameter list 46455 to indicate an unspecified number of parameters (like C), rather 46456 than no parameters, as C++ demands. This feature has been removed, 46457 except where it is required for backwards compatibility. *Note 46458 Backwards Compatibility::. 46459 46460 G++ allows a virtual function returning 'void *' to be overridden by 46461one returning a different pointer type. This extension to the covariant 46462return type rules is now deprecated and will be removed from a future 46463version. 46464 46465 The G++ minimum and maximum operators ('<?' and '>?') and their 46466compound forms ('<?=') and '>?=') have been deprecated and are now 46467removed from G++. Code using these operators should be modified to use 46468'std::min' and 'std::max' instead. 46469 46470 The named return value extension has been deprecated, and is now 46471removed from G++. 46472 46473 The use of initializer lists with new expressions has been deprecated, 46474and is now removed from G++. 46475 46476 Floating and complex non-type template parameters have been deprecated, 46477and are now removed from G++. 46478 46479 The implicit typename extension has been deprecated and is now removed 46480from G++. 46481 46482 The use of default arguments in function pointers, function typedefs 46483and other places where they are not permitted by the standard is 46484deprecated and will be removed from a future version of G++. 46485 46486 G++ allows floating-point literals to appear in integral constant 46487expressions, e.g. ' enum E { e = int(2.2 * 3.7) } ' This extension is 46488deprecated and will be removed from a future version. 46489 46490 G++ allows static data members of const floating-point type to be 46491declared with an initializer in a class definition. The standard only 46492allows initializers for static members of const integral types and const 46493enumeration types so this extension has been deprecated and will be 46494removed from a future version. 46495 46496 46497File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 46498 464997.13 Backwards Compatibility 46500============================ 46501 46502Now that there is a definitive ISO standard C++, G++ has a specification 46503to adhere to. The C++ language evolved over time, and features that 46504used to be acceptable in previous drafts of the standard, such as the 46505ARM [Annotated C++ Reference Manual], are no longer accepted. In order 46506to allow compilation of C++ written to such drafts, G++ contains some 46507backwards compatibilities. _All such backwards compatibility features 46508are liable to disappear in future versions of G++._ They should be 46509considered deprecated. *Note Deprecated Features::. 46510 46511'For scope' 46512 If a variable is declared at for scope, it used to remain in scope 46513 until the end of the scope that contained the for statement (rather 46514 than just within the for scope). G++ retains this, but issues a 46515 warning, if such a variable is accessed outside the for scope. 46516 46517'Implicit C language' 46518 Old C system header files did not contain an 'extern "C" {...}' 46519 scope to set the language. On such systems, all header files are 46520 implicitly scoped inside a C language scope. Also, an empty 46521 prototype '()' is treated as an unspecified number of arguments, 46522 rather than no arguments, as C++ demands. 46523 46524 46525File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 46526 465278 GNU Objective-C features 46528************************** 46529 46530This document is meant to describe some of the GNU Objective-C features. 46531It is not intended to teach you Objective-C. There are several resources 46532on the Internet that present the language. 46533 46534* Menu: 46535 46536* GNU Objective-C runtime API:: 46537* Executing code before main:: 46538* Type encoding:: 46539* Garbage Collection:: 46540* Constant string objects:: 46541* compatibility_alias:: 46542* Exceptions:: 46543* Synchronization:: 46544* Fast enumeration:: 46545* Messaging with the GNU Objective-C runtime:: 46546 46547 46548File: gcc.info, Node: GNU Objective-C runtime API, Next: Executing code before main, Up: Objective-C 46549 465508.1 GNU Objective-C runtime API 46551=============================== 46552 46553This section is specific for the GNU Objective-C runtime. If you are 46554using a different runtime, you can skip it. 46555 46556 The GNU Objective-C runtime provides an API that allows you to interact 46557with the Objective-C runtime system, querying the live runtime 46558structures and even manipulating them. This allows you for example to 46559inspect and navigate classes, methods and protocols; to define new 46560classes or new methods, and even to modify existing classes or 46561protocols. 46562 46563 If you are using a "Foundation" library such as GNUstep-Base, this 46564library will provide you with a rich set of functionality to do most of 46565the inspection tasks, and you probably will only need direct access to 46566the GNU Objective-C runtime API to define new classes or methods. 46567 46568* Menu: 46569 46570* Modern GNU Objective-C runtime API:: 46571* Traditional GNU Objective-C runtime API:: 46572 46573 46574File: gcc.info, Node: Modern GNU Objective-C runtime API, Next: Traditional GNU Objective-C runtime API, Up: GNU Objective-C runtime API 46575 465768.1.1 Modern GNU Objective-C runtime API 46577---------------------------------------- 46578 46579The GNU Objective-C runtime provides an API which is similar to the one 46580provided by the "Objective-C 2.0" Apple/NeXT Objective-C runtime. The 46581API is documented in the public header files of the GNU Objective-C 46582runtime: 46583 46584 * 'objc/objc.h': this is the basic Objective-C header file, defining 46585 the basic Objective-C types such as 'id', 'Class' and 'BOOL'. You 46586 have to include this header to do almost anything with Objective-C. 46587 46588 * 'objc/runtime.h': this header declares most of the public runtime 46589 API functions allowing you to inspect and manipulate the 46590 Objective-C runtime data structures. These functions are fairly 46591 standardized across Objective-C runtimes and are almost identical 46592 to the Apple/NeXT Objective-C runtime ones. It does not declare 46593 functions in some specialized areas (constructing and forwarding 46594 message invocations, threading) which are in the other headers 46595 below. You have to include 'objc/objc.h' and 'objc/runtime.h' to 46596 use any of the functions, such as 'class_getName()', declared in 46597 'objc/runtime.h'. 46598 46599 * 'objc/message.h': this header declares public functions used to 46600 construct, deconstruct and forward message invocations. Because 46601 messaging is done in quite a different way on different runtimes, 46602 functions in this header are specific to the GNU Objective-C 46603 runtime implementation. 46604 46605 * 'objc/objc-exception.h': this header declares some public functions 46606 related to Objective-C exceptions. For example functions in this 46607 header allow you to throw an Objective-C exception from plain C/C++ 46608 code. 46609 46610 * 'objc/objc-sync.h': this header declares some public functions 46611 related to the Objective-C '@synchronized()' syntax, allowing you 46612 to emulate an Objective-C '@synchronized()' block in plain C/C++ 46613 code. 46614 46615 * 'objc/thr.h': this header declares a public runtime API threading 46616 layer that is only provided by the GNU Objective-C runtime. It 46617 declares functions such as 'objc_mutex_lock()', which provide a 46618 platform-independent set of threading functions. 46619 46620 The header files contain detailed documentation for each function in 46621the GNU Objective-C runtime API. 46622 46623 46624File: gcc.info, Node: Traditional GNU Objective-C runtime API, Prev: Modern GNU Objective-C runtime API, Up: GNU Objective-C runtime API 46625 466268.1.2 Traditional GNU Objective-C runtime API 46627--------------------------------------------- 46628 46629The GNU Objective-C runtime used to provide a different API, which we 46630call the "traditional" GNU Objective-C runtime API. Functions belonging 46631to this API are easy to recognize because they use a different naming 46632convention, such as 'class_get_super_class()' (traditional API) instead 46633of 'class_getSuperclass()' (modern API). Software using this API 46634includes the file 'objc/objc-api.h' where it is declared. 46635 46636 Starting with GCC 4.7.0, the traditional GNU runtime API is no longer 46637available. 46638 46639 46640File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: GNU Objective-C runtime API, Up: Objective-C 46641 466428.2 '+load': Executing code before main 46643======================================= 46644 46645This section is specific for the GNU Objective-C runtime. If you are 46646using a different runtime, you can skip it. 46647 46648 The GNU Objective-C runtime provides a way that allows you to execute 46649code before the execution of the program enters the 'main' function. 46650The code is executed on a per-class and a per-category basis, through a 46651special class method '+load'. 46652 46653 This facility is very useful if you want to initialize global variables 46654which can be accessed by the program directly, without sending a message 46655to the class first. The usual way to initialize global variables, in 46656the '+initialize' method, might not be useful because '+initialize' is 46657only called when the first message is sent to a class object, which in 46658some cases could be too late. 46659 46660 Suppose for example you have a 'FileStream' class that declares 46661'Stdin', 'Stdout' and 'Stderr' as global variables, like below: 46662 46663 46664 FileStream *Stdin = nil; 46665 FileStream *Stdout = nil; 46666 FileStream *Stderr = nil; 46667 46668 @implementation FileStream 46669 46670 + (void)initialize 46671 { 46672 Stdin = [[FileStream new] initWithFd:0]; 46673 Stdout = [[FileStream new] initWithFd:1]; 46674 Stderr = [[FileStream new] initWithFd:2]; 46675 } 46676 46677 /* Other methods here */ 46678 @end 46679 46680 46681 In this example, the initialization of 'Stdin', 'Stdout' and 'Stderr' 46682in '+initialize' occurs too late. The programmer can send a message to 46683one of these objects before the variables are actually initialized, thus 46684sending messages to the 'nil' object. The '+initialize' method which 46685actually initializes the global variables is not invoked until the first 46686message is sent to the class object. The solution would require these 46687variables to be initialized just before entering 'main'. 46688 46689 The correct solution of the above problem is to use the '+load' method 46690instead of '+initialize': 46691 46692 46693 @implementation FileStream 46694 46695 + (void)load 46696 { 46697 Stdin = [[FileStream new] initWithFd:0]; 46698 Stdout = [[FileStream new] initWithFd:1]; 46699 Stderr = [[FileStream new] initWithFd:2]; 46700 } 46701 46702 /* Other methods here */ 46703 @end 46704 46705 46706 The '+load' is a method that is not overridden by categories. If a 46707class and a category of it both implement '+load', both methods are 46708invoked. This allows some additional initializations to be performed in 46709a category. 46710 46711 This mechanism is not intended to be a replacement for '+initialize'. 46712You should be aware of its limitations when you decide to use it instead 46713of '+initialize'. 46714 46715* Menu: 46716 46717* What you can and what you cannot do in +load:: 46718 46719 46720File: gcc.info, Node: What you can and what you cannot do in +load, Up: Executing code before main 46721 467228.2.1 What you can and what you cannot do in '+load' 46723---------------------------------------------------- 46724 46725'+load' is to be used only as a last resort. Because it is executed 46726very early, most of the Objective-C runtime machinery will not be ready 46727when '+load' is executed; hence '+load' works best for executing C code 46728that is independent on the Objective-C runtime. 46729 46730 The '+load' implementation in the GNU runtime guarantees you the 46731following things: 46732 46733 * you can write whatever C code you like; 46734 46735 * you can allocate and send messages to objects whose class is 46736 implemented in the same file; 46737 46738 * the '+load' implementation of all super classes of a class are 46739 executed before the '+load' of that class is executed; 46740 46741 * the '+load' implementation of a class is executed before the 46742 '+load' implementation of any category. 46743 46744 In particular, the following things, even if they can work in a 46745particular case, are not guaranteed: 46746 46747 * allocation of or sending messages to arbitrary objects; 46748 46749 * allocation of or sending messages to objects whose classes have a 46750 category implemented in the same file; 46751 46752 * sending messages to Objective-C constant strings ('@"this is a 46753 constant string"'); 46754 46755 You should make no assumptions about receiving '+load' in sibling 46756classes when you write '+load' of a class. The order in which sibling 46757classes receive '+load' is not guaranteed. 46758 46759 The order in which '+load' and '+initialize' are called could be 46760problematic if this matters. If you don't allocate objects inside 46761'+load', it is guaranteed that '+load' is called before '+initialize'. 46762If you create an object inside '+load' the '+initialize' method of 46763object's class is invoked even if '+load' was not invoked. Note if you 46764explicitly call '+load' on a class, '+initialize' will be called first. 46765To avoid possible problems try to implement only one of these methods. 46766 46767 The '+load' method is also invoked when a bundle is dynamically loaded 46768into your running program. This happens automatically without any 46769intervening operation from you. When you write bundles and you need to 46770write '+load' you can safely create and send messages to objects whose 46771classes already exist in the running program. The same restrictions as 46772above apply to classes defined in bundle. 46773 46774 46775File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 46776 467778.3 Type encoding 46778================= 46779 46780This is an advanced section. Type encodings are used extensively by the 46781compiler and by the runtime, but you generally do not need to know about 46782them to use Objective-C. 46783 46784 The Objective-C compiler generates type encodings for all the types. 46785These type encodings are used at runtime to find out information about 46786selectors and methods and about objects and classes. 46787 46788 The types are encoded in the following way: 46789 46790'_Bool' 'B' 46791'char' 'c' 46792'unsigned char' 'C' 46793'short' 's' 46794'unsigned short' 'S' 46795'int' 'i' 46796'unsigned int' 'I' 46797'long' 'l' 46798'unsigned long' 'L' 46799'long long' 'q' 46800'unsigned long 'Q' 46801long' 46802'float' 'f' 46803'double' 'd' 46804'long double' 'D' 46805'void' 'v' 46806'id' '@' 46807'Class' '#' 46808'SEL' ':' 46809'char*' '*' 46810'enum' an 'enum' is encoded exactly as the integer type 46811 that the compiler uses for it, which depends on the 46812 enumeration values. Often the compiler users 46813 'unsigned int', which is then encoded as 'I'. 46814unknown type '?' 46815Complex types 'j' followed by the inner type. For example 46816 '_Complex double' is encoded as "jd". 46817bit-fields 'b' followed by the starting position of the 46818 bit-field, the type of the bit-field and the size of 46819 the bit-field (the bit-fields encoding was changed 46820 from the NeXT's compiler encoding, see below) 46821 46822 The encoding of bit-fields has changed to allow bit-fields to be 46823properly handled by the runtime functions that compute sizes and 46824alignments of types that contain bit-fields. The previous encoding 46825contained only the size of the bit-field. Using only this information 46826it is not possible to reliably compute the size occupied by the 46827bit-field. This is very important in the presence of the Boehm's 46828garbage collector because the objects are allocated using the typed 46829memory facility available in this collector. The typed memory 46830allocation requires information about where the pointers are located 46831inside the object. 46832 46833 The position in the bit-field is the position, counting in bits, of the 46834bit closest to the beginning of the structure. 46835 46836 The non-atomic types are encoded as follows: 46837 46838pointers '^' followed by the pointed type. 46839arrays '[' followed by the number of elements in the array 46840 followed by the type of the elements followed by ']' 46841structures '{' followed by the name of the structure (or '?' if the 46842 structure is unnamed), the '=' sign, the type of the 46843 members and by '}' 46844unions '(' followed by the name of the structure (or '?' if the 46845 union is unnamed), the '=' sign, the type of the members 46846 followed by ')' 46847vectors '![' followed by the vector_size (the number of bytes 46848 composing the vector) followed by a comma, followed by 46849 the alignment (in bytes) of the vector, followed by the 46850 type of the elements followed by ']' 46851 46852 Here are some types and their encodings, as they are generated by the 46853compiler on an i386 machine: 46854 46855 46856Objective-C type Compiler encoding 46857 int a[10]; '[10i]' 46858 struct { '{?=i[3f]b128i3b131i2c}' 46859 int i; 46860 float f[3]; 46861 int a:3; 46862 int b:2; 46863 char c; 46864 } 46865 int a __attribute__ ((vector_size (16)));'![16,16i]' (alignment would depend on the machine) 46866 46867 46868 In addition to the types the compiler also encodes the type specifiers. 46869The table below describes the encoding of the current Objective-C type 46870specifiers: 46871 46872 46873Specifier Encoding 46874'const' 'r' 46875'in' 'n' 46876'inout' 'N' 46877'out' 'o' 46878'bycopy' 'O' 46879'byref' 'R' 46880'oneway' 'V' 46881 46882 46883 The type specifiers are encoded just before the type. Unlike types 46884however, the type specifiers are only encoded when they appear in method 46885argument types. 46886 46887 Note how 'const' interacts with pointers: 46888 46889 46890Objective-C type Compiler encoding 46891 const int 'ri' 46892 const int* '^ri' 46893 int *const 'r^i' 46894 46895 46896 'const int*' is a pointer to a 'const int', and so is encoded as '^ri'. 46897'int* const', instead, is a 'const' pointer to an 'int', and so is 46898encoded as 'r^i'. 46899 46900 Finally, there is a complication when encoding 'const char *' versus 46901'char * const'. Because 'char *' is encoded as '*' and not as '^c', 46902there is no way to express the fact that 'r' applies to the pointer or 46903to the pointee. 46904 46905 Hence, it is assumed as a convention that 'r*' means 'const char *' 46906(since it is what is most often meant), and there is no way to encode 46907'char *const'. 'char *const' would simply be encoded as '*', and the 46908'const' is lost. 46909 46910* Menu: 46911 46912* Legacy type encoding:: 46913* @encode:: 46914* Method signatures:: 46915 46916 46917File: gcc.info, Node: Legacy type encoding, Next: @encode, Up: Type encoding 46918 469198.3.1 Legacy type encoding 46920-------------------------- 46921 46922Unfortunately, historically GCC used to have a number of bugs in its 46923encoding code. The NeXT runtime expects GCC to emit type encodings in 46924this historical format (compatible with GCC-3.3), so when using the NeXT 46925runtime, GCC will introduce on purpose a number of incorrect encodings: 46926 46927 * the read-only qualifier of the pointee gets emitted before the '^'. 46928 The read-only qualifier of the pointer itself gets ignored, unless 46929 it is a typedef. Also, the 'r' is only emitted for the outermost 46930 type. 46931 46932 * 32-bit longs are encoded as 'l' or 'L', but not always. For 46933 typedefs, the compiler uses 'i' or 'I' instead if encoding a struct 46934 field or a pointer. 46935 46936 * 'enum's are always encoded as 'i' (int) even if they are actually 46937 unsigned or long. 46938 46939 In addition to that, the NeXT runtime uses a different encoding for 46940bitfields. It encodes them as 'b' followed by the size, without a bit 46941offset or the underlying field type. 46942 46943 46944File: gcc.info, Node: @encode, Next: Method signatures, Prev: Legacy type encoding, Up: Type encoding 46945 469468.3.2 @encode 46947------------- 46948 46949GNU Objective-C supports the '@encode' syntax that allows you to create 46950a type encoding from a C/Objective-C type. For example, '@encode(int)' 46951is compiled by the compiler into '"i"'. 46952 46953 '@encode' does not support type qualifiers other than 'const'. For 46954example, '@encode(const char*)' is valid and is compiled into '"r*"', 46955while '@encode(bycopy char *)' is invalid and will cause a compilation 46956error. 46957 46958 46959File: gcc.info, Node: Method signatures, Prev: @encode, Up: Type encoding 46960 469618.3.3 Method signatures 46962----------------------- 46963 46964This section documents the encoding of method types, which is rarely 46965needed to use Objective-C. You should skip it at a first reading; the 46966runtime provides functions that will work on methods and can walk 46967through the list of parameters and interpret them for you. These 46968functions are part of the public "API" and are the preferred way to 46969interact with method signatures from user code. 46970 46971 But if you need to debug a problem with method signatures and need to 46972know how they are implemented (i.e., the "ABI"), read on. 46973 46974 Methods have their "signature" encoded and made available to the 46975runtime. The "signature" encodes all the information required to 46976dynamically build invocations of the method at runtime: return type and 46977arguments. 46978 46979 The "signature" is a null-terminated string, composed of the following: 46980 46981 * The return type, including type qualifiers. For example, a method 46982 returning 'int' would have 'i' here. 46983 46984 * The total size (in bytes) required to pass all the parameters. 46985 This includes the two hidden parameters (the object 'self' and the 46986 method selector '_cmd'). 46987 46988 * Each argument, with the type encoding, followed by the offset (in 46989 bytes) of the argument in the list of parameters. 46990 46991 For example, a method with no arguments and returning 'int' would have 46992the signature 'i8@0:4' if the size of a pointer is 4. The signature is 46993interpreted as follows: the 'i' is the return type (an 'int'), the '8' 46994is the total size of the parameters in bytes (two pointers each of size 469954), the '@0' is the first parameter (an object at byte offset '0') and 46996':4' is the second parameter (a 'SEL' at byte offset '4'). 46997 46998 You can easily find more examples by running the "strings" program on 46999an Objective-C object file compiled by GCC. You'll see a lot of strings 47000that look very much like 'i8@0:4'. They are signatures of Objective-C 47001methods. 47002 47003 47004File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 47005 470068.4 Garbage Collection 47007====================== 47008 47009This section is specific for the GNU Objective-C runtime. If you are 47010using a different runtime, you can skip it. 47011 47012 Support for garbage collection with the GNU runtime has been added by 47013using a powerful conservative garbage collector, known as the 47014Boehm-Demers-Weiser conservative garbage collector. 47015 47016 To enable the support for it you have to configure the compiler using 47017an additional argument, '--enable-objc-gc'. This will build the 47018boehm-gc library, and build an additional runtime library which has 47019several enhancements to support the garbage collector. The new library 47020has a new name, 'libobjc_gc.a' to not conflict with the 47021non-garbage-collected library. 47022 47023 When the garbage collector is used, the objects are allocated using the 47024so-called typed memory allocation mechanism available in the 47025Boehm-Demers-Weiser collector. This mode requires precise information 47026on where pointers are located inside objects. This information is 47027computed once per class, immediately after the class has been 47028initialized. 47029 47030 There is a new runtime function 'class_ivar_set_gcinvisible()' which 47031can be used to declare a so-called "weak pointer" reference. Such a 47032pointer is basically hidden for the garbage collector; this can be 47033useful in certain situations, especially when you want to keep track of 47034the allocated objects, yet allow them to be collected. This kind of 47035pointers can only be members of objects, you cannot declare a global 47036pointer as a weak reference. Every type which is a pointer type can be 47037declared a weak pointer, including 'id', 'Class' and 'SEL'. 47038 47039 Here is an example of how to use this feature. Suppose you want to 47040implement a class whose instances hold a weak pointer reference; the 47041following class does this: 47042 47043 47044 @interface WeakPointer : Object 47045 { 47046 const void* weakPointer; 47047 } 47048 47049 - initWithPointer:(const void*)p; 47050 - (const void*)weakPointer; 47051 @end 47052 47053 47054 @implementation WeakPointer 47055 47056 + (void)initialize 47057 { 47058 if (self == objc_lookUpClass ("WeakPointer")) 47059 class_ivar_set_gcinvisible (self, "weakPointer", YES); 47060 } 47061 47062 - initWithPointer:(const void*)p 47063 { 47064 weakPointer = p; 47065 return self; 47066 } 47067 47068 - (const void*)weakPointer 47069 { 47070 return weakPointer; 47071 } 47072 47073 @end 47074 47075 47076 Weak pointers are supported through a new type character specifier 47077represented by the '!' character. The 'class_ivar_set_gcinvisible()' 47078function adds or removes this specifier to the string type description 47079of the instance variable named as argument. 47080 47081 47082File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 47083 470848.5 Constant string objects 47085=========================== 47086 47087GNU Objective-C provides constant string objects that are generated 47088directly by the compiler. You declare a constant string object by 47089prefixing a C constant string with the character '@': 47090 47091 id myString = @"this is a constant string object"; 47092 47093 The constant string objects are by default instances of the 47094'NXConstantString' class which is provided by the GNU Objective-C 47095runtime. To get the definition of this class you must include the 47096'objc/NXConstStr.h' header file. 47097 47098 User defined libraries may want to implement their own constant string 47099class. To be able to support them, the GNU Objective-C compiler 47100provides a new command line options 47101'-fconstant-string-class=CLASS-NAME'. The provided class should adhere 47102to a strict structure, the same as 'NXConstantString''s structure: 47103 47104 47105 @interface MyConstantStringClass 47106 { 47107 Class isa; 47108 char *c_string; 47109 unsigned int len; 47110 } 47111 @end 47112 47113 47114 'NXConstantString' inherits from 'Object'; user class libraries may 47115choose to inherit the customized constant string class from a different 47116class than 'Object'. There is no requirement in the methods the 47117constant string class has to implement, but the final ivar layout of the 47118class must be the compatible with the given structure. 47119 47120 When the compiler creates the statically allocated constant string 47121object, the 'c_string' field will be filled by the compiler with the 47122string; the 'length' field will be filled by the compiler with the 47123string length; the 'isa' pointer will be filled with 'NULL' by the 47124compiler, and it will later be fixed up automatically at runtime by the 47125GNU Objective-C runtime library to point to the class which was set by 47126the '-fconstant-string-class' option when the object file is loaded (if 47127you wonder how it works behind the scenes, the name of the class to use, 47128and the list of static objects to fixup, are stored by the compiler in 47129the object file in a place where the GNU runtime library will find them 47130at runtime). 47131 47132 As a result, when a file is compiled with the '-fconstant-string-class' 47133option, all the constant string objects will be instances of the class 47134specified as argument to this option. It is possible to have multiple 47135compilation units referring to different constant string classes, 47136neither the compiler nor the linker impose any restrictions in doing 47137this. 47138 47139 47140File: gcc.info, Node: compatibility_alias, Next: Exceptions, Prev: Constant string objects, Up: Objective-C 47141 471428.6 compatibility_alias 47143======================= 47144 47145The keyword '@compatibility_alias' allows you to define a class name as 47146equivalent to another class name. For example: 47147 47148 @compatibility_alias WOApplication GSWApplication; 47149 47150 tells the compiler that each time it encounters 'WOApplication' as a 47151class name, it should replace it with 'GSWApplication' (that is, 47152'WOApplication' is just an alias for 'GSWApplication'). 47153 47154 There are some constraints on how this can be used-- 47155 47156 * 'WOApplication' (the alias) must not be an existing class; 47157 47158 * 'GSWApplication' (the real class) must be an existing class. 47159 47160 47161File: gcc.info, Node: Exceptions, Next: Synchronization, Prev: compatibility_alias, Up: Objective-C 47162 471638.7 Exceptions 47164============== 47165 47166GNU Objective-C provides exception support built into the language, as 47167in the following example: 47168 47169 @try { 47170 ... 47171 @throw expr; 47172 ... 47173 } 47174 @catch (AnObjCClass *exc) { 47175 ... 47176 @throw expr; 47177 ... 47178 @throw; 47179 ... 47180 } 47181 @catch (AnotherClass *exc) { 47182 ... 47183 } 47184 @catch (id allOthers) { 47185 ... 47186 } 47187 @finally { 47188 ... 47189 @throw expr; 47190 ... 47191 } 47192 47193 The '@throw' statement may appear anywhere in an Objective-C or 47194Objective-C++ program; when used inside of a '@catch' block, the 47195'@throw' may appear without an argument (as shown above), in which case 47196the object caught by the '@catch' will be rethrown. 47197 47198 Note that only (pointers to) Objective-C objects may be thrown and 47199caught using this scheme. When an object is thrown, it will be caught 47200by the nearest '@catch' clause capable of handling objects of that type, 47201analogously to how 'catch' blocks work in C++ and Java. A '@catch(id 47202...)' clause (as shown above) may also be provided to catch any and all 47203Objective-C exceptions not caught by previous '@catch' clauses (if any). 47204 47205 The '@finally' clause, if present, will be executed upon exit from the 47206immediately preceding '@try ... @catch' section. This will happen 47207regardless of whether any exceptions are thrown, caught or rethrown 47208inside the '@try ... @catch' section, analogously to the behavior of the 47209'finally' clause in Java. 47210 47211 There are several caveats to using the new exception mechanism: 47212 47213 * The '-fobjc-exceptions' command line option must be used when 47214 compiling Objective-C files that use exceptions. 47215 47216 * With the GNU runtime, exceptions are always implemented as "native" 47217 exceptions and it is recommended that the '-fexceptions' and 47218 '-shared-libgcc' options are used when linking. 47219 47220 * With the NeXT runtime, although currently designed to be binary 47221 compatible with 'NS_HANDLER'-style idioms provided by the 47222 'NSException' class, the new exceptions can only be used on Mac OS 47223 X 10.3 (Panther) and later systems, due to additional functionality 47224 needed in the NeXT Objective-C runtime. 47225 47226 * As mentioned above, the new exceptions do not support handling 47227 types other than Objective-C objects. Furthermore, when used from 47228 Objective-C++, the Objective-C exception model does not 47229 interoperate with C++ exceptions at this time. This means you 47230 cannot '@throw' an exception from Objective-C and 'catch' it in 47231 C++, or vice versa (i.e., 'throw ... @catch'). 47232 47233 47234File: gcc.info, Node: Synchronization, Next: Fast enumeration, Prev: Exceptions, Up: Objective-C 47235 472368.8 Synchronization 47237=================== 47238 47239GNU Objective-C provides support for synchronized blocks: 47240 47241 @synchronized (ObjCClass *guard) { 47242 ... 47243 } 47244 47245 Upon entering the '@synchronized' block, a thread of execution shall 47246first check whether a lock has been placed on the corresponding 'guard' 47247object by another thread. If it has, the current thread shall wait 47248until the other thread relinquishes its lock. Once 'guard' becomes 47249available, the current thread will place its own lock on it, execute the 47250code contained in the '@synchronized' block, and finally relinquish the 47251lock (thereby making 'guard' available to other threads). 47252 47253 Unlike Java, Objective-C does not allow for entire methods to be marked 47254'@synchronized'. Note that throwing exceptions out of '@synchronized' 47255blocks is allowed, and will cause the guarding object to be unlocked 47256properly. 47257 47258 Because of the interactions between synchronization and exception 47259handling, you can only use '@synchronized' when compiling with 47260exceptions enabled, that is with the command line option 47261'-fobjc-exceptions'. 47262 47263 47264File: gcc.info, Node: Fast enumeration, Next: Messaging with the GNU Objective-C runtime, Prev: Synchronization, Up: Objective-C 47265 472668.9 Fast enumeration 47267==================== 47268 47269* Menu: 47270 47271* Using fast enumeration:: 47272* c99-like fast enumeration syntax:: 47273* Fast enumeration details:: 47274* Fast enumeration protocol:: 47275 47276 47277File: gcc.info, Node: Using fast enumeration, Next: c99-like fast enumeration syntax, Up: Fast enumeration 47278 472798.9.1 Using fast enumeration 47280---------------------------- 47281 47282GNU Objective-C provides support for the fast enumeration syntax: 47283 47284 id array = ...; 47285 id object; 47286 47287 for (object in array) 47288 { 47289 /* Do something with 'object' */ 47290 } 47291 47292 'array' needs to be an Objective-C object (usually a collection object, 47293for example an array, a dictionary or a set) which implements the "Fast 47294Enumeration Protocol" (see below). If you are using a Foundation 47295library such as GNUstep Base or Apple Cocoa Foundation, all collection 47296objects in the library implement this protocol and can be used in this 47297way. 47298 47299 The code above would iterate over all objects in 'array'. For each of 47300them, it assigns it to 'object', then executes the 'Do something with 47301'object'' statements. 47302 47303 Here is a fully worked-out example using a Foundation library (which 47304provides the implementation of 'NSArray', 'NSString' and 'NSLog'): 47305 47306 NSArray *array = [NSArray arrayWithObjects: @"1", @"2", @"3", nil]; 47307 NSString *object; 47308 47309 for (object in array) 47310 NSLog (@"Iterating over %@", object); 47311 47312 47313File: gcc.info, Node: c99-like fast enumeration syntax, Next: Fast enumeration details, Prev: Using fast enumeration, Up: Fast enumeration 47314 473158.9.2 c99-like fast enumeration syntax 47316-------------------------------------- 47317 47318A c99-like declaration syntax is also allowed: 47319 47320 id array = ...; 47321 47322 for (id object in array) 47323 { 47324 /* Do something with 'object' */ 47325 } 47326 47327 this is completely equivalent to: 47328 47329 id array = ...; 47330 47331 { 47332 id object; 47333 for (object in array) 47334 { 47335 /* Do something with 'object' */ 47336 } 47337 } 47338 47339 but can save some typing. 47340 47341 Note that the option '-std=c99' is not required to allow this syntax in 47342Objective-C. 47343 47344 47345File: gcc.info, Node: Fast enumeration details, Next: Fast enumeration protocol, Prev: c99-like fast enumeration syntax, Up: Fast enumeration 47346 473478.9.3 Fast enumeration details 47348------------------------------ 47349 47350Here is a more technical description with the gory details. Consider 47351the code 47352 47353 for (OBJECT EXPRESSION in COLLECTION EXPRESSION) 47354 { 47355 STATEMENTS 47356 } 47357 47358 here is what happens when you run it: 47359 47360 * 'COLLECTION EXPRESSION' is evaluated exactly once and the result is 47361 used as the collection object to iterate over. This means it is 47362 safe to write code such as 'for (object in [NSDictionary 47363 keyEnumerator]) ...'. 47364 47365 * the iteration is implemented by the compiler by repeatedly getting 47366 batches of objects from the collection object using the fast 47367 enumeration protocol (see below), then iterating over all objects 47368 in the batch. This is faster than a normal enumeration where 47369 objects are retrieved one by one (hence the name "fast 47370 enumeration"). 47371 47372 * if there are no objects in the collection, then 'OBJECT EXPRESSION' 47373 is set to 'nil' and the loop immediately terminates. 47374 47375 * if there are objects in the collection, then for each object in the 47376 collection (in the order they are returned) 'OBJECT EXPRESSION' is 47377 set to the object, then 'STATEMENTS' are executed. 47378 47379 * 'STATEMENTS' can contain 'break' and 'continue' commands, which 47380 will abort the iteration or skip to the next loop iteration as 47381 expected. 47382 47383 * when the iteration ends because there are no more objects to 47384 iterate over, 'OBJECT EXPRESSION' is set to 'nil'. This allows you 47385 to determine whether the iteration finished because a 'break' 47386 command was used (in which case 'OBJECT EXPRESSION' will remain set 47387 to the last object that was iterated over) or because it iterated 47388 over all the objects (in which case 'OBJECT EXPRESSION' will be set 47389 to 'nil'). 47390 47391 * 'STATEMENTS' must not make any changes to the collection object; if 47392 they do, it is a hard error and the fast enumeration terminates by 47393 invoking 'objc_enumerationMutation', a runtime function that 47394 normally aborts the program but which can be customized by 47395 Foundation libraries via 'objc_set_mutation_handler' to do 47396 something different, such as raising an exception. 47397 47398 47399File: gcc.info, Node: Fast enumeration protocol, Prev: Fast enumeration details, Up: Fast enumeration 47400 474018.9.4 Fast enumeration protocol 47402------------------------------- 47403 47404If you want your own collection object to be usable with fast 47405enumeration, you need to have it implement the method 47406 47407 - (unsigned long) countByEnumeratingWithState: (NSFastEnumerationState *)state 47408 objects: (id *)objects 47409 count: (unsigned long)len; 47410 47411 where 'NSFastEnumerationState' must be defined in your code as follows: 47412 47413 typedef struct 47414 { 47415 unsigned long state; 47416 id *itemsPtr; 47417 unsigned long *mutationsPtr; 47418 unsigned long extra[5]; 47419 } NSFastEnumerationState; 47420 47421 If no 'NSFastEnumerationState' is defined in your code, the compiler 47422will automatically replace 'NSFastEnumerationState *' with 'struct 47423__objcFastEnumerationState *', where that type is silently defined by 47424the compiler in an identical way. This can be confusing and we 47425recommend that you define 'NSFastEnumerationState' (as shown above) 47426instead. 47427 47428 The method is called repeatedly during a fast enumeration to retrieve 47429batches of objects. Each invocation of the method should retrieve the 47430next batch of objects. 47431 47432 The return value of the method is the number of objects in the current 47433batch; this should not exceed 'len', which is the maximum size of a 47434batch as requested by the caller. The batch itself is returned in the 47435'itemsPtr' field of the 'NSFastEnumerationState' struct. 47436 47437 To help with returning the objects, the 'objects' array is a C array 47438preallocated by the caller (on the stack) of size 'len'. In many cases 47439you can put the objects you want to return in that 'objects' array, then 47440do 'itemsPtr = objects'. But you don't have to; if your collection 47441already has the objects to return in some form of C array, it could 47442return them from there instead. 47443 47444 The 'state' and 'extra' fields of the 'NSFastEnumerationState' 47445structure allows your collection object to keep track of the state of 47446the enumeration. In a simple array implementation, 'state' may keep 47447track of the index of the last object that was returned, and 'extra' may 47448be unused. 47449 47450 The 'mutationsPtr' field of the 'NSFastEnumerationState' is used to 47451keep track of mutations. It should point to a number; before working on 47452each object, the fast enumeration loop will check that this number has 47453not changed. If it has, a mutation has happened and the fast 47454enumeration will abort. So, 'mutationsPtr' could be set to point to 47455some sort of version number of your collection, which is increased by 47456one every time there is a change (for example when an object is added or 47457removed). Or, if you are content with less strict mutation checks, it 47458could point to the number of objects in your collection or some other 47459value that can be checked to perform an approximate check that the 47460collection has not been mutated. 47461 47462 Finally, note how we declared the 'len' argument and the return value 47463to be of type 'unsigned long'. They could also be declared to be of 47464type 'unsigned int' and everything would still work. 47465 47466 47467File: gcc.info, Node: Messaging with the GNU Objective-C runtime, Prev: Fast enumeration, Up: Objective-C 47468 474698.10 Messaging with the GNU Objective-C runtime 47470=============================================== 47471 47472This section is specific for the GNU Objective-C runtime. If you are 47473using a different runtime, you can skip it. 47474 47475 The implementation of messaging in the GNU Objective-C runtime is 47476designed to be portable, and so is based on standard C. 47477 47478 Sending a message in the GNU Objective-C runtime is composed of two 47479separate steps. First, there is a call to the lookup function, 47480'objc_msg_lookup ()' (or, in the case of messages to super, 47481'objc_msg_lookup_super ()'). This runtime function takes as argument 47482the receiver and the selector of the method to be called; it returns the 47483'IMP', that is a pointer to the function implementing the method. The 47484second step of method invocation consists of casting this pointer 47485function to the appropriate function pointer type, and calling the 47486function pointed to it with the right arguments. 47487 47488 For example, when the compiler encounters a method invocation such as 47489'[object init]', it compiles it into a call to 'objc_msg_lookup (object, 47490@selector(init))' followed by a cast of the returned value to the 47491appropriate function pointer type, and then it calls it. 47492 47493* Menu: 47494 47495* Dynamically registering methods:: 47496* Forwarding hook:: 47497 47498 47499File: gcc.info, Node: Dynamically registering methods, Next: Forwarding hook, Up: Messaging with the GNU Objective-C runtime 47500 475018.10.1 Dynamically registering methods 47502-------------------------------------- 47503 47504If 'objc_msg_lookup()' does not find a suitable method implementation, 47505because the receiver does not implement the required method, it tries to 47506see if the class can dynamically register the method. 47507 47508 To do so, the runtime checks if the class of the receiver implements 47509the method 47510 47511 + (BOOL) resolveInstanceMethod: (SEL)selector; 47512 47513 in the case of an instance method, or 47514 47515 + (BOOL) resolveClassMethod: (SEL)selector; 47516 47517 in the case of a class method. If the class implements it, the runtime 47518invokes it, passing as argument the selector of the original method, and 47519if it returns 'YES', the runtime tries the lookup again, which could now 47520succeed if a matching method was added dynamically by 47521'+resolveInstanceMethod:' or '+resolveClassMethod:'. 47522 47523 This allows classes to dynamically register methods (by adding them to 47524the class using 'class_addMethod') when they are first called. To do 47525so, a class should implement '+resolveInstanceMethod:' (or, depending on 47526the case, '+resolveClassMethod:') and have it recognize the selectors of 47527methods that can be registered dynamically at runtime, register them, 47528and return 'YES'. It should return 'NO' for methods that it does not 47529dynamically registered at runtime. 47530 47531 If '+resolveInstanceMethod:' (or '+resolveClassMethod:') is not 47532implemented or returns 'NO', the runtime then tries the forwarding hook. 47533 47534 Support for '+resolveInstanceMethod:' and 'resolveClassMethod:' was 47535added to the GNU Objective-C runtime in GCC version 4.6. 47536 47537 47538File: gcc.info, Node: Forwarding hook, Prev: Dynamically registering methods, Up: Messaging with the GNU Objective-C runtime 47539 475408.10.2 Forwarding hook 47541---------------------- 47542 47543The GNU Objective-C runtime provides a hook, called 47544'__objc_msg_forward2', which is called by 'objc_msg_lookup()' when it 47545can't find a method implementation in the runtime tables and after 47546calling '+resolveInstanceMethod:' and '+resolveClassMethod:' has been 47547attempted and did not succeed in dynamically registering the method. 47548 47549 To configure the hook, you set the global variable 47550'__objc_msg_forward2' to a function with the same argument and return 47551types of 'objc_msg_lookup()'. When 'objc_msg_lookup()' can not find a 47552method implementation, it invokes the hook function you provided to get 47553a method implementation to return. So, in practice 47554'__objc_msg_forward2' allows you to extend 'objc_msg_lookup()' by adding 47555some custom code that is called to do a further lookup when no standard 47556method implementation can be found using the normal lookup. 47557 47558 This hook is generally reserved for "Foundation" libraries such as 47559GNUstep Base, which use it to implement their high-level method 47560forwarding API, typically based around the 'forwardInvocation:' method. 47561So, unless you are implementing your own "Foundation" library, you 47562should not set this hook. 47563 47564 In a typical forwarding implementation, the '__objc_msg_forward2' hook 47565function determines the argument and return type of the method that is 47566being looked up, and then creates a function that takes these arguments 47567and has that return type, and returns it to the caller. Creating this 47568function is non-trivial and is typically performed using a dedicated 47569library such as 'libffi'. 47570 47571 The forwarding method implementation thus created is returned by 47572'objc_msg_lookup()' and is executed as if it was a normal method 47573implementation. When the forwarding method implementation is called, it 47574is usually expected to pack all arguments into some sort of object 47575(typically, an 'NSInvocation' in a "Foundation" library), and hand it 47576over to the programmer ('forwardInvocation:') who is then allowed to 47577manipulate the method invocation using a high-level API provided by the 47578"Foundation" library. For example, the programmer may want to examine 47579the method invocation arguments and name and potentially change them 47580before forwarding the method invocation to one or more local objects 47581('performInvocation:') or even to remote objects (by using Distributed 47582Objects or some other mechanism). When all this completes, the return 47583value is passed back and must be returned correctly to the original 47584caller. 47585 47586 Note that the GNU Objective-C runtime currently provides no support for 47587method forwarding or method invocations other than the 47588'__objc_msg_forward2' hook. 47589 47590 If the forwarding hook does not exist or returns 'NULL', the runtime 47591currently attempts forwarding using an older, deprecated API, and if 47592that fails, it aborts the program. In future versions of the GNU 47593Objective-C runtime, the runtime will immediately abort. 47594 47595 47596File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 47597 475989 Binary Compatibility 47599********************** 47600 47601Binary compatibility encompasses several related concepts: 47602 47603"application binary interface (ABI)" 47604 The set of runtime conventions followed by all of the tools that 47605 deal with binary representations of a program, including compilers, 47606 assemblers, linkers, and language runtime support. Some ABIs are 47607 formal with a written specification, possibly designed by multiple 47608 interested parties. Others are simply the way things are actually 47609 done by a particular set of tools. 47610 47611"ABI conformance" 47612 A compiler conforms to an ABI if it generates code that follows all 47613 of the specifications enumerated by that ABI. A library conforms 47614 to an ABI if it is implemented according to that ABI. An 47615 application conforms to an ABI if it is built using tools that 47616 conform to that ABI and does not contain source code that 47617 specifically changes behavior specified by the ABI. 47618 47619"calling conventions" 47620 Calling conventions are a subset of an ABI that specify of how 47621 arguments are passed and function results are returned. 47622 47623"interoperability" 47624 Different sets of tools are interoperable if they generate files 47625 that can be used in the same program. The set of tools includes 47626 compilers, assemblers, linkers, libraries, header files, startup 47627 files, and debuggers. Binaries produced by different sets of tools 47628 are not interoperable unless they implement the same ABI. This 47629 applies to different versions of the same tools as well as tools 47630 from different vendors. 47631 47632"intercallability" 47633 Whether a function in a binary built by one set of tools can call a 47634 function in a binary built by a different set of tools is a subset 47635 of interoperability. 47636 47637"implementation-defined features" 47638 Language standards include lists of implementation-defined features 47639 whose behavior can vary from one implementation to another. Some 47640 of these features are normally covered by a platform's ABI and 47641 others are not. The features that are not covered by an ABI 47642 generally affect how a program behaves, but not intercallability. 47643 47644"compatibility" 47645 Conformance to the same ABI and the same behavior of 47646 implementation-defined features are both relevant for 47647 compatibility. 47648 47649 The application binary interface implemented by a C or C++ compiler 47650affects code generation and runtime support for: 47651 47652 * size and alignment of data types 47653 * layout of structured types 47654 * calling conventions 47655 * register usage conventions 47656 * interfaces for runtime arithmetic support 47657 * object file formats 47658 47659 In addition, the application binary interface implemented by a C++ 47660compiler affects code generation and runtime support for: 47661 * name mangling 47662 * exception handling 47663 * invoking constructors and destructors 47664 * layout, alignment, and padding of classes 47665 * layout and alignment of virtual tables 47666 47667 Some GCC compilation options cause the compiler to generate code that 47668does not conform to the platform's default ABI. Other options cause 47669different program behavior for implementation-defined features that are 47670not covered by an ABI. These options are provided for consistency with 47671other compilers that do not follow the platform's default ABI or the 47672usual behavior of implementation-defined features for the platform. Be 47673very careful about using such options. 47674 47675 Most platforms have a well-defined ABI that covers C code, but ABIs 47676that cover C++ functionality are not yet common. 47677 47678 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 47679written, vendor-neutral C++ ABI that was designed to be specific to 4768064-bit Itanium but also includes generic specifications that apply to 47681any platform. This C++ ABI is also implemented by other compiler 47682vendors on some platforms, notably GNU/Linux and BSD systems. We have 47683tried hard to provide a stable ABI that will be compatible with future 47684GCC releases, but it is possible that we will encounter problems that 47685make this difficult. Such problems could include different 47686interpretations of the C++ ABI by different vendors, bugs in the ABI, or 47687bugs in the implementation of the ABI in different compilers. GCC's 47688'-Wabi' switch warns when G++ generates code that is probably not 47689compatible with the C++ ABI. 47690 47691 The C++ library used with a C++ compiler includes the Standard C++ 47692Library, with functionality defined in the C++ Standard, plus language 47693runtime support. The runtime support is included in a C++ ABI, but 47694there is no formal ABI for the Standard C++ Library. Two 47695implementations of that library are interoperable if one follows the 47696de-facto ABI of the other and if they are both built with the same 47697compiler, or with compilers that conform to the same ABI for C++ 47698compiler and runtime support. 47699 47700 When G++ and another C++ compiler conform to the same C++ ABI, but the 47701implementations of the Standard C++ Library that they normally use do 47702not follow the same ABI for the Standard C++ Library, object files built 47703with those compilers can be used in the same program only if they use 47704the same C++ library. This requires specifying the location of the C++ 47705library header files when invoking the compiler whose usual library is 47706not being used. The location of GCC's C++ header files depends on how 47707the GCC build was configured, but can be seen by using the G++ '-v' 47708option. With default configuration options for G++ 3.3 the compile line 47709for a different C++ compiler needs to include 47710 47711 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 47712 47713 Similarly, compiling code with G++ that must use a C++ library other 47714than the GNU C++ library requires specifying the location of the header 47715files for that other library. 47716 47717 The most straightforward way to link a program to use a particular C++ 47718library is to use a C++ driver that specifies that C++ library by 47719default. The 'g++' driver, for example, tells the linker where to find 47720GCC's C++ library ('libstdc++') plus the other libraries and startup 47721files it needs, in the proper order. 47722 47723 If a program must use a different C++ library and it's not possible to 47724do the final link using a C++ driver that uses that library by default, 47725it is necessary to tell 'g++' the location and name of that library. It 47726might also be necessary to specify different startup files and other 47727runtime support libraries, and to suppress the use of GCC's support 47728libraries with one or more of the options '-nostdlib', '-nostartfiles', 47729and '-nodefaultlibs'. 47730 47731 47732File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 47733 4773410 'gcov'--a Test Coverage Program 47735********************************** 47736 47737'gcov' is a tool you can use in conjunction with GCC to test code 47738coverage in your programs. 47739 47740* Menu: 47741 47742* Gcov Intro:: Introduction to gcov. 47743* Invoking Gcov:: How to use gcov. 47744* Gcov and Optimization:: Using gcov with GCC optimization. 47745* Gcov Data Files:: The files used by gcov. 47746* Cross-profiling:: Data file relocation. 47747 47748 47749File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 47750 4775110.1 Introduction to 'gcov' 47752=========================== 47753 47754'gcov' is a test coverage program. Use it in concert with GCC to 47755analyze your programs to help create more efficient, faster running code 47756and to discover untested parts of your program. You can use 'gcov' as a 47757profiling tool to help discover where your optimization efforts will 47758best affect your code. You can also use 'gcov' along with the other 47759profiling tool, 'gprof', to assess which parts of your code use the 47760greatest amount of computing time. 47761 47762 Profiling tools help you analyze your code's performance. Using a 47763profiler such as 'gcov' or 'gprof', you can find out some basic 47764performance statistics, such as: 47765 47766 * how often each line of code executes 47767 47768 * what lines of code are actually executed 47769 47770 * how much computing time each section of code uses 47771 47772 Once you know these things about how your code works when compiled, you 47773can look at each module to see which modules should be optimized. 47774'gcov' helps you determine where to work on optimization. 47775 47776 Software developers also use coverage testing in concert with 47777testsuites, to make sure software is actually good enough for a release. 47778Testsuites can verify that a program works as expected; a coverage 47779program tests to see how much of the program is exercised by the 47780testsuite. Developers can then determine what kinds of test cases need 47781to be added to the testsuites to create both better testing and a better 47782final product. 47783 47784 You should compile your code without optimization if you plan to use 47785'gcov' because the optimization, by combining some lines of code into 47786one function, may not give you as much information as you need to look 47787for 'hot spots' where the code is using a great deal of computer time. 47788Likewise, because 'gcov' accumulates statistics by line (at the lowest 47789resolution), it works best with a programming style that places only one 47790statement on each line. If you use complicated macros that expand to 47791loops or to other control structures, the statistics are less 47792helpful--they only report on the line where the macro call appears. If 47793your complex macros behave like functions, you can replace them with 47794inline functions to solve this problem. 47795 47796 'gcov' creates a logfile called 'SOURCEFILE.gcov' which indicates how 47797many times each line of a source file 'SOURCEFILE.c' has executed. You 47798can use these logfiles along with 'gprof' to aid in fine-tuning the 47799performance of your programs. 'gprof' gives timing information you can 47800use along with the information you get from 'gcov'. 47801 47802 'gcov' works only on code compiled with GCC. It is not compatible with 47803any other profiling or test coverage mechanism. 47804 47805 47806File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 47807 4780810.2 Invoking 'gcov' 47809==================== 47810 47811 gcov [OPTIONS] FILES 47812 47813 'gcov' accepts the following options: 47814 47815'-h' 47816'--help' 47817 Display help about using 'gcov' (on the standard output), and exit 47818 without doing any further processing. 47819 47820'-v' 47821'--version' 47822 Display the 'gcov' version number (on the standard output), and 47823 exit without doing any further processing. 47824 47825'-a' 47826'--all-blocks' 47827 Write individual execution counts for every basic block. Normally 47828 gcov outputs execution counts only for the main blocks of a line. 47829 With this option you can determine if blocks within a single line 47830 are not being executed. 47831 47832'-b' 47833'--branch-probabilities' 47834 Write branch frequencies to the output file, and write branch 47835 summary info to the standard output. This option allows you to see 47836 how often each branch in your program was taken. Unconditional 47837 branches will not be shown, unless the '-u' option is given. 47838 47839'-c' 47840'--branch-counts' 47841 Write branch frequencies as the number of branches taken, rather 47842 than the percentage of branches taken. 47843 47844'-n' 47845'--no-output' 47846 Do not create the 'gcov' output file. 47847 47848'-l' 47849'--long-file-names' 47850 Create long file names for included source files. For example, if 47851 the header file 'x.h' contains code, and was included in the file 47852 'a.c', then running 'gcov' on the file 'a.c' will produce an output 47853 file called 'a.c##x.h.gcov' instead of 'x.h.gcov'. This can be 47854 useful if 'x.h' is included in multiple source files and you want 47855 to see the individual contributions. If you use the '-p' option, 47856 both the including and included file names will be complete path 47857 names. 47858 47859'-p' 47860'--preserve-paths' 47861 Preserve complete path information in the names of generated 47862 '.gcov' files. Without this option, just the filename component is 47863 used. With this option, all directories are used, with '/' 47864 characters translated to '#' characters, '.' directory components 47865 removed and unremoveable '..' components renamed to '^'. This is 47866 useful if sourcefiles are in several different directories. 47867 47868'-r' 47869'--relative-only' 47870 Only output information about source files with a relative pathname 47871 (after source prefix elision). Absolute paths are usually system 47872 header files and coverage of any inline functions therein is 47873 normally uninteresting. 47874 47875'-f' 47876'--function-summaries' 47877 Output summaries for each function in addition to the file level 47878 summary. 47879 47880'-o DIRECTORY|FILE' 47881'--object-directory DIRECTORY' 47882'--object-file FILE' 47883 Specify either the directory containing the gcov data files, or the 47884 object path name. The '.gcno', and '.gcda' data files are searched 47885 for using this option. If a directory is specified, the data files 47886 are in that directory and named after the input file name, without 47887 its extension. If a file is specified here, the data files are 47888 named after that file, without its extension. 47889 47890'-s DIRECTORY' 47891'--source-prefix DIRECTORY' 47892 A prefix for source file names to remove when generating the output 47893 coverage files. This option is useful when building in a separate 47894 directory, and the pathname to the source directory is not wanted 47895 when determining the output file names. Note that this prefix 47896 detection is applied before determining whether the source file is 47897 absolute. 47898 47899'-u' 47900'--unconditional-branches' 47901 When branch probabilities are given, include those of unconditional 47902 branches. Unconditional branches are normally not interesting. 47903 47904'-d' 47905'--display-progress' 47906 Display the progress on the standard output. 47907 47908'-i' 47909'--intermediate-format' 47910 Output gcov file in an easy-to-parse intermediate text format that 47911 can be used by 'lcov' or other tools. The output is a single 47912 '.gcov' file per '.gcda' file. No source code is required. 47913 47914 The format of the intermediate '.gcov' file is plain text with one 47915 entry per line 47916 47917 file:SOURCE_FILE_NAME 47918 function:LINE_NUMBER,EXECUTION_COUNT,FUNCTION_NAME 47919 lcount:LINE NUMBER,EXECUTION_COUNT 47920 branch:LINE_NUMBER,BRANCH_COVERAGE_TYPE 47921 47922 Where the BRANCH_COVERAGE_TYPE is 47923 notexec (Branch not executed) 47924 taken (Branch executed and taken) 47925 nottaken (Branch executed, but not taken) 47926 47927 There can be multiple FILE entries in an intermediate gcov 47928 file. All entries following a FILE pertain to that source file 47929 until the next FILE entry. 47930 47931 Here is a sample when '-i' is used in conjunction with '-b' option: 47932 47933 file:array.cc 47934 function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE 47935 function:22,1,main 47936 lcount:11,1 47937 lcount:12,1 47938 lcount:14,1 47939 branch:14,taken 47940 lcount:26,1 47941 branch:28,nottaken 47942 47943'-m' 47944'--demangled-names' 47945 Display demangled function names in output. The default is to show 47946 mangled function names. 47947 47948 'gcov' should be run with the current directory the same as that when 47949you invoked the compiler. Otherwise it will not be able to locate the 47950source files. 'gcov' produces files called 'MANGLEDNAME.gcov' in the 47951current directory. These contain the coverage information of the source 47952file they correspond to. One '.gcov' file is produced for each source 47953(or header) file containing code, which was compiled to produce the data 47954files. The MANGLEDNAME part of the output file name is usually simply 47955the source file name, but can be something more complicated if the '-l' 47956or '-p' options are given. Refer to those options for details. 47957 47958 If you invoke 'gcov' with multiple input files, the contributions from 47959each input file are summed. Typically you would invoke it with the same 47960list of files as the final link of your executable. 47961 47962 The '.gcov' files contain the ':' separated fields along with program 47963source code. The format is 47964 47965 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 47966 47967 Additional block information may succeed each line, when requested by 47968command line option. The EXECUTION_COUNT is '-' for lines containing no 47969code. Unexecuted lines are marked '#####' or '====', depending on 47970whether they are reachable by non-exceptional paths or only exceptional 47971paths such as C++ exception handlers, respectively. 47972 47973 Some lines of information at the start have LINE_NUMBER of zero. These 47974preamble lines are of the form 47975 47976 -:0:TAG:VALUE 47977 47978 The ordering and number of these preamble lines will be augmented as 47979'gcov' development progresses -- do not rely on them remaining 47980unchanged. Use TAG to locate a particular preamble line. 47981 47982 The additional block information is of the form 47983 47984 TAG INFORMATION 47985 47986 The INFORMATION is human readable, but designed to be simple enough for 47987machine parsing too. 47988 47989 When printing percentages, 0% and 100% are only printed when the values 47990are _exactly_ 0% and 100% respectively. Other values which would 47991conventionally be rounded to 0% or 100% are instead printed as the 47992nearest non-boundary value. 47993 47994 When using 'gcov', you must first compile your program with two special 47995GCC options: '-fprofile-arcs -ftest-coverage'. This tells the compiler 47996to generate additional information needed by gcov (basically a flow 47997graph of the program) and also includes additional code in the object 47998files for generating the extra profiling information needed by gcov. 47999These additional files are placed in the directory where the object file 48000is located. 48001 48002 Running the program will cause profile output to be generated. For 48003each source file compiled with '-fprofile-arcs', an accompanying '.gcda' 48004file will be placed in the object file directory. 48005 48006 Running 'gcov' with your program's source file names as arguments will 48007now produce a listing of the code along with frequency of execution for 48008each line. For example, if your program is called 'tmp.c', this is what 48009you see when you use the basic 'gcov' facility: 48010 48011 $ gcc -fprofile-arcs -ftest-coverage tmp.c 48012 $ a.out 48013 $ gcov tmp.c 48014 90.00% of 10 source lines executed in file tmp.c 48015 Creating tmp.c.gcov. 48016 48017 The file 'tmp.c.gcov' contains output from 'gcov'. Here is a sample: 48018 48019 -: 0:Source:tmp.c 48020 -: 0:Graph:tmp.gcno 48021 -: 0:Data:tmp.gcda 48022 -: 0:Runs:1 48023 -: 0:Programs:1 48024 -: 1:#include <stdio.h> 48025 -: 2: 48026 -: 3:int main (void) 48027 1: 4:{ 48028 1: 5: int i, total; 48029 -: 6: 48030 1: 7: total = 0; 48031 -: 8: 48032 11: 9: for (i = 0; i < 10; i++) 48033 10: 10: total += i; 48034 -: 11: 48035 1: 12: if (total != 45) 48036 #####: 13: printf ("Failure\n"); 48037 -: 14: else 48038 1: 15: printf ("Success\n"); 48039 1: 16: return 0; 48040 -: 17:} 48041 48042 When you use the '-a' option, you will get individual block counts, and 48043the output looks like this: 48044 48045 -: 0:Source:tmp.c 48046 -: 0:Graph:tmp.gcno 48047 -: 0:Data:tmp.gcda 48048 -: 0:Runs:1 48049 -: 0:Programs:1 48050 -: 1:#include <stdio.h> 48051 -: 2: 48052 -: 3:int main (void) 48053 1: 4:{ 48054 1: 4-block 0 48055 1: 5: int i, total; 48056 -: 6: 48057 1: 7: total = 0; 48058 -: 8: 48059 11: 9: for (i = 0; i < 10; i++) 48060 11: 9-block 0 48061 10: 10: total += i; 48062 10: 10-block 0 48063 -: 11: 48064 1: 12: if (total != 45) 48065 1: 12-block 0 48066 #####: 13: printf ("Failure\n"); 48067 $$$$$: 13-block 0 48068 -: 14: else 48069 1: 15: printf ("Success\n"); 48070 1: 15-block 0 48071 1: 16: return 0; 48072 1: 16-block 0 48073 -: 17:} 48074 48075 In this mode, each basic block is only shown on one line - the last 48076line of the block. A multi-line block will only contribute to the 48077execution count of that last line, and other lines will not be shown to 48078contain code, unless previous blocks end on those lines. The total 48079execution count of a line is shown and subsequent lines show the 48080execution counts for individual blocks that end on that line. After 48081each block, the branch and call counts of the block will be shown, if 48082the '-b' option is given. 48083 48084 Because of the way GCC instruments calls, a call count can be shown 48085after a line with no individual blocks. As you can see, line 13 48086contains a basic block that was not executed. 48087 48088 When you use the '-b' option, your output looks like this: 48089 48090 $ gcov -b tmp.c 48091 90.00% of 10 source lines executed in file tmp.c 48092 80.00% of 5 branches executed in file tmp.c 48093 80.00% of 5 branches taken at least once in file tmp.c 48094 50.00% of 2 calls executed in file tmp.c 48095 Creating tmp.c.gcov. 48096 48097 Here is a sample of a resulting 'tmp.c.gcov' file: 48098 48099 -: 0:Source:tmp.c 48100 -: 0:Graph:tmp.gcno 48101 -: 0:Data:tmp.gcda 48102 -: 0:Runs:1 48103 -: 0:Programs:1 48104 -: 1:#include <stdio.h> 48105 -: 2: 48106 -: 3:int main (void) 48107 function main called 1 returned 1 blocks executed 75% 48108 1: 4:{ 48109 1: 5: int i, total; 48110 -: 6: 48111 1: 7: total = 0; 48112 -: 8: 48113 11: 9: for (i = 0; i < 10; i++) 48114 branch 0 taken 91% (fallthrough) 48115 branch 1 taken 9% 48116 10: 10: total += i; 48117 -: 11: 48118 1: 12: if (total != 45) 48119 branch 0 taken 0% (fallthrough) 48120 branch 1 taken 100% 48121 #####: 13: printf ("Failure\n"); 48122 call 0 never executed 48123 -: 14: else 48124 1: 15: printf ("Success\n"); 48125 call 0 called 1 returned 100% 48126 1: 16: return 0; 48127 -: 17:} 48128 48129 For each function, a line is printed showing how many times the 48130function is called, how many times it returns and what percentage of the 48131function's blocks were executed. 48132 48133 For each basic block, a line is printed after the last line of the 48134basic block describing the branch or call that ends the basic block. 48135There can be multiple branches and calls listed for a single source line 48136if there are multiple basic blocks that end on that line. In this case, 48137the branches and calls are each given a number. There is no simple way 48138to map these branches and calls back to source constructs. In general, 48139though, the lowest numbered branch or call will correspond to the 48140leftmost construct on the source line. 48141 48142 For a branch, if it was executed at least once, then a percentage 48143indicating the number of times the branch was taken divided by the 48144number of times the branch was executed will be printed. Otherwise, the 48145message "never executed" is printed. 48146 48147 For a call, if it was executed at least once, then a percentage 48148indicating the number of times the call returned divided by the number 48149of times the call was executed will be printed. This will usually be 48150100%, but may be less for functions that call 'exit' or 'longjmp', and 48151thus may not return every time they are called. 48152 48153 The execution counts are cumulative. If the example program were 48154executed again without removing the '.gcda' file, the count for the 48155number of times each line in the source was executed would be added to 48156the results of the previous run(s). This is potentially useful in 48157several ways. For example, it could be used to accumulate data over a 48158number of program runs as part of a test verification suite, or to 48159provide more accurate long-term information over a large number of 48160program runs. 48161 48162 The data in the '.gcda' files is saved immediately before the program 48163exits. For each source file compiled with '-fprofile-arcs', the 48164profiling code first attempts to read in an existing '.gcda' file; if 48165the file doesn't match the executable (differing number of basic block 48166counts) it will ignore the contents of the file. It then adds in the 48167new execution counts and finally writes the data to the file. 48168 48169 48170File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 48171 4817210.3 Using 'gcov' with GCC Optimization 48173======================================= 48174 48175If you plan to use 'gcov' to help optimize your code, you must first 48176compile your program with two special GCC options: '-fprofile-arcs 48177-ftest-coverage'. Aside from that, you can use any other GCC options; 48178but if you want to prove that every single line in your program was 48179executed, you should not compile with optimization at the same time. On 48180some machines the optimizer can eliminate some simple code lines by 48181combining them with other lines. For example, code like this: 48182 48183 if (a != b) 48184 c = 1; 48185 else 48186 c = 0; 48187 48188can be compiled into one instruction on some machines. In this case, 48189there is no way for 'gcov' to calculate separate execution counts for 48190each line because there isn't separate code for each line. Hence the 48191'gcov' output looks like this if you compiled the program with 48192optimization: 48193 48194 100: 12:if (a != b) 48195 100: 13: c = 1; 48196 100: 14:else 48197 100: 15: c = 0; 48198 48199 The output shows that this block of code, combined by optimization, 48200executed 100 times. In one sense this result is correct, because there 48201was only one instruction representing all four of these lines. However, 48202the output does not indicate how many times the result was 0 and how 48203many times the result was 1. 48204 48205 Inlineable functions can create unexpected line counts. Line counts 48206are shown for the source code of the inlineable function, but what is 48207shown depends on where the function is inlined, or if it is not inlined 48208at all. 48209 48210 If the function is not inlined, the compiler must emit an out of line 48211copy of the function, in any object file that needs it. If 'fileA.o' 48212and 'fileB.o' both contain out of line bodies of a particular inlineable 48213function, they will also both contain coverage counts for that function. 48214When 'fileA.o' and 'fileB.o' are linked together, the linker will, on 48215many systems, select one of those out of line bodies for all calls to 48216that function, and remove or ignore the other. Unfortunately, it will 48217not remove the coverage counters for the unused function body. Hence 48218when instrumented, all but one use of that function will show zero 48219counts. 48220 48221 If the function is inlined in several places, the block structure in 48222each location might not be the same. For instance, a condition might 48223now be calculable at compile time in some instances. Because the 48224coverage of all the uses of the inline function will be shown for the 48225same source lines, the line counts themselves might seem inconsistent. 48226 48227 Long-running applications can use the '_gcov_reset' and '_gcov_dump' 48228facilities to restrict profile collection to the program region of 48229interest. Calling '_gcov_reset(void)' will clear all profile counters 48230to zero, and calling '_gcov_dump(void)' will cause the profile 48231information collected at that point to be dumped to '.gcda' output 48232files. 48233 48234 48235File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 48236 4823710.4 Brief description of 'gcov' data files 48238=========================================== 48239 48240'gcov' uses two files for profiling. The names of these files are 48241derived from the original _object_ file by substituting the file suffix 48242with either '.gcno', or '.gcda'. The files contain coverage and profile 48243data stored in a platform-independent format. The '.gcno' files are 48244placed in the same directory as the object file. By default, the 48245'.gcda' files are also stored in the same directory as the object file, 48246but the GCC '-fprofile-dir' option may be used to store the '.gcda' 48247files in a separate directory. 48248 48249 The '.gcno' notes file is generated when the source file is compiled 48250with the GCC '-ftest-coverage' option. It contains information to 48251reconstruct the basic block graphs and assign source line numbers to 48252blocks. 48253 48254 The '.gcda' count data file is generated when a program containing 48255object files built with the GCC '-fprofile-arcs' option is executed. A 48256separate '.gcda' file is created for each object file compiled with this 48257option. It contains arc transition counts, value profile counts, and 48258some summary information. 48259 48260 The full details of the file format is specified in 'gcov-io.h', and 48261functions provided in that header file should be used to access the 48262coverage files. 48263 48264 48265File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 48266 4826710.5 Data file relocation to support cross-profiling 48268==================================================== 48269 48270Running the program will cause profile output to be generated. For each 48271source file compiled with '-fprofile-arcs', an accompanying '.gcda' file 48272will be placed in the object file directory. That implicitly requires 48273running the program on the same system as it was built or having the 48274same absolute directory structure on the target system. The program 48275will try to create the needed directory structure, if it is not already 48276present. 48277 48278 To support cross-profiling, a program compiled with '-fprofile-arcs' 48279can relocate the data files based on two environment variables: 48280 48281 * GCOV_PREFIX contains the prefix to add to the absolute paths in the 48282 object file. Prefix can be absolute, or relative. The default is 48283 no prefix. 48284 48285 * GCOV_PREFIX_STRIP indicates the how many initial directory names to 48286 strip off the hardwired absolute paths. Default value is 0. 48287 48288 _Note:_ If GCOV_PREFIX_STRIP is set without GCOV_PREFIX is 48289 undefined, then a relative path is made out of the hardwired 48290 absolute paths. 48291 48292 For example, if the object file '/user/build/foo.o' was built with 48293'-fprofile-arcs', the final executable will try to create the data file 48294'/user/build/foo.gcda' when running on the target system. This will 48295fail if the corresponding directory does not exist and it is unable to 48296create it. This can be overcome by, for example, setting the 48297environment as 'GCOV_PREFIX=/target/run' and 'GCOV_PREFIX_STRIP=1'. 48298Such a setting will name the data file '/target/run/build/foo.gcda'. 48299 48300 You must move the data files to the expected directory tree in order to 48301use them for profile directed optimizations ('--use-profile'), or to use 48302the 'gcov' tool. 48303 48304 48305File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 48306 4830711 Known Causes of Trouble with GCC 48308*********************************** 48309 48310This section describes known problems that affect users of GCC. Most of 48311these are not GCC bugs per se--if they were, we would fix them. But the 48312result for a user may be like the result of a bug. 48313 48314 Some of these problems are due to bugs in other software, some are 48315missing features that are too much work to add, and some are places 48316where people's opinions differ as to what is best. 48317 48318* Menu: 48319 48320* Actual Bugs:: Bugs we will fix later. 48321* Interoperation:: Problems using GCC with other compilers, 48322 and with certain linkers, assemblers and debuggers. 48323* Incompatibilities:: GCC is incompatible with traditional C. 48324* Fixed Headers:: GCC uses corrected versions of system header files. 48325 This is necessary, but doesn't always work smoothly. 48326* Standard Libraries:: GCC uses the system C library, which might not be 48327 compliant with the ISO C standard. 48328* Disappointments:: Regrettable things we can't change, but not quite bugs. 48329* C++ Misunderstandings:: Common misunderstandings with GNU C++. 48330* Non-bugs:: Things we think are right, but some others disagree. 48331* Warnings and Errors:: Which problems in your code get warnings, 48332 and which get errors. 48333 48334 48335File: gcc.info, Node: Actual Bugs, Next: Interoperation, Up: Trouble 48336 4833711.1 Actual Bugs We Haven't Fixed Yet 48338===================================== 48339 48340 * The 'fixincludes' script interacts badly with automounters; if the 48341 directory of system header files is automounted, it tends to be 48342 unmounted while 'fixincludes' is running. This would seem to be a 48343 bug in the automounter. We don't know any good way to work around 48344 it. 48345 48346 48347File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Actual Bugs, Up: Trouble 48348 4834911.2 Interoperation 48350=================== 48351 48352This section lists various difficulties encountered in using GCC 48353together with other compilers or with the assemblers, linkers, libraries 48354and debuggers on certain systems. 48355 48356 * On many platforms, GCC supports a different ABI for C++ than do 48357 other compilers, so the object files compiled by GCC cannot be used 48358 with object files generated by another C++ compiler. 48359 48360 An area where the difference is most apparent is name mangling. 48361 The use of different name mangling is intentional, to protect you 48362 from more subtle problems. Compilers differ as to many internal 48363 details of C++ implementation, including: how class instances are 48364 laid out, how multiple inheritance is implemented, and how virtual 48365 function calls are handled. If the name encoding were made the 48366 same, your programs would link against libraries provided from 48367 other compilers--but the programs would then crash when run. 48368 Incompatible libraries are then detected at link time, rather than 48369 at run time. 48370 48371 * On some BSD systems, including some versions of Ultrix, use of 48372 profiling causes static variable destructors (currently used only 48373 in C++) not to be run. 48374 48375 * On a SPARC, GCC aligns all values of type 'double' on an 8-byte 48376 boundary, and it expects every 'double' to be so aligned. The Sun 48377 compiler usually gives 'double' values 8-byte alignment, with one 48378 exception: function arguments of type 'double' may not be aligned. 48379 48380 As a result, if a function compiled with Sun CC takes the address 48381 of an argument of type 'double' and passes this pointer of type 48382 'double *' to a function compiled with GCC, dereferencing the 48383 pointer may cause a fatal signal. 48384 48385 One way to solve this problem is to compile your entire program 48386 with GCC. Another solution is to modify the function that is 48387 compiled with Sun CC to copy the argument into a local variable; 48388 local variables are always properly aligned. A third solution is 48389 to modify the function that uses the pointer to dereference it via 48390 the following function 'access_double' instead of directly with 48391 '*': 48392 48393 inline double 48394 access_double (double *unaligned_ptr) 48395 { 48396 union d2i { double d; int i[2]; }; 48397 48398 union d2i *p = (union d2i *) unaligned_ptr; 48399 union d2i u; 48400 48401 u.i[0] = p->i[0]; 48402 u.i[1] = p->i[1]; 48403 48404 return u.d; 48405 } 48406 48407 Storing into the pointer can be done likewise with the same union. 48408 48409 * On Solaris, the 'malloc' function in the 'libmalloc.a' library may 48410 allocate memory that is only 4 byte aligned. Since GCC on the 48411 SPARC assumes that doubles are 8 byte aligned, this may result in a 48412 fatal signal if doubles are stored in memory allocated by the 48413 'libmalloc.a' library. 48414 48415 The solution is to not use the 'libmalloc.a' library. Use instead 48416 'malloc' and related functions from 'libc.a'; they do not have this 48417 problem. 48418 48419 * On the HP PA machine, ADB sometimes fails to work on functions 48420 compiled with GCC. Specifically, it fails to work on functions 48421 that use 'alloca' or variable-size arrays. This is because GCC 48422 doesn't generate HP-UX unwind descriptors for such functions. It 48423 may even be impossible to generate them. 48424 48425 * Debugging ('-g') is not supported on the HP PA machine, unless you 48426 use the preliminary GNU tools. 48427 48428 * Taking the address of a label may generate errors from the HP-UX PA 48429 assembler. GAS for the PA does not have this problem. 48430 48431 * Using floating point parameters for indirect calls to static 48432 functions will not work when using the HP assembler. There simply 48433 is no way for GCC to specify what registers hold arguments for 48434 static functions when using the HP assembler. GAS for the PA does 48435 not have this problem. 48436 48437 * In extremely rare cases involving some very large functions you may 48438 receive errors from the HP linker complaining about an out of 48439 bounds unconditional branch offset. This used to occur more often 48440 in previous versions of GCC, but is now exceptionally rare. If you 48441 should run into it, you can work around by making your function 48442 smaller. 48443 48444 * GCC compiled code sometimes emits warnings from the HP-UX assembler 48445 of the form: 48446 48447 (warning) Use of GR3 when 48448 frame >= 8192 may cause conflict. 48449 48450 These warnings are harmless and can be safely ignored. 48451 48452 * In extremely rare cases involving some very large functions you may 48453 receive errors from the AIX Assembler complaining about a 48454 displacement that is too large. If you should run into it, you can 48455 work around by making your function smaller. 48456 48457 * The 'libstdc++.a' library in GCC relies on the SVR4 dynamic linker 48458 semantics which merges global symbols between libraries and 48459 applications, especially necessary for C++ streams functionality. 48460 This is not the default behavior of AIX shared libraries and 48461 dynamic linking. 'libstdc++.a' is built on AIX with 48462 "runtime-linking" enabled so that symbol merging can occur. To 48463 utilize this feature, the application linked with 'libstdc++.a' 48464 must include the '-Wl,-brtl' flag on the link line. G++ cannot 48465 impose this because this option may interfere with the semantics of 48466 the user program and users may not always use 'g++' to link his or 48467 her application. Applications are not required to use the 48468 '-Wl,-brtl' flag on the link line--the rest of the 'libstdc++.a' 48469 library which is not dependent on the symbol merging semantics will 48470 continue to function correctly. 48471 48472 * An application can interpose its own definition of functions for 48473 functions invoked by 'libstdc++.a' with "runtime-linking" enabled 48474 on AIX. To accomplish this the application must be linked with 48475 "runtime-linking" option and the functions explicitly must be 48476 exported by the application ('-Wl,-brtl,-bE:exportfile'). 48477 48478 * AIX on the RS/6000 provides support (NLS) for environments outside 48479 of the United States. Compilers and assemblers use NLS to support 48480 locale-specific representations of various objects including 48481 floating-point numbers ('.' vs ',' for separating decimal 48482 fractions). There have been problems reported where the library 48483 linked with GCC does not produce the same floating-point formats 48484 that the assembler accepts. If you have this problem, set the 48485 'LANG' environment variable to 'C' or 'En_US'. 48486 48487 * Even if you specify '-fdollars-in-identifiers', you cannot 48488 successfully use '$' in identifiers on the RS/6000 due to a 48489 restriction in the IBM assembler. GAS supports these identifiers. 48490 48491 48492File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 48493 4849411.3 Incompatibilities of GCC 48495============================= 48496 48497There are several noteworthy incompatibilities between GNU C and K&R 48498(non-ISO) versions of C. 48499 48500 * GCC normally makes string constants read-only. If several 48501 identical-looking string constants are used, GCC stores only one 48502 copy of the string. 48503 48504 One consequence is that you cannot call 'mktemp' with a string 48505 constant argument. The function 'mktemp' always alters the string 48506 its argument points to. 48507 48508 Another consequence is that 'sscanf' does not work on some very old 48509 systems when passed a string constant as its format control string 48510 or input. This is because 'sscanf' incorrectly tries to write into 48511 the string constant. Likewise 'fscanf' and 'scanf'. 48512 48513 The solution to these problems is to change the program to use 48514 'char'-array variables with initialization strings for these 48515 purposes instead of string constants. 48516 48517 * '-2147483648' is positive. 48518 48519 This is because 2147483648 cannot fit in the type 'int', so 48520 (following the ISO C rules) its data type is 'unsigned long int'. 48521 Negating this value yields 2147483648 again. 48522 48523 * GCC does not substitute macro arguments when they appear inside of 48524 string constants. For example, the following macro in GCC 48525 48526 #define foo(a) "a" 48527 48528 will produce output '"a"' regardless of what the argument A is. 48529 48530 * When you use 'setjmp' and 'longjmp', the only automatic variables 48531 guaranteed to remain valid are those declared 'volatile'. This is 48532 a consequence of automatic register allocation. Consider this 48533 function: 48534 48535 jmp_buf j; 48536 48537 foo () 48538 { 48539 int a, b; 48540 48541 a = fun1 (); 48542 if (setjmp (j)) 48543 return a; 48544 48545 a = fun2 (); 48546 /* 'longjmp (j)' may occur in 'fun3'. */ 48547 return a + fun3 (); 48548 } 48549 48550 Here 'a' may or may not be restored to its first value when the 48551 'longjmp' occurs. If 'a' is allocated in a register, then its 48552 first value is restored; otherwise, it keeps the last value stored 48553 in it. 48554 48555 If you use the '-W' option with the '-O' option, you will get a 48556 warning when GCC thinks such a problem might be possible. 48557 48558 * Programs that use preprocessing directives in the middle of macro 48559 arguments do not work with GCC. For example, a program like this 48560 will not work: 48561 48562 foobar ( 48563 #define luser 48564 hack) 48565 48566 ISO C does not permit such a construct. 48567 48568 * K&R compilers allow comments to cross over an inclusion boundary 48569 (i.e. started in an include file and ended in the including file). 48570 48571 * Declarations of external variables and functions within a block 48572 apply only to the block containing the declaration. In other 48573 words, they have the same scope as any other declaration in the 48574 same place. 48575 48576 In some other C compilers, an 'extern' declaration affects all the 48577 rest of the file even if it happens within a block. 48578 48579 * In traditional C, you can combine 'long', etc., with a typedef 48580 name, as shown here: 48581 48582 typedef int foo; 48583 typedef long foo bar; 48584 48585 In ISO C, this is not allowed: 'long' and other type modifiers 48586 require an explicit 'int'. 48587 48588 * PCC allows typedef names to be used as function parameters. 48589 48590 * Traditional C allows the following erroneous pair of declarations 48591 to appear together in a given scope: 48592 48593 typedef int foo; 48594 typedef foo foo; 48595 48596 * GCC treats all characters of identifiers as significant. According 48597 to K&R-1 (2.2), "No more than the first eight characters are 48598 significant, although more may be used.". Also according to K&R-1 48599 (2.2), "An identifier is a sequence of letters and digits; the 48600 first character must be a letter. The underscore _ counts as a 48601 letter.", but GCC also allows dollar signs in identifiers. 48602 48603 * PCC allows whitespace in the middle of compound assignment 48604 operators such as '+='. GCC, following the ISO standard, does not 48605 allow this. 48606 48607 * GCC complains about unterminated character constants inside of 48608 preprocessing conditionals that fail. Some programs have English 48609 comments enclosed in conditionals that are guaranteed to fail; if 48610 these comments contain apostrophes, GCC will probably report an 48611 error. For example, this code would produce an error: 48612 48613 #if 0 48614 You can't expect this to work. 48615 #endif 48616 48617 The best solution to such a problem is to put the text into an 48618 actual C comment delimited by '/*...*/'. 48619 48620 * Many user programs contain the declaration 'long time ();'. In the 48621 past, the system header files on many systems did not actually 48622 declare 'time', so it did not matter what type your program 48623 declared it to return. But in systems with ISO C headers, 'time' 48624 is declared to return 'time_t', and if that is not the same as 48625 'long', then 'long time ();' is erroneous. 48626 48627 The solution is to change your program to use appropriate system 48628 headers ('<time.h>' on systems with ISO C headers) and not to 48629 declare 'time' if the system header files declare it, or failing 48630 that to use 'time_t' as the return type of 'time'. 48631 48632 * When compiling functions that return 'float', PCC converts it to a 48633 double. GCC actually returns a 'float'. If you are concerned with 48634 PCC compatibility, you should declare your functions to return 48635 'double'; you might as well say what you mean. 48636 48637 * When compiling functions that return structures or unions, GCC 48638 output code normally uses a method different from that used on most 48639 versions of Unix. As a result, code compiled with GCC cannot call 48640 a structure-returning function compiled with PCC, and vice versa. 48641 48642 The method used by GCC is as follows: a structure or union which is 48643 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 48644 union with any other size is stored into an address supplied by the 48645 caller (usually in a special, fixed register, but on some machines 48646 it is passed on the stack). The target hook 48647 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 48648 48649 By contrast, PCC on most target machines returns structures and 48650 unions of any size by copying the data into an area of static 48651 storage, and then returning the address of that storage as if it 48652 were a pointer value. The caller must copy the data from that 48653 memory area to the place where the value is wanted. GCC does not 48654 use this method because it is slower and nonreentrant. 48655 48656 On some newer machines, PCC uses a reentrant convention for all 48657 structure and union returning. GCC on most of these machines uses 48658 a compatible convention when returning structures and unions in 48659 memory, but still returns small structures and unions in registers. 48660 48661 You can tell GCC to use a compatible convention for all structure 48662 and union returning with the option '-fpcc-struct-return'. 48663 48664 * GCC complains about program fragments such as '0x74ae-0x4000' which 48665 appear to be two hexadecimal constants separated by the minus 48666 operator. Actually, this string is a single "preprocessing token". 48667 Each such token must correspond to one token in C. Since this does 48668 not, GCC prints an error message. Although it may appear obvious 48669 that what is meant is an operator and two values, the ISO C 48670 standard specifically requires that this be treated as erroneous. 48671 48672 A "preprocessing token" is a "preprocessing number" if it begins 48673 with a digit and is followed by letters, underscores, digits, 48674 periods and 'e+', 'e-', 'E+', 'E-', 'p+', 'p-', 'P+', or 'P-' 48675 character sequences. (In strict C90 mode, the sequences 'p+', 48676 'p-', 'P+' and 'P-' cannot appear in preprocessing numbers.) 48677 48678 To make the above program fragment valid, place whitespace in front 48679 of the minus sign. This whitespace will end the preprocessing 48680 number. 48681 48682 48683File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 48684 4868511.4 Fixed Header Files 48686======================= 48687 48688GCC needs to install corrected versions of some system header files. 48689This is because most target systems have some header files that won't 48690work with GCC unless they are changed. Some have bugs, some are 48691incompatible with ISO C, and some depend on special features of other 48692compilers. 48693 48694 Installing GCC automatically creates and installs the fixed header 48695files, by running a program called 'fixincludes'. Normally, you don't 48696need to pay attention to this. But there are cases where it doesn't do 48697the right thing automatically. 48698 48699 * If you update the system's header files, such as by installing a 48700 new system version, the fixed header files of GCC are not 48701 automatically updated. They can be updated using the 'mkheaders' 48702 script installed in 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 48703 48704 * On some systems, header file directories contain machine-specific 48705 symbolic links in certain places. This makes it possible to share 48706 most of the header files among hosts running the same version of 48707 the system on different machine models. 48708 48709 The programs that fix the header files do not understand this 48710 special way of using symbolic links; therefore, the directory of 48711 fixed header files is good only for the machine model used to build 48712 it. 48713 48714 It is possible to make separate sets of fixed header files for the 48715 different machine models, and arrange a structure of symbolic links 48716 so as to use the proper set, but you'll have to do this by hand. 48717 48718 48719File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 48720 4872111.5 Standard Libraries 48722======================= 48723 48724GCC by itself attempts to be a conforming freestanding implementation. 48725*Note Language Standards Supported by GCC: Standards, for details of 48726what this means. Beyond the library facilities required of such an 48727implementation, the rest of the C library is supplied by the vendor of 48728the operating system. If that C library doesn't conform to the C 48729standards, then your programs might get warnings (especially when using 48730'-Wall') that you don't expect. 48731 48732 For example, the 'sprintf' function on SunOS 4.1.3 returns 'char *' 48733while the C standard says that 'sprintf' returns an 'int'. The 48734'fixincludes' program could make the prototype for this function match 48735the Standard, but that would be wrong, since the function will still 48736return 'char *'. 48737 48738 If you need a Standard compliant library, then you need to find one, as 48739GCC does not provide one. The GNU C library (called 'glibc') provides 48740ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 48741HURD-based GNU systems; no recent version of it supports other systems, 48742though some very old versions did. Version 2.2 of the GNU C library 48743includes nearly complete C99 support. You could also ask your operating 48744system vendor if newer libraries are available. 48745 48746 48747File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 48748 4874911.6 Disappointments and Misunderstandings 48750========================================== 48751 48752These problems are perhaps regrettable, but we don't know any practical 48753way around them. 48754 48755 * Certain local variables aren't recognized by debuggers when you 48756 compile with optimization. 48757 48758 This occurs because sometimes GCC optimizes the variable out of 48759 existence. There is no way to tell the debugger how to compute the 48760 value such a variable "would have had", and it is not clear that 48761 would be desirable anyway. So GCC simply does not mention the 48762 eliminated variable when it writes debugging information. 48763 48764 You have to expect a certain amount of disagreement between the 48765 executable and your source code, when you use optimization. 48766 48767 * Users often think it is a bug when GCC reports an error for code 48768 like this: 48769 48770 int foo (struct mumble *); 48771 48772 struct mumble { ... }; 48773 48774 int foo (struct mumble *x) 48775 { ... } 48776 48777 This code really is erroneous, because the scope of 'struct mumble' 48778 in the prototype is limited to the argument list containing it. It 48779 does not refer to the 'struct mumble' defined with file scope 48780 immediately below--they are two unrelated types with similar names 48781 in different scopes. 48782 48783 But in the definition of 'foo', the file-scope type is used because 48784 that is available to be inherited. Thus, the definition and the 48785 prototype do not match, and you get an error. 48786 48787 This behavior may seem silly, but it's what the ISO standard 48788 specifies. It is easy enough for you to make your code work by 48789 moving the definition of 'struct mumble' above the prototype. It's 48790 not worth being incompatible with ISO C just to avoid an error for 48791 the example shown above. 48792 48793 * Accesses to bit-fields even in volatile objects works by accessing 48794 larger objects, such as a byte or a word. You cannot rely on what 48795 size of object is accessed in order to read or write the bit-field; 48796 it may even vary for a given bit-field according to the precise 48797 usage. 48798 48799 If you care about controlling the amount of memory that is 48800 accessed, use volatile but do not use bit-fields. 48801 48802 * GCC comes with shell scripts to fix certain known problems in 48803 system header files. They install corrected copies of various 48804 header files in a special directory where only GCC will normally 48805 look for them. The scripts adapt to various systems by searching 48806 all the system header files for the problem cases that we know 48807 about. 48808 48809 If new system header files are installed, nothing automatically 48810 arranges to update the corrected header files. They can be updated 48811 using the 'mkheaders' script installed in 48812 'LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 48813 48814 * On 68000 and x86 systems, for instance, you can get paradoxical 48815 results if you test the precise values of floating point numbers. 48816 For example, you can find that a floating point value which is not 48817 a NaN is not equal to itself. This results from the fact that the 48818 floating point registers hold a few more bits of precision than fit 48819 in a 'double' in memory. Compiled code moves values between memory 48820 and floating point registers at its convenience, and moving them 48821 into memory truncates them. 48822 48823 You can partially avoid this problem by using the '-ffloat-store' 48824 option (*note Optimize Options::). 48825 48826 * On AIX and other platforms without weak symbol support, templates 48827 need to be instantiated explicitly and symbols for static members 48828 of templates will not be generated. 48829 48830 * On AIX, GCC scans object files and library archives for static 48831 constructors and destructors when linking an application before the 48832 linker prunes unreferenced symbols. This is necessary to prevent 48833 the AIX linker from mistakenly assuming that static constructor or 48834 destructor are unused and removing them before the scanning can 48835 occur. All static constructors and destructors found will be 48836 referenced even though the modules in which they occur may not be 48837 used by the program. This may lead to both increased executable 48838 size and unexpected symbol references. 48839 48840 48841File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 48842 4884311.7 Common Misunderstandings with GNU C++ 48844========================================== 48845 48846C++ is a complex language and an evolving one, and its standard 48847definition (the ISO C++ standard) was only recently completed. As a 48848result, your C++ compiler may occasionally surprise you, even when its 48849behavior is correct. This section discusses some areas that frequently 48850give rise to questions of this sort. 48851 48852* Menu: 48853 48854* Static Definitions:: Static member declarations are not definitions 48855* Name lookup:: Name lookup, templates, and accessing members of base classes 48856* Temporaries:: Temporaries may vanish before you expect 48857* Copy Assignment:: Copy Assignment operators copy virtual bases twice 48858 48859 48860File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 48861 4886211.7.1 Declare _and_ Define Static Members 48863------------------------------------------ 48864 48865When a class has static data members, it is not enough to _declare_ the 48866static member; you must also _define_ it. For example: 48867 48868 class Foo 48869 { 48870 ... 48871 void method(); 48872 static int bar; 48873 }; 48874 48875 This declaration only establishes that the class 'Foo' has an 'int' 48876named 'Foo::bar', and a member function named 'Foo::method'. But you 48877still need to define _both_ 'method' and 'bar' elsewhere. According to 48878the ISO standard, you must supply an initializer in one (and only one) 48879source file, such as: 48880 48881 int Foo::bar = 0; 48882 48883 Other C++ compilers may not correctly implement the standard behavior. 48884As a result, when you switch to 'g++' from one of these compilers, you 48885may discover that a program that appeared to work correctly in fact does 48886not conform to the standard: 'g++' reports as undefined symbols any 48887static data members that lack definitions. 48888 48889 48890File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 48891 4889211.7.2 Name lookup, templates, and accessing members of base classes 48893-------------------------------------------------------------------- 48894 48895The C++ standard prescribes that all names that are not dependent on 48896template parameters are bound to their present definitions when parsing 48897a template function or class.(1) Only names that are dependent are 48898looked up at the point of instantiation. For example, consider 48899 48900 void foo(double); 48901 48902 struct A { 48903 template <typename T> 48904 void f () { 48905 foo (1); // 1 48906 int i = N; // 2 48907 T t; 48908 t.bar(); // 3 48909 foo (t); // 4 48910 } 48911 48912 static const int N; 48913 }; 48914 48915 Here, the names 'foo' and 'N' appear in a context that does not depend 48916on the type of 'T'. The compiler will thus require that they are 48917defined in the context of use in the template, not only before the point 48918of instantiation, and will here use '::foo(double)' and 'A::N', 48919respectively. In particular, it will convert the integer value to a 48920'double' when passing it to '::foo(double)'. 48921 48922 Conversely, 'bar' and the call to 'foo' in the fourth marked line are 48923used in contexts that do depend on the type of 'T', so they are only 48924looked up at the point of instantiation, and you can provide 48925declarations for them after declaring the template, but before 48926instantiating it. In particular, if you instantiate 'A::f<int>', the 48927last line will call an overloaded '::foo(int)' if one was provided, even 48928if after the declaration of 'struct A'. 48929 48930 This distinction between lookup of dependent and non-dependent names is 48931called two-stage (or dependent) name lookup. G++ implements it since 48932version 3.4. 48933 48934 Two-stage name lookup sometimes leads to situations with behavior 48935different from non-template codes. The most common is probably this: 48936 48937 template <typename T> struct Base { 48938 int i; 48939 }; 48940 48941 template <typename T> struct Derived : public Base<T> { 48942 int get_i() { return i; } 48943 }; 48944 48945 In 'get_i()', 'i' is not used in a dependent context, so the compiler 48946will look for a name declared at the enclosing namespace scope (which is 48947the global scope here). It will not look into the base class, since 48948that is dependent and you may declare specializations of 'Base' even 48949after declaring 'Derived', so the compiler can't really know what 'i' 48950would refer to. If there is no global variable 'i', then you will get 48951an error message. 48952 48953 In order to make it clear that you want the member of the base class, 48954you need to defer lookup until instantiation time, at which the base 48955class is known. For this, you need to access 'i' in a dependent 48956context, by either using 'this->i' (remember that 'this' is of type 48957'Derived<T>*', so is obviously dependent), or using 'Base<T>::i'. 48958Alternatively, 'Base<T>::i' might be brought into scope by a 48959'using'-declaration. 48960 48961 Another, similar example involves calling member functions of a base 48962class: 48963 48964 template <typename T> struct Base { 48965 int f(); 48966 }; 48967 48968 template <typename T> struct Derived : Base<T> { 48969 int g() { return f(); }; 48970 }; 48971 48972 Again, the call to 'f()' is not dependent on template arguments (there 48973are no arguments that depend on the type 'T', and it is also not 48974otherwise specified that the call should be in a dependent context). 48975Thus a global declaration of such a function must be available, since 48976the one in the base class is not visible until instantiation time. The 48977compiler will consequently produce the following error message: 48978 48979 x.cc: In member function `int Derived<T>::g()': 48980 x.cc:6: error: there are no arguments to `f' that depend on a template 48981 parameter, so a declaration of `f' must be available 48982 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 48983 allowing the use of an undeclared name is deprecated) 48984 48985 To make the code valid either use 'this->f()', or 'Base<T>::f()'. 48986Using the '-fpermissive' flag will also let the compiler accept the 48987code, by marking all function calls for which no declaration is visible 48988at the time of definition of the template for later lookup at 48989instantiation time, as if it were a dependent call. We do not recommend 48990using '-fpermissive' to work around invalid code, and it will also only 48991catch cases where functions in base classes are called, not where 48992variables in base classes are used (as in the example above). 48993 48994 Note that some compilers (including G++ versions prior to 3.4) get 48995these examples wrong and accept above code without an error. Those 48996compilers do not implement two-stage name lookup correctly. 48997 48998 ---------- Footnotes ---------- 48999 49000 (1) The C++ standard just uses the term "dependent" for names that 49001depend on the type or value of template parameters. This shorter term 49002will also be used in the rest of this section. 49003 49004 49005File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 49006 4900711.7.3 Temporaries May Vanish Before You Expect 49008----------------------------------------------- 49009 49010It is dangerous to use pointers or references to _portions_ of a 49011temporary object. The compiler may very well delete the object before 49012you expect it to, leaving a pointer to garbage. The most common place 49013where this problem crops up is in classes like string classes, 49014especially ones that define a conversion function to type 'char *' or 49015'const char *'--which is one reason why the standard 'string' class 49016requires you to call the 'c_str' member function. However, any class 49017that returns a pointer to some internal structure is potentially subject 49018to this problem. 49019 49020 For example, a program may use a function 'strfunc' that returns 49021'string' objects, and another function 'charfunc' that operates on 49022pointers to 'char': 49023 49024 string strfunc (); 49025 void charfunc (const char *); 49026 49027 void 49028 f () 49029 { 49030 const char *p = strfunc().c_str(); 49031 ... 49032 charfunc (p); 49033 ... 49034 charfunc (p); 49035 } 49036 49037In this situation, it may seem reasonable to save a pointer to the C 49038string returned by the 'c_str' member function and use that rather than 49039call 'c_str' repeatedly. However, the temporary string created by the 49040call to 'strfunc' is destroyed after 'p' is initialized, at which point 49041'p' is left pointing to freed memory. 49042 49043 Code like this may run successfully under some other compilers, 49044particularly obsolete cfront-based compilers that delete temporaries 49045along with normal local variables. However, the GNU C++ behavior is 49046standard-conforming, so if your program depends on late destruction of 49047temporaries it is not portable. 49048 49049 The safe way to write such code is to give the temporary a name, which 49050forces it to remain until the end of the scope of the name. For 49051example: 49052 49053 const string& tmp = strfunc (); 49054 charfunc (tmp.c_str ()); 49055 49056 49057File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 49058 4905911.7.4 Implicit Copy-Assignment for Virtual Bases 49060------------------------------------------------- 49061 49062When a base class is virtual, only one subobject of the base class 49063belongs to each full object. Also, the constructors and destructors are 49064invoked only once, and called from the most-derived class. However, 49065such objects behave unspecified when being assigned. For example: 49066 49067 struct Base{ 49068 char *name; 49069 Base(char *n) : name(strdup(n)){} 49070 Base& operator= (const Base& other){ 49071 free (name); 49072 name = strdup (other.name); 49073 } 49074 }; 49075 49076 struct A:virtual Base{ 49077 int val; 49078 A():Base("A"){} 49079 }; 49080 49081 struct B:virtual Base{ 49082 int bval; 49083 B():Base("B"){} 49084 }; 49085 49086 struct Derived:public A, public B{ 49087 Derived():Base("Derived"){} 49088 }; 49089 49090 void func(Derived &d1, Derived &d2) 49091 { 49092 d1 = d2; 49093 } 49094 49095 The C++ standard specifies that 'Base::Base' is only called once when 49096constructing or copy-constructing a Derived object. It is unspecified 49097whether 'Base::operator=' is called more than once when the implicit 49098copy-assignment for Derived objects is invoked (as it is inside 'func' 49099in the example). 49100 49101 G++ implements the "intuitive" algorithm for copy-assignment: assign 49102all direct bases, then assign all members. In that algorithm, the 49103virtual base subobject can be encountered more than once. In the 49104example, copying proceeds in the following order: 'val', 'name' (via 49105'strdup'), 'bval', and 'name' again. 49106 49107 If application code relies on copy-assignment, a user-defined 49108copy-assignment operator removes any uncertainties. With such an 49109operator, the application can define whether and how the virtual base 49110subobject is assigned. 49111 49112 49113File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 49114 4911511.8 Certain Changes We Don't Want to Make 49116========================================== 49117 49118This section lists changes that people frequently request, but which we 49119do not make because we think GCC is better without them. 49120 49121 * Checking the number and type of arguments to a function which has 49122 an old-fashioned definition and no prototype. 49123 49124 Such a feature would work only occasionally--only for calls that 49125 appear in the same file as the called function, following the 49126 definition. The only way to check all calls reliably is to add a 49127 prototype for the function. But adding a prototype eliminates the 49128 motivation for this feature. So the feature is not worthwhile. 49129 49130 * Warning about using an expression whose type is signed as a shift 49131 count. 49132 49133 Shift count operands are probably signed more often than unsigned. 49134 Warning about this would cause far more annoyance than good. 49135 49136 * Warning about assigning a signed value to an unsigned variable. 49137 49138 Such assignments must be very common; warning about them would 49139 cause more annoyance than good. 49140 49141 * Warning when a non-void function value is ignored. 49142 49143 C contains many standard functions that return a value that most 49144 programs choose to ignore. One obvious example is 'printf'. 49145 Warning about this practice only leads the defensive programmer to 49146 clutter programs with dozens of casts to 'void'. Such casts are 49147 required so frequently that they become visual noise. Writing 49148 those casts becomes so automatic that they no longer convey useful 49149 information about the intentions of the programmer. For functions 49150 where the return value should never be ignored, use the 49151 'warn_unused_result' function attribute (*note Function 49152 Attributes::). 49153 49154 * Making '-fshort-enums' the default. 49155 49156 This would cause storage layout to be incompatible with most other 49157 C compilers. And it doesn't seem very important, given that you 49158 can get the same result in other ways. The case where it matters 49159 most is when the enumeration-valued object is inside a structure, 49160 and in that case you can specify a field width explicitly. 49161 49162 * Making bit-fields unsigned by default on particular machines where 49163 "the ABI standard" says to do so. 49164 49165 The ISO C standard leaves it up to the implementation whether a 49166 bit-field declared plain 'int' is signed or not. This in effect 49167 creates two alternative dialects of C. 49168 49169 The GNU C compiler supports both dialects; you can specify the 49170 signed dialect with '-fsigned-bitfields' and the unsigned dialect 49171 with '-funsigned-bitfields'. However, this leaves open the 49172 question of which dialect to use by default. 49173 49174 Currently, the preferred dialect makes plain bit-fields signed, 49175 because this is simplest. Since 'int' is the same as 'signed int' 49176 in every other context, it is cleanest for them to be the same in 49177 bit-fields as well. 49178 49179 Some computer manufacturers have published Application Binary 49180 Interface standards which specify that plain bit-fields should be 49181 unsigned. It is a mistake, however, to say anything about this 49182 issue in an ABI. This is because the handling of plain bit-fields 49183 distinguishes two dialects of C. Both dialects are meaningful on 49184 every type of machine. Whether a particular object file was 49185 compiled using signed bit-fields or unsigned is of no concern to 49186 other object files, even if they access the same bit-fields in the 49187 same data structures. 49188 49189 A given program is written in one or the other of these two 49190 dialects. The program stands a chance to work on most any machine 49191 if it is compiled with the proper dialect. It is unlikely to work 49192 at all if compiled with the wrong dialect. 49193 49194 Many users appreciate the GNU C compiler because it provides an 49195 environment that is uniform across machines. These users would be 49196 inconvenienced if the compiler treated plain bit-fields differently 49197 on certain machines. 49198 49199 Occasionally users write programs intended only for a particular 49200 machine type. On these occasions, the users would benefit if the 49201 GNU C compiler were to support by default the same dialect as the 49202 other compilers on that machine. But such applications are rare. 49203 And users writing a program to run on more than one type of machine 49204 cannot possibly benefit from this kind of compatibility. 49205 49206 This is why GCC does and will treat plain bit-fields in the same 49207 fashion on all types of machines (by default). 49208 49209 There are some arguments for making bit-fields unsigned by default 49210 on all machines. If, for example, this becomes a universal de 49211 facto standard, it would make sense for GCC to go along with it. 49212 This is something to be considered in the future. 49213 49214 (Of course, users strongly concerned about portability should 49215 indicate explicitly in each bit-field whether it is signed or not. 49216 In this way, they write programs which have the same meaning in 49217 both C dialects.) 49218 49219 * Undefining '__STDC__' when '-ansi' is not used. 49220 49221 Currently, GCC defines '__STDC__' unconditionally. This provides 49222 good results in practice. 49223 49224 Programmers normally use conditionals on '__STDC__' to ask whether 49225 it is safe to use certain features of ISO C, such as function 49226 prototypes or ISO token concatenation. Since plain 'gcc' supports 49227 all the features of ISO C, the correct answer to these questions is 49228 "yes". 49229 49230 Some users try to use '__STDC__' to check for the availability of 49231 certain library facilities. This is actually incorrect usage in an 49232 ISO C program, because the ISO C standard says that a conforming 49233 freestanding implementation should define '__STDC__' even though it 49234 does not have the library facilities. 'gcc -ansi -pedantic' is a 49235 conforming freestanding implementation, and it is therefore 49236 required to define '__STDC__', even though it does not come with an 49237 ISO C library. 49238 49239 Sometimes people say that defining '__STDC__' in a compiler that 49240 does not completely conform to the ISO C standard somehow violates 49241 the standard. This is illogical. The standard is a standard for 49242 compilers that claim to support ISO C, such as 'gcc -ansi'--not for 49243 other compilers such as plain 'gcc'. Whatever the ISO C standard 49244 says is relevant to the design of plain 'gcc' without '-ansi' only 49245 for pragmatic reasons, not as a requirement. 49246 49247 GCC normally defines '__STDC__' to be 1, and in addition defines 49248 '__STRICT_ANSI__' if you specify the '-ansi' option, or a '-std' 49249 option for strict conformance to some version of ISO C. On some 49250 hosts, system include files use a different convention, where 49251 '__STDC__' is normally 0, but is 1 if the user specifies strict 49252 conformance to the C Standard. GCC follows the host convention 49253 when processing system include files, but when processing user 49254 files it follows the usual GNU C convention. 49255 49256 * Undefining '__STDC__' in C++. 49257 49258 Programs written to compile with C++-to-C translators get the value 49259 of '__STDC__' that goes with the C compiler that is subsequently 49260 used. These programs must test '__STDC__' to determine what kind 49261 of C preprocessor that compiler uses: whether they should 49262 concatenate tokens in the ISO C fashion or in the traditional 49263 fashion. 49264 49265 These programs work properly with GNU C++ if '__STDC__' is defined. 49266 They would not work otherwise. 49267 49268 In addition, many header files are written to provide prototypes in 49269 ISO C but not in traditional C. Many of these header files can 49270 work without change in C++ provided '__STDC__' is defined. If 49271 '__STDC__' is not defined, they will all fail, and will all need to 49272 be changed to test explicitly for C++ as well. 49273 49274 * Deleting "empty" loops. 49275 49276 Historically, GCC has not deleted "empty" loops under the 49277 assumption that the most likely reason you would put one in a 49278 program is to have a delay, so deleting them will not make real 49279 programs run any faster. 49280 49281 However, the rationale here is that optimization of a nonempty loop 49282 cannot produce an empty one. This held for carefully written C 49283 compiled with less powerful optimizers but is not always the case 49284 for carefully written C++ or with more powerful optimizers. Thus 49285 GCC will remove operations from loops whenever it can determine 49286 those operations are not externally visible (apart from the time 49287 taken to execute them, of course). In case the loop can be proved 49288 to be finite, GCC will also remove the loop itself. 49289 49290 Be aware of this when performing timing tests, for instance the 49291 following loop can be completely removed, provided 49292 'some_expression' can provably not change any global state. 49293 49294 { 49295 int sum = 0; 49296 int ix; 49297 49298 for (ix = 0; ix != 10000; ix++) 49299 sum += some_expression; 49300 } 49301 49302 Even though 'sum' is accumulated in the loop, no use is made of 49303 that summation, so the accumulation can be removed. 49304 49305 * Making side effects happen in the same order as in some other 49306 compiler. 49307 49308 It is never safe to depend on the order of evaluation of side 49309 effects. For example, a function call like this may very well 49310 behave differently from one compiler to another: 49311 49312 void func (int, int); 49313 49314 int i = 2; 49315 func (i++, i++); 49316 49317 There is no guarantee (in either the C or the C++ standard language 49318 definitions) that the increments will be evaluated in any 49319 particular order. Either increment might happen first. 'func' 49320 might get the arguments '2, 3', or it might get '3, 2', or even '2, 49321 2'. 49322 49323 * Making certain warnings into errors by default. 49324 49325 Some ISO C testsuites report failure when the compiler does not 49326 produce an error message for a certain program. 49327 49328 ISO C requires a "diagnostic" message for certain kinds of invalid 49329 programs, but a warning is defined by GCC to count as a diagnostic. 49330 If GCC produces a warning but not an error, that is correct ISO C 49331 support. If testsuites call this "failure", they should be run 49332 with the GCC option '-pedantic-errors', which will turn these 49333 warnings into errors. 49334 49335 49336File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 49337 4933811.9 Warning Messages and Error Messages 49339======================================== 49340 49341The GNU compiler can produce two kinds of diagnostics: errors and 49342warnings. Each kind has a different purpose: 49343 49344 "Errors" report problems that make it impossible to compile your 49345 program. GCC reports errors with the source file name and line 49346 number where the problem is apparent. 49347 49348 "Warnings" report other unusual conditions in your code that _may_ 49349 indicate a problem, although compilation can (and does) proceed. 49350 Warning messages also report the source file name and line number, 49351 but include the text 'warning:' to distinguish them from error 49352 messages. 49353 49354 Warnings may indicate danger points where you should check to make sure 49355that your program really does what you intend; or the use of obsolete 49356features; or the use of nonstandard features of GNU C or C++. Many 49357warnings are issued only if you ask for them, with one of the '-W' 49358options (for instance, '-Wall' requests a variety of useful warnings). 49359 49360 GCC always tries to compile your program if possible; it never 49361gratuitously rejects a program whose meaning is clear merely because 49362(for instance) it fails to conform to a standard. In some cases, 49363however, the C and C++ standards specify that certain extensions are 49364forbidden, and a diagnostic _must_ be issued by a conforming compiler. 49365The '-pedantic' option tells GCC to issue warnings in such cases; 49366'-pedantic-errors' says to make them errors instead. This does not mean 49367that _all_ non-ISO constructs get warnings or errors. 49368 49369 *Note Options to Request or Suppress Warnings: Warning Options, for 49370more detail on these and related command-line options. 49371 49372 49373File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 49374 4937512 Reporting Bugs 49376***************** 49377 49378Your bug reports play an essential role in making GCC reliable. 49379 49380 When you encounter a problem, the first thing to do is to see if it is 49381already known. *Note Trouble::. If it isn't known, then you should 49382report the problem. 49383 49384* Menu: 49385 49386* Criteria: Bug Criteria. Have you really found a bug? 49387* Reporting: Bug Reporting. How to report a bug effectively. 49388 49389 49390File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 49391 4939212.1 Have You Found a Bug? 49393========================== 49394 49395If you are not sure whether you have found a bug, here are some 49396guidelines: 49397 49398 * If the compiler gets a fatal signal, for any input whatever, that 49399 is a compiler bug. Reliable compilers never crash. 49400 49401 * If the compiler produces invalid assembly code, for any input 49402 whatever (except an 'asm' statement), that is a compiler bug, 49403 unless the compiler reports errors (not just warnings) which would 49404 ordinarily prevent the assembler from being run. 49405 49406 * If the compiler produces valid assembly code that does not 49407 correctly execute the input source code, that is a compiler bug. 49408 49409 However, you must double-check to make sure, because you may have a 49410 program whose behavior is undefined, which happened by chance to 49411 give the desired results with another C or C++ compiler. 49412 49413 For example, in many nonoptimizing compilers, you can write 'x;' at 49414 the end of a function instead of 'return x;', with the same 49415 results. But the value of the function is undefined if 'return' is 49416 omitted; it is not a bug when GCC produces different results. 49417 49418 Problems often result from expressions with two increment 49419 operators, as in 'f (*p++, *p++)'. Your previous compiler might 49420 have interpreted that expression the way you intended; GCC might 49421 interpret it another way. Neither compiler is wrong. The bug is 49422 in your code. 49423 49424 After you have localized the error to a single source line, it 49425 should be easy to check for these things. If your program is 49426 correct and well defined, you have found a compiler bug. 49427 49428 * If the compiler produces an error message for valid input, that is 49429 a compiler bug. 49430 49431 * If the compiler does not produce an error message for invalid 49432 input, that is a compiler bug. However, you should note that your 49433 idea of "invalid input" might be someone else's idea of "an 49434 extension" or "support for traditional practice". 49435 49436 * If you are an experienced user of one of the languages GCC 49437 supports, your suggestions for improvement of GCC are welcome in 49438 any case. 49439 49440 49441File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 49442 4944312.2 How and where to Report Bugs 49444================================= 49445 49446Bugs should be reported to the bug database at 49447<http://gcc.gnu.org/bugs.html>. 49448 49449 49450File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 49451 4945213 How To Get Help with GCC 49453*************************** 49454 49455If you need help installing, using or changing GCC, there are two ways 49456to find it: 49457 49458 * Send a message to a suitable network mailing list. First try 49459 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 49460 that brings no response, try <gcc@gcc.gnu.org>. For help changing 49461 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 49462 GCC, please report it following the instructions at *note Bug 49463 Reporting::. 49464 49465 * Look in the service directory for someone who might help you for a 49466 fee. The service directory is found at 49467 <http://www.fsf.org/resources/service>. 49468 49469 For further information, see <http://gcc.gnu.org/faq.html#support>. 49470 49471 49472File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 49473 4947414 Contributing to GCC Development 49475********************************** 49476 49477If you would like to help pretest GCC releases to assure they work well, 49478current development sources are available by SVN (see 49479<http://gcc.gnu.org/svn.html>). Source and binary snapshots are also 49480available for FTP; see <http://gcc.gnu.org/snapshots.html>. 49481 49482 If you would like to work on improvements to GCC, please read the 49483advice at these URLs: 49484 49485 <http://gcc.gnu.org/contribute.html> 49486 <http://gcc.gnu.org/contributewhy.html> 49487 49488for information on how to make useful contributions and avoid 49489duplication of effort. Suggested projects are listed at 49490<http://gcc.gnu.org/projects/>. 49491 49492 49493File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 49494 49495Funding Free Software 49496********************* 49497 49498If you want to have more free software a few years from now, it makes 49499sense for you to help encourage people to contribute funds for its 49500development. The most effective approach known is to encourage 49501commercial redistributors to donate. 49502 49503 Users of free software systems can boost the pace of development by 49504encouraging for-a-fee distributors to donate part of their selling price 49505to free software developers--the Free Software Foundation, and others. 49506 49507 The way to convince distributors to do this is to demand it and expect 49508it from them. So when you compare distributors, judge them partly by 49509how much they give to free software development. Show distributors they 49510must compete to be the one who gives the most. 49511 49512 To make this approach work, you must insist on numbers that you can 49513compare, such as, "We will donate ten dollars to the Frobnitz project 49514for each disk sold." Don't be satisfied with a vague promise, such as 49515"A portion of the profits are donated," since it doesn't give a basis 49516for comparison. 49517 49518 Even a precise fraction "of the profits from this disk" is not very 49519meaningful, since creative accounting and unrelated business decisions 49520can greatly alter what fraction of the sales price counts as profit. If 49521the price you pay is $50, ten percent of the profit is probably less 49522than a dollar; it might be a few cents, or nothing at all. 49523 49524 Some redistributors do development work themselves. This is useful 49525too; but to keep everyone honest, you need to inquire how much they do, 49526and what kind. Some kinds of development make much more long-term 49527difference than others. For example, maintaining a separate version of 49528a program contributes very little; maintaining the standard version of a 49529program for the whole community contributes much. Easy new ports 49530contribute little, since someone else would surely do them; difficult 49531ports such as adding a new CPU to the GNU Compiler Collection contribute 49532more; major new features or packages contribute the most. 49533 49534 By establishing the idea that supporting further development is "the 49535proper thing to do" when distributing free software for a fee, we can 49536assure a steady flow of resources into making more free software. 49537 49538 Copyright (C) 1994 Free Software Foundation, Inc. 49539 Verbatim copying and redistribution of this section is permitted 49540 without royalty; alteration is not permitted. 49541 49542 49543File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 49544 49545The GNU Project and GNU/Linux 49546***************************** 49547 49548The GNU Project was launched in 1984 to develop a complete Unix-like 49549operating system which is free software: the GNU system. (GNU is a 49550recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 49551Variants of the GNU operating system, which use the kernel Linux, are 49552now widely used; though these systems are often referred to as "Linux", 49553they are more accurately called GNU/Linux systems. 49554 49555 For more information, see: 49556 <http://www.gnu.org/> 49557 <http://www.gnu.org/gnu/linux-and-gnu.html> 49558 49559 49560File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 49561 49562GNU General Public License 49563************************** 49564 49565 Version 3, 29 June 2007 49566 49567 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 49568 49569 Everyone is permitted to copy and distribute verbatim copies of this 49570 license document, but changing it is not allowed. 49571 49572Preamble 49573======== 49574 49575The GNU General Public License is a free, copyleft license for software 49576and other kinds of works. 49577 49578 The licenses for most software and other practical works are designed 49579to take away your freedom to share and change the works. By contrast, 49580the GNU General Public License is intended to guarantee your freedom to 49581share and change all versions of a program-to make sure it remains free 49582software for all its users. We, the Free Software Foundation, use the 49583GNU General Public License for most of our software; it applies also to 49584any other work released this way by its authors. You can apply it to 49585your programs, too. 49586 49587 When we speak of free software, we are referring to freedom, not price. 49588Our General Public Licenses are designed to make sure that you have the 49589freedom to distribute copies of free software (and charge for them if 49590you wish), that you receive source code or can get it if you want it, 49591that you can change the software or use pieces of it in new free 49592programs, and that you know you can do these things. 49593 49594 To protect your rights, we need to prevent others from denying you 49595these rights or asking you to surrender the rights. Therefore, you have 49596certain responsibilities if you distribute copies of the software, or if 49597you modify it: responsibilities to respect the freedom of others. 49598 49599 For example, if you distribute copies of such a program, whether gratis 49600or for a fee, you must pass on to the recipients the same freedoms that 49601you received. You must make sure that they, too, receive or can get the 49602source code. And you must show them these terms so they know their 49603rights. 49604 49605 Developers that use the GNU GPL protect your rights with two steps: (1) 49606assert copyright on the software, and (2) offer you this License giving 49607you legal permission to copy, distribute and/or modify it. 49608 49609 For the developers' and authors' protection, the GPL clearly explains 49610that there is no warranty for this free software. For both users' and 49611authors' sake, the GPL requires that modified versions be marked as 49612changed, so that their problems will not be attributed erroneously to 49613authors of previous versions. 49614 49615 Some devices are designed to deny users access to install or run 49616modified versions of the software inside them, although the manufacturer 49617can do so. This is fundamentally incompatible with the aim of 49618protecting users' freedom to change the software. The systematic 49619pattern of such abuse occurs in the area of products for individuals to 49620use, which is precisely where it is most unacceptable. Therefore, we 49621have designed this version of the GPL to prohibit the practice for those 49622products. If such problems arise substantially in other domains, we 49623stand ready to extend this provision to those domains in future versions 49624of the GPL, as needed to protect the freedom of users. 49625 49626 Finally, every program is threatened constantly by software patents. 49627States should not allow patents to restrict development and use of 49628software on general-purpose computers, but in those that do, we wish to 49629avoid the special danger that patents applied to a free program could 49630make it effectively proprietary. To prevent this, the GPL assures that 49631patents cannot be used to render the program non-free. 49632 49633 The precise terms and conditions for copying, distribution and 49634modification follow. 49635 49636TERMS AND CONDITIONS 49637==================== 49638 49639 0. Definitions. 49640 49641 "This License" refers to version 3 of the GNU General Public 49642 License. 49643 49644 "Copyright" also means copyright-like laws that apply to other 49645 kinds of works, such as semiconductor masks. 49646 49647 "The Program" refers to any copyrightable work licensed under this 49648 License. Each licensee is addressed as "you". "Licensees" and 49649 "recipients" may be individuals or organizations. 49650 49651 To "modify" a work means to copy from or adapt all or part of the 49652 work in a fashion requiring copyright permission, other than the 49653 making of an exact copy. The resulting work is called a "modified 49654 version" of the earlier work or a work "based on" the earlier work. 49655 49656 A "covered work" means either the unmodified Program or a work 49657 based on the Program. 49658 49659 To "propagate" a work means to do anything with it that, without 49660 permission, would make you directly or secondarily liable for 49661 infringement under applicable copyright law, except executing it on 49662 a computer or modifying a private copy. Propagation includes 49663 copying, distribution (with or without modification), making 49664 available to the public, and in some countries other activities as 49665 well. 49666 49667 To "convey" a work means any kind of propagation that enables other 49668 parties to make or receive copies. Mere interaction with a user 49669 through a computer network, with no transfer of a copy, is not 49670 conveying. 49671 49672 An interactive user interface displays "Appropriate Legal Notices" 49673 to the extent that it includes a convenient and prominently visible 49674 feature that (1) displays an appropriate copyright notice, and (2) 49675 tells the user that there is no warranty for the work (except to 49676 the extent that warranties are provided), that licensees may convey 49677 the work under this License, and how to view a copy of this 49678 License. If the interface presents a list of user commands or 49679 options, such as a menu, a prominent item in the list meets this 49680 criterion. 49681 49682 1. Source Code. 49683 49684 The "source code" for a work means the preferred form of the work 49685 for making modifications to it. "Object code" means any non-source 49686 form of a work. 49687 49688 A "Standard Interface" means an interface that either is an 49689 official standard defined by a recognized standards body, or, in 49690 the case of interfaces specified for a particular programming 49691 language, one that is widely used among developers working in that 49692 language. 49693 49694 The "System Libraries" of an executable work include anything, 49695 other than the work as a whole, that (a) is included in the normal 49696 form of packaging a Major Component, but which is not part of that 49697 Major Component, and (b) serves only to enable use of the work with 49698 that Major Component, or to implement a Standard Interface for 49699 which an implementation is available to the public in source code 49700 form. A "Major Component", in this context, means a major 49701 essential component (kernel, window system, and so on) of the 49702 specific operating system (if any) on which the executable work 49703 runs, or a compiler used to produce the work, or an object code 49704 interpreter used to run it. 49705 49706 The "Corresponding Source" for a work in object code form means all 49707 the source code needed to generate, install, and (for an executable 49708 work) run the object code and to modify the work, including scripts 49709 to control those activities. However, it does not include the 49710 work's System Libraries, or general-purpose tools or generally 49711 available free programs which are used unmodified in performing 49712 those activities but which are not part of the work. For example, 49713 Corresponding Source includes interface definition files associated 49714 with source files for the work, and the source code for shared 49715 libraries and dynamically linked subprograms that the work is 49716 specifically designed to require, such as by intimate data 49717 communication or control flow between those subprograms and other 49718 parts of the work. 49719 49720 The Corresponding Source need not include anything that users can 49721 regenerate automatically from other parts of the Corresponding 49722 Source. 49723 49724 The Corresponding Source for a work in source code form is that 49725 same work. 49726 49727 2. Basic Permissions. 49728 49729 All rights granted under this License are granted for the term of 49730 copyright on the Program, and are irrevocable provided the stated 49731 conditions are met. This License explicitly affirms your unlimited 49732 permission to run the unmodified Program. The output from running 49733 a covered work is covered by this License only if the output, given 49734 its content, constitutes a covered work. This License acknowledges 49735 your rights of fair use or other equivalent, as provided by 49736 copyright law. 49737 49738 You may make, run and propagate covered works that you do not 49739 convey, without conditions so long as your license otherwise 49740 remains in force. You may convey covered works to others for the 49741 sole purpose of having them make modifications exclusively for you, 49742 or provide you with facilities for running those works, provided 49743 that you comply with the terms of this License in conveying all 49744 material for which you do not control copyright. Those thus making 49745 or running the covered works for you must do so exclusively on your 49746 behalf, under your direction and control, on terms that prohibit 49747 them from making any copies of your copyrighted material outside 49748 their relationship with you. 49749 49750 Conveying under any other circumstances is permitted solely under 49751 the conditions stated below. Sublicensing is not allowed; section 49752 10 makes it unnecessary. 49753 49754 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 49755 49756 No covered work shall be deemed part of an effective technological 49757 measure under any applicable law fulfilling obligations under 49758 article 11 of the WIPO copyright treaty adopted on 20 December 49759 1996, or similar laws prohibiting or restricting circumvention of 49760 such measures. 49761 49762 When you convey a covered work, you waive any legal power to forbid 49763 circumvention of technological measures to the extent such 49764 circumvention is effected by exercising rights under this License 49765 with respect to the covered work, and you disclaim any intention to 49766 limit operation or modification of the work as a means of 49767 enforcing, against the work's users, your or third parties' legal 49768 rights to forbid circumvention of technological measures. 49769 49770 4. Conveying Verbatim Copies. 49771 49772 You may convey verbatim copies of the Program's source code as you 49773 receive it, in any medium, provided that you conspicuously and 49774 appropriately publish on each copy an appropriate copyright notice; 49775 keep intact all notices stating that this License and any 49776 non-permissive terms added in accord with section 7 apply to the 49777 code; keep intact all notices of the absence of any warranty; and 49778 give all recipients a copy of this License along with the Program. 49779 49780 You may charge any price or no price for each copy that you convey, 49781 and you may offer support or warranty protection for a fee. 49782 49783 5. Conveying Modified Source Versions. 49784 49785 You may convey a work based on the Program, or the modifications to 49786 produce it from the Program, in the form of source code under the 49787 terms of section 4, provided that you also meet all of these 49788 conditions: 49789 49790 a. The work must carry prominent notices stating that you 49791 modified it, and giving a relevant date. 49792 49793 b. The work must carry prominent notices stating that it is 49794 released under this License and any conditions added under 49795 section 7. This requirement modifies the requirement in 49796 section 4 to "keep intact all notices". 49797 49798 c. You must license the entire work, as a whole, under this 49799 License to anyone who comes into possession of a copy. This 49800 License will therefore apply, along with any applicable 49801 section 7 additional terms, to the whole of the work, and all 49802 its parts, regardless of how they are packaged. This License 49803 gives no permission to license the work in any other way, but 49804 it does not invalidate such permission if you have separately 49805 received it. 49806 49807 d. If the work has interactive user interfaces, each must display 49808 Appropriate Legal Notices; however, if the Program has 49809 interactive interfaces that do not display Appropriate Legal 49810 Notices, your work need not make them do so. 49811 49812 A compilation of a covered work with other separate and independent 49813 works, which are not by their nature extensions of the covered 49814 work, and which are not combined with it such as to form a larger 49815 program, in or on a volume of a storage or distribution medium, is 49816 called an "aggregate" if the compilation and its resulting 49817 copyright are not used to limit the access or legal rights of the 49818 compilation's users beyond what the individual works permit. 49819 Inclusion of a covered work in an aggregate does not cause this 49820 License to apply to the other parts of the aggregate. 49821 49822 6. Conveying Non-Source Forms. 49823 49824 You may convey a covered work in object code form under the terms 49825 of sections 4 and 5, provided that you also convey the 49826 machine-readable Corresponding Source under the terms of this 49827 License, in one of these ways: 49828 49829 a. Convey the object code in, or embodied in, a physical product 49830 (including a physical distribution medium), accompanied by the 49831 Corresponding Source fixed on a durable physical medium 49832 customarily used for software interchange. 49833 49834 b. Convey the object code in, or embodied in, a physical product 49835 (including a physical distribution medium), accompanied by a 49836 written offer, valid for at least three years and valid for as 49837 long as you offer spare parts or customer support for that 49838 product model, to give anyone who possesses the object code 49839 either (1) a copy of the Corresponding Source for all the 49840 software in the product that is covered by this License, on a 49841 durable physical medium customarily used for software 49842 interchange, for a price no more than your reasonable cost of 49843 physically performing this conveying of source, or (2) access 49844 to copy the Corresponding Source from a network server at no 49845 charge. 49846 49847 c. Convey individual copies of the object code with a copy of the 49848 written offer to provide the Corresponding Source. This 49849 alternative is allowed only occasionally and noncommercially, 49850 and only if you received the object code with such an offer, 49851 in accord with subsection 6b. 49852 49853 d. Convey the object code by offering access from a designated 49854 place (gratis or for a charge), and offer equivalent access to 49855 the Corresponding Source in the same way through the same 49856 place at no further charge. You need not require recipients 49857 to copy the Corresponding Source along with the object code. 49858 If the place to copy the object code is a network server, the 49859 Corresponding Source may be on a different server (operated by 49860 you or a third party) that supports equivalent copying 49861 facilities, provided you maintain clear directions next to the 49862 object code saying where to find the Corresponding Source. 49863 Regardless of what server hosts the Corresponding Source, you 49864 remain obligated to ensure that it is available for as long as 49865 needed to satisfy these requirements. 49866 49867 e. Convey the object code using peer-to-peer transmission, 49868 provided you inform other peers where the object code and 49869 Corresponding Source of the work are being offered to the 49870 general public at no charge under subsection 6d. 49871 49872 A separable portion of the object code, whose source code is 49873 excluded from the Corresponding Source as a System Library, need 49874 not be included in conveying the object code work. 49875 49876 A "User Product" is either (1) a "consumer product", which means 49877 any tangible personal property which is normally used for personal, 49878 family, or household purposes, or (2) anything designed or sold for 49879 incorporation into a dwelling. In determining whether a product is 49880 a consumer product, doubtful cases shall be resolved in favor of 49881 coverage. For a particular product received by a particular user, 49882 "normally used" refers to a typical or common use of that class of 49883 product, regardless of the status of the particular user or of the 49884 way in which the particular user actually uses, or expects or is 49885 expected to use, the product. A product is a consumer product 49886 regardless of whether the product has substantial commercial, 49887 industrial or non-consumer uses, unless such uses represent the 49888 only significant mode of use of the product. 49889 49890 "Installation Information" for a User Product means any methods, 49891 procedures, authorization keys, or other information required to 49892 install and execute modified versions of a covered work in that 49893 User Product from a modified version of its Corresponding Source. 49894 The information must suffice to ensure that the continued 49895 functioning of the modified object code is in no case prevented or 49896 interfered with solely because modification has been made. 49897 49898 If you convey an object code work under this section in, or with, 49899 or specifically for use in, a User Product, and the conveying 49900 occurs as part of a transaction in which the right of possession 49901 and use of the User Product is transferred to the recipient in 49902 perpetuity or for a fixed term (regardless of how the transaction 49903 is characterized), the Corresponding Source conveyed under this 49904 section must be accompanied by the Installation Information. But 49905 this requirement does not apply if neither you nor any third party 49906 retains the ability to install modified object code on the User 49907 Product (for example, the work has been installed in ROM). 49908 49909 The requirement to provide Installation Information does not 49910 include a requirement to continue to provide support service, 49911 warranty, or updates for a work that has been modified or installed 49912 by the recipient, or for the User Product in which it has been 49913 modified or installed. Access to a network may be denied when the 49914 modification itself materially and adversely affects the operation 49915 of the network or violates the rules and protocols for 49916 communication across the network. 49917 49918 Corresponding Source conveyed, and Installation Information 49919 provided, in accord with this section must be in a format that is 49920 publicly documented (and with an implementation available to the 49921 public in source code form), and must require no special password 49922 or key for unpacking, reading or copying. 49923 49924 7. Additional Terms. 49925 49926 "Additional permissions" are terms that supplement the terms of 49927 this License by making exceptions from one or more of its 49928 conditions. Additional permissions that are applicable to the 49929 entire Program shall be treated as though they were included in 49930 this License, to the extent that they are valid under applicable 49931 law. If additional permissions apply only to part of the Program, 49932 that part may be used separately under those permissions, but the 49933 entire Program remains governed by this License without regard to 49934 the additional permissions. 49935 49936 When you convey a copy of a covered work, you may at your option 49937 remove any additional permissions from that copy, or from any part 49938 of it. (Additional permissions may be written to require their own 49939 removal in certain cases when you modify the work.) You may place 49940 additional permissions on material, added by you to a covered work, 49941 for which you have or can give appropriate copyright permission. 49942 49943 Notwithstanding any other provision of this License, for material 49944 you add to a covered work, you may (if authorized by the copyright 49945 holders of that material) supplement the terms of this License with 49946 terms: 49947 49948 a. Disclaiming warranty or limiting liability differently from 49949 the terms of sections 15 and 16 of this License; or 49950 49951 b. Requiring preservation of specified reasonable legal notices 49952 or author attributions in that material or in the Appropriate 49953 Legal Notices displayed by works containing it; or 49954 49955 c. Prohibiting misrepresentation of the origin of that material, 49956 or requiring that modified versions of such material be marked 49957 in reasonable ways as different from the original version; or 49958 49959 d. Limiting the use for publicity purposes of names of licensors 49960 or authors of the material; or 49961 49962 e. Declining to grant rights under trademark law for use of some 49963 trade names, trademarks, or service marks; or 49964 49965 f. Requiring indemnification of licensors and authors of that 49966 material by anyone who conveys the material (or modified 49967 versions of it) with contractual assumptions of liability to 49968 the recipient, for any liability that these contractual 49969 assumptions directly impose on those licensors and authors. 49970 49971 All other non-permissive additional terms are considered "further 49972 restrictions" within the meaning of section 10. If the Program as 49973 you received it, or any part of it, contains a notice stating that 49974 it is governed by this License along with a term that is a further 49975 restriction, you may remove that term. If a license document 49976 contains a further restriction but permits relicensing or conveying 49977 under this License, you may add to a covered work material governed 49978 by the terms of that license document, provided that the further 49979 restriction does not survive such relicensing or conveying. 49980 49981 If you add terms to a covered work in accord with this section, you 49982 must place, in the relevant source files, a statement of the 49983 additional terms that apply to those files, or a notice indicating 49984 where to find the applicable terms. 49985 49986 Additional terms, permissive or non-permissive, may be stated in 49987 the form of a separately written license, or stated as exceptions; 49988 the above requirements apply either way. 49989 49990 8. Termination. 49991 49992 You may not propagate or modify a covered work except as expressly 49993 provided under this License. Any attempt otherwise to propagate or 49994 modify it is void, and will automatically terminate your rights 49995 under this License (including any patent licenses granted under the 49996 third paragraph of section 11). 49997 49998 However, if you cease all violation of this License, then your 49999 license from a particular copyright holder is reinstated (a) 50000 provisionally, unless and until the copyright holder explicitly and 50001 finally terminates your license, and (b) permanently, if the 50002 copyright holder fails to notify you of the violation by some 50003 reasonable means prior to 60 days after the cessation. 50004 50005 Moreover, your license from a particular copyright holder is 50006 reinstated permanently if the copyright holder notifies you of the 50007 violation by some reasonable means, this is the first time you have 50008 received notice of violation of this License (for any work) from 50009 that copyright holder, and you cure the violation prior to 30 days 50010 after your receipt of the notice. 50011 50012 Termination of your rights under this section does not terminate 50013 the licenses of parties who have received copies or rights from you 50014 under this License. If your rights have been terminated and not 50015 permanently reinstated, you do not qualify to receive new licenses 50016 for the same material under section 10. 50017 50018 9. Acceptance Not Required for Having Copies. 50019 50020 You are not required to accept this License in order to receive or 50021 run a copy of the Program. Ancillary propagation of a covered work 50022 occurring solely as a consequence of using peer-to-peer 50023 transmission to receive a copy likewise does not require 50024 acceptance. However, nothing other than this License grants you 50025 permission to propagate or modify any covered work. These actions 50026 infringe copyright if you do not accept this License. Therefore, 50027 by modifying or propagating a covered work, you indicate your 50028 acceptance of this License to do so. 50029 50030 10. Automatic Licensing of Downstream Recipients. 50031 50032 Each time you convey a covered work, the recipient automatically 50033 receives a license from the original licensors, to run, modify and 50034 propagate that work, subject to this License. You are not 50035 responsible for enforcing compliance by third parties with this 50036 License. 50037 50038 An "entity transaction" is a transaction transferring control of an 50039 organization, or substantially all assets of one, or subdividing an 50040 organization, or merging organizations. If propagation of a 50041 covered work results from an entity transaction, each party to that 50042 transaction who receives a copy of the work also receives whatever 50043 licenses to the work the party's predecessor in interest had or 50044 could give under the previous paragraph, plus a right to possession 50045 of the Corresponding Source of the work from the predecessor in 50046 interest, if the predecessor has it or can get it with reasonable 50047 efforts. 50048 50049 You may not impose any further restrictions on the exercise of the 50050 rights granted or affirmed under this License. For example, you 50051 may not impose a license fee, royalty, or other charge for exercise 50052 of rights granted under this License, and you may not initiate 50053 litigation (including a cross-claim or counterclaim in a lawsuit) 50054 alleging that any patent claim is infringed by making, using, 50055 selling, offering for sale, or importing the Program or any portion 50056 of it. 50057 50058 11. Patents. 50059 50060 A "contributor" is a copyright holder who authorizes use under this 50061 License of the Program or a work on which the Program is based. 50062 The work thus licensed is called the contributor's "contributor 50063 version". 50064 50065 A contributor's "essential patent claims" are all patent claims 50066 owned or controlled by the contributor, whether already acquired or 50067 hereafter acquired, that would be infringed by some manner, 50068 permitted by this License, of making, using, or selling its 50069 contributor version, but do not include claims that would be 50070 infringed only as a consequence of further modification of the 50071 contributor version. For purposes of this definition, "control" 50072 includes the right to grant patent sublicenses in a manner 50073 consistent with the requirements of this License. 50074 50075 Each contributor grants you a non-exclusive, worldwide, 50076 royalty-free patent license under the contributor's essential 50077 patent claims, to make, use, sell, offer for sale, import and 50078 otherwise run, modify and propagate the contents of its contributor 50079 version. 50080 50081 In the following three paragraphs, a "patent license" is any 50082 express agreement or commitment, however denominated, not to 50083 enforce a patent (such as an express permission to practice a 50084 patent or covenant not to sue for patent infringement). To "grant" 50085 such a patent license to a party means to make such an agreement or 50086 commitment not to enforce a patent against the party. 50087 50088 If you convey a covered work, knowingly relying on a patent 50089 license, and the Corresponding Source of the work is not available 50090 for anyone to copy, free of charge and under the terms of this 50091 License, through a publicly available network server or other 50092 readily accessible means, then you must either (1) cause the 50093 Corresponding Source to be so available, or (2) arrange to deprive 50094 yourself of the benefit of the patent license for this particular 50095 work, or (3) arrange, in a manner consistent with the requirements 50096 of this License, to extend the patent license to downstream 50097 recipients. "Knowingly relying" means you have actual knowledge 50098 that, but for the patent license, your conveying the covered work 50099 in a country, or your recipient's use of the covered work in a 50100 country, would infringe one or more identifiable patents in that 50101 country that you have reason to believe are valid. 50102 50103 If, pursuant to or in connection with a single transaction or 50104 arrangement, you convey, or propagate by procuring conveyance of, a 50105 covered work, and grant a patent license to some of the parties 50106 receiving the covered work authorizing them to use, propagate, 50107 modify or convey a specific copy of the covered work, then the 50108 patent license you grant is automatically extended to all 50109 recipients of the covered work and works based on it. 50110 50111 A patent license is "discriminatory" if it does not include within 50112 the scope of its coverage, prohibits the exercise of, or is 50113 conditioned on the non-exercise of one or more of the rights that 50114 are specifically granted under this License. You may not convey a 50115 covered work if you are a party to an arrangement with a third 50116 party that is in the business of distributing software, under which 50117 you make payment to the third party based on the extent of your 50118 activity of conveying the work, and under which the third party 50119 grants, to any of the parties who would receive the covered work 50120 from you, a discriminatory patent license (a) in connection with 50121 copies of the covered work conveyed by you (or copies made from 50122 those copies), or (b) primarily for and in connection with specific 50123 products or compilations that contain the covered work, unless you 50124 entered into that arrangement, or that patent license was granted, 50125 prior to 28 March 2007. 50126 50127 Nothing in this License shall be construed as excluding or limiting 50128 any implied license or other defenses to infringement that may 50129 otherwise be available to you under applicable patent law. 50130 50131 12. No Surrender of Others' Freedom. 50132 50133 If conditions are imposed on you (whether by court order, agreement 50134 or otherwise) that contradict the conditions of this License, they 50135 do not excuse you from the conditions of this License. If you 50136 cannot convey a covered work so as to satisfy simultaneously your 50137 obligations under this License and any other pertinent obligations, 50138 then as a consequence you may not convey it at all. For example, 50139 if you agree to terms that obligate you to collect a royalty for 50140 further conveying from those to whom you convey the Program, the 50141 only way you could satisfy both those terms and this License would 50142 be to refrain entirely from conveying the Program. 50143 50144 13. Use with the GNU Affero General Public License. 50145 50146 Notwithstanding any other provision of this License, you have 50147 permission to link or combine any covered work with a work licensed 50148 under version 3 of the GNU Affero General Public License into a 50149 single combined work, and to convey the resulting work. The terms 50150 of this License will continue to apply to the part which is the 50151 covered work, but the special requirements of the GNU Affero 50152 General Public License, section 13, concerning interaction through 50153 a network will apply to the combination as such. 50154 50155 14. Revised Versions of this License. 50156 50157 The Free Software Foundation may publish revised and/or new 50158 versions of the GNU General Public License from time to time. Such 50159 new versions will be similar in spirit to the present version, but 50160 may differ in detail to address new problems or concerns. 50161 50162 Each version is given a distinguishing version number. If the 50163 Program specifies that a certain numbered version of the GNU 50164 General Public License "or any later version" applies to it, you 50165 have the option of following the terms and conditions either of 50166 that numbered version or of any later version published by the Free 50167 Software Foundation. If the Program does not specify a version 50168 number of the GNU General Public License, you may choose any 50169 version ever published by the Free Software Foundation. 50170 50171 If the Program specifies that a proxy can decide which future 50172 versions of the GNU General Public License can be used, that 50173 proxy's public statement of acceptance of a version permanently 50174 authorizes you to choose that version for the Program. 50175 50176 Later license versions may give you additional or different 50177 permissions. However, no additional obligations are imposed on any 50178 author or copyright holder as a result of your choosing to follow a 50179 later version. 50180 50181 15. Disclaimer of Warranty. 50182 50183 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 50184 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 50185 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 50186 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 50187 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 50188 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 50189 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 50190 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 50191 NECESSARY SERVICING, REPAIR OR CORRECTION. 50192 50193 16. Limitation of Liability. 50194 50195 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 50196 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 50197 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 50198 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 50199 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 50200 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 50201 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 50202 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 50203 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 50204 THE POSSIBILITY OF SUCH DAMAGES. 50205 50206 17. Interpretation of Sections 15 and 16. 50207 50208 If the disclaimer of warranty and limitation of liability provided 50209 above cannot be given local legal effect according to their terms, 50210 reviewing courts shall apply local law that most closely 50211 approximates an absolute waiver of all civil liability in 50212 connection with the Program, unless a warranty or assumption of 50213 liability accompanies a copy of the Program in return for a fee. 50214 50215END OF TERMS AND CONDITIONS 50216=========================== 50217 50218How to Apply These Terms to Your New Programs 50219============================================= 50220 50221If you develop a new program, and you want it to be of the greatest 50222possible use to the public, the best way to achieve this is to make it 50223free software which everyone can redistribute and change under these 50224terms. 50225 50226 To do so, attach the following notices to the program. It is safest to 50227attach them to the start of each source file to most effectively state 50228the exclusion of warranty; and each file should have at least the 50229"copyright" line and a pointer to where the full notice is found. 50230 50231 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 50232 Copyright (C) YEAR NAME OF AUTHOR 50233 50234 This program is free software: you can redistribute it and/or modify 50235 it under the terms of the GNU General Public License as published by 50236 the Free Software Foundation, either version 3 of the License, or (at 50237 your option) any later version. 50238 50239 This program is distributed in the hope that it will be useful, but 50240 WITHOUT ANY WARRANTY; without even the implied warranty of 50241 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 50242 General Public License for more details. 50243 50244 You should have received a copy of the GNU General Public License 50245 along with this program. If not, see <http://www.gnu.org/licenses/>. 50246 50247 Also add information on how to contact you by electronic and paper 50248mail. 50249 50250 If the program does terminal interaction, make it output a short notice 50251like this when it starts in an interactive mode: 50252 50253 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 50254 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 50255 This is free software, and you are welcome to redistribute it 50256 under certain conditions; type 'show c' for details. 50257 50258 The hypothetical commands 'show w' and 'show c' should show the 50259appropriate parts of the General Public License. Of course, your 50260program's commands might be different; for a GUI interface, you would 50261use an "about box". 50262 50263 You should also get your employer (if you work as a programmer) or 50264school, if any, to sign a "copyright disclaimer" for the program, if 50265necessary. For more information on this, and how to apply and follow 50266the GNU GPL, see <http://www.gnu.org/licenses/>. 50267 50268 The GNU General Public License does not permit incorporating your 50269program into proprietary programs. If your program is a subroutine 50270library, you may consider it more useful to permit linking proprietary 50271applications with the library. If this is what you want to do, use the 50272GNU Lesser General Public License instead of this License. But first, 50273please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 50274 50275 50276File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 50277 50278GNU Free Documentation License 50279****************************** 50280 50281 Version 1.3, 3 November 2008 50282 50283 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 50284 <http://fsf.org/> 50285 50286 Everyone is permitted to copy and distribute verbatim copies 50287 of this license document, but changing it is not allowed. 50288 50289 0. PREAMBLE 50290 50291 The purpose of this License is to make a manual, textbook, or other 50292 functional and useful document "free" in the sense of freedom: to 50293 assure everyone the effective freedom to copy and redistribute it, 50294 with or without modifying it, either commercially or 50295 noncommercially. Secondarily, this License preserves for the 50296 author and publisher a way to get credit for their work, while not 50297 being considered responsible for modifications made by others. 50298 50299 This License is a kind of "copyleft", which means that derivative 50300 works of the document must themselves be free in the same sense. 50301 It complements the GNU General Public License, which is a copyleft 50302 license designed for free software. 50303 50304 We have designed this License in order to use it for manuals for 50305 free software, because free software needs free documentation: a 50306 free program should come with manuals providing the same freedoms 50307 that the software does. But this License is not limited to 50308 software manuals; it can be used for any textual work, regardless 50309 of subject matter or whether it is published as a printed book. We 50310 recommend this License principally for works whose purpose is 50311 instruction or reference. 50312 50313 1. APPLICABILITY AND DEFINITIONS 50314 50315 This License applies to any manual or other work, in any medium, 50316 that contains a notice placed by the copyright holder saying it can 50317 be distributed under the terms of this License. Such a notice 50318 grants a world-wide, royalty-free license, unlimited in duration, 50319 to use that work under the conditions stated herein. The 50320 "Document", below, refers to any such manual or work. Any member 50321 of the public is a licensee, and is addressed as "you". You accept 50322 the license if you copy, modify or distribute the work in a way 50323 requiring permission under copyright law. 50324 50325 A "Modified Version" of the Document means any work containing the 50326 Document or a portion of it, either copied verbatim, or with 50327 modifications and/or translated into another language. 50328 50329 A "Secondary Section" is a named appendix or a front-matter section 50330 of the Document that deals exclusively with the relationship of the 50331 publishers or authors of the Document to the Document's overall 50332 subject (or to related matters) and contains nothing that could 50333 fall directly within that overall subject. (Thus, if the Document 50334 is in part a textbook of mathematics, a Secondary Section may not 50335 explain any mathematics.) The relationship could be a matter of 50336 historical connection with the subject or with related matters, or 50337 of legal, commercial, philosophical, ethical or political position 50338 regarding them. 50339 50340 The "Invariant Sections" are certain Secondary Sections whose 50341 titles are designated, as being those of Invariant Sections, in the 50342 notice that says that the Document is released under this License. 50343 If a section does not fit the above definition of Secondary then it 50344 is not allowed to be designated as Invariant. The Document may 50345 contain zero Invariant Sections. If the Document does not identify 50346 any Invariant Sections then there are none. 50347 50348 The "Cover Texts" are certain short passages of text that are 50349 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 50350 that says that the Document is released under this License. A 50351 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 50352 be at most 25 words. 50353 50354 A "Transparent" copy of the Document means a machine-readable copy, 50355 represented in a format whose specification is available to the 50356 general public, that is suitable for revising the document 50357 straightforwardly with generic text editors or (for images composed 50358 of pixels) generic paint programs or (for drawings) some widely 50359 available drawing editor, and that is suitable for input to text 50360 formatters or for automatic translation to a variety of formats 50361 suitable for input to text formatters. A copy made in an otherwise 50362 Transparent file format whose markup, or absence of markup, has 50363 been arranged to thwart or discourage subsequent modification by 50364 readers is not Transparent. An image format is not Transparent if 50365 used for any substantial amount of text. A copy that is not 50366 "Transparent" is called "Opaque". 50367 50368 Examples of suitable formats for Transparent copies include plain 50369 ASCII without markup, Texinfo input format, LaTeX input format, 50370 SGML or XML using a publicly available DTD, and standard-conforming 50371 simple HTML, PostScript or PDF designed for human modification. 50372 Examples of transparent image formats include PNG, XCF and JPG. 50373 Opaque formats include proprietary formats that can be read and 50374 edited only by proprietary word processors, SGML or XML for which 50375 the DTD and/or processing tools are not generally available, and 50376 the machine-generated HTML, PostScript or PDF produced by some word 50377 processors for output purposes only. 50378 50379 The "Title Page" means, for a printed book, the title page itself, 50380 plus such following pages as are needed to hold, legibly, the 50381 material this License requires to appear in the title page. For 50382 works in formats which do not have any title page as such, "Title 50383 Page" means the text near the most prominent appearance of the 50384 work's title, preceding the beginning of the body of the text. 50385 50386 The "publisher" means any person or entity that distributes copies 50387 of the Document to the public. 50388 50389 A section "Entitled XYZ" means a named subunit of the Document 50390 whose title either is precisely XYZ or contains XYZ in parentheses 50391 following text that translates XYZ in another language. (Here XYZ 50392 stands for a specific section name mentioned below, such as 50393 "Acknowledgements", "Dedications", "Endorsements", or "History".) 50394 To "Preserve the Title" of such a section when you modify the 50395 Document means that it remains a section "Entitled XYZ" according 50396 to this definition. 50397 50398 The Document may include Warranty Disclaimers next to the notice 50399 which states that this License applies to the Document. These 50400 Warranty Disclaimers are considered to be included by reference in 50401 this License, but only as regards disclaiming warranties: any other 50402 implication that these Warranty Disclaimers may have is void and 50403 has no effect on the meaning of this License. 50404 50405 2. VERBATIM COPYING 50406 50407 You may copy and distribute the Document in any medium, either 50408 commercially or noncommercially, provided that this License, the 50409 copyright notices, and the license notice saying this License 50410 applies to the Document are reproduced in all copies, and that you 50411 add no other conditions whatsoever to those of this License. You 50412 may not use technical measures to obstruct or control the reading 50413 or further copying of the copies you make or distribute. However, 50414 you may accept compensation in exchange for copies. If you 50415 distribute a large enough number of copies you must also follow the 50416 conditions in section 3. 50417 50418 You may also lend copies, under the same conditions stated above, 50419 and you may publicly display copies. 50420 50421 3. COPYING IN QUANTITY 50422 50423 If you publish printed copies (or copies in media that commonly 50424 have printed covers) of the Document, numbering more than 100, and 50425 the Document's license notice requires Cover Texts, you must 50426 enclose the copies in covers that carry, clearly and legibly, all 50427 these Cover Texts: Front-Cover Texts on the front cover, and 50428 Back-Cover Texts on the back cover. Both covers must also clearly 50429 and legibly identify you as the publisher of these copies. The 50430 front cover must present the full title with all words of the title 50431 equally prominent and visible. You may add other material on the 50432 covers in addition. Copying with changes limited to the covers, as 50433 long as they preserve the title of the Document and satisfy these 50434 conditions, can be treated as verbatim copying in other respects. 50435 50436 If the required texts for either cover are too voluminous to fit 50437 legibly, you should put the first ones listed (as many as fit 50438 reasonably) on the actual cover, and continue the rest onto 50439 adjacent pages. 50440 50441 If you publish or distribute Opaque copies of the Document 50442 numbering more than 100, you must either include a machine-readable 50443 Transparent copy along with each Opaque copy, or state in or with 50444 each Opaque copy a computer-network location from which the general 50445 network-using public has access to download using public-standard 50446 network protocols a complete Transparent copy of the Document, free 50447 of added material. If you use the latter option, you must take 50448 reasonably prudent steps, when you begin distribution of Opaque 50449 copies in quantity, to ensure that this Transparent copy will 50450 remain thus accessible at the stated location until at least one 50451 year after the last time you distribute an Opaque copy (directly or 50452 through your agents or retailers) of that edition to the public. 50453 50454 It is requested, but not required, that you contact the authors of 50455 the Document well before redistributing any large number of copies, 50456 to give them a chance to provide you with an updated version of the 50457 Document. 50458 50459 4. MODIFICATIONS 50460 50461 You may copy and distribute a Modified Version of the Document 50462 under the conditions of sections 2 and 3 above, provided that you 50463 release the Modified Version under precisely this License, with the 50464 Modified Version filling the role of the Document, thus licensing 50465 distribution and modification of the Modified Version to whoever 50466 possesses a copy of it. In addition, you must do these things in 50467 the Modified Version: 50468 50469 A. Use in the Title Page (and on the covers, if any) a title 50470 distinct from that of the Document, and from those of previous 50471 versions (which should, if there were any, be listed in the 50472 History section of the Document). You may use the same title 50473 as a previous version if the original publisher of that 50474 version gives permission. 50475 50476 B. List on the Title Page, as authors, one or more persons or 50477 entities responsible for authorship of the modifications in 50478 the Modified Version, together with at least five of the 50479 principal authors of the Document (all of its principal 50480 authors, if it has fewer than five), unless they release you 50481 from this requirement. 50482 50483 C. State on the Title page the name of the publisher of the 50484 Modified Version, as the publisher. 50485 50486 D. Preserve all the copyright notices of the Document. 50487 50488 E. Add an appropriate copyright notice for your modifications 50489 adjacent to the other copyright notices. 50490 50491 F. Include, immediately after the copyright notices, a license 50492 notice giving the public permission to use the Modified 50493 Version under the terms of this License, in the form shown in 50494 the Addendum below. 50495 50496 G. Preserve in that license notice the full lists of Invariant 50497 Sections and required Cover Texts given in the Document's 50498 license notice. 50499 50500 H. Include an unaltered copy of this License. 50501 50502 I. Preserve the section Entitled "History", Preserve its Title, 50503 and add to it an item stating at least the title, year, new 50504 authors, and publisher of the Modified Version as given on the 50505 Title Page. If there is no section Entitled "History" in the 50506 Document, create one stating the title, year, authors, and 50507 publisher of the Document as given on its Title Page, then add 50508 an item describing the Modified Version as stated in the 50509 previous sentence. 50510 50511 J. Preserve the network location, if any, given in the Document 50512 for public access to a Transparent copy of the Document, and 50513 likewise the network locations given in the Document for 50514 previous versions it was based on. These may be placed in the 50515 "History" section. You may omit a network location for a work 50516 that was published at least four years before the Document 50517 itself, or if the original publisher of the version it refers 50518 to gives permission. 50519 50520 K. For any section Entitled "Acknowledgements" or "Dedications", 50521 Preserve the Title of the section, and preserve in the section 50522 all the substance and tone of each of the contributor 50523 acknowledgements and/or dedications given therein. 50524 50525 L. Preserve all the Invariant Sections of the Document, unaltered 50526 in their text and in their titles. Section numbers or the 50527 equivalent are not considered part of the section titles. 50528 50529 M. Delete any section Entitled "Endorsements". Such a section 50530 may not be included in the Modified Version. 50531 50532 N. Do not retitle any existing section to be Entitled 50533 "Endorsements" or to conflict in title with any Invariant 50534 Section. 50535 50536 O. Preserve any Warranty Disclaimers. 50537 50538 If the Modified Version includes new front-matter sections or 50539 appendices that qualify as Secondary Sections and contain no 50540 material copied from the Document, you may at your option designate 50541 some or all of these sections as invariant. To do this, add their 50542 titles to the list of Invariant Sections in the Modified Version's 50543 license notice. These titles must be distinct from any other 50544 section titles. 50545 50546 You may add a section Entitled "Endorsements", provided it contains 50547 nothing but endorsements of your Modified Version by various 50548 parties--for example, statements of peer review or that the text 50549 has been approved by an organization as the authoritative 50550 definition of a standard. 50551 50552 You may add a passage of up to five words as a Front-Cover Text, 50553 and a passage of up to 25 words as a Back-Cover Text, to the end of 50554 the list of Cover Texts in the Modified Version. Only one passage 50555 of Front-Cover Text and one of Back-Cover Text may be added by (or 50556 through arrangements made by) any one entity. If the Document 50557 already includes a cover text for the same cover, previously added 50558 by you or by arrangement made by the same entity you are acting on 50559 behalf of, you may not add another; but you may replace the old 50560 one, on explicit permission from the previous publisher that added 50561 the old one. 50562 50563 The author(s) and publisher(s) of the Document do not by this 50564 License give permission to use their names for publicity for or to 50565 assert or imply endorsement of any Modified Version. 50566 50567 5. COMBINING DOCUMENTS 50568 50569 You may combine the Document with other documents released under 50570 this License, under the terms defined in section 4 above for 50571 modified versions, provided that you include in the combination all 50572 of the Invariant Sections of all of the original documents, 50573 unmodified, and list them all as Invariant Sections of your 50574 combined work in its license notice, and that you preserve all 50575 their Warranty Disclaimers. 50576 50577 The combined work need only contain one copy of this License, and 50578 multiple identical Invariant Sections may be replaced with a single 50579 copy. If there are multiple Invariant Sections with the same name 50580 but different contents, make the title of each such section unique 50581 by adding at the end of it, in parentheses, the name of the 50582 original author or publisher of that section if known, or else a 50583 unique number. Make the same adjustment to the section titles in 50584 the list of Invariant Sections in the license notice of the 50585 combined work. 50586 50587 In the combination, you must combine any sections Entitled 50588 "History" in the various original documents, forming one section 50589 Entitled "History"; likewise combine any sections Entitled 50590 "Acknowledgements", and any sections Entitled "Dedications". You 50591 must delete all sections Entitled "Endorsements." 50592 50593 6. COLLECTIONS OF DOCUMENTS 50594 50595 You may make a collection consisting of the Document and other 50596 documents released under this License, and replace the individual 50597 copies of this License in the various documents with a single copy 50598 that is included in the collection, provided that you follow the 50599 rules of this License for verbatim copying of each of the documents 50600 in all other respects. 50601 50602 You may extract a single document from such a collection, and 50603 distribute it individually under this License, provided you insert 50604 a copy of this License into the extracted document, and follow this 50605 License in all other respects regarding verbatim copying of that 50606 document. 50607 50608 7. AGGREGATION WITH INDEPENDENT WORKS 50609 50610 A compilation of the Document or its derivatives with other 50611 separate and independent documents or works, in or on a volume of a 50612 storage or distribution medium, is called an "aggregate" if the 50613 copyright resulting from the compilation is not used to limit the 50614 legal rights of the compilation's users beyond what the individual 50615 works permit. When the Document is included in an aggregate, this 50616 License does not apply to the other works in the aggregate which 50617 are not themselves derivative works of the Document. 50618 50619 If the Cover Text requirement of section 3 is applicable to these 50620 copies of the Document, then if the Document is less than one half 50621 of the entire aggregate, the Document's Cover Texts may be placed 50622 on covers that bracket the Document within the aggregate, or the 50623 electronic equivalent of covers if the Document is in electronic 50624 form. Otherwise they must appear on printed covers that bracket 50625 the whole aggregate. 50626 50627 8. TRANSLATION 50628 50629 Translation is considered a kind of modification, so you may 50630 distribute translations of the Document under the terms of section 50631 4. Replacing Invariant Sections with translations requires special 50632 permission from their copyright holders, but you may include 50633 translations of some or all Invariant Sections in addition to the 50634 original versions of these Invariant Sections. You may include a 50635 translation of this License, and all the license notices in the 50636 Document, and any Warranty Disclaimers, provided that you also 50637 include the original English version of this License and the 50638 original versions of those notices and disclaimers. In case of a 50639 disagreement between the translation and the original version of 50640 this License or a notice or disclaimer, the original version will 50641 prevail. 50642 50643 If a section in the Document is Entitled "Acknowledgements", 50644 "Dedications", or "History", the requirement (section 4) to 50645 Preserve its Title (section 1) will typically require changing the 50646 actual title. 50647 50648 9. TERMINATION 50649 50650 You may not copy, modify, sublicense, or distribute the Document 50651 except as expressly provided under this License. Any attempt 50652 otherwise to copy, modify, sublicense, or distribute it is void, 50653 and will automatically terminate your rights under this License. 50654 50655 However, if you cease all violation of this License, then your 50656 license from a particular copyright holder is reinstated (a) 50657 provisionally, unless and until the copyright holder explicitly and 50658 finally terminates your license, and (b) permanently, if the 50659 copyright holder fails to notify you of the violation by some 50660 reasonable means prior to 60 days after the cessation. 50661 50662 Moreover, your license from a particular copyright holder is 50663 reinstated permanently if the copyright holder notifies you of the 50664 violation by some reasonable means, this is the first time you have 50665 received notice of violation of this License (for any work) from 50666 that copyright holder, and you cure the violation prior to 30 days 50667 after your receipt of the notice. 50668 50669 Termination of your rights under this section does not terminate 50670 the licenses of parties who have received copies or rights from you 50671 under this License. If your rights have been terminated and not 50672 permanently reinstated, receipt of a copy of some or all of the 50673 same material does not give you any rights to use it. 50674 50675 10. FUTURE REVISIONS OF THIS LICENSE 50676 50677 The Free Software Foundation may publish new, revised versions of 50678 the GNU Free Documentation License from time to time. Such new 50679 versions will be similar in spirit to the present version, but may 50680 differ in detail to address new problems or concerns. See 50681 <http://www.gnu.org/copyleft/>. 50682 50683 Each version of the License is given a distinguishing version 50684 number. If the Document specifies that a particular numbered 50685 version of this License "or any later version" applies to it, you 50686 have the option of following the terms and conditions either of 50687 that specified version or of any later version that has been 50688 published (not as a draft) by the Free Software Foundation. If the 50689 Document does not specify a version number of this License, you may 50690 choose any version ever published (not as a draft) by the Free 50691 Software Foundation. If the Document specifies that a proxy can 50692 decide which future versions of this License can be used, that 50693 proxy's public statement of acceptance of a version permanently 50694 authorizes you to choose that version for the Document. 50695 50696 11. RELICENSING 50697 50698 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 50699 World Wide Web server that publishes copyrightable works and also 50700 provides prominent facilities for anybody to edit those works. A 50701 public wiki that anybody can edit is an example of such a server. 50702 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 50703 site means any set of copyrightable works thus published on the MMC 50704 site. 50705 50706 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 50707 license published by Creative Commons Corporation, a not-for-profit 50708 corporation with a principal place of business in San Francisco, 50709 California, as well as future copyleft versions of that license 50710 published by that same organization. 50711 50712 "Incorporate" means to publish or republish a Document, in whole or 50713 in part, as part of another Document. 50714 50715 An MMC is "eligible for relicensing" if it is licensed under this 50716 License, and if all works that were first published under this 50717 License somewhere other than this MMC, and subsequently 50718 incorporated in whole or in part into the MMC, (1) had no cover 50719 texts or invariant sections, and (2) were thus incorporated prior 50720 to November 1, 2008. 50721 50722 The operator of an MMC Site may republish an MMC contained in the 50723 site under CC-BY-SA on the same site at any time before August 1, 50724 2009, provided the MMC is eligible for relicensing. 50725 50726ADDENDUM: How to use this License for your documents 50727==================================================== 50728 50729To use this License in a document you have written, include a copy of 50730the License in the document and put the following copyright and license 50731notices just after the title page: 50732 50733 Copyright (C) YEAR YOUR NAME. 50734 Permission is granted to copy, distribute and/or modify this document 50735 under the terms of the GNU Free Documentation License, Version 1.3 50736 or any later version published by the Free Software Foundation; 50737 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 50738 Texts. A copy of the license is included in the section entitled ``GNU 50739 Free Documentation License''. 50740 50741 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 50742replace the "with...Texts." line with this: 50743 50744 with the Invariant Sections being LIST THEIR TITLES, with 50745 the Front-Cover Texts being LIST, and with the Back-Cover Texts 50746 being LIST. 50747 50748 If you have Invariant Sections without Cover Texts, or some other 50749combination of the three, merge those two alternatives to suit the 50750situation. 50751 50752 If your document contains nontrivial examples of program code, we 50753recommend releasing these examples in parallel under your choice of free 50754software license, such as the GNU General Public License, to permit 50755their use in free software. 50756 50757 50758File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 50759 50760Contributors to GCC 50761******************* 50762 50763The GCC project would like to thank its many contributors. Without them 50764the project would not have been nearly as successful as it has been. 50765Any omissions in this list are accidental. Feel free to contact 50766<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 50767some of your contributions are not listed. Please keep this list in 50768alphabetical order. 50769 50770 * Analog Devices helped implement the support for complex data types 50771 and iterators. 50772 50773 * John David Anglin for threading-related fixes and improvements to 50774 libstdc++-v3, and the HP-UX port. 50775 50776 * James van Artsdalen wrote the code that makes efficient use of the 50777 Intel 80387 register stack. 50778 50779 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 50780 Series port. 50781 50782 * Alasdair Baird for various bug fixes. 50783 50784 * Giovanni Bajo for analyzing lots of complicated C++ problem 50785 reports. 50786 50787 * Peter Barada for his work to improve code generation for new 50788 ColdFire cores. 50789 50790 * Gerald Baumgartner added the signature extension to the C++ front 50791 end. 50792 50793 * Godmar Back for his Java improvements and encouragement. 50794 50795 * Scott Bambrough for help porting the Java compiler. 50796 50797 * Wolfgang Bangerth for processing tons of bug reports. 50798 50799 * Jon Beniston for his Microsoft Windows port of Java and port to 50800 Lattice Mico32. 50801 50802 * Daniel Berlin for better DWARF2 support, faster/better 50803 optimizations, improved alias analysis, plus migrating GCC to 50804 Bugzilla. 50805 50806 * Geoff Berry for his Java object serialization work and various 50807 patches. 50808 50809 * David Binderman tests weekly snapshots of GCC trunk against Fedora 50810 Rawhide for several architectures. 50811 50812 * Uros Bizjak for the implementation of x87 math built-in functions 50813 and for various middle end and i386 back end improvements and bug 50814 fixes. 50815 50816 * Eric Blake for helping to make GCJ and libgcj conform to the 50817 specifications. 50818 50819 * Janne Blomqvist for contributions to GNU Fortran. 50820 50821 * Segher Boessenkool for various fixes. 50822 50823 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 50824 other Java work. 50825 50826 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 50827 miscellaneous clean-ups. 50828 50829 * Steven Bosscher for integrating the GNU Fortran front end into GCC 50830 and for contributing to the tree-ssa branch. 50831 50832 * Eric Botcazou for fixing middle- and backend bugs left and right. 50833 50834 * Per Bothner for his direction via the steering committee and 50835 various improvements to the infrastructure for supporting new 50836 languages. Chill front end implementation. Initial 50837 implementations of cpplib, fix-header, config.guess, libio, and 50838 past C++ library (libg++) maintainer. Dreaming up, designing and 50839 implementing much of GCJ. 50840 50841 * Devon Bowen helped port GCC to the Tahoe. 50842 50843 * Don Bowman for mips-vxworks contributions. 50844 50845 * Dave Brolley for work on cpplib and Chill. 50846 50847 * Paul Brook for work on the ARM architecture and maintaining GNU 50848 Fortran. 50849 50850 * Robert Brown implemented the support for Encore 32000 systems. 50851 50852 * Christian Bruel for improvements to local store elimination. 50853 50854 * Herman A.J. ten Brugge for various fixes. 50855 50856 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 50857 FAQ. 50858 50859 * Joe Buck for his direction via the steering committee. 50860 50861 * Craig Burley for leadership of the G77 Fortran effort. 50862 50863 * Stephan Buys for contributing Doxygen notes for libstdc++. 50864 50865 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 50866 to the C++ strings, streambufs and formatted I/O, hard detective 50867 work on the frustrating localization issues, and keeping up with 50868 the problem reports. 50869 50870 * John Carr for his alias work, SPARC hacking, infrastructure 50871 improvements, previous contributions to the steering committee, 50872 loop optimizations, etc. 50873 50874 * Stephane Carrez for 68HC11 and 68HC12 ports. 50875 50876 * Steve Chamberlain for support for the Renesas SH and H8 processors 50877 and the PicoJava processor, and for GCJ config fixes. 50878 50879 * Glenn Chambers for help with the GCJ FAQ. 50880 50881 * John-Marc Chandonia for various libgcj patches. 50882 50883 * Denis Chertykov for contributing and maintaining the AVR port, the 50884 first GCC port for an 8-bit architecture. 50885 50886 * Scott Christley for his Objective-C contributions. 50887 50888 * Eric Christopher for his Java porting help and clean-ups. 50889 50890 * Branko Cibej for more warning contributions. 50891 50892 * The GNU Classpath project for all of their merged runtime code. 50893 50894 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 50895 '--help', and other random hacking. 50896 50897 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 50898 50899 * R. Kelley Cook for making GCC buildable from a read-only directory 50900 as well as other miscellaneous build process and documentation 50901 clean-ups. 50902 50903 * Ralf Corsepius for SH testing and minor bug fixing. 50904 50905 * Stan Cox for care and feeding of the x86 port and lots of behind 50906 the scenes hacking. 50907 50908 * Alex Crain provided changes for the 3b1. 50909 50910 * Ian Dall for major improvements to the NS32k port. 50911 50912 * Paul Dale for his work to add uClinux platform support to the m68k 50913 backend. 50914 50915 * Dario Dariol contributed the four varieties of sample programs that 50916 print a copy of their source. 50917 50918 * Russell Davidson for fstream and stringstream fixes in libstdc++. 50919 50920 * Bud Davis for work on the G77 and GNU Fortran compilers. 50921 50922 * Mo DeJong for GCJ and libgcj bug fixes. 50923 50924 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 50925 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 50926 50927 * Arnaud Desitter for helping to debug GNU Fortran. 50928 50929 * Gabriel Dos Reis for contributions to G++, contributions and 50930 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 50931 including 'valarray<>', 'complex<>', maintaining the numerics 50932 library (including that pesky '<limits>' :-) and keeping up-to-date 50933 anything to do with numbers. 50934 50935 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 50936 ISO C99 support, CFG dumping support, etc., plus support of the C++ 50937 runtime libraries including for all kinds of C interface issues, 50938 contributing and maintaining 'complex<>', sanity checking and 50939 disbursement, configuration architecture, libio maintenance, and 50940 early math work. 50941 50942 * Franc,ois Dumont for his work on libstdc++-v3, especially 50943 maintaining and improving 'debug-mode' and associative and 50944 unordered containers. 50945 50946 * Zdenek Dvorak for a new loop unroller and various fixes. 50947 50948 * Michael Eager for his work on the Xilinx MicroBlaze port. 50949 50950 * Richard Earnshaw for his ongoing work with the ARM. 50951 50952 * David Edelsohn for his direction via the steering committee, 50953 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 50954 loop changes, doing the entire AIX port of libstdc++ with his bare 50955 hands, and for ensuring GCC properly keeps working on AIX. 50956 50957 * Kevin Ediger for the floating point formatting of num_put::do_put 50958 in libstdc++. 50959 50960 * Phil Edwards for libstdc++ work including configuration hackery, 50961 documentation maintainer, chief breaker of the web pages, the 50962 occasional iostream bug fix, and work on shared library symbol 50963 versioning. 50964 50965 * Paul Eggert for random hacking all over GCC. 50966 50967 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 50968 configuration support for locales and fstream-related fixes. 50969 50970 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 50971 iostreams. 50972 50973 * Christian Ehrhardt for dealing with bug reports. 50974 50975 * Ben Elliston for his work to move the Objective-C runtime into its 50976 own subdirectory and for his work on autoconf. 50977 50978 * Revital Eres for work on the PowerPC 750CL port. 50979 50980 * Marc Espie for OpenBSD support. 50981 50982 * Doug Evans for much of the global optimization framework, arc, 50983 m32r, and SPARC work. 50984 50985 * Christopher Faylor for his work on the Cygwin port and for caring 50986 and feeding the gcc.gnu.org box and saving its users tons of spam. 50987 50988 * Fred Fish for BeOS support and Ada fixes. 50989 50990 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 50991 50992 * Peter Gerwinski for various bug fixes and the Pascal front end. 50993 50994 * Kaveh R. Ghazi for his direction via the steering committee, 50995 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 50996 on a plethora of platforms. Kaveh extends his gratitude to the 50997 CAIP Center at Rutgers University for providing him with computing 50998 resources to work on Free Software from the late 1980s to 2010. 50999 51000 * John Gilmore for a donation to the FSF earmarked improving GNU 51001 Java. 51002 51003 * Judy Goldberg for c++ contributions. 51004 51005 * Torbjorn Granlund for various fixes and the c-torture testsuite, 51006 multiply- and divide-by-constant optimization, improved long long 51007 support, improved leaf function register allocation, and his 51008 direction via the steering committee. 51009 51010 * Anthony Green for his '-Os' contributions, the moxie port, and Java 51011 front end work. 51012 51013 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 51014 code. 51015 51016 * Michael K. Gschwind contributed the port to the PDP-11. 51017 51018 * Richard Biener for his ongoing middle-end contributions and bug 51019 fixes and for release management. 51020 51021 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 51022 the support for Dwarf symbolic debugging information, and much of 51023 the support for System V Release 4. He has also worked heavily on 51024 the Intel 386 and 860 support. 51025 51026 * Sumanth Gundapaneni for contributing the CR16 port. 51027 51028 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 51029 GCSE. 51030 51031 * Bruno Haible for improvements in the runtime overhead for EH, new 51032 warnings and assorted bug fixes. 51033 51034 * Andrew Haley for his amazing Java compiler and library efforts. 51035 51036 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 51037 series 300. 51038 51039 * Michael Hayes for various thankless work he's done trying to get 51040 the c30/c40 ports functional. Lots of loop and unroll improvements 51041 and fixes. 51042 51043 * Dara Hazeghi for wading through myriads of target-specific bug 51044 reports. 51045 51046 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 51047 51048 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 51049 work, loop opts, and generally fixing lots of old problems we've 51050 ignored for years, flow rewrite and lots of further stuff, 51051 including reviewing tons of patches. 51052 51053 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 51054 various fixes. 51055 51056 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 51057 contributed the support for the Sony NEWS machine. 51058 51059 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 51060 various fixes. 51061 51062 * Katherine Holcomb for work on GNU Fortran. 51063 51064 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 51065 of testing and bug fixing, particularly of GCC configury code. 51066 51067 * Steve Holmgren for MachTen patches. 51068 51069 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 51070 51071 * Jan Hubicka for his x86 port improvements. 51072 51073 * Falk Hueffner for working on C and optimization bug reports. 51074 51075 * Bernardo Innocenti for his m68k work, including merging of ColdFire 51076 improvements and uClinux support. 51077 51078 * Christian Iseli for various bug fixes. 51079 51080 * Kamil Iskra for general m68k hacking. 51081 51082 * Lee Iverson for random fixes and MIPS testing. 51083 51084 * Andreas Jaeger for testing and benchmarking of GCC and various bug 51085 fixes. 51086 51087 * Jakub Jelinek for his SPARC work and sibling call optimizations as 51088 well as lots of bug fixes and test cases, and for improving the 51089 Java build system. 51090 51091 * Janis Johnson for ia64 testing and fixes, her quality improvement 51092 sidetracks, and web page maintenance. 51093 51094 * Kean Johnston for SCO OpenServer support and various fixes. 51095 51096 * Tim Josling for the sample language treelang based originally on 51097 Richard Kenner's "toy" language. 51098 51099 * Nicolai Josuttis for additional libstdc++ documentation. 51100 51101 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 51102 target. 51103 51104 * Steven G. Kargl for work on GNU Fortran. 51105 51106 * David Kashtan of SRI adapted GCC to VMS. 51107 51108 * Ryszard Kabatek for many, many libstdc++ bug fixes and 51109 optimizations of strings, especially member functions, and for 51110 auto_ptr fixes. 51111 51112 * Geoffrey Keating for his ongoing work to make the PPC work for 51113 GNU/Linux and his automatic regression tester. 51114 51115 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 51116 work in just about every part of libstdc++. 51117 51118 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 51119 MIL-STD-1750A. 51120 51121 * Richard Kenner of the New York University Ultracomputer Research 51122 Laboratory wrote the machine descriptions for the AMD 29000, the 51123 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 51124 support for instruction attributes. He also made changes to better 51125 support RISC processors including changes to common subexpression 51126 elimination, strength reduction, function calling sequence 51127 handling, and condition code support, in addition to generalizing 51128 the code for frame pointer elimination and delay slot scheduling. 51129 Richard Kenner was also the head maintainer of GCC for several 51130 years. 51131 51132 * Mumit Khan for various contributions to the Cygwin and Mingw32 51133 ports and maintaining binary releases for Microsoft Windows hosts, 51134 and for massive libstdc++ porting work to Cygwin/Mingw32. 51135 51136 * Robin Kirkham for cpu32 support. 51137 51138 * Mark Klein for PA improvements. 51139 51140 * Thomas Koenig for various bug fixes. 51141 51142 * Bruce Korb for the new and improved fixincludes code. 51143 51144 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 51145 effort. 51146 51147 * Charles LaBrec contributed the support for the Integrated Solutions 51148 68020 system. 51149 51150 * Asher Langton and Mike Kumbera for contributing Cray pointer 51151 support to GNU Fortran, and for other GNU Fortran improvements. 51152 51153 * Jeff Law for his direction via the steering committee, coordinating 51154 the entire egcs project and GCC 2.95, rolling out snapshots and 51155 releases, handling merges from GCC2, reviewing tons of patches that 51156 might have fallen through the cracks else, and random but extensive 51157 hacking. 51158 51159 * Walter Lee for work on the TILE-Gx and TILEPro ports. 51160 51161 * Marc Lehmann for his direction via the steering committee and 51162 helping with analysis and improvements of x86 performance. 51163 51164 * Victor Leikehman for work on GNU Fortran. 51165 51166 * Ted Lemon wrote parts of the RTL reader and printer. 51167 51168 * Kriang Lerdsuwanakij for C++ improvements including template as 51169 template parameter support, and many C++ fixes. 51170 51171 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 51172 and random work on the Java front end. 51173 51174 * Alain Lichnewsky ported GCC to the MIPS CPU. 51175 51176 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 51177 and patches. 51178 51179 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 51180 51181 * Chen Liqin for various S+core related fixes/improvement, and for 51182 maintaining the S+core port. 51183 51184 * Weiwen Liu for testing and various bug fixes. 51185 51186 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 51187 diagnostics fixes and improvements. 51188 51189 * Dave Love for his ongoing work with the Fortran front end and 51190 runtime libraries. 51191 51192 * Martin von Lo"wis for internal consistency checking infrastructure, 51193 various C++ improvements including namespace support, and tons of 51194 assistance with libstdc++/compiler merges. 51195 51196 * H.J. Lu for his previous contributions to the steering committee, 51197 many x86 bug reports, prototype patches, and keeping the GNU/Linux 51198 ports working. 51199 51200 * Greg McGary for random fixes and (someday) bounded pointers. 51201 51202 * Andrew MacLeod for his ongoing work in building a real EH system, 51203 various code generation improvements, work on the global optimizer, 51204 etc. 51205 51206 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 51207 hacking improvements to compile-time performance, overall knowledge 51208 and direction in the area of instruction scheduling, and design and 51209 implementation of the automaton based instruction scheduler. 51210 51211 * Bob Manson for his behind the scenes work on dejagnu. 51212 51213 * Philip Martin for lots of libstdc++ string and vector iterator 51214 fixes and improvements, and string clean up and testsuites. 51215 51216 * All of the Mauve project contributors, for Java test code. 51217 51218 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 51219 51220 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 51221 51222 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 51223 powerpc, haifa, ECOFF debug support, and other assorted hacking. 51224 51225 * Jason Merrill for his direction via the steering committee and 51226 leading the G++ effort. 51227 51228 * Martin Michlmayr for testing GCC on several architectures using the 51229 entire Debian archive. 51230 51231 * David Miller for his direction via the steering committee, lots of 51232 SPARC work, improvements in jump.c and interfacing with the Linux 51233 kernel developers. 51234 51235 * Gary Miller ported GCC to Charles River Data Systems machines. 51236 51237 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 51238 the entire libstdc++ testsuite namespace-compatible. 51239 51240 * Mark Mitchell for his direction via the steering committee, 51241 mountains of C++ work, load/store hoisting out of loops, alias 51242 analysis improvements, ISO C 'restrict' support, and serving as 51243 release manager from 2000 to 2011. 51244 51245 * Alan Modra for various GNU/Linux bits and testing. 51246 51247 * Toon Moene for his direction via the steering committee, Fortran 51248 maintenance, and his ongoing work to make us make Fortran run fast. 51249 51250 * Jason Molenda for major help in the care and feeding of all the 51251 services on the gcc.gnu.org (formerly egcs.cygnus.com) 51252 machine--mail, web services, ftp services, etc etc. Doing all this 51253 work on scrap paper and the backs of envelopes would have been... 51254 difficult. 51255 51256 * Catherine Moore for fixing various ugly problems we have sent her 51257 way, including the haifa bug which was killing the Alpha & PowerPC 51258 Linux kernels. 51259 51260 * Mike Moreton for his various Java patches. 51261 51262 * David Mosberger-Tang for various Alpha improvements, and for the 51263 initial IA-64 port. 51264 51265 * Stephen Moshier contributed the floating point emulator that 51266 assists in cross-compilation and permits support for floating point 51267 numbers wider than 64 bits and for ISO C99 support. 51268 51269 * Bill Moyer for his behind the scenes work on various issues. 51270 51271 * Philippe De Muyter for his work on the m68k port. 51272 51273 * Joseph S. Myers for his work on the PDP-11 port, format checking 51274 and ISO C99 support, and continuous emphasis on (and contributions 51275 to) documentation. 51276 51277 * Nathan Myers for his work on libstdc++-v3: architecture and 51278 authorship through the first three snapshots, including 51279 implementation of locale infrastructure, string, shadow C headers, 51280 and the initial project documentation (DESIGN, CHECKLIST, and so 51281 forth). Later, more work on MT-safe string and shadow headers. 51282 51283 * Felix Natter for documentation on porting libstdc++. 51284 51285 * Nathanael Nerode for cleaning up the configuration/build process. 51286 51287 * NeXT, Inc. donated the front end that supports the Objective-C 51288 language. 51289 51290 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 51291 search engine setup, various documentation fixes and other small 51292 fixes. 51293 51294 * Geoff Noer for his work on getting cygwin native builds working. 51295 51296 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 51297 tracking web pages, GIMPLE tuples, and assorted fixes. 51298 51299 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 51300 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 51301 infrastructure improvements. 51302 51303 * Alexandre Oliva for various build infrastructure improvements, 51304 scripts and amazing testing work, including keeping libtool issues 51305 sane and happy. 51306 51307 * Stefan Olsson for work on mt_alloc. 51308 51309 * Melissa O'Neill for various NeXT fixes. 51310 51311 * Rainer Orth for random MIPS work, including improvements to GCC's 51312 o32 ABI support, improvements to dejagnu's MIPS support, Java 51313 configuration clean-ups and porting work, and maintaining the IRIX, 51314 Solaris 2, and Tru64 UNIX ports. 51315 51316 * Hartmut Penner for work on the s390 port. 51317 51318 * Paul Petersen wrote the machine description for the Alliant FX/8. 51319 51320 * Alexandre Petit-Bianco for implementing much of the Java compiler 51321 and continued Java maintainership. 51322 51323 * Matthias Pfaller for major improvements to the NS32k port. 51324 51325 * Gerald Pfeifer for his direction via the steering committee, 51326 pointing out lots of problems we need to solve, maintenance of the 51327 web pages, and taking care of documentation maintenance in general. 51328 51329 * Andrew Pinski for processing bug reports by the dozen. 51330 51331 * Ovidiu Predescu for his work on the Objective-C front end and 51332 runtime libraries. 51333 51334 * Jerry Quinn for major performance improvements in C++ formatted 51335 I/O. 51336 51337 * Ken Raeburn for various improvements to checker, MIPS ports and 51338 various cleanups in the compiler. 51339 51340 * Rolf W. Rasmussen for hacking on AWT. 51341 51342 * David Reese of Sun Microsystems contributed to the Solaris on 51343 PowerPC port. 51344 51345 * Volker Reichelt for keeping up with the problem reports. 51346 51347 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 51348 hacking and developing and maintaining the Epiphany port. 51349 51350 * Loren J. Rittle for improvements to libstdc++-v3 including the 51351 FreeBSD port, threading fixes, thread-related configury changes, 51352 critical threading documentation, and solutions to really tricky 51353 I/O problems, as well as keeping GCC properly working on FreeBSD 51354 and continuous testing. 51355 51356 * Craig Rodrigues for processing tons of bug reports. 51357 51358 * Ola Ro"nnerup for work on mt_alloc. 51359 51360 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 51361 51362 * David Ronis inspired and encouraged Craig to rewrite the G77 51363 documentation in texinfo format by contributing a first pass at a 51364 translation of the old 'g77-0.5.16/f/DOC' file. 51365 51366 * Ken Rose for fixes to GCC's delay slot filling code. 51367 51368 * Paul Rubin wrote most of the preprocessor. 51369 51370 * Pe'tur Runo'lfsson for major performance improvements in C++ 51371 formatted I/O and large file support in C++ filebuf. 51372 51373 * Chip Salzenberg for libstdc++ patches and improvements to locales, 51374 traits, Makefiles, libio, libtool hackery, and "long long" support. 51375 51376 * Juha Sarlin for improvements to the H8 code generator. 51377 51378 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 51379 300. 51380 51381 * Roger Sayle for improvements to constant folding and GCC's RTL 51382 optimizers as well as for fixing numerous bugs. 51383 51384 * Bradley Schatz for his work on the GCJ FAQ. 51385 51386 * Peter Schauer wrote the code to allow debugging to work on the 51387 Alpha. 51388 51389 * William Schelter did most of the work on the Intel 80386 support. 51390 51391 * Tobias Schlu"ter for work on GNU Fortran. 51392 51393 * Bernd Schmidt for various code generation improvements and major 51394 work in the reload pass, serving as release manager for GCC 2.95.3, 51395 and work on the Blackfin and C6X ports. 51396 51397 * Peter Schmid for constant testing of libstdc++--especially 51398 application testing, going above and beyond what was requested for 51399 the release criteria--and libstdc++ header file tweaks. 51400 51401 * Jason Schroeder for jcf-dump patches. 51402 51403 * Andreas Schwab for his work on the m68k port. 51404 51405 * Lars Segerlund for work on GNU Fortran. 51406 51407 * Dodji Seketeli for numerous C++ bug fixes and debug info 51408 improvements. 51409 51410 * Tim Shen for major work on '<regex>'. 51411 51412 * Joel Sherrill for his direction via the steering committee, RTEMS 51413 contributions and RTEMS testing. 51414 51415 * Nathan Sidwell for many C++ fixes/improvements. 51416 51417 * Jeffrey Siegal for helping RMS with the original design of GCC, 51418 some code which handles the parse tree and RTL data structures, 51419 constant folding and help with the original VAX & m68k ports. 51420 51421 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 51422 from the LWG (thereby keeping GCC in line with updates from the 51423 ISO). 51424 51425 * Franz Sirl for his ongoing work with making the PPC port stable for 51426 GNU/Linux. 51427 51428 * Andrey Slepuhin for assorted AIX hacking. 51429 51430 * Trevor Smigiel for contributing the SPU port. 51431 51432 * Christopher Smith did the port for Convex machines. 51433 51434 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 51435 51436 * Randy Smith finished the Sun FPA support. 51437 51438 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 51439 functions, '<random>', and various improvements to C++11 features. 51440 51441 * Scott Snyder for queue, iterator, istream, and string fixes and 51442 libstdc++ testsuite entries. Also for providing the patch to G77 51443 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 51444 'LOGICAL*1'. 51445 51446 * Zdenek Sojka for running automated regression testing of GCC and 51447 reporting numerous bugs. 51448 51449 * Jayant Sonar for contributing the CR16 port. 51450 51451 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 51452 51453 * Richard Stallman, for writing the original GCC and launching the 51454 GNU project. 51455 51456 * Jan Stein of the Chalmers Computer Society provided support for 51457 Genix, as well as part of the 32000 machine description. 51458 51459 * Nigel Stephens for various mips16 related fixes/improvements. 51460 51461 * Jonathan Stone wrote the machine description for the Pyramid 51462 computer. 51463 51464 * Graham Stott for various infrastructure improvements. 51465 51466 * John Stracke for his Java HTTP protocol fixes. 51467 51468 * Mike Stump for his Elxsi port, G++ contributions over the years and 51469 more recently his vxworks contributions 51470 51471 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 51472 51473 * Shigeya Suzuki for this fixes for the bsdi platforms. 51474 51475 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 51476 support, general configury hacking, fixincludes, etc. 51477 51478 * Holger Teutsch provided the support for the Clipper CPU. 51479 51480 * Gary Thomas for his ongoing work to make the PPC work for 51481 GNU/Linux. 51482 51483 * Philipp Thomas for random bug fixes throughout the compiler 51484 51485 * Jason Thorpe for thread support in libstdc++ on NetBSD. 51486 51487 * Kresten Krab Thorup wrote the run time support for the Objective-C 51488 language and the fantastic Java bytecode interpreter. 51489 51490 * Michael Tiemann for random bug fixes, the first instruction 51491 scheduler, initial C++ support, function integration, NS32k, SPARC 51492 and M88k machine description work, delay slot scheduling. 51493 51494 * Andreas Tobler for his work porting libgcj to Darwin. 51495 51496 * Teemu Torma for thread safe exception handling support. 51497 51498 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 51499 definitions, and of the VAX machine description. 51500 51501 * Daniel Towner and Hariharan Sandanagobalane contributed and 51502 maintain the picoChip port. 51503 51504 * Tom Tromey for internationalization support and for his many Java 51505 contributions and libgcj maintainership. 51506 51507 * Lassi Tuura for improvements to config.guess to determine HP 51508 processor types. 51509 51510 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 51511 51512 * Andy Vaught for the design and initial implementation of the GNU 51513 Fortran front end. 51514 51515 * Brent Verner for work with the libstdc++ cshadow files and their 51516 associated configure steps. 51517 51518 * Todd Vierling for contributions for NetBSD ports. 51519 51520 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 51521 guidance. 51522 51523 * Dean Wakerley for converting the install documentation from HTML to 51524 texinfo in time for GCC 3.0. 51525 51526 * Krister Walfridsson for random bug fixes. 51527 51528 * Feng Wang for contributions to GNU Fortran. 51529 51530 * Stephen M. Webb for time and effort on making libstdc++ shadow 51531 files work with the tricky Solaris 8+ headers, and for pushing the 51532 build-time header tree. Also, for starting and driving the 51533 '<regex>' effort. 51534 51535 * John Wehle for various improvements for the x86 code generator, 51536 related infrastructure improvements to help x86 code generation, 51537 value range propagation and other work, WE32k port. 51538 51539 * Ulrich Weigand for work on the s390 port. 51540 51541 * Zack Weinberg for major work on cpplib and various other bug fixes. 51542 51543 * Matt Welsh for help with Linux Threads support in GCJ. 51544 51545 * Urban Widmark for help fixing java.io. 51546 51547 * Mark Wielaard for new Java library code and his work integrating 51548 with Classpath. 51549 51550 * Dale Wiles helped port GCC to the Tahoe. 51551 51552 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 51553 51554 * Jim Wilson for his direction via the steering committee, tackling 51555 hard problems in various places that nobody else wanted to work on, 51556 strength reduction and other loop optimizations. 51557 51558 * Paul Woegerer and Tal Agmon for the CRX port. 51559 51560 * Carlo Wood for various fixes. 51561 51562 * Tom Wood for work on the m88k port. 51563 51564 * Chung-Ju Wu for his work on the Andes NDS32 port. 51565 51566 * Canqun Yang for work on GNU Fortran. 51567 51568 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 51569 description for the Tron architecture (specifically, the Gmicro). 51570 51571 * Kevin Zachmann helped port GCC to the Tahoe. 51572 51573 * Ayal Zaks for Swing Modulo Scheduling (SMS). 51574 51575 * Xiaoqiang Zhang for work on GNU Fortran. 51576 51577 * Gilles Zunino for help porting Java to Irix. 51578 51579 The following people are recognized for their contributions to GNAT, 51580the Ada front end of GCC: 51581 * Bernard Banner 51582 51583 * Romain Berrendonner 51584 51585 * Geert Bosch 51586 51587 * Emmanuel Briot 51588 51589 * Joel Brobecker 51590 51591 * Ben Brosgol 51592 51593 * Vincent Celier 51594 51595 * Arnaud Charlet 51596 51597 * Chien Chieng 51598 51599 * Cyrille Comar 51600 51601 * Cyrille Crozes 51602 51603 * Robert Dewar 51604 51605 * Gary Dismukes 51606 51607 * Robert Duff 51608 51609 * Ed Falis 51610 51611 * Ramon Fernandez 51612 51613 * Sam Figueroa 51614 51615 * Vasiliy Fofanov 51616 51617 * Michael Friess 51618 51619 * Franco Gasperoni 51620 51621 * Ted Giering 51622 51623 * Matthew Gingell 51624 51625 * Laurent Guerby 51626 51627 * Jerome Guitton 51628 51629 * Olivier Hainque 51630 51631 * Jerome Hugues 51632 51633 * Hristian Kirtchev 51634 51635 * Jerome Lambourg 51636 51637 * Bruno Leclerc 51638 51639 * Albert Lee 51640 51641 * Sean McNeil 51642 51643 * Javier Miranda 51644 51645 * Laurent Nana 51646 51647 * Pascal Obry 51648 51649 * Dong-Ik Oh 51650 51651 * Laurent Pautet 51652 51653 * Brett Porter 51654 51655 * Thomas Quinot 51656 51657 * Nicolas Roche 51658 51659 * Pat Rogers 51660 51661 * Jose Ruiz 51662 51663 * Douglas Rupp 51664 51665 * Sergey Rybin 51666 51667 * Gail Schenker 51668 51669 * Ed Schonberg 51670 51671 * Nicolas Setton 51672 51673 * Samuel Tardieu 51674 51675 The following people are recognized for their contributions of new 51676features, bug reports, testing and integration of classpath/libgcj for 51677GCC version 4.1: 51678 * Lillian Angel for 'JTree' implementation and lots Free Swing 51679 additions and bug fixes. 51680 51681 * Wolfgang Baer for 'GapContent' bug fixes. 51682 51683 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 51684 event fixes, lots of Free Swing work including 'JTable' editing. 51685 51686 * Stuart Ballard for RMI constant fixes. 51687 51688 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 51689 51690 * Gary Benson for 'MessageFormat' fixes. 51691 51692 * Daniel Bonniot for 'Serialization' fixes. 51693 51694 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 51695 and 'DOM xml:id' support. 51696 51697 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 51698 51699 * Archie Cobbs for build fixes, VM interface updates, 51700 'URLClassLoader' updates. 51701 51702 * Kelley Cook for build fixes. 51703 51704 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 51705 51706 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 51707 improvements. 51708 51709 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 51710 2D support. Lots of imageio framework additions, lots of AWT and 51711 Free Swing bug fixes. 51712 51713 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 51714 fixes, better 'Proxy' support, bug fixes and IKVM integration. 51715 51716 * Santiago Gala for 'AccessControlContext' fixes. 51717 51718 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 51719 improvements. 51720 51721 * David Gilbert for 'basic' and 'metal' icon and plaf support and 51722 lots of documenting, Lots of Free Swing and metal theme additions. 51723 'MetalIconFactory' implementation. 51724 51725 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 51726 51727 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 51728 build speedups. 51729 51730 * Kim Ho for 'JFileChooser' implementation. 51731 51732 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 51733 'Serialization' fixes, 'Properties' XML support and generic branch 51734 work, VMIntegration guide update. 51735 51736 * Bastiaan Huisman for 'TimeZone' bug fixing. 51737 51738 * Andreas Jaeger for mprec updates. 51739 51740 * Paul Jenner for better '-Werror' support. 51741 51742 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 51743 51744 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 51745 bug fixes all over. Lots of Free Swing work including styled text. 51746 51747 * Simon Kitching for 'String' cleanups and optimization suggestions. 51748 51749 * Michael Koch for configuration fixes, 'Locale' updates, bug and 51750 build fixes. 51751 51752 * Guilhem Lavaux for configuration, thread and channel fixes and 51753 Kaffe integration. JCL native 'Pointer' updates. Logger bug 51754 fixes. 51755 51756 * David Lichteblau for JCL support library global/local reference 51757 cleanups. 51758 51759 * Aaron Luchko for JDWP updates and documentation fixes. 51760 51761 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 51762 features. 51763 51764 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 51765 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 51766 and implementing the Qt4 peers. 51767 51768 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 51769 'SystemLogger' and 'FileHandler' rotate implementations, NIO 51770 'FileChannel.map' support, security and policy updates. 51771 51772 * Bryce McKinlay for RMI work. 51773 51774 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 51775 testing and documenting. 51776 51777 * Kalle Olavi Niemitalo for build fixes. 51778 51779 * Rainer Orth for build fixes. 51780 51781 * Andrew Overholt for 'File' locking fixes. 51782 51783 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 51784 51785 * Olga Rodimina for 'MenuSelectionManager' implementation. 51786 51787 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 51788 51789 * Julian Scheid for documentation updates and gjdoc support. 51790 51791 * Christian Schlichtherle for zip fixes and cleanups. 51792 51793 * Robert Schuster for documentation updates and beans fixes, 51794 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 51795 and URL, AWT and Free Swing bug fixes. 51796 51797 * Keith Seitz for lots of JDWP work. 51798 51799 * Christian Thalinger for 64-bit cleanups, Configuration and VM 51800 interface fixes and 'CACAO' integration, 'fdlibm' updates. 51801 51802 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 51803 51804 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 51805 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 51806 51807 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 51808 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 51809 'GdkPixbugDecoder' updates. 51810 51811 * Tom Tromey for Eclipse integration, generics work, lots of bug 51812 fixes and gcj integration including coordinating The Big Merge. 51813 51814 * Mark Wielaard for bug fixes, packaging and release management, 51815 'Clipboard' implementation, system call interrupts and network 51816 timeouts and 'GdkPixpufDecoder' fixes. 51817 51818 In addition to the above, all of which also contributed time and energy 51819in testing GCC, we would like to thank the following for their 51820contributions to testing: 51821 51822 * Michael Abd-El-Malek 51823 51824 * Thomas Arend 51825 51826 * Bonzo Armstrong 51827 51828 * Steven Ashe 51829 51830 * Chris Baldwin 51831 51832 * David Billinghurst 51833 51834 * Jim Blandy 51835 51836 * Stephane Bortzmeyer 51837 51838 * Horst von Brand 51839 51840 * Frank Braun 51841 51842 * Rodney Brown 51843 51844 * Sidney Cadot 51845 51846 * Bradford Castalia 51847 51848 * Robert Clark 51849 51850 * Jonathan Corbet 51851 51852 * Ralph Doncaster 51853 51854 * Richard Emberson 51855 51856 * Levente Farkas 51857 51858 * Graham Fawcett 51859 51860 * Mark Fernyhough 51861 51862 * Robert A. French 51863 51864 * Jo"rgen Freyh 51865 51866 * Mark K. Gardner 51867 51868 * Charles-Antoine Gauthier 51869 51870 * Yung Shing Gene 51871 51872 * David Gilbert 51873 51874 * Simon Gornall 51875 51876 * Fred Gray 51877 51878 * John Griffin 51879 51880 * Patrik Hagglund 51881 51882 * Phil Hargett 51883 51884 * Amancio Hasty 51885 51886 * Takafumi Hayashi 51887 51888 * Bryan W. Headley 51889 51890 * Kevin B. Hendricks 51891 51892 * Joep Jansen 51893 51894 * Christian Joensson 51895 51896 * Michel Kern 51897 51898 * David Kidd 51899 51900 * Tobias Kuipers 51901 51902 * Anand Krishnaswamy 51903 51904 * A. O. V. Le Blanc 51905 51906 * llewelly 51907 51908 * Damon Love 51909 51910 * Brad Lucier 51911 51912 * Matthias Klose 51913 51914 * Martin Knoblauch 51915 51916 * Rick Lutowski 51917 51918 * Jesse Macnish 51919 51920 * Stefan Morrell 51921 51922 * Anon A. Mous 51923 51924 * Matthias Mueller 51925 51926 * Pekka Nikander 51927 51928 * Rick Niles 51929 51930 * Jon Olson 51931 51932 * Magnus Persson 51933 51934 * Chris Pollard 51935 51936 * Richard Polton 51937 51938 * Derk Reefman 51939 51940 * David Rees 51941 51942 * Paul Reilly 51943 51944 * Tom Reilly 51945 51946 * Torsten Rueger 51947 51948 * Danny Sadinoff 51949 51950 * Marc Schifer 51951 51952 * Erik Schnetter 51953 51954 * Wayne K. Schroll 51955 51956 * David Schuler 51957 51958 * Vin Shelton 51959 51960 * Tim Souder 51961 51962 * Adam Sulmicki 51963 51964 * Bill Thorson 51965 51966 * George Talbot 51967 51968 * Pedro A. M. Vazquez 51969 51970 * Gregory Warnes 51971 51972 * Ian Watson 51973 51974 * David E. Young 51975 51976 * And many others 51977 51978 And finally we'd like to thank everyone who uses the compiler, provides 51979feedback and generally reminds us why we're doing this work in the first 51980place. 51981 51982 51983File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 51984 51985Option Index 51986************ 51987 51988GCC's command line options are indexed here without any initial '-' or 51989'--'. Where an option has both positive and negative forms (such as 51990'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 51991indexed under the most appropriate form; it may sometimes be useful to 51992look up both forms. 51993 51994[index] 51995* Menu: 51996 51997* ###: Overall Options. (line 209) 51998* (fvtv-debug): C++ Dialect Options. 51999 (line 362) 52000* -fno-keep-inline-dllexport: Optimize Options. (line 309) 52001* -mcpu: RX Options. (line 30) 52002* -mcpu=: MSP430 Options. (line 35) 52003* -mfix-cortex-a53-835769: AArch64 Options. (line 67) 52004* -mno-fix-cortex-a53-835769: AArch64 Options. (line 67) 52005* -mpointer-size=SIZE: VMS Options. (line 20) 52006* 8bit-idiv: i386 and x86-64 Options. 52007 (line 917) 52008* A: Preprocessor Options. 52009 (line 596) 52010* allowable_client: Darwin Options. (line 196) 52011* all_load: Darwin Options. (line 110) 52012* ansi: Standards. (line 16) 52013* ansi <1>: C Dialect Options. (line 11) 52014* ansi <2>: Preprocessor Options. 52015 (line 340) 52016* ansi <3>: Other Builtins. (line 21) 52017* ansi <4>: Non-bugs. (line 107) 52018* arch_errors_fatal: Darwin Options. (line 114) 52019* aux-info: C Dialect Options. (line 173) 52020* avx256-split-unaligned-load: i386 and x86-64 Options. 52021 (line 925) 52022* avx256-split-unaligned-store: i386 and x86-64 Options. 52023 (line 925) 52024* B: Directory Options. (line 44) 52025* Bdynamic: VxWorks Options. (line 22) 52026* bind_at_load: Darwin Options. (line 118) 52027* Bstatic: VxWorks Options. (line 22) 52028* bundle: Darwin Options. (line 123) 52029* bundle_loader: Darwin Options. (line 127) 52030* c: Overall Options. (line 164) 52031* C: Preprocessor Options. 52032 (line 653) 52033* c <1>: Link Options. (line 20) 52034* client_name: Darwin Options. (line 196) 52035* compatibility_version: Darwin Options. (line 196) 52036* coverage: Debugging Options. (line 496) 52037* current_version: Darwin Options. (line 196) 52038* d: Debugging Options. (line 628) 52039* D: Preprocessor Options. 52040 (line 46) 52041* da: Debugging Options. (line 831) 52042* dA: Debugging Options. (line 834) 52043* dD: Debugging Options. (line 838) 52044* dD <1>: Preprocessor Options. 52045 (line 627) 52046* dead_strip: Darwin Options. (line 196) 52047* dependency-file: Darwin Options. (line 196) 52048* dH: Debugging Options. (line 842) 52049* dI: Preprocessor Options. 52050 (line 636) 52051* dM: Preprocessor Options. 52052 (line 612) 52053* dN: Preprocessor Options. 52054 (line 633) 52055* dp: Debugging Options. (line 845) 52056* dP: Debugging Options. (line 850) 52057* dU: Preprocessor Options. 52058 (line 640) 52059* dumpmachine: Debugging Options. (line 1416) 52060* dumpspecs: Debugging Options. (line 1424) 52061* dumpversion: Debugging Options. (line 1420) 52062* dx: Debugging Options. (line 854) 52063* dylib_file: Darwin Options. (line 196) 52064* dylinker_install_name: Darwin Options. (line 196) 52065* dynamic: Darwin Options. (line 196) 52066* dynamiclib: Darwin Options. (line 131) 52067* E: Overall Options. (line 185) 52068* E <1>: Link Options. (line 20) 52069* EB: ARC Options. (line 345) 52070* EB <1>: MIPS Options. (line 7) 52071* EL: ARC Options. (line 354) 52072* EL <1>: MIPS Options. (line 10) 52073* exported_symbols_list: Darwin Options. (line 196) 52074* F: Darwin Options. (line 31) 52075* fabi-version: C++ Dialect Options. 52076 (line 19) 52077* fada-spec-parent: Overall Options. (line 367) 52078* faggressive-loop-optimizations: Optimize Options. (line 478) 52079* falign-functions: Optimize Options. (line 1472) 52080* falign-jumps: Optimize Options. (line 1521) 52081* falign-labels: Optimize Options. (line 1490) 52082* falign-loops: Optimize Options. (line 1508) 52083* fallow-parameterless-variadic-functions: C Dialect Options. 52084 (line 189) 52085* fassociative-math: Optimize Options. (line 2000) 52086* fasynchronous-unwind-tables: Code Gen Options. (line 146) 52087* fauto-inc-dec: Optimize Options. (line 502) 52088* fbounds-check: Code Gen Options. (line 15) 52089* fbranch-probabilities: Optimize Options. (line 2128) 52090* fbranch-target-load-optimize: Optimize Options. (line 2243) 52091* fbranch-target-load-optimize2: Optimize Options. (line 2249) 52092* fbtr-bb-exclusive: Optimize Options. (line 2253) 52093* fcall-saved: Code Gen Options. (line 356) 52094* fcall-used: Code Gen Options. (line 342) 52095* fcaller-saves: Optimize Options. (line 810) 52096* fcheck-data-deps: Optimize Options. (line 1089) 52097* fcheck-new: C++ Dialect Options. 52098 (line 54) 52099* fcilkplus: C Dialect Options. (line 276) 52100* fcombine-stack-adjustments: Optimize Options. (line 822) 52101* fcommon: Variable Attributes. 52102 (line 104) 52103* fcompare-debug: Debugging Options. (line 287) 52104* fcompare-debug-second: Debugging Options. (line 313) 52105* fcompare-elim: Optimize Options. (line 1836) 52106* fcond-mismatch: C Dialect Options. (line 339) 52107* fconserve-stack: Optimize Options. (line 828) 52108* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 52109 (line 30) 52110* fconstexpr-depth: C++ Dialect Options. 52111 (line 64) 52112* fcprop-registers: Optimize Options. (line 1854) 52113* fcrossjumping: Optimize Options. (line 495) 52114* fcse-follow-jumps: Optimize Options. (line 414) 52115* fcse-skip-blocks: Optimize Options. (line 423) 52116* fcx-fortran-rules: Optimize Options. (line 2115) 52117* fcx-limited-range: Optimize Options. (line 2103) 52118* fdata-sections: Optimize Options. (line 2224) 52119* fdbg-cnt: Debugging Options. (line 548) 52120* fdbg-cnt-list: Debugging Options. (line 545) 52121* fdce: Optimize Options. (line 508) 52122* fdebug-cpp: Preprocessor Options. 52123 (line 527) 52124* fdebug-prefix-map: Debugging Options. (line 407) 52125* fdebug-types-section: Debugging Options. (line 79) 52126* fdeclone-ctor-dtor: Optimize Options. (line 531) 52127* fdeduce-init-list: C++ Dialect Options. 52128 (line 70) 52129* fdelayed-branch: Optimize Options. (line 657) 52130* fdelete-dead-exceptions: Code Gen Options. (line 131) 52131* fdelete-null-pointer-checks: Optimize Options. (line 542) 52132* fdevirtualize: Optimize Options. (line 560) 52133* fdevirtualize-speculatively: Optimize Options. (line 567) 52134* fdiagnostics-color: Language Independent Options. 52135 (line 35) 52136* fdiagnostics-show-caret: Language Independent Options. 52137 (line 92) 52138* fdiagnostics-show-location: Language Independent Options. 52139 (line 20) 52140* fdiagnostics-show-option: Language Independent Options. 52141 (line 86) 52142* fdirectives-only: Preprocessor Options. 52143 (line 475) 52144* fdisable-: Debugging Options. (line 558) 52145* fdollars-in-identifiers: Preprocessor Options. 52146 (line 496) 52147* fdollars-in-identifiers <1>: Interoperation. (line 141) 52148* fdse: Optimize Options. (line 512) 52149* fdump-ada-spec: Overall Options. (line 362) 52150* fdump-class-hierarchy: Debugging Options. (line 885) 52151* fdump-final-insns: Debugging Options. (line 281) 52152* fdump-go-spec: Overall Options. (line 371) 52153* fdump-ipa: Debugging Options. (line 893) 52154* fdump-noaddr: Debugging Options. (line 858) 52155* fdump-passes: Debugging Options. (line 910) 52156* fdump-rtl-alignments: Debugging Options. (line 649) 52157* fdump-rtl-all: Debugging Options. (line 831) 52158* fdump-rtl-asmcons: Debugging Options. (line 652) 52159* fdump-rtl-auto_inc_dec: Debugging Options. (line 656) 52160* fdump-rtl-barriers: Debugging Options. (line 660) 52161* fdump-rtl-bbpart: Debugging Options. (line 663) 52162* fdump-rtl-bbro: Debugging Options. (line 666) 52163* fdump-rtl-btl2: Debugging Options. (line 670) 52164* fdump-rtl-btl2 <1>: Debugging Options. (line 670) 52165* fdump-rtl-bypass: Debugging Options. (line 674) 52166* fdump-rtl-ce1: Debugging Options. (line 685) 52167* fdump-rtl-ce2: Debugging Options. (line 685) 52168* fdump-rtl-ce3: Debugging Options. (line 685) 52169* fdump-rtl-combine: Debugging Options. (line 677) 52170* fdump-rtl-compgotos: Debugging Options. (line 680) 52171* fdump-rtl-cprop_hardreg: Debugging Options. (line 689) 52172* fdump-rtl-csa: Debugging Options. (line 692) 52173* fdump-rtl-cse1: Debugging Options. (line 696) 52174* fdump-rtl-cse2: Debugging Options. (line 696) 52175* fdump-rtl-dbr: Debugging Options. (line 703) 52176* fdump-rtl-dce: Debugging Options. (line 700) 52177* fdump-rtl-dce1: Debugging Options. (line 707) 52178* fdump-rtl-dce2: Debugging Options. (line 707) 52179* fdump-rtl-dfinish: Debugging Options. (line 827) 52180* fdump-rtl-dfinit: Debugging Options. (line 827) 52181* fdump-rtl-eh: Debugging Options. (line 711) 52182* fdump-rtl-eh_ranges: Debugging Options. (line 714) 52183* fdump-rtl-expand: Debugging Options. (line 717) 52184* fdump-rtl-fwprop1: Debugging Options. (line 721) 52185* fdump-rtl-fwprop2: Debugging Options. (line 721) 52186* fdump-rtl-gcse1: Debugging Options. (line 726) 52187* fdump-rtl-gcse2: Debugging Options. (line 726) 52188* fdump-rtl-init-regs: Debugging Options. (line 730) 52189* fdump-rtl-initvals: Debugging Options. (line 733) 52190* fdump-rtl-into_cfglayout: Debugging Options. (line 736) 52191* fdump-rtl-ira: Debugging Options. (line 739) 52192* fdump-rtl-jump: Debugging Options. (line 742) 52193* fdump-rtl-loop2: Debugging Options. (line 745) 52194* fdump-rtl-mach: Debugging Options. (line 749) 52195* fdump-rtl-mode_sw: Debugging Options. (line 753) 52196* fdump-rtl-outof_cfglayout: Debugging Options. (line 759) 52197* fdump-rtl-PASS: Debugging Options. (line 628) 52198* fdump-rtl-peephole2: Debugging Options. (line 762) 52199* fdump-rtl-postreload: Debugging Options. (line 765) 52200* fdump-rtl-pro_and_epilogue: Debugging Options. (line 768) 52201* fdump-rtl-ree: Debugging Options. (line 776) 52202* fdump-rtl-regclass: Debugging Options. (line 827) 52203* fdump-rtl-rnreg: Debugging Options. (line 756) 52204* fdump-rtl-sched1: Debugging Options. (line 772) 52205* fdump-rtl-sched2: Debugging Options. (line 772) 52206* fdump-rtl-seqabstr: Debugging Options. (line 779) 52207* fdump-rtl-shorten: Debugging Options. (line 782) 52208* fdump-rtl-sibling: Debugging Options. (line 785) 52209* fdump-rtl-sms: Debugging Options. (line 797) 52210* fdump-rtl-split1: Debugging Options. (line 792) 52211* fdump-rtl-split2: Debugging Options. (line 792) 52212* fdump-rtl-split3: Debugging Options. (line 792) 52213* fdump-rtl-split4: Debugging Options. (line 792) 52214* fdump-rtl-split5: Debugging Options. (line 792) 52215* fdump-rtl-stack: Debugging Options. (line 801) 52216* fdump-rtl-subreg1: Debugging Options. (line 807) 52217* fdump-rtl-subreg2: Debugging Options. (line 807) 52218* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 827) 52219* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 827) 52220* fdump-rtl-unshare: Debugging Options. (line 811) 52221* fdump-rtl-vartrack: Debugging Options. (line 814) 52222* fdump-rtl-vregs: Debugging Options. (line 817) 52223* fdump-rtl-web: Debugging Options. (line 820) 52224* fdump-statistics: Debugging Options. (line 914) 52225* fdump-translation-unit: Debugging Options. (line 876) 52226* fdump-tree: Debugging Options. (line 926) 52227* fdump-tree-alias: Debugging Options. (line 1048) 52228* fdump-tree-all: Debugging Options. (line 1132) 52229* fdump-tree-ccp: Debugging Options. (line 1052) 52230* fdump-tree-cfg: Debugging Options. (line 1036) 52231* fdump-tree-ch: Debugging Options. (line 1040) 52232* fdump-tree-copyprop: Debugging Options. (line 1068) 52233* fdump-tree-copyrename: Debugging Options. (line 1108) 52234* fdump-tree-dce: Debugging Options. (line 1076) 52235* fdump-tree-dom: Debugging Options. (line 1089) 52236* fdump-tree-dse: Debugging Options. (line 1094) 52237* fdump-tree-forwprop: Debugging Options. (line 1103) 52238* fdump-tree-fre: Debugging Options. (line 1064) 52239* fdump-tree-gimple: Debugging Options. (line 1031) 52240* fdump-tree-nrv: Debugging Options. (line 1113) 52241* fdump-tree-optimized: Debugging Options. (line 1028) 52242* fdump-tree-original: Debugging Options. (line 1025) 52243* fdump-tree-phiopt: Debugging Options. (line 1098) 52244* fdump-tree-pre: Debugging Options. (line 1060) 52245* fdump-tree-sink: Debugging Options. (line 1085) 52246* fdump-tree-slp: Debugging Options. (line 1123) 52247* fdump-tree-sra: Debugging Options. (line 1080) 52248* fdump-tree-ssa: Debugging Options. (line 1044) 52249* fdump-tree-storeccp: Debugging Options. (line 1056) 52250* fdump-tree-store_copyprop: Debugging Options. (line 1072) 52251* fdump-tree-vect: Debugging Options. (line 1118) 52252* fdump-tree-vrp: Debugging Options. (line 1128) 52253* fdump-unnumbered: Debugging Options. (line 864) 52254* fdump-unnumbered-links: Debugging Options. (line 870) 52255* fdwarf2-cfi-asm: Debugging Options. (line 411) 52256* fearly-inlining: Optimize Options. (line 268) 52257* feliminate-dwarf2-dups: Debugging Options. (line 326) 52258* feliminate-unused-debug-symbols: Debugging Options. (line 67) 52259* feliminate-unused-debug-types: Debugging Options. (line 1428) 52260* femit-struct-debug-baseonly: Debugging Options. (line 331) 52261* femit-struct-debug-reduced: Debugging Options. (line 344) 52262* fenable-: Debugging Options. (line 558) 52263* fexceptions: Code Gen Options. (line 109) 52264* fexcess-precision: Optimize Options. (line 1927) 52265* fexec-charset: Preprocessor Options. 52266 (line 554) 52267* fexpensive-optimizations: Optimize Options. (line 576) 52268* fext-numeric-literals: C++ Dialect Options. 52269 (line 587) 52270* fextended-identifiers: Preprocessor Options. 52271 (line 499) 52272* fextern-tls-init: C++ Dialect Options. 52273 (line 120) 52274* ffast-math: Optimize Options. (line 1950) 52275* ffat-lto-objects: Optimize Options. (line 1818) 52276* ffinite-math-only: Optimize Options. (line 2027) 52277* ffix-and-continue: Darwin Options. (line 104) 52278* ffixed: Code Gen Options. (line 330) 52279* ffloat-store: Optimize Options. (line 1913) 52280* ffloat-store <1>: Disappointments. (line 77) 52281* ffor-scope: C++ Dialect Options. 52282 (line 141) 52283* fforward-propagate: Optimize Options. (line 178) 52284* ffp-contract: Optimize Options. (line 187) 52285* ffreestanding: Standards. (line 92) 52286* ffreestanding <1>: C Dialect Options. (line 252) 52287* ffreestanding <2>: Warning Options. (line 254) 52288* ffreestanding <3>: Function Attributes. 52289 (line 493) 52290* ffriend-injection: C++ Dialect Options. 52291 (line 91) 52292* ffunction-sections: Optimize Options. (line 2224) 52293* fgcse: Optimize Options. (line 437) 52294* fgcse-after-reload: Optimize Options. (line 473) 52295* fgcse-las: Optimize Options. (line 466) 52296* fgcse-lm: Optimize Options. (line 448) 52297* fgcse-sm: Optimize Options. (line 457) 52298* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 52299 (line 39) 52300* fgnu-tm: C Dialect Options. (line 286) 52301* fgnu89-inline: C Dialect Options. (line 152) 52302* fgraphite-identity: Optimize Options. (line 1069) 52303* fhosted: C Dialect Options. (line 244) 52304* fif-conversion: Optimize Options. (line 516) 52305* fif-conversion2: Optimize Options. (line 525) 52306* filelist: Darwin Options. (line 196) 52307* findirect-data: Darwin Options. (line 104) 52308* findirect-inlining: Optimize Options. (line 241) 52309* finhibit-size-directive: Code Gen Options. (line 251) 52310* finline-functions: Optimize Options. (line 249) 52311* finline-functions-called-once: Optimize Options. (line 260) 52312* finline-limit: Optimize Options. (line 284) 52313* finline-small-functions: Optimize Options. (line 232) 52314* finput-charset: Preprocessor Options. 52315 (line 567) 52316* finstrument-functions: Code Gen Options. (line 386) 52317* finstrument-functions <1>: Function Attributes. 52318 (line 1085) 52319* finstrument-functions-exclude-file-list: Code Gen Options. (line 421) 52320* finstrument-functions-exclude-function-list: Code Gen Options. 52321 (line 442) 52322* fipa-cp: Optimize Options. (line 894) 52323* fipa-cp-clone: Optimize Options. (line 902) 52324* fipa-profile: Optimize Options. (line 886) 52325* fipa-pta: Optimize Options. (line 880) 52326* fipa-pure-const: Optimize Options. (line 872) 52327* fipa-reference: Optimize Options. (line 876) 52328* fipa-sra: Optimize Options. (line 277) 52329* fira-hoist-pressure: Optimize Options. (line 624) 52330* fira-loop-pressure: Optimize Options. (line 631) 52331* fira-verbose: Optimize Options. (line 651) 52332* fivopts: Optimize Options. (line 1165) 52333* fkeep-inline-functions: Optimize Options. (line 315) 52334* fkeep-inline-functions <1>: Inline. (line 51) 52335* fkeep-static-consts: Optimize Options. (line 322) 52336* flat_namespace: Darwin Options. (line 196) 52337* flax-vector-conversions: C Dialect Options. (line 344) 52338* fleading-underscore: Code Gen Options. (line 524) 52339* flive-range-shrinkage: Optimize Options. (line 590) 52340* floop-block: Optimize Options. (line 1040) 52341* floop-interchange: Optimize Options. (line 995) 52342* floop-nest-optimize: Optimize Options. (line 1077) 52343* floop-parallelize-all: Optimize Options. (line 1083) 52344* floop-strip-mine: Optimize Options. (line 1019) 52345* flto: Optimize Options. (line 1575) 52346* flto-partition: Optimize Options. (line 1769) 52347* fmax-errors: Warning Options. (line 18) 52348* fmem-report: Debugging Options. (line 435) 52349* fmem-report-wpa: Debugging Options. (line 439) 52350* fmerge-all-constants: Optimize Options. (line 341) 52351* fmerge-constants: Optimize Options. (line 331) 52352* fmerge-debug-strings: Debugging Options. (line 400) 52353* fmessage-length: Language Independent Options. 52354 (line 14) 52355* fmodulo-sched: Optimize Options. (line 352) 52356* fmodulo-sched-allow-regmoves: Optimize Options. (line 357) 52357* fmove-loop-invariants: Optimize Options. (line 2214) 52358* fms-extensions: C Dialect Options. (line 301) 52359* fms-extensions <1>: C++ Dialect Options. 52360 (line 175) 52361* fms-extensions <2>: Unnamed Fields. (line 36) 52362* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 52363 (line 43) 52364* fno-access-control: C++ Dialect Options. 52365 (line 50) 52366* fno-asm: C Dialect Options. (line 196) 52367* fno-branch-count-reg: Optimize Options. (line 364) 52368* fno-builtin: C Dialect Options. (line 210) 52369* fno-builtin <1>: Warning Options. (line 254) 52370* fno-builtin <2>: Function Attributes. 52371 (line 493) 52372* fno-builtin <3>: Other Builtins. (line 14) 52373* fno-canonical-system-headers: Preprocessor Options. 52374 (line 504) 52375* fno-common: Code Gen Options. (line 229) 52376* fno-common <1>: Variable Attributes. 52377 (line 104) 52378* fno-compare-debug: Debugging Options. (line 287) 52379* fno-debug-types-section: Debugging Options. (line 79) 52380* fno-default-inline: Inline. (line 71) 52381* fno-defer-pop: Optimize Options. (line 170) 52382* fno-diagnostics-show-caret: Language Independent Options. 52383 (line 92) 52384* fno-diagnostics-show-option: Language Independent Options. 52385 (line 86) 52386* fno-dwarf2-cfi-asm: Debugging Options. (line 411) 52387* fno-elide-constructors: C++ Dialect Options. 52388 (line 104) 52389* fno-eliminate-unused-debug-types: Debugging Options. (line 1428) 52390* fno-enforce-eh-specs: C++ Dialect Options. 52391 (line 110) 52392* fno-ext-numeric-literals: C++ Dialect Options. 52393 (line 587) 52394* fno-extern-tls-init: C++ Dialect Options. 52395 (line 120) 52396* fno-for-scope: C++ Dialect Options. 52397 (line 141) 52398* fno-function-cse: Optimize Options. (line 374) 52399* fno-gnu-keywords: C++ Dialect Options. 52400 (line 153) 52401* fno-gnu-unique: Code Gen Options. (line 152) 52402* fno-guess-branch-probability: Optimize Options. (line 1342) 52403* fno-ident: Code Gen Options. (line 248) 52404* fno-implement-inlines: C++ Dialect Options. 52405 (line 170) 52406* fno-implement-inlines <1>: C++ Interface. (line 75) 52407* fno-implicit-inline-templates: C++ Dialect Options. 52408 (line 164) 52409* fno-implicit-templates: C++ Dialect Options. 52410 (line 158) 52411* fno-implicit-templates <1>: Template Instantiation. 52412 (line 78) 52413* fno-inline: Optimize Options. (line 224) 52414* fno-ira-share-save-slots: Optimize Options. (line 639) 52415* fno-ira-share-spill-slots: Optimize Options. (line 645) 52416* fno-jump-tables: Code Gen Options. (line 322) 52417* fno-math-errno: Optimize Options. (line 1964) 52418* fno-merge-debug-strings: Debugging Options. (line 400) 52419* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 52420 (line 49) 52421* fno-nonansi-builtins: C++ Dialect Options. 52422 (line 180) 52423* fno-operator-names: C++ Dialect Options. 52424 (line 196) 52425* fno-optional-diags: C++ Dialect Options. 52426 (line 200) 52427* fno-peephole: Optimize Options. (line 1333) 52428* fno-peephole2: Optimize Options. (line 1333) 52429* fno-pretty-templates: C++ Dialect Options. 52430 (line 210) 52431* fno-rtti: C++ Dialect Options. 52432 (line 227) 52433* fno-sched-interblock: Optimize Options. (line 683) 52434* fno-sched-spec: Optimize Options. (line 688) 52435* fno-set-stack-executable: i386 and x86-64 Windows Options. 52436 (line 46) 52437* fno-show-column: Preprocessor Options. 52438 (line 591) 52439* fno-signed-bitfields: C Dialect Options. (line 377) 52440* fno-signed-zeros: Optimize Options. (line 2039) 52441* fno-stack-limit: Code Gen Options. (line 492) 52442* fno-threadsafe-statics: C++ Dialect Options. 52443 (line 264) 52444* fno-toplevel-reorder: Optimize Options. (line 1541) 52445* fno-trapping-math: Optimize Options. (line 2049) 52446* fno-unsigned-bitfields: C Dialect Options. (line 377) 52447* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 52448 (line 277) 52449* fno-var-tracking-assignments: Debugging Options. (line 1336) 52450* fno-var-tracking-assignments-toggle: Debugging Options. (line 1345) 52451* fno-weak: C++ Dialect Options. 52452 (line 389) 52453* fno-working-directory: Preprocessor Options. 52454 (line 577) 52455* fno-writable-relocated-rdata: i386 and x86-64 Windows Options. 52456 (line 53) 52457* fno-zero-initialized-in-bss: Optimize Options. (line 385) 52458* fnon-call-exceptions: Code Gen Options. (line 123) 52459* fnothrow-opt: C++ Dialect Options. 52460 (line 185) 52461* fobjc-abi-version: Objective-C and Objective-C++ Dialect Options. 52462 (line 56) 52463* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 52464 (line 67) 52465* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 52466 (line 92) 52467* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 52468 (line 96) 52469* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 52470 (line 105) 52471* fobjc-nilcheck: Objective-C and Objective-C++ Dialect Options. 52472 (line 111) 52473* fobjc-std: Objective-C and Objective-C++ Dialect Options. 52474 (line 120) 52475* fomit-frame-pointer: Optimize Options. (line 198) 52476* fopenmp: C Dialect Options. (line 263) 52477* fopenmp-simd: C Dialect Options. (line 272) 52478* fopt-info: Debugging Options. (line 1138) 52479* foptimize-sibling-calls: Optimize Options. (line 219) 52480* force_cpusubtype_ALL: Darwin Options. (line 135) 52481* force_flat_namespace: Darwin Options. (line 196) 52482* fpack-struct: Code Gen Options. (line 373) 52483* fpartial-inlining: Optimize Options. (line 1308) 52484* fpcc-struct-return: Code Gen Options. (line 165) 52485* fpcc-struct-return <1>: Incompatibilities. (line 170) 52486* fpch-deps: Preprocessor Options. 52487 (line 296) 52488* fpch-preprocess: Preprocessor Options. 52489 (line 304) 52490* fpeel-loops: Optimize Options. (line 2206) 52491* fpermissive: C++ Dialect Options. 52492 (line 205) 52493* fpic: Code Gen Options. (line 279) 52494* fPIC: Code Gen Options. (line 300) 52495* fpie: Code Gen Options. (line 313) 52496* fPIE: Code Gen Options. (line 313) 52497* fplan9-extensions: Unnamed Fields. (line 43) 52498* fplugin: Overall Options. (line 351) 52499* fplugin-arg: Overall Options. (line 358) 52500* fpost-ipa-mem-report: Debugging Options. (line 444) 52501* fpre-ipa-mem-report: Debugging Options. (line 443) 52502* fpredictive-commoning: Optimize Options. (line 1315) 52503* fprefetch-loop-arrays: Optimize Options. (line 1322) 52504* fpreprocessed: Preprocessor Options. 52505 (line 508) 52506* fprofile-arcs: Debugging Options. (line 481) 52507* fprofile-arcs <1>: Other Builtins. (line 253) 52508* fprofile-correction: Optimize Options. (line 1861) 52509* fprofile-dir: Optimize Options. (line 1868) 52510* fprofile-generate: Optimize Options. (line 1879) 52511* fprofile-reorder-functions: Optimize Options. (line 2156) 52512* fprofile-report: Debugging Options. (line 448) 52513* fprofile-use: Optimize Options. (line 1893) 52514* fprofile-values: Optimize Options. (line 2147) 52515* fpu: RX Options. (line 17) 52516* frandom-seed: Debugging Options. (line 1230) 52517* freciprocal-math: Optimize Options. (line 2017) 52518* frecord-gcc-switches: Code Gen Options. (line 267) 52519* free: Optimize Options. (line 582) 52520* freg-struct-return: Code Gen Options. (line 183) 52521* frename-registers: Optimize Options. (line 2173) 52522* freorder-blocks: Optimize Options. (line 1359) 52523* freorder-blocks-and-partition: Optimize Options. (line 1365) 52524* freorder-functions: Optimize Options. (line 1378) 52525* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 52526 (line 131) 52527* frepo: C++ Dialect Options. 52528 (line 222) 52529* frepo <1>: Template Instantiation. 52530 (line 54) 52531* frerun-cse-after-loop: Optimize Options. (line 431) 52532* freschedule-modulo-scheduled-loops: Optimize Options. (line 782) 52533* frounding-math: Optimize Options. (line 2064) 52534* fsanitize=address: Debugging Options. (line 187) 52535* fsanitize=integer-divide-by-zero: Debugging Options. (line 233) 52536* fsanitize=kernel-address: Debugging Options. (line 197) 52537* fsanitize=leak: Debugging Options. (line 211) 52538* fsanitize=null: Debugging Options. (line 252) 52539* fsanitize=return: Debugging Options. (line 260) 52540* fsanitize=shift: Debugging Options. (line 226) 52541* fsanitize=signed-integer-overflow: Debugging Options. (line 267) 52542* fsanitize=thread: Debugging Options. (line 202) 52543* fsanitize=undefined: Debugging Options. (line 221) 52544* fsanitize=unreachable: Debugging Options. (line 238) 52545* fsanitize=vla-bound: Debugging Options. (line 245) 52546* fsched-critical-path-heuristic: Optimize Options. (line 748) 52547* fsched-dep-count-heuristic: Optimize Options. (line 775) 52548* fsched-group-heuristic: Optimize Options. (line 742) 52549* fsched-last-insn-heuristic: Optimize Options. (line 768) 52550* fsched-pressure: Optimize Options. (line 693) 52551* fsched-rank-heuristic: Optimize Options. (line 761) 52552* fsched-spec-insn-heuristic: Optimize Options. (line 754) 52553* fsched-spec-load: Optimize Options. (line 702) 52554* fsched-spec-load-dangerous: Optimize Options. (line 707) 52555* fsched-stalled-insns: Optimize Options. (line 713) 52556* fsched-stalled-insns-dep: Optimize Options. (line 723) 52557* fsched-verbose: Debugging Options. (line 1240) 52558* fsched2-use-superblocks: Optimize Options. (line 732) 52559* fschedule-insns: Optimize Options. (line 664) 52560* fschedule-insns2: Optimize Options. (line 674) 52561* fsection-anchors: Optimize Options. (line 2274) 52562* fsel-sched-pipelining: Optimize Options. (line 795) 52563* fsel-sched-pipelining-outer-loops: Optimize Options. (line 800) 52564* fselective-scheduling: Optimize Options. (line 787) 52565* fselective-scheduling2: Optimize Options. (line 791) 52566* fshort-double: Code Gen Options. (line 211) 52567* fshort-enums: Code Gen Options. (line 201) 52568* fshort-enums <1>: Structures unions enumerations and bit-fields implementation. 52569 (line 48) 52570* fshort-enums <2>: Type Attributes. (line 113) 52571* fshort-enums <3>: Non-bugs. (line 42) 52572* fshort-wchar: Code Gen Options. (line 219) 52573* fshrink-wrap: Optimize Options. (line 805) 52574* fsignaling-nans: Optimize Options. (line 2084) 52575* fsigned-bitfields: C Dialect Options. (line 377) 52576* fsigned-bitfields <1>: Non-bugs. (line 57) 52577* fsigned-char: C Dialect Options. (line 367) 52578* fsigned-char <1>: Characters implementation. 52579 (line 31) 52580* fsimd-cost-model: Optimize Options. (line 1256) 52581* fsingle-precision-constant: Optimize Options. (line 2099) 52582* fsplit-ivs-in-unroller: Optimize Options. (line 1289) 52583* fsplit-stack: Code Gen Options. (line 506) 52584* fsplit-stack <1>: Function Attributes. 52585 (line 1090) 52586* fsplit-wide-types: Optimize Options. (line 406) 52587* fstack-check: Code Gen Options. (line 454) 52588* fstack-limit-register: Code Gen Options. (line 492) 52589* fstack-limit-symbol: Code Gen Options. (line 492) 52590* fstack-protector: Optimize Options. (line 2257) 52591* fstack-protector-all: Optimize Options. (line 2266) 52592* fstack-protector-strong: Optimize Options. (line 2269) 52593* fstack-usage: Debugging Options. (line 452) 52594* fstack_reuse: Code Gen Options. (line 21) 52595* fstats: C++ Dialect Options. 52596 (line 237) 52597* fstrict-aliasing: Optimize Options. (line 1391) 52598* fstrict-enums: C++ Dialect Options. 52599 (line 242) 52600* fstrict-overflow: Optimize Options. (line 1437) 52601* fstrict-volatile-bitfields: Code Gen Options. (line 612) 52602* fsync-libcalls: Code Gen Options. (line 644) 52603* fsyntax-only: Warning Options. (line 14) 52604* ftabstop: Preprocessor Options. 52605 (line 521) 52606* ftemplate-backtrace-limit: C++ Dialect Options. 52607 (line 251) 52608* ftemplate-depth: C++ Dialect Options. 52609 (line 255) 52610* ftest-coverage: Debugging Options. (line 536) 52611* fthread-jumps: Optimize Options. (line 397) 52612* ftime-report: Debugging Options. (line 431) 52613* ftls-model: Code Gen Options. (line 535) 52614* ftracer: Optimize Options. (line 1272) 52615* ftracer <1>: Optimize Options. (line 2183) 52616* ftrack-macro-expansion: Preprocessor Options. 52617 (line 536) 52618* ftrapv: Code Gen Options. (line 97) 52619* ftree-bit-ccp: Optimize Options. (line 930) 52620* ftree-builtin-call-dce: Optimize Options. (line 958) 52621* ftree-ccp: Optimize Options. (line 936) 52622* ftree-ch: Optimize Options. (line 978) 52623* ftree-coalesce-inlined-vars: Optimize Options. (line 1196) 52624* ftree-coalesce-vars: Optimize Options. (line 1206) 52625* ftree-copy-prop: Optimize Options. (line 867) 52626* ftree-copyrename: Optimize Options. (line 1189) 52627* ftree-dce: Optimize Options. (line 954) 52628* ftree-dominator-opts: Optimize Options. (line 964) 52629* ftree-dse: Optimize Options. (line 971) 52630* ftree-forwprop: Optimize Options. (line 846) 52631* ftree-fre: Optimize Options. (line 850) 52632* ftree-loop-im: Optimize Options. (line 1150) 52633* ftree-loop-ivcanon: Optimize Options. (line 1159) 52634* ftree-loop-linear: Optimize Options. (line 989) 52635* ftree-loop-optimize: Optimize Options. (line 985) 52636* ftree-loop-vectorize: Optimize Options. (line 1234) 52637* ftree-parallelize-loops: Optimize Options. (line 1170) 52638* ftree-partial-pre: Optimize Options. (line 842) 52639* ftree-phiprop: Optimize Options. (line 857) 52640* ftree-pre: Optimize Options. (line 838) 52641* ftree-pta: Optimize Options. (line 1179) 52642* ftree-reassoc: Optimize Options. (line 834) 52643* ftree-sink: Optimize Options. (line 926) 52644* ftree-slp-vectorize: Optimize Options. (line 1238) 52645* ftree-slsr: Optimize Options. (line 1223) 52646* ftree-sra: Optimize Options. (line 1183) 52647* ftree-ter: Optimize Options. (line 1215) 52648* ftree-vectorize: Optimize Options. (line 1229) 52649* ftree-vrp: Optimize Options. (line 1263) 52650* funit-at-a-time: Optimize Options. (line 1534) 52651* funroll-all-loops: Optimize Options. (line 1283) 52652* funroll-all-loops <1>: Optimize Options. (line 2200) 52653* funroll-loops: Optimize Options. (line 1277) 52654* funroll-loops <1>: Optimize Options. (line 2190) 52655* funsafe-loop-optimizations: Optimize Options. (line 487) 52656* funsafe-math-optimizations: Optimize Options. (line 1982) 52657* funsigned-bitfields: C Dialect Options. (line 377) 52658* funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. 52659 (line 17) 52660* funsigned-bitfields <2>: Non-bugs. (line 57) 52661* funsigned-char: C Dialect Options. (line 349) 52662* funsigned-char <1>: Characters implementation. 52663 (line 31) 52664* funswitch-loops: Optimize Options. (line 2218) 52665* funwind-tables: Code Gen Options. (line 139) 52666* fuse-cxa-atexit: C++ Dialect Options. 52667 (line 270) 52668* fuse-ld=bfd: Optimize Options. (line 1848) 52669* fuse-ld=gold: Optimize Options. (line 1851) 52670* fvar-tracking: Debugging Options. (line 1326) 52671* fvar-tracking-assignments: Debugging Options. (line 1336) 52672* fvar-tracking-assignments-toggle: Debugging Options. (line 1345) 52673* fvariable-expansion-in-unroller: Optimize Options. (line 1303) 52674* fvect-cost-model: Optimize Options. (line 1242) 52675* fverbose-asm: Code Gen Options. (line 258) 52676* fvisibility: Code Gen Options. (line 546) 52677* fvisibility-inlines-hidden: C++ Dialect Options. 52678 (line 282) 52679* fvisibility-ms-compat: C++ Dialect Options. 52680 (line 310) 52681* fvpt: Optimize Options. (line 2163) 52682* fvtable-verify: C++ Dialect Options. 52683 (line 339) 52684* fvtv-counts: C++ Dialect Options. 52685 (line 374) 52686* fweb: Optimize Options. (line 1553) 52687* fwhole-program: Optimize Options. (line 1564) 52688* fwide-exec-charset: Preprocessor Options. 52689 (line 559) 52690* fworking-directory: Preprocessor Options. 52691 (line 577) 52692* fwrapv: Code Gen Options. (line 101) 52693* fzero-link: Objective-C and Objective-C++ Dialect Options. 52694 (line 141) 52695* g: Debugging Options. (line 10) 52696* G: M32R/D Options. (line 57) 52697* G <1>: MIPS Options. (line 393) 52698* G <2>: Nios II Options. (line 9) 52699* G <3>: RS/6000 and PowerPC Options. 52700 (line 739) 52701* G <4>: System V Options. (line 10) 52702* gcoff: Debugging Options. (line 94) 52703* gdwarf-VERSION: Debugging Options. (line 112) 52704* gen-decls: Objective-C and Objective-C++ Dialect Options. 52705 (line 153) 52706* gfull: Darwin Options. (line 69) 52707* ggdb: Debugging Options. (line 45) 52708* ggnu-pubnames: Debugging Options. (line 54) 52709* gno-record-gcc-switches: Debugging Options. (line 132) 52710* gno-strict-dwarf: Debugging Options. (line 142) 52711* gpubnames: Debugging Options. (line 51) 52712* grecord-gcc-switches: Debugging Options. (line 123) 52713* gsplit-dwarf: Debugging Options. (line 38) 52714* gstabs: Debugging Options. (line 59) 52715* gstabs+: Debugging Options. (line 88) 52716* gstrict-dwarf: Debugging Options. (line 136) 52717* gtoggle: Debugging Options. (line 179) 52718* gused: Darwin Options. (line 64) 52719* gvms: Debugging Options. (line 146) 52720* gxcoff: Debugging Options. (line 99) 52721* gxcoff+: Debugging Options. (line 104) 52722* H: Preprocessor Options. 52723 (line 707) 52724* headerpad_max_install_names: Darwin Options. (line 196) 52725* help: Overall Options. (line 221) 52726* help <1>: Preprocessor Options. 52727 (line 699) 52728* hoist-adjacent-loads: Optimize Options. (line 861) 52729* I: Preprocessor Options. 52730 (line 77) 52731* I <1>: Directory Options. (line 10) 52732* I-: Preprocessor Options. 52733 (line 389) 52734* I- <1>: Directory Options. (line 116) 52735* idirafter: Preprocessor Options. 52736 (line 431) 52737* iframework: Darwin Options. (line 57) 52738* imacros: Preprocessor Options. 52739 (line 422) 52740* image_base: Darwin Options. (line 196) 52741* imultilib: Preprocessor Options. 52742 (line 456) 52743* include: Preprocessor Options. 52744 (line 411) 52745* init: Darwin Options. (line 196) 52746* install_name: Darwin Options. (line 196) 52747* iplugindir=: Directory Options. (line 29) 52748* iprefix: Preprocessor Options. 52749 (line 438) 52750* iquote: Preprocessor Options. 52751 (line 468) 52752* iquote <1>: Directory Options. (line 34) 52753* isysroot: Preprocessor Options. 52754 (line 450) 52755* isystem: Preprocessor Options. 52756 (line 460) 52757* iwithprefix: Preprocessor Options. 52758 (line 444) 52759* iwithprefixbefore: Preprocessor Options. 52760 (line 444) 52761* keep_private_externs: Darwin Options. (line 196) 52762* l: Link Options. (line 26) 52763* L: Directory Options. (line 40) 52764* lobjc: Link Options. (line 53) 52765* M: Preprocessor Options. 52766 (line 185) 52767* m: RS/6000 and PowerPC Options. 52768 (line 581) 52769* m1: SH Options. (line 9) 52770* m10: PDP-11 Options. (line 29) 52771* m128bit-long-double: i386 and x86-64 Options. 52772 (line 381) 52773* m16: i386 and x86-64 Options. 52774 (line 940) 52775* m16-bit: CRIS Options. (line 64) 52776* m16-bit <1>: NDS32 Options. (line 39) 52777* m1reg-: Adapteva Epiphany Options. 52778 (line 131) 52779* m2: SH Options. (line 12) 52780* m210: MCore Options. (line 43) 52781* m2a: SH Options. (line 30) 52782* m2a-nofpu: SH Options. (line 18) 52783* m2a-single: SH Options. (line 26) 52784* m2a-single-only: SH Options. (line 22) 52785* m3: SH Options. (line 34) 52786* m31: S/390 and zSeries Options. 52787 (line 86) 52788* m32: i386 and x86-64 Options. 52789 (line 940) 52790* m32 <1>: RS/6000 and PowerPC Options. 52791 (line 274) 52792* m32 <2>: SPARC Options. (line 256) 52793* m32 <3>: TILE-Gx Options. (line 23) 52794* m32 <4>: TILEPro Options. (line 13) 52795* m32-bit: CRIS Options. (line 64) 52796* m32bit-doubles: RX Options. (line 10) 52797* m32r: M32R/D Options. (line 15) 52798* m32r2: M32R/D Options. (line 9) 52799* m32rx: M32R/D Options. (line 12) 52800* m340: MCore Options. (line 43) 52801* m3dnow: i386 and x86-64 Options. 52802 (line 629) 52803* m3e: SH Options. (line 37) 52804* m4: SH Options. (line 51) 52805* m4-100: SH Options. (line 54) 52806* m4-100-nofpu: SH Options. (line 57) 52807* m4-100-single: SH Options. (line 61) 52808* m4-100-single-only: SH Options. (line 65) 52809* m4-200: SH Options. (line 69) 52810* m4-200-nofpu: SH Options. (line 72) 52811* m4-200-single: SH Options. (line 76) 52812* m4-200-single-only: SH Options. (line 80) 52813* m4-300: SH Options. (line 84) 52814* m4-300-nofpu: SH Options. (line 87) 52815* m4-300-single: SH Options. (line 91) 52816* m4-300-single-only: SH Options. (line 95) 52817* m4-340: SH Options. (line 99) 52818* m4-500: SH Options. (line 102) 52819* m4-nofpu: SH Options. (line 40) 52820* m4-single: SH Options. (line 47) 52821* m4-single-only: SH Options. (line 43) 52822* m40: PDP-11 Options. (line 23) 52823* m45: PDP-11 Options. (line 26) 52824* m4a: SH Options. (line 118) 52825* m4a-nofpu: SH Options. (line 106) 52826* m4a-single: SH Options. (line 114) 52827* m4a-single-only: SH Options. (line 110) 52828* m4al: SH Options. (line 121) 52829* m4byte-functions: MCore Options. (line 27) 52830* m5-32media: SH Options. (line 126) 52831* m5-32media-nofpu: SH Options. (line 129) 52832* m5-64media: SH Options. (line 133) 52833* m5-64media-nofpu: SH Options. (line 136) 52834* m5-compact: SH Options. (line 140) 52835* m5-compact-nofpu: SH Options. (line 143) 52836* m5200: M680x0 Options. (line 144) 52837* m5206e: M680x0 Options. (line 153) 52838* m528x: M680x0 Options. (line 157) 52839* m5307: M680x0 Options. (line 161) 52840* m5407: M680x0 Options. (line 165) 52841* m64: i386 and x86-64 Options. 52842 (line 940) 52843* m64 <1>: RS/6000 and PowerPC Options. 52844 (line 274) 52845* m64 <2>: S/390 and zSeries Options. 52846 (line 86) 52847* m64 <3>: SPARC Options. (line 256) 52848* m64 <4>: TILE-Gx Options. (line 23) 52849* m64bit-doubles: RX Options. (line 10) 52850* m68000: M680x0 Options. (line 93) 52851* m68010: M680x0 Options. (line 101) 52852* m68020: M680x0 Options. (line 107) 52853* m68020-40: M680x0 Options. (line 175) 52854* m68020-60: M680x0 Options. (line 184) 52855* m68030: M680x0 Options. (line 112) 52856* m68040: M680x0 Options. (line 117) 52857* m68060: M680x0 Options. (line 126) 52858* m68881: M680x0 Options. (line 194) 52859* m8-bit: CRIS Options. (line 64) 52860* m8byte-align: V850 Options. (line 170) 52861* m96bit-long-double: i386 and x86-64 Options. 52862 (line 381) 52863* mA6: ARC Options. (line 19) 52864* mA7: ARC Options. (line 26) 52865* mabi: AArch64 Options. (line 9) 52866* mabi <1>: ARM Options. (line 10) 52867* mabi <2>: i386 and x86-64 Options. 52868 (line 799) 52869* mabi <3>: RS/6000 and PowerPC Options. 52870 (line 608) 52871* mabi=32: MIPS Options. (line 138) 52872* mabi=64: MIPS Options. (line 138) 52873* mabi=eabi: MIPS Options. (line 138) 52874* mabi=elfv1: RS/6000 and PowerPC Options. 52875 (line 629) 52876* mabi=elfv2: RS/6000 and PowerPC Options. 52877 (line 635) 52878* mabi=gnu: MMIX Options. (line 20) 52879* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 52880 (line 621) 52881* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 52882 (line 625) 52883* mabi=mmixware: MMIX Options. (line 20) 52884* mabi=n32: MIPS Options. (line 138) 52885* mabi=no-spe: RS/6000 and PowerPC Options. 52886 (line 618) 52887* mabi=o64: MIPS Options. (line 138) 52888* mabi=spe: RS/6000 and PowerPC Options. 52889 (line 613) 52890* mabicalls: MIPS Options. (line 162) 52891* mabort-on-noreturn: ARM Options. (line 196) 52892* mabs=2008: MIPS Options. (line 260) 52893* mabs=legacy: MIPS Options. (line 260) 52894* mabsdiff: MeP Options. (line 7) 52895* mabshi: PDP-11 Options. (line 55) 52896* mac0: PDP-11 Options. (line 16) 52897* macc-4: FRV Options. (line 139) 52898* macc-8: FRV Options. (line 143) 52899* maccumulate-args: AVR Options. (line 137) 52900* maccumulate-outgoing-args: i386 and x86-64 Options. 52901 (line 822) 52902* maccumulate-outgoing-args <1>: SH Options. (line 395) 52903* maddress-mode=long: i386 and x86-64 Options. 52904 (line 987) 52905* maddress-mode=short: i386 and x86-64 Options. 52906 (line 992) 52907* maddress-space-conversion: SPU Options. (line 68) 52908* mads: RS/6000 and PowerPC Options. 52909 (line 663) 52910* maix-struct-return: RS/6000 and PowerPC Options. 52911 (line 601) 52912* maix32: RS/6000 and PowerPC Options. 52913 (line 312) 52914* maix64: RS/6000 and PowerPC Options. 52915 (line 312) 52916* malign-300: H8/300 Options. (line 41) 52917* malign-call: ARC Options. (line 192) 52918* malign-double: i386 and x86-64 Options. 52919 (line 366) 52920* malign-int: M680x0 Options. (line 263) 52921* malign-labels: FRV Options. (line 128) 52922* malign-loops: M32R/D Options. (line 73) 52923* malign-natural: RS/6000 and PowerPC Options. 52924 (line 350) 52925* malign-power: RS/6000 and PowerPC Options. 52926 (line 350) 52927* mall-opts: MeP Options. (line 11) 52928* malloc-cc: FRV Options. (line 31) 52929* maltivec: RS/6000 and PowerPC Options. 52930 (line 132) 52931* maltivec=be: RS/6000 and PowerPC Options. 52932 (line 148) 52933* maltivec=le: RS/6000 and PowerPC Options. 52934 (line 158) 52935* mam33: MN10300 Options. (line 17) 52936* mam33-2: MN10300 Options. (line 24) 52937* mam34: MN10300 Options. (line 27) 52938* mandroid: GNU/Linux Options. (line 21) 52939* mannotate-align: ARC Options. (line 133) 52940* mapcs: ARM Options. (line 22) 52941* mapcs-frame: ARM Options. (line 14) 52942* mapp-regs: SPARC Options. (line 10) 52943* mapp-regs <1>: V850 Options. (line 181) 52944* mARC600: ARC Options. (line 19) 52945* mARC601: ARC Options. (line 23) 52946* mARC700: ARC Options. (line 26) 52947* march: AArch64 Options. (line 73) 52948* march <1>: ARM Options. (line 75) 52949* march <2>: C6X Options. (line 7) 52950* march <3>: CRIS Options. (line 10) 52951* march <4>: HPPA Options. (line 9) 52952* march <5>: HPPA Options. (line 156) 52953* march <6>: i386 and x86-64 Options. 52954 (line 10) 52955* march <7>: M680x0 Options. (line 12) 52956* march <8>: MIPS Options. (line 14) 52957* march <9>: NDS32 Options. (line 58) 52958* march <10>: S/390 and zSeries Options. 52959 (line 114) 52960* marclinux: ARC Options. (line 139) 52961* marclinux_prof: ARC Options. (line 146) 52962* margonaut: ARC Options. (line 341) 52963* marm: ARM Options. (line 266) 52964* mas100-syntax: RX Options. (line 76) 52965* masm-hex: MSP430 Options. (line 9) 52966* masm=DIALECT: i386 and x86-64 Options. 52967 (line 322) 52968* matomic-model=MODEL: SH Options. (line 214) 52969* matomic-updates: SPU Options. (line 83) 52970* mauto-modify-reg: ARC Options. (line 195) 52971* mauto-pic: IA-64 Options. (line 50) 52972* maverage: MeP Options. (line 16) 52973* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 52974 (line 420) 52975* max-vect-align: Adapteva Epiphany Options. 52976 (line 119) 52977* mb: SH Options. (line 147) 52978* mbackchain: S/390 and zSeries Options. 52979 (line 35) 52980* mbarrel-shift-enabled: LM32 Options. (line 9) 52981* mbarrel-shifter: ARC Options. (line 10) 52982* mbarrel_shifter: ARC Options. (line 361) 52983* mbase-addresses: MMIX Options. (line 53) 52984* mbased=: MeP Options. (line 20) 52985* mbbit-peephole: ARC Options. (line 198) 52986* mbcopy: PDP-11 Options. (line 36) 52987* mbcopy-builtin: PDP-11 Options. (line 32) 52988* mbig: RS/6000 and PowerPC Options. 52989 (line 500) 52990* mbig-endian: AArch64 Options. (line 20) 52991* mbig-endian <1>: ARC Options. (line 344) 52992* mbig-endian <2>: ARM Options. (line 62) 52993* mbig-endian <3>: C6X Options. (line 13) 52994* mbig-endian <4>: IA-64 Options. (line 9) 52995* mbig-endian <5>: MCore Options. (line 39) 52996* mbig-endian <6>: MicroBlaze Options. (line 57) 52997* mbig-endian <7>: NDS32 Options. (line 9) 52998* mbig-endian <8>: RS/6000 and PowerPC Options. 52999 (line 500) 53000* mbig-endian <9>: TILE-Gx Options. (line 29) 53001* mbig-endian-data: RX Options. (line 42) 53002* mbig-switch: V850 Options. (line 176) 53003* mbigtable: SH Options. (line 162) 53004* mbionic: GNU/Linux Options. (line 17) 53005* mbit-align: RS/6000 and PowerPC Options. 53006 (line 452) 53007* mbit-ops: CR16 Options. (line 25) 53008* mbitfield: M680x0 Options. (line 231) 53009* mbitops: MeP Options. (line 26) 53010* mbitops <1>: SH Options. (line 166) 53011* mblock-move-inline-limit: RS/6000 and PowerPC Options. 53012 (line 733) 53013* mbranch-cheap: PDP-11 Options. (line 65) 53014* mbranch-cost: Adapteva Epiphany Options. 53015 (line 18) 53016* mbranch-cost <1>: AVR Options. (line 152) 53017* mbranch-cost <2>: MIPS Options. (line 701) 53018* mbranch-cost=NUM: SH Options. (line 459) 53019* mbranch-cost=NUMBER: M32R/D Options. (line 82) 53020* mbranch-expensive: PDP-11 Options. (line 61) 53021* mbranch-hints: SPU Options. (line 29) 53022* mbranch-likely: MIPS Options. (line 708) 53023* mbranch-predict: MMIX Options. (line 48) 53024* mbss-plt: RS/6000 and PowerPC Options. 53025 (line 185) 53026* mbuild-constants: DEC Alpha Options. (line 141) 53027* mbwx: DEC Alpha Options. (line 163) 53028* mbypass-cache: Nios II Options. (line 34) 53029* mc68000: M680x0 Options. (line 93) 53030* mc68020: M680x0 Options. (line 107) 53031* mc=: MeP Options. (line 31) 53032* mcache-block-size: NDS32 Options. (line 54) 53033* mcache-size: SPU Options. (line 75) 53034* mcache-volatile: Nios II Options. (line 40) 53035* mcall-eabi: RS/6000 and PowerPC Options. 53036 (line 575) 53037* mcall-freebsd: RS/6000 and PowerPC Options. 53038 (line 589) 53039* mcall-linux: RS/6000 and PowerPC Options. 53040 (line 585) 53041* mcall-netbsd: RS/6000 and PowerPC Options. 53042 (line 593) 53043* mcall-netbsd <1>: RS/6000 and PowerPC Options. 53044 (line 597) 53045* mcall-prologues: AVR Options. (line 157) 53046* mcall-sysv: RS/6000 and PowerPC Options. 53047 (line 567) 53048* mcall-sysv-eabi: RS/6000 and PowerPC Options. 53049 (line 575) 53050* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 53051 (line 578) 53052* mcallee-super-interworking: ARM Options. (line 285) 53053* mcaller-super-interworking: ARM Options. (line 292) 53054* mcallgraph-data: MCore Options. (line 31) 53055* mcase-vector-pcrel: ARC Options. (line 206) 53056* mcbcond: SPARC Options. (line 223) 53057* mcc-init: CRIS Options. (line 42) 53058* mcfv4e: M680x0 Options. (line 169) 53059* mcheck-zero-division: MIPS Options. (line 503) 53060* mcix: DEC Alpha Options. (line 163) 53061* mcld: i386 and x86-64 Options. 53062 (line 672) 53063* mclear-hwcap: Solaris 2 Options. (line 9) 53064* mclip: MeP Options. (line 35) 53065* mcmodel: SPARC Options. (line 261) 53066* mcmodel=kernel: i386 and x86-64 Options. 53067 (line 971) 53068* mcmodel=large: AArch64 Options. (line 44) 53069* mcmodel=large <1>: i386 and x86-64 Options. 53070 (line 983) 53071* mcmodel=large <2>: RS/6000 and PowerPC Options. 53072 (line 126) 53073* mcmodel=large <3>: TILE-Gx Options. (line 14) 53074* mcmodel=medium: i386 and x86-64 Options. 53075 (line 976) 53076* mcmodel=medium <1>: RS/6000 and PowerPC Options. 53077 (line 122) 53078* mcmodel=small: AArch64 Options. (line 38) 53079* mcmodel=small <1>: i386 and x86-64 Options. 53080 (line 965) 53081* mcmodel=small <2>: RS/6000 and PowerPC Options. 53082 (line 118) 53083* mcmodel=small <3>: TILE-Gx Options. (line 9) 53084* mcmodel=tiny: AArch64 Options. (line 31) 53085* mcmov: NDS32 Options. (line 21) 53086* mcmove: Adapteva Epiphany Options. 53087 (line 23) 53088* mcmpb: RS/6000 and PowerPC Options. 53089 (line 27) 53090* mcode-readable: MIPS Options. (line 463) 53091* mcompact-casesi: ARC Options. (line 210) 53092* mcompat-align-parm: RS/6000 and PowerPC Options. 53093 (line 889) 53094* mcond-exec: FRV Options. (line 187) 53095* mcond-move: FRV Options. (line 159) 53096* mconfig=: MeP Options. (line 39) 53097* mconsole: i386 and x86-64 Windows Options. 53098 (line 9) 53099* mconst-align: CRIS Options. (line 55) 53100* mconst16: Xtensa Options. (line 10) 53101* mconstant-gp: IA-64 Options. (line 46) 53102* mcop: MeP Options. (line 48) 53103* mcop32: MeP Options. (line 53) 53104* mcop64: MeP Options. (line 56) 53105* mcorea: Blackfin Options. (line 156) 53106* mcoreb: Blackfin Options. (line 163) 53107* mcpu: AArch64 Options. (line 105) 53108* mcpu <1>: ARC Options. (line 14) 53109* mcpu <2>: ARM Options. (line 136) 53110* mcpu <3>: CRIS Options. (line 10) 53111* mcpu <4>: DEC Alpha Options. (line 215) 53112* mcpu <5>: FRV Options. (line 258) 53113* mcpu <6>: i386 and x86-64 Options. 53114 (line 270) 53115* mcpu <7>: M680x0 Options. (line 28) 53116* mcpu <8>: picoChip Options. (line 9) 53117* mcpu <9>: RS/6000 and PowerPC Options. 53118 (line 68) 53119* mcpu <10>: SPARC Options. (line 101) 53120* mcpu <11>: TILE-Gx Options. (line 18) 53121* mcpu <12>: TILEPro Options. (line 9) 53122* mcpu32: M680x0 Options. (line 135) 53123* mcpu=: Blackfin Options. (line 7) 53124* mcpu= <1>: M32C Options. (line 7) 53125* mcpu= <2>: MicroBlaze Options. (line 20) 53126* mcr16c: CR16 Options. (line 14) 53127* mcr16cplus: CR16 Options. (line 14) 53128* mcrc32: i386 and x86-64 Options. 53129 (line 719) 53130* mcrypto: RS/6000 and PowerPC Options. 53131 (line 220) 53132* mcsync-anomaly: Blackfin Options. (line 59) 53133* mctor-dtor: NDS32 Options. (line 73) 53134* mcustom-fpu-cfg: Nios II Options. (line 175) 53135* mcustom-INSN: Nios II Options. (line 61) 53136* mcx16: i386 and x86-64 Options. 53137 (line 696) 53138* MD: Preprocessor Options. 53139 (line 276) 53140* mdalign: SH Options. (line 153) 53141* mdata-align: CRIS Options. (line 55) 53142* mdata-model: CR16 Options. (line 28) 53143* mdc: MeP Options. (line 62) 53144* mdebug: M32R/D Options. (line 69) 53145* mdebug <1>: S/390 and zSeries Options. 53146 (line 110) 53147* mdebug-main=PREFIX: VMS Options. (line 13) 53148* mdec-asm: PDP-11 Options. (line 72) 53149* mdirect-move: RS/6000 and PowerPC Options. 53150 (line 226) 53151* mdisable-callt: V850 Options. (line 92) 53152* mdisable-fpregs: HPPA Options. (line 28) 53153* mdisable-indexing: HPPA Options. (line 34) 53154* mdiv: M680x0 Options. (line 206) 53155* mdiv <1>: MCore Options. (line 15) 53156* mdiv <2>: MeP Options. (line 65) 53157* mdiv=STRATEGY: SH Options. (line 306) 53158* mdivide-breaks: MIPS Options. (line 509) 53159* mdivide-enabled: LM32 Options. (line 12) 53160* mdivide-traps: MIPS Options. (line 509) 53161* mdivsi3_libfunc=NAME: SH Options. (line 401) 53162* mdll: i386 and x86-64 Windows Options. 53163 (line 16) 53164* mdlmzb: RS/6000 and PowerPC Options. 53165 (line 445) 53166* mdmx: MIPS Options. (line 336) 53167* mdouble: FRV Options. (line 48) 53168* mdouble-float: MIPS Options. (line 255) 53169* mdouble-float <1>: RS/6000 and PowerPC Options. 53170 (line 368) 53171* mdpfp: ARC Options. (line 30) 53172* mdpfp-compact: ARC Options. (line 31) 53173* mdpfp-fast: ARC Options. (line 35) 53174* mdpfp_compact: ARC Options. (line 364) 53175* mdpfp_fast: ARC Options. (line 367) 53176* mdsp: MIPS Options. (line 313) 53177* mdsp-packa: ARC Options. (line 88) 53178* mdspr2: MIPS Options. (line 319) 53179* mdsp_packa: ARC Options. (line 370) 53180* mdual-nops: SPU Options. (line 95) 53181* mdump-tune-features: i386 and x86-64 Options. 53182 (line 653) 53183* mdvbf: ARC Options. (line 92) 53184* mdwarf2-asm: IA-64 Options. (line 94) 53185* mdword: FRV Options. (line 40) 53186* mdynamic-no-pic: RS/6000 and PowerPC Options. 53187 (line 505) 53188* mea: ARC Options. (line 43) 53189* mEA: ARC Options. (line 373) 53190* mea32: SPU Options. (line 60) 53191* mea64: SPU Options. (line 60) 53192* meabi: RS/6000 and PowerPC Options. 53193 (line 682) 53194* mearly-cbranchsi: ARC Options. (line 229) 53195* mearly-stop-bits: IA-64 Options. (line 100) 53196* meb: MeP Options. (line 68) 53197* meb <1>: Moxie Options. (line 7) 53198* meb <2>: Nios II Options. (line 29) 53199* meb <3>: Score Options. (line 9) 53200* mel: MeP Options. (line 71) 53201* mel <1>: Moxie Options. (line 11) 53202* mel <2>: Nios II Options. (line 29) 53203* mel <3>: Score Options. (line 12) 53204* melf: CRIS Options. (line 87) 53205* melf <1>: MMIX Options. (line 43) 53206* memb: RS/6000 and PowerPC Options. 53207 (line 677) 53208* membedded-data: MIPS Options. (line 450) 53209* memregs=: M32C Options. (line 21) 53210* mep: V850 Options. (line 16) 53211* mepilogue-cfi: ARC Options. (line 155) 53212* mepsilon: MMIX Options. (line 15) 53213* merror-reloc: SPU Options. (line 10) 53214* mesa: S/390 and zSeries Options. 53215 (line 94) 53216* metrax100: CRIS Options. (line 27) 53217* metrax4: CRIS Options. (line 27) 53218* meva: MIPS Options. (line 363) 53219* mex9: NDS32 Options. (line 70) 53220* mexpand-adddi: ARC Options. (line 232) 53221* mexplicit-relocs: DEC Alpha Options. (line 176) 53222* mexplicit-relocs <1>: MIPS Options. (line 494) 53223* mexr: H8/300 Options. (line 28) 53224* mextern-sdata: MIPS Options. (line 413) 53225* MF: Preprocessor Options. 53226 (line 220) 53227* mfast-fp: Blackfin Options. (line 132) 53228* mfast-indirect-calls: HPPA Options. (line 46) 53229* mfast-sw-div: Nios II Options. (line 46) 53230* mfaster-structs: SPARC Options. (line 91) 53231* mfdpic: FRV Options. (line 72) 53232* mfentry: i386 and x86-64 Options. 53233 (line 910) 53234* mfix: DEC Alpha Options. (line 163) 53235* mfix-24k: MIPS Options. (line 567) 53236* mfix-and-continue: Darwin Options. (line 104) 53237* mfix-at697f: SPARC Options. (line 243) 53238* mfix-cortex-m3-ldrd: ARM Options. (line 325) 53239* mfix-r10000: MIPS Options. (line 589) 53240* mfix-r4000: MIPS Options. (line 573) 53241* mfix-r4400: MIPS Options. (line 583) 53242* mfix-rm7000: MIPS Options. (line 600) 53243* mfix-sb1: MIPS Options. (line 625) 53244* mfix-ut699: SPARC Options. (line 248) 53245* mfix-vr4120: MIPS Options. (line 605) 53246* mfix-vr4130: MIPS Options. (line 618) 53247* mfixed-cc: FRV Options. (line 35) 53248* mfixed-range: HPPA Options. (line 53) 53249* mfixed-range <1>: IA-64 Options. (line 105) 53250* mfixed-range <2>: SH Options. (line 408) 53251* mfixed-range <3>: SPU Options. (line 52) 53252* mflat: SPARC Options. (line 22) 53253* mflip-mips16: MIPS Options. (line 110) 53254* mfloat-abi: ARM Options. (line 42) 53255* mfloat-gprs: RS/6000 and PowerPC Options. 53256 (line 257) 53257* mfloat-ieee: DEC Alpha Options. (line 171) 53258* mfloat-vax: DEC Alpha Options. (line 171) 53259* mfloat32: PDP-11 Options. (line 52) 53260* mfloat64: PDP-11 Options. (line 48) 53261* mflush-func: MIPS Options. (line 692) 53262* mflush-func=NAME: M32R/D Options. (line 93) 53263* mflush-trap=NUMBER: M32R/D Options. (line 86) 53264* mfmaf: SPARC Options. (line 237) 53265* mfmovd: SH Options. (line 169) 53266* mforbid-fp-as-gp: NDS32 Options. (line 65) 53267* mforce-fp-as-gp: NDS32 Options. (line 61) 53268* mforce-no-pic: Xtensa Options. (line 41) 53269* mfp-exceptions: MIPS Options. (line 719) 53270* mfp-mode: Adapteva Epiphany Options. 53271 (line 71) 53272* mfp-reg: DEC Alpha Options. (line 25) 53273* mfp-rounding-mode: DEC Alpha Options. (line 85) 53274* mfp-trap-mode: DEC Alpha Options. (line 63) 53275* mfp16-format: ARM Options. (line 176) 53276* mfp32: MIPS Options. (line 228) 53277* mfp64: MIPS Options. (line 231) 53278* mfpmath: Optimize Options. (line 1942) 53279* mfpmath <1>: i386 and x86-64 Options. 53280 (line 273) 53281* mfpr-32: FRV Options. (line 15) 53282* mfpr-64: FRV Options. (line 19) 53283* mfprnd: RS/6000 and PowerPC Options. 53284 (line 27) 53285* mfpu: ARM Options. (line 156) 53286* mfpu <1>: PDP-11 Options. (line 9) 53287* mfpu <2>: RS/6000 and PowerPC Options. 53288 (line 376) 53289* mfpu <3>: SPARC Options. (line 34) 53290* mfriz: RS/6000 and PowerPC Options. 53291 (line 860) 53292* mfsca: SH Options. (line 484) 53293* mfsrra: SH Options. (line 493) 53294* mfull-regs: NDS32 Options. (line 18) 53295* mfull-toc: RS/6000 and PowerPC Options. 53296 (line 285) 53297* mfused-madd: IA-64 Options. (line 88) 53298* mfused-madd <1>: MIPS Options. (line 550) 53299* mfused-madd <2>: RS/6000 and PowerPC Options. 53300 (line 429) 53301* mfused-madd <3>: S/390 and zSeries Options. 53302 (line 135) 53303* mfused-madd <4>: SH Options. (line 475) 53304* mfused-madd <5>: Xtensa Options. (line 19) 53305* MG: Preprocessor Options. 53306 (line 229) 53307* mg: VAX Options. (line 17) 53308* mgas: HPPA Options. (line 69) 53309* mgcc-abi: V850 Options. (line 148) 53310* mgen-cell-microcode: RS/6000 and PowerPC Options. 53311 (line 173) 53312* mgeneral-regs-only: AArch64 Options. (line 24) 53313* mgettrcost=NUMBER: SH Options. (line 425) 53314* mghs: V850 Options. (line 127) 53315* mglibc: GNU/Linux Options. (line 9) 53316* mgnu: VAX Options. (line 13) 53317* mgnu-as: IA-64 Options. (line 18) 53318* mgnu-ld: HPPA Options. (line 105) 53319* mgnu-ld <1>: IA-64 Options. (line 23) 53320* mgotplt: CRIS Options. (line 81) 53321* mgp-direct: NDS32 Options. (line 45) 53322* mgp32: MIPS Options. (line 222) 53323* mgp64: MIPS Options. (line 225) 53324* mgpopt: MIPS Options. (line 435) 53325* mgpopt <1>: Nios II Options. (line 15) 53326* mgpr-32: FRV Options. (line 7) 53327* mgpr-64: FRV Options. (line 11) 53328* mgprel-ro: FRV Options. (line 99) 53329* mh: H8/300 Options. (line 14) 53330* mhal: Nios II Options. (line 220) 53331* mhalf-reg-file: Adapteva Epiphany Options. 53332 (line 9) 53333* mhard-dfp: RS/6000 and PowerPC Options. 53334 (line 27) 53335* mhard-dfp <1>: S/390 and zSeries Options. 53336 (line 20) 53337* mhard-float: FRV Options. (line 23) 53338* mhard-float <1>: M680x0 Options. (line 194) 53339* mhard-float <2>: MicroBlaze Options. (line 10) 53340* mhard-float <3>: MIPS Options. (line 234) 53341* mhard-float <4>: RS/6000 and PowerPC Options. 53342 (line 362) 53343* mhard-float <5>: S/390 and zSeries Options. 53344 (line 11) 53345* mhard-float <6>: SPARC Options. (line 34) 53346* mhard-float <7>: V850 Options. (line 113) 53347* mhard-quad-float: SPARC Options. (line 55) 53348* mhardlit: MCore Options. (line 10) 53349* mhint-max-distance: SPU Options. (line 107) 53350* mhint-max-nops: SPU Options. (line 101) 53351* mhotpatch: S/390 and zSeries Options. 53352 (line 171) 53353* mhp-ld: HPPA Options. (line 117) 53354* mhw-div: Nios II Options. (line 55) 53355* mhw-mul: Nios II Options. (line 55) 53356* mhw-mulx: Nios II Options. (line 55) 53357* mhwmult=: MSP430 Options. (line 56) 53358* micplb: Blackfin Options. (line 177) 53359* mid-shared-library: Blackfin Options. (line 80) 53360* mieee: DEC Alpha Options. (line 39) 53361* mieee <1>: SH Options. (line 186) 53362* mieee-conformant: DEC Alpha Options. (line 134) 53363* mieee-fp: i386 and x86-64 Options. 53364 (line 328) 53365* mieee-with-inexact: DEC Alpha Options. (line 52) 53366* milp32: IA-64 Options. (line 121) 53367* mimadd: MIPS Options. (line 543) 53368* mimpure-text: Solaris 2 Options. (line 15) 53369* mincoming-stack-boundary: i386 and x86-64 Options. 53370 (line 535) 53371* mindexed-addressing: SH Options. (line 415) 53372* mindexed-loads: ARC Options. (line 236) 53373* minline-all-stringops: i386 and x86-64 Options. 53374 (line 842) 53375* minline-float-divide-max-throughput: IA-64 Options. (line 58) 53376* minline-float-divide-min-latency: IA-64 Options. (line 54) 53377* minline-ic_invalidate: SH Options. (line 195) 53378* minline-int-divide-max-throughput: IA-64 Options. (line 69) 53379* minline-int-divide-min-latency: IA-64 Options. (line 65) 53380* minline-plt: Blackfin Options. (line 137) 53381* minline-plt <1>: FRV Options. (line 81) 53382* minline-sqrt-max-throughput: IA-64 Options. (line 80) 53383* minline-sqrt-min-latency: IA-64 Options. (line 76) 53384* minline-stringops-dynamically: i386 and x86-64 Options. 53385 (line 849) 53386* minrt: MSP430 Options. (line 77) 53387* minsert-sched-nops: RS/6000 and PowerPC Options. 53388 (line 545) 53389* mint-register: RX Options. (line 100) 53390* mint16: PDP-11 Options. (line 40) 53391* mint32: CR16 Options. (line 22) 53392* mint32 <1>: H8/300 Options. (line 38) 53393* mint32 <2>: PDP-11 Options. (line 44) 53394* mint8: AVR Options. (line 161) 53395* minterlink-compressed: MIPS Options. (line 117) 53396* minterlink-mips16: MIPS Options. (line 129) 53397* minvalid-symbols: SH Options. (line 449) 53398* mio-volatile: MeP Options. (line 74) 53399* mips1: MIPS Options. (line 77) 53400* mips16: MIPS Options. (line 102) 53401* mips2: MIPS Options. (line 80) 53402* mips3: MIPS Options. (line 83) 53403* mips32: MIPS Options. (line 89) 53404* mips32r2: MIPS Options. (line 92) 53405* mips3d: MIPS Options. (line 342) 53406* mips4: MIPS Options. (line 86) 53407* mips64: MIPS Options. (line 95) 53408* mips64r2: MIPS Options. (line 98) 53409* misel: RS/6000 and PowerPC Options. 53410 (line 191) 53411* misize: ARC Options. (line 130) 53412* misize <1>: SH Options. (line 207) 53413* misr-vector-size: NDS32 Options. (line 51) 53414* missue-rate=NUMBER: M32R/D Options. (line 79) 53415* mivc2: MeP Options. (line 59) 53416* mjump-in-delay: HPPA Options. (line 23) 53417* mkernel: Darwin Options. (line 82) 53418* mknuthdiv: MMIX Options. (line 32) 53419* ml: MeP Options. (line 78) 53420* ml <1>: SH Options. (line 150) 53421* mlarge: MSP430 Options. (line 45) 53422* mlarge-data: DEC Alpha Options. (line 187) 53423* mlarge-data-threshold: i386 and x86-64 Options. 53424 (line 421) 53425* mlarge-mem: SPU Options. (line 38) 53426* mlarge-text: DEC Alpha Options. (line 205) 53427* mleadz: MeP Options. (line 81) 53428* mleaf-id-shared-library: Blackfin Options. (line 91) 53429* mlibfuncs: MMIX Options. (line 10) 53430* mlibrary-pic: FRV Options. (line 135) 53431* mlinked-fp: FRV Options. (line 116) 53432* mlinker-opt: HPPA Options. (line 79) 53433* mlinux: CRIS Options. (line 91) 53434* mlittle: RS/6000 and PowerPC Options. 53435 (line 494) 53436* mlittle-endian: AArch64 Options. (line 27) 53437* mlittle-endian <1>: ARC Options. (line 353) 53438* mlittle-endian <2>: ARM Options. (line 58) 53439* mlittle-endian <3>: C6X Options. (line 16) 53440* mlittle-endian <4>: IA-64 Options. (line 13) 53441* mlittle-endian <5>: MCore Options. (line 39) 53442* mlittle-endian <6>: MicroBlaze Options. (line 60) 53443* mlittle-endian <7>: NDS32 Options. (line 12) 53444* mlittle-endian <8>: RS/6000 and PowerPC Options. 53445 (line 494) 53446* mlittle-endian <9>: TILE-Gx Options. (line 29) 53447* mlittle-endian-data: RX Options. (line 42) 53448* mliw: MN10300 Options. (line 54) 53449* mllsc: MIPS Options. (line 299) 53450* mlocal-sdata: MIPS Options. (line 401) 53451* mlock: ARC Options. (line 96) 53452* mlong-calls: Adapteva Epiphany Options. 53453 (line 55) 53454* mlong-calls <1>: ARC Options. (line 161) 53455* mlong-calls <2>: ARM Options. (line 201) 53456* mlong-calls <3>: Blackfin Options. (line 120) 53457* mlong-calls <4>: FRV Options. (line 122) 53458* mlong-calls <5>: MIPS Options. (line 529) 53459* mlong-calls <6>: V850 Options. (line 10) 53460* mlong-double-128: i386 and x86-64 Options. 53461 (line 407) 53462* mlong-double-128 <1>: S/390 and zSeries Options. 53463 (line 29) 53464* mlong-double-64: i386 and x86-64 Options. 53465 (line 407) 53466* mlong-double-64 <1>: S/390 and zSeries Options. 53467 (line 29) 53468* mlong-double-80: i386 and x86-64 Options. 53469 (line 407) 53470* mlong-jumps: V850 Options. (line 108) 53471* mlong-load-store: HPPA Options. (line 60) 53472* mlong32: MIPS Options. (line 376) 53473* mlong64: MIPS Options. (line 371) 53474* mlongcall: RS/6000 and PowerPC Options. 53475 (line 753) 53476* mlongcalls: Xtensa Options. (line 72) 53477* mloop: V850 Options. (line 121) 53478* mlow-64k: Blackfin Options. (line 69) 53479* mlp64: IA-64 Options. (line 121) 53480* mlra: ARC Options. (line 241) 53481* mlra-priority-compact: ARC Options. (line 249) 53482* mlra-priority-noncompact: ARC Options. (line 252) 53483* mlra-priority-none: ARC Options. (line 246) 53484* MM: Preprocessor Options. 53485 (line 210) 53486* mm: MeP Options. (line 84) 53487* mmac: CR16 Options. (line 9) 53488* mmac <1>: Score Options. (line 21) 53489* mmac-24: ARC Options. (line 105) 53490* mmac-d16: ARC Options. (line 101) 53491* mmac_24: ARC Options. (line 376) 53492* mmac_d16: ARC Options. (line 379) 53493* mmad: MIPS Options. (line 538) 53494* mmalloc64: VMS Options. (line 17) 53495* mmax: DEC Alpha Options. (line 163) 53496* mmax-constant-size: RX Options. (line 82) 53497* mmax-stack-frame: CRIS Options. (line 23) 53498* mmcount-ra-address: MIPS Options. (line 768) 53499* mmcu: AVR Options. (line 9) 53500* mmcu <1>: MIPS Options. (line 359) 53501* mmcu=: MSP430 Options. (line 14) 53502* MMD: Preprocessor Options. 53503 (line 292) 53504* mmedia: FRV Options. (line 56) 53505* mmedium-calls: ARC Options. (line 165) 53506* mmemcpy: MicroBlaze Options. (line 13) 53507* mmemcpy <1>: MIPS Options. (line 523) 53508* mmemcpy-strategy=STRATEGY: i386 and x86-64 Options. 53509 (line 871) 53510* mmemory-latency: DEC Alpha Options. (line 268) 53511* mmemory-model: SPARC Options. (line 289) 53512* mmemset-strategy=STRATEGY: i386 and x86-64 Options. 53513 (line 883) 53514* mmfcrf: RS/6000 and PowerPC Options. 53515 (line 27) 53516* mmfpgpr: RS/6000 and PowerPC Options. 53517 (line 27) 53518* mmicromips: MIPS Options. (line 347) 53519* mminimal-toc: RS/6000 and PowerPC Options. 53520 (line 285) 53521* mminmax: MeP Options. (line 87) 53522* mmixed-code: ARC Options. (line 264) 53523* mmmx: i386 and x86-64 Options. 53524 (line 629) 53525* mmodel=large: M32R/D Options. (line 33) 53526* mmodel=medium: M32R/D Options. (line 27) 53527* mmodel=small: M32R/D Options. (line 18) 53528* mmovbe: i386 and x86-64 Options. 53529 (line 715) 53530* mmt: MIPS Options. (line 355) 53531* mmul: RL78 Options. (line 13) 53532* mmul-bug-workaround: CRIS Options. (line 32) 53533* mmul32x16: ARC Options. (line 51) 53534* mmul64: ARC Options. (line 54) 53535* mmuladd: FRV Options. (line 64) 53536* mmulhw: RS/6000 and PowerPC Options. 53537 (line 438) 53538* mmult: MeP Options. (line 90) 53539* mmult-bug: MN10300 Options. (line 9) 53540* mmultcost: ARC Options. (line 326) 53541* mmulti-cond-exec: FRV Options. (line 215) 53542* mmulticore: Blackfin Options. (line 141) 53543* mmultiple: RS/6000 and PowerPC Options. 53544 (line 388) 53545* mmvcle: S/390 and zSeries Options. 53546 (line 104) 53547* mmvme: RS/6000 and PowerPC Options. 53548 (line 658) 53549* mn: H8/300 Options. (line 20) 53550* mnan=2008: MIPS Options. (line 280) 53551* mnan=legacy: MIPS Options. (line 280) 53552* mneon-for-64bits: ARM Options. (line 345) 53553* mnested-cond-exec: FRV Options. (line 230) 53554* mnhwloop: Score Options. (line 15) 53555* mno-16-bit: NDS32 Options. (line 42) 53556* mno-3dnow: i386 and x86-64 Options. 53557 (line 629) 53558* mno-4byte-functions: MCore Options. (line 27) 53559* mno-8byte-align: V850 Options. (line 170) 53560* mno-abicalls: MIPS Options. (line 162) 53561* mno-abshi: PDP-11 Options. (line 58) 53562* mno-ac0: PDP-11 Options. (line 20) 53563* mno-address-space-conversion: SPU Options. (line 68) 53564* mno-align-double: i386 and x86-64 Options. 53565 (line 366) 53566* mno-align-int: M680x0 Options. (line 263) 53567* mno-align-loops: M32R/D Options. (line 76) 53568* mno-align-stringops: i386 and x86-64 Options. 53569 (line 837) 53570* mno-altivec: RS/6000 and PowerPC Options. 53571 (line 132) 53572* mno-am33: MN10300 Options. (line 20) 53573* mno-app-regs: SPARC Options. (line 10) 53574* mno-app-regs <1>: V850 Options. (line 185) 53575* mno-as100-syntax: RX Options. (line 76) 53576* mno-atomic-updates: SPU Options. (line 83) 53577* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 53578 (line 420) 53579* mno-backchain: S/390 and zSeries Options. 53580 (line 35) 53581* mno-base-addresses: MMIX Options. (line 53) 53582* mno-bit-align: RS/6000 and PowerPC Options. 53583 (line 452) 53584* mno-bitfield: M680x0 Options. (line 227) 53585* mno-branch-likely: MIPS Options. (line 708) 53586* mno-branch-predict: MMIX Options. (line 48) 53587* mno-brcc: ARC Options. (line 201) 53588* mno-bwx: DEC Alpha Options. (line 163) 53589* mno-bypass-cache: Nios II Options. (line 34) 53590* mno-cache-volatile: Nios II Options. (line 40) 53591* mno-callgraph-data: MCore Options. (line 31) 53592* mno-cbcond: SPARC Options. (line 223) 53593* mno-check-zero-division: MIPS Options. (line 503) 53594* mno-cix: DEC Alpha Options. (line 163) 53595* mno-clearbss: MicroBlaze Options. (line 16) 53596* mno-cmov: NDS32 Options. (line 24) 53597* mno-cmpb: RS/6000 and PowerPC Options. 53598 (line 27) 53599* mno-cond-exec: ARC Options. (line 213) 53600* mno-cond-exec <1>: FRV Options. (line 194) 53601* mno-cond-move: FRV Options. (line 166) 53602* mno-const-align: CRIS Options. (line 55) 53603* mno-const16: Xtensa Options. (line 10) 53604* mno-crt0: MN10300 Options. (line 43) 53605* mno-crt0 <1>: Moxie Options. (line 14) 53606* mno-crypto: RS/6000 and PowerPC Options. 53607 (line 220) 53608* mno-csync-anomaly: Blackfin Options. (line 65) 53609* mno-custom-INSN: Nios II Options. (line 61) 53610* mno-data-align: CRIS Options. (line 55) 53611* mno-debug: S/390 and zSeries Options. 53612 (line 110) 53613* mno-default: i386 and x86-64 Options. 53614 (line 668) 53615* mno-direct-move: RS/6000 and PowerPC Options. 53616 (line 226) 53617* mno-disable-callt: V850 Options. (line 92) 53618* mno-div: M680x0 Options. (line 206) 53619* mno-div <1>: MCore Options. (line 15) 53620* mno-dlmzb: RS/6000 and PowerPC Options. 53621 (line 445) 53622* mno-double: FRV Options. (line 52) 53623* mno-dpfp-lrsr: ARC Options. (line 39) 53624* mno-dsp: MIPS Options. (line 313) 53625* mno-dspr2: MIPS Options. (line 319) 53626* mno-dwarf2-asm: IA-64 Options. (line 94) 53627* mno-dword: FRV Options. (line 44) 53628* mno-eabi: RS/6000 and PowerPC Options. 53629 (line 682) 53630* mno-early-stop-bits: IA-64 Options. (line 100) 53631* mno-eflags: FRV Options. (line 155) 53632* mno-embedded-data: MIPS Options. (line 450) 53633* mno-ep: V850 Options. (line 16) 53634* mno-epilogue-cfi: ARC Options. (line 158) 53635* mno-epsilon: MMIX Options. (line 15) 53636* mno-eva: MIPS Options. (line 363) 53637* mno-explicit-relocs: DEC Alpha Options. (line 176) 53638* mno-explicit-relocs <1>: MIPS Options. (line 494) 53639* mno-exr: H8/300 Options. (line 33) 53640* mno-extern-sdata: MIPS Options. (line 413) 53641* mno-fancy-math-387: i386 and x86-64 Options. 53642 (line 356) 53643* mno-fast-sw-div: Nios II Options. (line 46) 53644* mno-faster-structs: SPARC Options. (line 91) 53645* mno-fix: DEC Alpha Options. (line 163) 53646* mno-fix-24k: MIPS Options. (line 567) 53647* mno-fix-r10000: MIPS Options. (line 589) 53648* mno-fix-r4000: MIPS Options. (line 573) 53649* mno-fix-r4400: MIPS Options. (line 583) 53650* mno-flat: SPARC Options. (line 22) 53651* mno-float: MIPS Options. (line 241) 53652* mno-float32: PDP-11 Options. (line 48) 53653* mno-float64: PDP-11 Options. (line 52) 53654* mno-flush-func: M32R/D Options. (line 98) 53655* mno-flush-trap: M32R/D Options. (line 90) 53656* mno-fmaf: SPARC Options. (line 237) 53657* mno-fp-in-toc: RS/6000 and PowerPC Options. 53658 (line 285) 53659* mno-fp-regs: DEC Alpha Options. (line 25) 53660* mno-fp-ret-in-387: i386 and x86-64 Options. 53661 (line 346) 53662* mno-fprnd: RS/6000 and PowerPC Options. 53663 (line 27) 53664* mno-fpu: SPARC Options. (line 39) 53665* mno-fsca: SH Options. (line 484) 53666* mno-fsrra: SH Options. (line 493) 53667* mno-fused-madd: IA-64 Options. (line 88) 53668* mno-fused-madd <1>: MIPS Options. (line 550) 53669* mno-fused-madd <2>: RS/6000 and PowerPC Options. 53670 (line 429) 53671* mno-fused-madd <3>: S/390 and zSeries Options. 53672 (line 135) 53673* mno-fused-madd <4>: SH Options. (line 475) 53674* mno-fused-madd <5>: Xtensa Options. (line 19) 53675* mno-gnu-as: IA-64 Options. (line 18) 53676* mno-gnu-ld: IA-64 Options. (line 23) 53677* mno-gotplt: CRIS Options. (line 81) 53678* mno-gp-direct: NDS32 Options. (line 48) 53679* mno-gpopt: MIPS Options. (line 435) 53680* mno-gpopt <1>: Nios II Options. (line 15) 53681* mno-hard-dfp: RS/6000 and PowerPC Options. 53682 (line 27) 53683* mno-hard-dfp <1>: S/390 and zSeries Options. 53684 (line 20) 53685* mno-hardlit: MCore Options. (line 10) 53686* mno-hw-div: Nios II Options. (line 55) 53687* mno-hw-mul: Nios II Options. (line 55) 53688* mno-hw-mulx: Nios II Options. (line 55) 53689* mno-id-shared-library: Blackfin Options. (line 87) 53690* mno-ieee: SH Options. (line 186) 53691* mno-ieee-fp: i386 and x86-64 Options. 53692 (line 328) 53693* mno-imadd: MIPS Options. (line 543) 53694* mno-inline-float-divide: IA-64 Options. (line 62) 53695* mno-inline-int-divide: IA-64 Options. (line 73) 53696* mno-inline-sqrt: IA-64 Options. (line 84) 53697* mno-int16: PDP-11 Options. (line 44) 53698* mno-int32: PDP-11 Options. (line 40) 53699* mno-interlink-compressed: MIPS Options. (line 117) 53700* mno-interlink-mips16: MIPS Options. (line 129) 53701* mno-interrupts: AVR Options. (line 167) 53702* mno-isel: RS/6000 and PowerPC Options. 53703 (line 191) 53704* mno-knuthdiv: MMIX Options. (line 32) 53705* mno-leaf-id-shared-library: Blackfin Options. (line 97) 53706* mno-libfuncs: MMIX Options. (line 10) 53707* mno-llsc: MIPS Options. (line 299) 53708* mno-local-sdata: MIPS Options. (line 401) 53709* mno-long-calls: ARM Options. (line 201) 53710* mno-long-calls <1>: Blackfin Options. (line 120) 53711* mno-long-calls <2>: HPPA Options. (line 130) 53712* mno-long-calls <3>: MIPS Options. (line 529) 53713* mno-long-calls <4>: V850 Options. (line 10) 53714* mno-long-jumps: V850 Options. (line 108) 53715* mno-longcall: RS/6000 and PowerPC Options. 53716 (line 753) 53717* mno-longcalls: Xtensa Options. (line 72) 53718* mno-low-64k: Blackfin Options. (line 73) 53719* mno-lsim: FR30 Options. (line 14) 53720* mno-lsim <1>: MCore Options. (line 46) 53721* mno-mad: MIPS Options. (line 538) 53722* mno-max: DEC Alpha Options. (line 163) 53723* mno-mcount-ra-address: MIPS Options. (line 768) 53724* mno-mcu: MIPS Options. (line 359) 53725* mno-mdmx: MIPS Options. (line 336) 53726* mno-media: FRV Options. (line 60) 53727* mno-memcpy: MIPS Options. (line 523) 53728* mno-mfcrf: RS/6000 and PowerPC Options. 53729 (line 27) 53730* mno-mfpgpr: RS/6000 and PowerPC Options. 53731 (line 27) 53732* mno-millicode: ARC Options. (line 255) 53733* mno-mips16: MIPS Options. (line 102) 53734* mno-mips3d: MIPS Options. (line 342) 53735* mno-mmicromips: MIPS Options. (line 347) 53736* mno-mmx: i386 and x86-64 Options. 53737 (line 629) 53738* mno-mpy: ARC Options. (line 48) 53739* mno-mt: MIPS Options. (line 355) 53740* mno-mul-bug-workaround: CRIS Options. (line 32) 53741* mno-muladd: FRV Options. (line 68) 53742* mno-mulhw: RS/6000 and PowerPC Options. 53743 (line 438) 53744* mno-mult-bug: MN10300 Options. (line 13) 53745* mno-multi-cond-exec: FRV Options. (line 223) 53746* mno-multiple: RS/6000 and PowerPC Options. 53747 (line 388) 53748* mno-mvcle: S/390 and zSeries Options. 53749 (line 104) 53750* mno-nested-cond-exec: FRV Options. (line 237) 53751* mno-omit-leaf-frame-pointer: AArch64 Options. (line 54) 53752* mno-optimize-membar: FRV Options. (line 249) 53753* mno-opts: MeP Options. (line 93) 53754* mno-pack: FRV Options. (line 151) 53755* mno-packed-stack: S/390 and zSeries Options. 53756 (line 54) 53757* mno-paired: RS/6000 and PowerPC Options. 53758 (line 205) 53759* mno-paired-single: MIPS Options. (line 330) 53760* mno-perf-ext: NDS32 Options. (line 30) 53761* mno-pic: IA-64 Options. (line 26) 53762* mno-pid: RX Options. (line 117) 53763* mno-plt: MIPS Options. (line 189) 53764* mno-popc: SPARC Options. (line 230) 53765* mno-popcntb: RS/6000 and PowerPC Options. 53766 (line 27) 53767* mno-popcntd: RS/6000 and PowerPC Options. 53768 (line 27) 53769* mno-postinc: Adapteva Epiphany Options. 53770 (line 109) 53771* mno-postmodify: Adapteva Epiphany Options. 53772 (line 109) 53773* mno-power8-fusion: RS/6000 and PowerPC Options. 53774 (line 232) 53775* mno-power8-vector: RS/6000 and PowerPC Options. 53776 (line 238) 53777* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 53778 (line 27) 53779* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 53780 (line 27) 53781* mno-powerpc64: RS/6000 and PowerPC Options. 53782 (line 27) 53783* mno-prolog-function: V850 Options. (line 23) 53784* mno-prologue-epilogue: CRIS Options. (line 71) 53785* mno-prototype: RS/6000 and PowerPC Options. 53786 (line 642) 53787* mno-push-args: i386 and x86-64 Options. 53788 (line 815) 53789* mno-quad-memory: RS/6000 and PowerPC Options. 53790 (line 245) 53791* mno-quad-memory-atomic: RS/6000 and PowerPC Options. 53792 (line 251) 53793* mno-red-zone: i386 and x86-64 Options. 53794 (line 957) 53795* mno-register-names: IA-64 Options. (line 37) 53796* mno-regnames: RS/6000 and PowerPC Options. 53797 (line 747) 53798* mno-relax: V850 Options. (line 103) 53799* mno-relax-immediate: MCore Options. (line 19) 53800* mno-relocatable: RS/6000 and PowerPC Options. 53801 (line 468) 53802* mno-relocatable-lib: RS/6000 and PowerPC Options. 53803 (line 479) 53804* mno-renesas: SH Options. (line 176) 53805* mno-round-nearest: Adapteva Epiphany Options. 53806 (line 51) 53807* mno-rtd: M680x0 Options. (line 258) 53808* mno-scc: FRV Options. (line 180) 53809* mno-sched-ar-data-spec: IA-64 Options. (line 134) 53810* mno-sched-ar-in-data-spec: IA-64 Options. (line 155) 53811* mno-sched-br-data-spec: IA-64 Options. (line 128) 53812* mno-sched-br-in-data-spec: IA-64 Options. (line 148) 53813* mno-sched-control-spec: IA-64 Options. (line 140) 53814* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 182) 53815* mno-sched-in-control-spec: IA-64 Options. (line 162) 53816* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 53817* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 53818* mno-sched-prolog: ARM Options. (line 33) 53819* mno-sdata: ARC Options. (line 174) 53820* mno-sdata <1>: IA-64 Options. (line 42) 53821* mno-sdata <2>: RS/6000 and PowerPC Options. 53822 (line 728) 53823* mno-sep-data: Blackfin Options. (line 115) 53824* mno-serialize-volatile: Xtensa Options. (line 35) 53825* mno-short: M680x0 Options. (line 222) 53826* mno-side-effects: CRIS Options. (line 46) 53827* mno-sim: RX Options. (line 71) 53828* mno-single-exit: MMIX Options. (line 65) 53829* mno-slow-bytes: MCore Options. (line 35) 53830* mno-small-exec: S/390 and zSeries Options. 53831 (line 79) 53832* mno-smartmips: MIPS Options. (line 326) 53833* mno-soft-cmpsf: Adapteva Epiphany Options. 53834 (line 29) 53835* mno-soft-float: DEC Alpha Options. (line 10) 53836* mno-space-regs: HPPA Options. (line 39) 53837* mno-spe: RS/6000 and PowerPC Options. 53838 (line 200) 53839* mno-specld-anomaly: Blackfin Options. (line 55) 53840* mno-split-addresses: MIPS Options. (line 488) 53841* mno-sse: i386 and x86-64 Options. 53842 (line 629) 53843* mno-stack-align: CRIS Options. (line 55) 53844* mno-stack-bias: SPARC Options. (line 313) 53845* mno-strict-align: M680x0 Options. (line 283) 53846* mno-strict-align <1>: RS/6000 and PowerPC Options. 53847 (line 463) 53848* mno-string: RS/6000 and PowerPC Options. 53849 (line 399) 53850* mno-sum-in-toc: RS/6000 and PowerPC Options. 53851 (line 285) 53852* mno-sym32: MIPS Options. (line 386) 53853* mno-target-align: Xtensa Options. (line 59) 53854* mno-text-section-literals: Xtensa Options. (line 47) 53855* mno-tls-markers: RS/6000 and PowerPC Options. 53856 (line 785) 53857* mno-toc: RS/6000 and PowerPC Options. 53858 (line 488) 53859* mno-toplevel-symbols: MMIX Options. (line 39) 53860* mno-tpf-trace: S/390 and zSeries Options. 53861 (line 129) 53862* mno-unaligned-access: ARM Options. (line 332) 53863* mno-unaligned-doubles: SPARC Options. (line 73) 53864* mno-uninit-const-in-rodata: MIPS Options. (line 458) 53865* mno-update: RS/6000 and PowerPC Options. 53866 (line 410) 53867* mno-user-mode: SPARC Options. (line 85) 53868* mno-usermode: SH Options. (line 296) 53869* mno-v3push: NDS32 Options. (line 36) 53870* mno-v8plus: SPARC Options. (line 194) 53871* mno-vect-double: Adapteva Epiphany Options. 53872 (line 115) 53873* mno-virt: MIPS Options. (line 367) 53874* mno-vis: SPARC Options. (line 201) 53875* mno-vis2: SPARC Options. (line 207) 53876* mno-vis3: SPARC Options. (line 215) 53877* mno-vliw-branch: FRV Options. (line 208) 53878* mno-volatile-asm-stop: IA-64 Options. (line 32) 53879* mno-volatile-cache: ARC Options. (line 188) 53880* mno-vrsave: RS/6000 and PowerPC Options. 53881 (line 170) 53882* mno-vsx: RS/6000 and PowerPC Options. 53883 (line 214) 53884* mno-warn-multiple-fast-interrupts: RX Options. (line 143) 53885* mno-wide-bitfields: MCore Options. (line 23) 53886* mno-xgot: M680x0 Options. (line 315) 53887* mno-xgot <1>: MIPS Options. (line 199) 53888* mno-xl-compat: RS/6000 and PowerPC Options. 53889 (line 320) 53890* mno-zdcbranch: SH Options. (line 466) 53891* mno-zero-extend: MMIX Options. (line 26) 53892* mnobitfield: M680x0 Options. (line 227) 53893* mnoliw: MN10300 Options. (line 59) 53894* mnomacsave: SH Options. (line 181) 53895* mnop-fun-dllimport: i386 and x86-64 Windows Options. 53896 (line 22) 53897* mnops: Adapteva Epiphany Options. 53898 (line 26) 53899* mnorm: ARC Options. (line 58) 53900* mnosetlb: MN10300 Options. (line 69) 53901* mnosplit-lohi: Adapteva Epiphany Options. 53902 (line 109) 53903* momit-leaf-frame-pointer: AArch64 Options. (line 54) 53904* momit-leaf-frame-pointer <1>: Blackfin Options. (line 43) 53905* momit-leaf-frame-pointer <2>: i386 and x86-64 Options. 53906 (line 887) 53907* mone-byte-bool: Darwin Options. (line 90) 53908* moptimize-membar: FRV Options. (line 244) 53909* MP: Preprocessor Options. 53910 (line 239) 53911* mpa-risc-1-0: HPPA Options. (line 19) 53912* mpa-risc-1-1: HPPA Options. (line 19) 53913* mpa-risc-2-0: HPPA Options. (line 19) 53914* mpack: FRV Options. (line 147) 53915* mpacked-stack: S/390 and zSeries Options. 53916 (line 54) 53917* mpadstruct: SH Options. (line 210) 53918* mpaired: RS/6000 and PowerPC Options. 53919 (line 205) 53920* mpaired-single: MIPS Options. (line 330) 53921* mpc32: i386 and x86-64 Options. 53922 (line 484) 53923* mpc64: i386 and x86-64 Options. 53924 (line 484) 53925* mpc80: i386 and x86-64 Options. 53926 (line 484) 53927* mpcrel: M680x0 Options. (line 275) 53928* mpdebug: CRIS Options. (line 36) 53929* mpe: RS/6000 and PowerPC Options. 53930 (line 339) 53931* mpe-aligned-commons: i386 and x86-64 Windows Options. 53932 (line 59) 53933* mperf-ext: NDS32 Options. (line 27) 53934* mpic-data-is-text-relative: ARM Options. (line 238) 53935* mpic-register: ARM Options. (line 231) 53936* mpid: RX Options. (line 117) 53937* mplt: MIPS Options. (line 189) 53938* mpointers-to-nested-functions: RS/6000 and PowerPC Options. 53939 (line 868) 53940* mpoke-function-name: ARM Options. (line 244) 53941* mpopc: SPARC Options. (line 230) 53942* mpopcntb: RS/6000 and PowerPC Options. 53943 (line 27) 53944* mpopcntd: RS/6000 and PowerPC Options. 53945 (line 27) 53946* mportable-runtime: HPPA Options. (line 65) 53947* mpower8-fusion: RS/6000 and PowerPC Options. 53948 (line 232) 53949* mpower8-vector: RS/6000 and PowerPC Options. 53950 (line 238) 53951* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 53952 (line 27) 53953* mpowerpc-gpopt: RS/6000 and PowerPC Options. 53954 (line 27) 53955* mpowerpc64: RS/6000 and PowerPC Options. 53956 (line 27) 53957* mprefer-avx128: i386 and x86-64 Options. 53958 (line 692) 53959* mprefer-short-insn-regs: Adapteva Epiphany Options. 53960 (line 13) 53961* mprefergot: SH Options. (line 290) 53962* mpreferred-stack-boundary: i386 and x86-64 Options. 53963 (line 514) 53964* mpretend-cmove: SH Options. (line 502) 53965* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 53966 (line 517) 53967* mprolog-function: V850 Options. (line 23) 53968* mprologue-epilogue: CRIS Options. (line 71) 53969* mprototype: RS/6000 and PowerPC Options. 53970 (line 642) 53971* mpt-fixed: SH Options. (line 429) 53972* mpush-args: i386 and x86-64 Options. 53973 (line 815) 53974* MQ: Preprocessor Options. 53975 (line 266) 53976* mq-class: ARC Options. (line 269) 53977* mquad-memory: RS/6000 and PowerPC Options. 53978 (line 245) 53979* mquad-memory-atomic: RS/6000 and PowerPC Options. 53980 (line 251) 53981* mr10k-cache-barrier: MIPS Options. (line 630) 53982* mRcq: ARC Options. (line 273) 53983* mRcw: ARC Options. (line 277) 53984* mrecip: i386 and x86-64 Options. 53985 (line 725) 53986* mrecip <1>: RS/6000 and PowerPC Options. 53987 (line 797) 53988* mrecip-precision: RS/6000 and PowerPC Options. 53989 (line 832) 53990* mrecip=opt: i386 and x86-64 Options. 53991 (line 747) 53992* mrecip=opt <1>: RS/6000 and PowerPC Options. 53993 (line 810) 53994* mreduced-regs: NDS32 Options. (line 15) 53995* mregister-names: IA-64 Options. (line 37) 53996* mregnames: RS/6000 and PowerPC Options. 53997 (line 747) 53998* mregparm: i386 and x86-64 Options. 53999 (line 451) 54000* mrelax: AVR Options. (line 171) 54001* mrelax <1>: H8/300 Options. (line 9) 54002* mrelax <2>: MN10300 Options. (line 46) 54003* mrelax <3>: MSP430 Options. (line 51) 54004* mrelax <4>: NDS32 Options. (line 76) 54005* mrelax <5>: RX Options. (line 95) 54006* mrelax <6>: SH Options. (line 158) 54007* mrelax <7>: V850 Options. (line 103) 54008* mrelax-immediate: MCore Options. (line 19) 54009* mrelax-pic-calls: MIPS Options. (line 755) 54010* mrelocatable: RS/6000 and PowerPC Options. 54011 (line 468) 54012* mrelocatable-lib: RS/6000 and PowerPC Options. 54013 (line 479) 54014* mrenesas: SH Options. (line 173) 54015* mrepeat: MeP Options. (line 96) 54016* mrestrict-it: ARM Options. (line 356) 54017* mreturn-pointer-on-d0: MN10300 Options. (line 36) 54018* mrh850-abi: V850 Options. (line 127) 54019* mrtd: i386 and x86-64 Options. 54020 (line 427) 54021* mrtd <1>: M680x0 Options. (line 236) 54022* mrtd <2>: Function Attributes. 54023 (line 209) 54024* mrtp: VxWorks Options. (line 11) 54025* mrtsc: ARC Options. (line 109) 54026* ms: H8/300 Options. (line 17) 54027* ms <1>: MeP Options. (line 100) 54028* ms2600: H8/300 Options. (line 24) 54029* msafe-dma: SPU Options. (line 18) 54030* msafe-hints: SPU Options. (line 112) 54031* msahf: i386 and x86-64 Options. 54032 (line 705) 54033* msatur: MeP Options. (line 105) 54034* msave-acc-in-interrupts: RX Options. (line 109) 54035* msave-toc-indirect: RS/6000 and PowerPC Options. 54036 (line 880) 54037* mscc: FRV Options. (line 173) 54038* msched-ar-data-spec: IA-64 Options. (line 134) 54039* msched-ar-in-data-spec: IA-64 Options. (line 155) 54040* msched-br-data-spec: IA-64 Options. (line 128) 54041* msched-br-in-data-spec: IA-64 Options. (line 148) 54042* msched-control-spec: IA-64 Options. (line 140) 54043* msched-costly-dep: RS/6000 and PowerPC Options. 54044 (line 524) 54045* msched-count-spec-in-critical-path: IA-64 Options. (line 182) 54046* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 198) 54047* msched-in-control-spec: IA-64 Options. (line 162) 54048* msched-max-memory-insns: IA-64 Options. (line 207) 54049* msched-max-memory-insns-hard-limit: IA-64 Options. (line 213) 54050* msched-prefer-non-control-spec-insns: IA-64 Options. (line 175) 54051* msched-prefer-non-data-spec-insns: IA-64 Options. (line 168) 54052* msched-spec-ldc: IA-64 Options. (line 187) 54053* msched-spec-ldc <1>: IA-64 Options. (line 190) 54054* msched-stop-bits-after-every-cycle: IA-64 Options. (line 194) 54055* mschedule: HPPA Options. (line 72) 54056* mscore5: Score Options. (line 25) 54057* mscore5u: Score Options. (line 28) 54058* mscore7: Score Options. (line 31) 54059* mscore7d: Score Options. (line 35) 54060* msda: V850 Options. (line 40) 54061* msdata: IA-64 Options. (line 42) 54062* msdata <1>: RS/6000 and PowerPC Options. 54063 (line 715) 54064* msdata=all: C6X Options. (line 30) 54065* msdata=data: RS/6000 and PowerPC Options. 54066 (line 720) 54067* msdata=default: C6X Options. (line 22) 54068* msdata=default <1>: RS/6000 and PowerPC Options. 54069 (line 715) 54070* msdata=eabi: RS/6000 and PowerPC Options. 54071 (line 696) 54072* msdata=none: C6X Options. (line 35) 54073* msdata=none <1>: M32R/D Options. (line 40) 54074* msdata=none <2>: RS/6000 and PowerPC Options. 54075 (line 728) 54076* msdata=sdata: M32R/D Options. (line 49) 54077* msdata=sysv: RS/6000 and PowerPC Options. 54078 (line 706) 54079* msdata=use: M32R/D Options. (line 53) 54080* msdram: Blackfin Options. (line 171) 54081* msdram <1>: MeP Options. (line 110) 54082* msecure-plt: RS/6000 and PowerPC Options. 54083 (line 180) 54084* msel-sched-dont-check-control-spec: IA-64 Options. (line 203) 54085* msep-data: Blackfin Options. (line 109) 54086* mserialize-volatile: Xtensa Options. (line 35) 54087* msetlb: MN10300 Options. (line 64) 54088* mshared-library-id: Blackfin Options. (line 102) 54089* mshort: M680x0 Options. (line 216) 54090* msign-extend-enabled: LM32 Options. (line 18) 54091* msim: Blackfin Options. (line 36) 54092* msim <1>: C6X Options. (line 19) 54093* msim <2>: CR16 Options. (line 18) 54094* msim <3>: M32C Options. (line 13) 54095* msim <4>: MeP Options. (line 114) 54096* msim <5>: MSP430 Options. (line 40) 54097* msim <6>: RL78 Options. (line 7) 54098* msim <7>: RS/6000 and PowerPC Options. 54099 (line 652) 54100* msim <8>: RX Options. (line 71) 54101* msim <9>: Xstormy16 Options. (line 9) 54102* msimd: ARC Options. (line 71) 54103* msimnovec: MeP Options. (line 117) 54104* msimple-fpu: RS/6000 and PowerPC Options. 54105 (line 372) 54106* msingle-exit: MMIX Options. (line 65) 54107* msingle-float: MIPS Options. (line 251) 54108* msingle-float <1>: RS/6000 and PowerPC Options. 54109 (line 368) 54110* msingle-pic-base: ARM Options. (line 225) 54111* msingle-pic-base <1>: RS/6000 and PowerPC Options. 54112 (line 511) 54113* msio: HPPA Options. (line 99) 54114* msize-level: ARC Options. (line 281) 54115* mslow-bytes: MCore Options. (line 35) 54116* mslow-flash-data: ARM Options. (line 350) 54117* msmall: MSP430 Options. (line 48) 54118* msmall-data: DEC Alpha Options. (line 187) 54119* msmall-data-limit: RX Options. (line 47) 54120* msmall-divides: MicroBlaze Options. (line 39) 54121* msmall-exec: S/390 and zSeries Options. 54122 (line 79) 54123* msmall-mem: SPU Options. (line 38) 54124* msmall-model: FR30 Options. (line 9) 54125* msmall-text: DEC Alpha Options. (line 205) 54126* msmall16: Adapteva Epiphany Options. 54127 (line 66) 54128* msmallc: Nios II Options. (line 226) 54129* msmartmips: MIPS Options. (line 326) 54130* msoft-float: ARC Options. (line 75) 54131* msoft-float <1>: DEC Alpha Options. (line 10) 54132* msoft-float <2>: FRV Options. (line 27) 54133* msoft-float <3>: HPPA Options. (line 85) 54134* msoft-float <4>: i386 and x86-64 Options. 54135 (line 333) 54136* msoft-float <5>: M680x0 Options. (line 200) 54137* msoft-float <6>: MicroBlaze Options. (line 7) 54138* msoft-float <7>: MIPS Options. (line 237) 54139* msoft-float <8>: PDP-11 Options. (line 13) 54140* msoft-float <9>: RS/6000 and PowerPC Options. 54141 (line 362) 54142* msoft-float <10>: S/390 and zSeries Options. 54143 (line 11) 54144* msoft-float <11>: SPARC Options. (line 39) 54145* msoft-float <12>: V850 Options. (line 113) 54146* msoft-quad-float: SPARC Options. (line 59) 54147* msp8: AVR Options. (line 185) 54148* mspace: V850 Options. (line 30) 54149* mspe: RS/6000 and PowerPC Options. 54150 (line 200) 54151* mspecld-anomaly: Blackfin Options. (line 50) 54152* mspfp: ARC Options. (line 62) 54153* mspfp-compact: ARC Options. (line 63) 54154* mspfp-fast: ARC Options. (line 67) 54155* mspfp_compact: ARC Options. (line 382) 54156* mspfp_fast: ARC Options. (line 385) 54157* msplit-addresses: MIPS Options. (line 488) 54158* msplit-vecmove-early: Adapteva Epiphany Options. 54159 (line 126) 54160* msse: i386 and x86-64 Options. 54161 (line 629) 54162* msse2avx: i386 and x86-64 Options. 54163 (line 905) 54164* msseregparm: i386 and x86-64 Options. 54165 (line 462) 54166* mstack-align: CRIS Options. (line 55) 54167* mstack-bias: SPARC Options. (line 313) 54168* mstack-check-l1: Blackfin Options. (line 76) 54169* mstack-guard: S/390 and zSeries Options. 54170 (line 154) 54171* mstack-increment: MCore Options. (line 50) 54172* mstack-offset: Adapteva Epiphany Options. 54173 (line 37) 54174* mstack-protector-guard=GUARD: i386 and x86-64 Options. 54175 (line 928) 54176* mstack-size: S/390 and zSeries Options. 54177 (line 154) 54178* mstackrealign: i386 and x86-64 Options. 54179 (line 505) 54180* mstdmain: SPU Options. (line 44) 54181* mstrict-align: AArch64 Options. (line 49) 54182* mstrict-align <1>: M680x0 Options. (line 283) 54183* mstrict-align <2>: RS/6000 and PowerPC Options. 54184 (line 463) 54185* mstrict-X: AVR Options. (line 198) 54186* mstring: RS/6000 and PowerPC Options. 54187 (line 399) 54188* mstringop-strategy=ALG: i386 and x86-64 Options. 54189 (line 853) 54190* mstructure-size-boundary: ARM Options. (line 182) 54191* msvr4-struct-return: RS/6000 and PowerPC Options. 54192 (line 604) 54193* mswap: ARC Options. (line 82) 54194* mswape: ARC Options. (line 114) 54195* msym32: MIPS Options. (line 386) 54196* msynci: MIPS Options. (line 740) 54197* msys-crt0: Nios II Options. (line 230) 54198* msys-lib: Nios II Options. (line 234) 54199* MT: Preprocessor Options. 54200 (line 251) 54201* mtarget-align: Xtensa Options. (line 59) 54202* mtas: SH Options. (line 281) 54203* mtda: V850 Options. (line 34) 54204* mtelephony: ARC Options. (line 119) 54205* mtext-section-literals: Xtensa Options. (line 47) 54206* mtf: MeP Options. (line 121) 54207* mthread: i386 and x86-64 Windows Options. 54208 (line 26) 54209* mthreads: i386 and x86-64 Options. 54210 (line 830) 54211* mthumb: ARM Options. (line 266) 54212* mthumb-interwork: ARM Options. (line 25) 54213* mtiny-stack: AVR Options. (line 212) 54214* mtiny=: MeP Options. (line 125) 54215* mTLS: FRV Options. (line 90) 54216* mtls: FRV Options. (line 94) 54217* mtls-dialect: ARM Options. (line 308) 54218* mtls-dialect <1>: i386 and x86-64 Options. 54219 (line 808) 54220* mtls-dialect=desc: AArch64 Options. (line 58) 54221* mtls-dialect=traditional: AArch64 Options. (line 62) 54222* mtls-direct-seg-refs: i386 and x86-64 Options. 54223 (line 895) 54224* mtls-markers: RS/6000 and PowerPC Options. 54225 (line 785) 54226* mtls-size: IA-64 Options. (line 112) 54227* mtoc: RS/6000 and PowerPC Options. 54228 (line 488) 54229* mtomcat-stats: FRV Options. (line 254) 54230* mtoplevel-symbols: MMIX Options. (line 39) 54231* mtp: ARM Options. (line 300) 54232* mtpcs-frame: ARM Options. (line 273) 54233* mtpcs-leaf-frame: ARM Options. (line 279) 54234* mtpf-trace: S/390 and zSeries Options. 54235 (line 129) 54236* mtrap-precision: DEC Alpha Options. (line 109) 54237* mtune: AArch64 Options. (line 90) 54238* mtune <1>: ARC Options. (line 302) 54239* mtune <2>: ARC Options. (line 388) 54240* mtune <3>: ARM Options. (line 97) 54241* mtune <4>: CRIS Options. (line 17) 54242* mtune <5>: DEC Alpha Options. (line 259) 54243* mtune <6>: i386 and x86-64 Options. 54244 (line 216) 54245* mtune <7>: IA-64 Options. (line 116) 54246* mtune <8>: M680x0 Options. (line 68) 54247* mtune <9>: MIPS Options. (line 63) 54248* mtune <10>: MN10300 Options. (line 30) 54249* mtune <11>: RS/6000 and PowerPC Options. 54250 (line 110) 54251* mtune <12>: S/390 and zSeries Options. 54252 (line 122) 54253* mtune <13>: SPARC Options. (line 180) 54254* mtune-ctrl=FEATURE-LIST: i386 and x86-64 Options. 54255 (line 658) 54256* mucb-mcount: ARC Options. (line 179) 54257* muclibc: GNU/Linux Options. (line 13) 54258* muls: Score Options. (line 18) 54259* multcost: ARC Options. (line 393) 54260* multcost=NUMBER: SH Options. (line 303) 54261* multilib-library-pic: FRV Options. (line 110) 54262* multiply-enabled: LM32 Options. (line 15) 54263* multiply_defined: Darwin Options. (line 196) 54264* multiply_defined_unused: Darwin Options. (line 196) 54265* multi_module: Darwin Options. (line 196) 54266* munalign-prob-threshold: ARC Options. (line 330) 54267* munaligned-access: ARM Options. (line 332) 54268* munaligned-doubles: SPARC Options. (line 73) 54269* municode: i386 and x86-64 Windows Options. 54270 (line 30) 54271* muninit-const-in-rodata: MIPS Options. (line 458) 54272* munix: VAX Options. (line 9) 54273* munix-asm: PDP-11 Options. (line 68) 54274* munsafe-dma: SPU Options. (line 18) 54275* mupdate: RS/6000 and PowerPC Options. 54276 (line 410) 54277* muser-enabled: LM32 Options. (line 21) 54278* muser-mode: SPARC Options. (line 85) 54279* musermode: SH Options. (line 296) 54280* mv3push: NDS32 Options. (line 33) 54281* mv850: V850 Options. (line 49) 54282* mv850e: V850 Options. (line 79) 54283* mv850e1: V850 Options. (line 70) 54284* mv850e2: V850 Options. (line 66) 54285* mv850e2v3: V850 Options. (line 61) 54286* mv850e2v4: V850 Options. (line 57) 54287* mv850e3v5: V850 Options. (line 52) 54288* mv850es: V850 Options. (line 75) 54289* mv8plus: SPARC Options. (line 194) 54290* mveclibabi: i386 and x86-64 Options. 54291 (line 776) 54292* mveclibabi <1>: RS/6000 and PowerPC Options. 54293 (line 841) 54294* mvect8-ret-in-mem: i386 and x86-64 Options. 54295 (line 472) 54296* mvirt: MIPS Options. (line 367) 54297* mvis: SPARC Options. (line 201) 54298* mvis2: SPARC Options. (line 207) 54299* mvis3: SPARC Options. (line 215) 54300* mvliw-branch: FRV Options. (line 201) 54301* mvms-return-codes: VMS Options. (line 9) 54302* mvolatile-asm-stop: IA-64 Options. (line 32) 54303* mvolatile-cache: ARC Options. (line 184) 54304* mvr4130-align: MIPS Options. (line 729) 54305* mvrsave: RS/6000 and PowerPC Options. 54306 (line 170) 54307* mvsx: RS/6000 and PowerPC Options. 54308 (line 214) 54309* mvxworks: RS/6000 and PowerPC Options. 54310 (line 673) 54311* mvzeroupper: i386 and x86-64 Options. 54312 (line 686) 54313* mwarn-cell-microcode: RS/6000 and PowerPC Options. 54314 (line 176) 54315* mwarn-dynamicstack: S/390 and zSeries Options. 54316 (line 148) 54317* mwarn-framesize: S/390 and zSeries Options. 54318 (line 140) 54319* mwarn-multiple-fast-interrupts: RX Options. (line 143) 54320* mwarn-reloc: SPU Options. (line 10) 54321* mwide-bitfields: MCore Options. (line 23) 54322* mwin32: i386 and x86-64 Windows Options. 54323 (line 35) 54324* mwindows: i386 and x86-64 Windows Options. 54325 (line 41) 54326* mword-relocations: ARM Options. (line 319) 54327* mwords-little-endian: ARM Options. (line 66) 54328* mx32: i386 and x86-64 Options. 54329 (line 940) 54330* mxgot: M680x0 Options. (line 315) 54331* mxgot <1>: MIPS Options. (line 199) 54332* mxilinx-fpu: RS/6000 and PowerPC Options. 54333 (line 383) 54334* mxl-barrel-shift: MicroBlaze Options. (line 33) 54335* mxl-compat: RS/6000 and PowerPC Options. 54336 (line 320) 54337* mxl-float-convert: MicroBlaze Options. (line 51) 54338* mxl-float-sqrt: MicroBlaze Options. (line 54) 54339* mxl-gp-opt: MicroBlaze Options. (line 45) 54340* mxl-multiply-high: MicroBlaze Options. (line 48) 54341* mxl-pattern-compare: MicroBlaze Options. (line 36) 54342* mxl-reorder: MicroBlaze Options. (line 63) 54343* mxl-soft-div: MicroBlaze Options. (line 30) 54344* mxl-soft-mul: MicroBlaze Options. (line 27) 54345* mxl-stack-check: MicroBlaze Options. (line 42) 54346* mxy: ARC Options. (line 124) 54347* myellowknife: RS/6000 and PowerPC Options. 54348 (line 668) 54349* mzarch: S/390 and zSeries Options. 54350 (line 94) 54351* mzda: V850 Options. (line 45) 54352* mzdcbranch: SH Options. (line 466) 54353* mzero-extend: MMIX Options. (line 26) 54354* no-canonical-prefixes: Overall Options. (line 334) 54355* no-integrated-cpp: Preprocessor Options. 54356 (line 34) 54357* no-sysroot-suffix: Directory Options. (line 109) 54358* noall_load: Darwin Options. (line 196) 54359* nocpp: MIPS Options. (line 562) 54360* nodefaultlibs: Link Options. (line 62) 54361* nofixprebinding: Darwin Options. (line 196) 54362* nofpu: RX Options. (line 17) 54363* nolibdld: HPPA Options. (line 182) 54364* nomultidefs: Darwin Options. (line 196) 54365* non-static: VxWorks Options. (line 16) 54366* noprebind: Darwin Options. (line 196) 54367* noseglinkedit: Darwin Options. (line 196) 54368* nostartfiles: Link Options. (line 57) 54369* nostdinc: Preprocessor Options. 54370 (line 401) 54371* nostdinc++: C++ Dialect Options. 54372 (line 396) 54373* nostdinc++ <1>: Preprocessor Options. 54374 (line 406) 54375* nostdlib: Link Options. (line 74) 54376* no_dead_strip_inits_and_terms: Darwin Options. (line 196) 54377* o: Overall Options. (line 192) 54378* O: Optimize Options. (line 39) 54379* o <1>: Preprocessor Options. 54380 (line 87) 54381* O0: Optimize Options. (line 129) 54382* O1: Optimize Options. (line 39) 54383* O2: Optimize Options. (line 83) 54384* O3: Optimize Options. (line 121) 54385* Ofast: Optimize Options. (line 143) 54386* Og: Optimize Options. (line 149) 54387* Os: Optimize Options. (line 133) 54388* p: Debugging Options. (line 415) 54389* P: Preprocessor Options. 54390 (line 647) 54391* pagezero_size: Darwin Options. (line 196) 54392* param: Optimize Options. (line 2298) 54393* pass-exit-codes: Overall Options. (line 150) 54394* pedantic: Standards. (line 16) 54395* pedantic <1>: Warning Options. (line 71) 54396* pedantic <2>: Preprocessor Options. 54397 (line 175) 54398* pedantic <3>: C Extensions. (line 6) 54399* pedantic <4>: Alternate Keywords. (line 30) 54400* pedantic <5>: Warnings and Errors. 54401 (line 25) 54402* pedantic-errors: Standards. (line 16) 54403* pedantic-errors <1>: Warning Options. (line 112) 54404* pedantic-errors <2>: Preprocessor Options. 54405 (line 180) 54406* pedantic-errors <3>: Non-bugs. (line 216) 54407* pedantic-errors <4>: Warnings and Errors. 54408 (line 25) 54409* pg: Debugging Options. (line 421) 54410* pie: Link Options. (line 99) 54411* pipe: Overall Options. (line 215) 54412* prebind: Darwin Options. (line 196) 54413* prebind_all_twolevel_modules: Darwin Options. (line 196) 54414* print-file-name: Debugging Options. (line 1349) 54415* print-libgcc-file-name: Debugging Options. (line 1383) 54416* print-multi-directory: Debugging Options. (line 1355) 54417* print-multi-lib: Debugging Options. (line 1360) 54418* print-multi-os-directory: Debugging Options. (line 1367) 54419* print-multiarch: Debugging Options. (line 1376) 54420* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 54421 (line 203) 54422* print-prog-name: Debugging Options. (line 1380) 54423* print-search-dirs: Debugging Options. (line 1391) 54424* print-sysroot: Debugging Options. (line 1404) 54425* print-sysroot-headers-suffix: Debugging Options. (line 1411) 54426* private_bundle: Darwin Options. (line 196) 54427* pthread: RS/6000 and PowerPC Options. 54428 (line 792) 54429* pthread <1>: Solaris 2 Options. (line 36) 54430* pthreads: Solaris 2 Options. (line 30) 54431* Q: Debugging Options. (line 427) 54432* Qn: System V Options. (line 18) 54433* Qy: System V Options. (line 14) 54434* rdynamic: Link Options. (line 105) 54435* read_only_relocs: Darwin Options. (line 196) 54436* remap: Preprocessor Options. 54437 (line 694) 54438* S: Overall Options. (line 175) 54439* S <1>: Link Options. (line 20) 54440* s: Link Options. (line 112) 54441* save-temps: Debugging Options. (line 1258) 54442* save-temps=obj: Debugging Options. (line 1284) 54443* sectalign: Darwin Options. (line 196) 54444* sectcreate: Darwin Options. (line 196) 54445* sectobjectsymbols: Darwin Options. (line 196) 54446* sectobjectsymbols <1>: Darwin Options. (line 196) 54447* sectorder: Darwin Options. (line 196) 54448* seg1addr: Darwin Options. (line 196) 54449* segaddr: Darwin Options. (line 196) 54450* seglinkedit: Darwin Options. (line 196) 54451* segprot: Darwin Options. (line 196) 54452* segs_read_only_addr: Darwin Options. (line 196) 54453* segs_read_only_addr <1>: Darwin Options. (line 196) 54454* segs_read_write_addr: Darwin Options. (line 196) 54455* segs_read_write_addr <1>: Darwin Options. (line 196) 54456* seg_addr_table: Darwin Options. (line 196) 54457* seg_addr_table_filename: Darwin Options. (line 196) 54458* shared: Link Options. (line 120) 54459* shared-libgcc: Link Options. (line 128) 54460* short-calls: Adapteva Epiphany Options. 54461 (line 61) 54462* sim: CRIS Options. (line 95) 54463* sim2: CRIS Options. (line 101) 54464* single_module: Darwin Options. (line 196) 54465* specs: Directory Options. (line 86) 54466* static: Link Options. (line 116) 54467* static <1>: Darwin Options. (line 196) 54468* static <2>: HPPA Options. (line 186) 54469* static-libasan: Link Options. (line 163) 54470* static-libgcc: Link Options. (line 128) 54471* static-liblsan: Link Options. (line 179) 54472* static-libstdc++: Link Options. (line 196) 54473* static-libtsan: Link Options. (line 171) 54474* static-libubsan: Link Options. (line 187) 54475* std: Standards. (line 16) 54476* std <1>: C Dialect Options. (line 46) 54477* std <2>: Other Builtins. (line 21) 54478* std <3>: Non-bugs. (line 107) 54479* std=: Preprocessor Options. 54480 (line 340) 54481* sub_library: Darwin Options. (line 196) 54482* sub_umbrella: Darwin Options. (line 196) 54483* symbolic: Link Options. (line 207) 54484* sysroot: Directory Options. (line 94) 54485* T: Link Options. (line 213) 54486* target-help: Overall Options. (line 230) 54487* target-help <1>: Preprocessor Options. 54488 (line 699) 54489* threads: HPPA Options. (line 199) 54490* time: Debugging Options. (line 1299) 54491* tno-android-cc: GNU/Linux Options. (line 31) 54492* tno-android-ld: GNU/Linux Options. (line 35) 54493* traditional: C Dialect Options. (line 333) 54494* traditional <1>: Incompatibilities. (line 6) 54495* traditional-cpp: C Dialect Options. (line 333) 54496* traditional-cpp <1>: Preprocessor Options. 54497 (line 677) 54498* trigraphs: C Dialect Options. (line 328) 54499* trigraphs <1>: Preprocessor Options. 54500 (line 681) 54501* twolevel_namespace: Darwin Options. (line 196) 54502* U: Preprocessor Options. 54503 (line 69) 54504* u: Link Options. (line 245) 54505* umbrella: Darwin Options. (line 196) 54506* undef: Preprocessor Options. 54507 (line 73) 54508* undefined: Darwin Options. (line 196) 54509* unexported_symbols_list: Darwin Options. (line 196) 54510* v: Overall Options. (line 203) 54511* v <1>: Preprocessor Options. 54512 (line 703) 54513* version: Overall Options. (line 338) 54514* version <1>: Preprocessor Options. 54515 (line 715) 54516* w: Warning Options. (line 25) 54517* W: Warning Options. (line 167) 54518* W <1>: Warning Options. (line 1267) 54519* W <2>: Warning Options. (line 1351) 54520* w <1>: Preprocessor Options. 54521 (line 171) 54522* W <3>: Incompatibilities. (line 64) 54523* Wa: Assembler Options. (line 9) 54524* Wabi: C++ Dialect Options. 54525 (line 404) 54526* Waddr-space-convert: AVR Options. (line 215) 54527* Waddress: Warning Options. (line 1184) 54528* Waggregate-return: Warning Options. (line 1202) 54529* Waggressive-loop-optimizations: Warning Options. (line 1207) 54530* Wall: Warning Options. (line 116) 54531* Wall <1>: Preprocessor Options. 54532 (line 93) 54533* Wall <2>: Standard Libraries. (line 6) 54534* Warray-bounds: Warning Options. (line 826) 54535* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 54536 (line 157) 54537* Wattributes: Warning Options. (line 1212) 54538* Wbad-function-cast: Warning Options. (line 1041) 54539* Wbuiltin-macro-redefined: Warning Options. (line 1218) 54540* Wcast-align: Warning Options. (line 1072) 54541* Wcast-qual: Warning Options. (line 1056) 54542* Wchar-subscripts: Warning Options. (line 206) 54543* Wclobbered: Warning Options. (line 1091) 54544* Wcomment: Warning Options. (line 211) 54545* Wcomment <1>: Preprocessor Options. 54546 (line 101) 54547* Wcomments: Preprocessor Options. 54548 (line 101) 54549* Wconditionally-supported: Warning Options. (line 1095) 54550* Wconversion: Warning Options. (line 1098) 54551* Wconversion-null: Warning Options. (line 1116) 54552* Wctor-dtor-privacy: C++ Dialect Options. 54553 (line 511) 54554* Wdate-time: Warning Options. (line 1124) 54555* Wdeclaration-after-statement: Warning Options. (line 958) 54556* Wdelete-incomplete: Warning Options. (line 1129) 54557* Wdelete-non-virtual-dtor: C++ Dialect Options. 54558 (line 518) 54559* Wdeprecated: Warning Options. (line 1333) 54560* Wdeprecated-declarations: Warning Options. (line 1337) 54561* Wdisabled-optimization: Warning Options. (line 1497) 54562* Wdiv-by-zero: Warning Options. (line 831) 54563* Wdouble-promotion: Warning Options. (line 235) 54564* weak_reference_mismatches: Darwin Options. (line 196) 54565* Weffc++: C++ Dialect Options. 54566 (line 598) 54567* Wempty-body: Warning Options. (line 1136) 54568* Wendif-labels: Warning Options. (line 968) 54569* Wendif-labels <1>: Preprocessor Options. 54570 (line 148) 54571* Wenum-compare: Warning Options. (line 1140) 54572* Werror: Warning Options. (line 28) 54573* Werror <1>: Preprocessor Options. 54574 (line 161) 54575* Werror=: Warning Options. (line 31) 54576* Wextra: Warning Options. (line 167) 54577* Wextra <1>: Warning Options. (line 1267) 54578* Wextra <2>: Warning Options. (line 1351) 54579* Wfatal-errors: Warning Options. (line 48) 54580* Wfloat-conversion: Warning Options. (line 1170) 54581* Wfloat-equal: Warning Options. (line 858) 54582* Wformat: Warning Options. (line 254) 54583* Wformat <1>: Warning Options. (line 279) 54584* Wformat <2>: Warning Options. (line 805) 54585* Wformat <3>: Function Attributes. 54586 (line 453) 54587* Wformat-contains-nul: Warning Options. (line 288) 54588* Wformat-extra-args: Warning Options. (line 292) 54589* Wformat-nonliteral: Warning Options. (line 316) 54590* Wformat-nonliteral <1>: Function Attributes. 54591 (line 518) 54592* Wformat-security: Warning Options. (line 321) 54593* Wformat-y2k: Warning Options. (line 333) 54594* Wformat-zero-length: Warning Options. (line 306) 54595* Wformat=: Warning Options. (line 254) 54596* Wformat=1: Warning Options. (line 279) 54597* Wformat=2: Warning Options. (line 311) 54598* Wframe-larger-than: Warning Options. (line 982) 54599* Wfree-nonheap-object: Warning Options. (line 991) 54600* whatsloaded: Darwin Options. (line 196) 54601* whyload: Darwin Options. (line 196) 54602* Wignored-qualifiers: Warning Options. (line 373) 54603* Wimplicit: Warning Options. (line 369) 54604* Wimplicit-function-declaration: Warning Options. (line 363) 54605* Wimplicit-int: Warning Options. (line 359) 54606* Winherited-variadic-ctor: Warning Options. (line 1407) 54607* Winit-self: Warning Options. (line 344) 54608* Winline: Warning Options. (line 1412) 54609* Winline <1>: Inline. (line 63) 54610* Wint-to-pointer-cast: Warning Options. (line 1439) 54611* Winvalid-offsetof: Warning Options. (line 1425) 54612* Winvalid-pch: Warning Options. (line 1448) 54613* Wjump-misses-init: Warning Options. (line 1146) 54614* Wl: Link Options. (line 237) 54615* Wlarger-than-LEN: Warning Options. (line 979) 54616* Wlarger-than=LEN: Warning Options. (line 979) 54617* Wliteral-suffix: C++ Dialect Options. 54618 (line 525) 54619* Wlogical-op: Warning Options. (line 1197) 54620* Wlong-long: Warning Options. (line 1452) 54621* Wmain: Warning Options. (line 384) 54622* Wmaybe-uninitialized: Warning Options. (line 642) 54623* Wmissing-braces: Warning Options. (line 391) 54624* Wmissing-declarations: Warning Options. (line 1257) 54625* Wmissing-field-initializers: Warning Options. (line 1267) 54626* Wmissing-format-attribute: Warning Options. (line 805) 54627* Wmissing-include-dirs: Warning Options. (line 402) 54628* Wmissing-parameter-type: Warning Options. (line 1239) 54629* Wmissing-prototypes: Warning Options. (line 1247) 54630* Wmultichar: Warning Options. (line 1285) 54631* Wnarrowing: C++ Dialect Options. 54632 (line 546) 54633* Wnested-externs: Warning Options. (line 1404) 54634* Wno-abi: C++ Dialect Options. 54635 (line 404) 54636* Wno-address: Warning Options. (line 1184) 54637* Wno-aggregate-return: Warning Options. (line 1202) 54638* Wno-aggressive-loop-optimizations: Warning Options. (line 1207) 54639* Wno-all: Warning Options. (line 116) 54640* Wno-array-bounds: Warning Options. (line 826) 54641* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 54642 (line 157) 54643* Wno-attributes: Warning Options. (line 1212) 54644* Wno-bad-function-cast: Warning Options. (line 1041) 54645* Wno-builtin-macro-redefined: Warning Options. (line 1218) 54646* Wno-cast-align: Warning Options. (line 1072) 54647* Wno-cast-qual: Warning Options. (line 1056) 54648* Wno-char-subscripts: Warning Options. (line 206) 54649* Wno-clobbered: Warning Options. (line 1091) 54650* Wno-comment: Warning Options. (line 211) 54651* Wno-conditionally-supported: Warning Options. (line 1095) 54652* Wno-conversion: Warning Options. (line 1098) 54653* Wno-conversion-null: Warning Options. (line 1116) 54654* Wno-coverage-mismatch: Warning Options. (line 216) 54655* Wno-ctor-dtor-privacy: C++ Dialect Options. 54656 (line 511) 54657* Wno-date-time: Warning Options. (line 1124) 54658* Wno-declaration-after-statement: Warning Options. (line 958) 54659* Wno-delete-incomplete: Warning Options. (line 1129) 54660* Wno-delete-non-virtual-dtor: C++ Dialect Options. 54661 (line 518) 54662* Wno-deprecated: Warning Options. (line 1333) 54663* Wno-deprecated-declarations: Warning Options. (line 1337) 54664* Wno-disabled-optimization: Warning Options. (line 1497) 54665* Wno-div-by-zero: Warning Options. (line 831) 54666* Wno-double-promotion: Warning Options. (line 235) 54667* Wno-effc++: C++ Dialect Options. 54668 (line 598) 54669* Wno-empty-body: Warning Options. (line 1136) 54670* Wno-endif-labels: Warning Options. (line 968) 54671* Wno-enum-compare: Warning Options. (line 1140) 54672* Wno-error: Warning Options. (line 28) 54673* Wno-error=: Warning Options. (line 31) 54674* Wno-extra: Warning Options. (line 167) 54675* Wno-extra <1>: Warning Options. (line 1267) 54676* Wno-extra <2>: Warning Options. (line 1351) 54677* Wno-fatal-errors: Warning Options. (line 48) 54678* Wno-float-conversion: Warning Options. (line 1170) 54679* Wno-float-equal: Warning Options. (line 858) 54680* Wno-format: Warning Options. (line 254) 54681* Wno-format <1>: Warning Options. (line 805) 54682* Wno-format-contains-nul: Warning Options. (line 288) 54683* Wno-format-extra-args: Warning Options. (line 292) 54684* Wno-format-nonliteral: Warning Options. (line 316) 54685* Wno-format-security: Warning Options. (line 321) 54686* Wno-format-y2k: Warning Options. (line 333) 54687* Wno-format-zero-length: Warning Options. (line 306) 54688* Wno-free-nonheap-object: Warning Options. (line 991) 54689* Wno-ignored-qualifiers: Warning Options. (line 373) 54690* Wno-implicit: Warning Options. (line 369) 54691* Wno-implicit-function-declaration: Warning Options. (line 363) 54692* Wno-implicit-int: Warning Options. (line 359) 54693* Wno-inherited-variadic-ctor: Warning Options. (line 1407) 54694* Wno-init-self: Warning Options. (line 344) 54695* Wno-inline: Warning Options. (line 1412) 54696* Wno-int-to-pointer-cast: Warning Options. (line 1439) 54697* Wno-invalid-offsetof: Warning Options. (line 1425) 54698* Wno-invalid-pch: Warning Options. (line 1448) 54699* Wno-jump-misses-init: Warning Options. (line 1146) 54700* Wno-literal-suffix: C++ Dialect Options. 54701 (line 525) 54702* Wno-logical-op: Warning Options. (line 1197) 54703* Wno-long-long: Warning Options. (line 1452) 54704* Wno-main: Warning Options. (line 384) 54705* Wno-maybe-uninitialized: Warning Options. (line 642) 54706* Wno-missing-braces: Warning Options. (line 391) 54707* Wno-missing-declarations: Warning Options. (line 1257) 54708* Wno-missing-field-initializers: Warning Options. (line 1267) 54709* Wno-missing-format-attribute: Warning Options. (line 805) 54710* Wno-missing-include-dirs: Warning Options. (line 402) 54711* Wno-missing-parameter-type: Warning Options. (line 1239) 54712* Wno-missing-prototypes: Warning Options. (line 1247) 54713* Wno-multichar: Warning Options. (line 1285) 54714* Wno-narrowing: C++ Dialect Options. 54715 (line 546) 54716* Wno-nested-externs: Warning Options. (line 1404) 54717* Wno-noexcept: C++ Dialect Options. 54718 (line 559) 54719* Wno-non-template-friend: C++ Dialect Options. 54720 (line 633) 54721* Wno-non-virtual-dtor: C++ Dialect Options. 54722 (line 565) 54723* Wno-nonnull: Warning Options. (line 337) 54724* Wno-old-style-cast: C++ Dialect Options. 54725 (line 649) 54726* Wno-old-style-declaration: Warning Options. (line 1229) 54727* Wno-old-style-definition: Warning Options. (line 1235) 54728* Wno-overflow: Warning Options. (line 1343) 54729* Wno-overlength-strings: Warning Options. (line 1517) 54730* Wno-overloaded-virtual: C++ Dialect Options. 54731 (line 655) 54732* Wno-override-init: Warning Options. (line 1351) 54733* Wno-packed: Warning Options. (line 1359) 54734* Wno-packed-bitfield-compat: Warning Options. (line 1376) 54735* Wno-padded: Warning Options. (line 1393) 54736* Wno-parentheses: Warning Options. (line 405) 54737* Wno-pedantic-ms-format: Warning Options. (line 1021) 54738* Wno-pmf-conversions: C++ Dialect Options. 54739 (line 674) 54740* Wno-pmf-conversions <1>: Bound member functions. 54741 (line 35) 54742* Wno-pointer-arith: Warning Options. (line 1027) 54743* Wno-pointer-sign: Warning Options. (line 1506) 54744* Wno-pointer-to-int-cast: Warning Options. (line 1444) 54745* Wno-pragmas: Warning Options. (line 692) 54746* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 54747 (line 161) 54748* Wno-redundant-decls: Warning Options. (line 1400) 54749* Wno-reorder: C++ Dialect Options. 54750 (line 573) 54751* Wno-return-local-addr: Warning Options. (line 500) 54752* Wno-return-type: Warning Options. (line 504) 54753* Wno-selector: Objective-C and Objective-C++ Dialect Options. 54754 (line 171) 54755* Wno-sequence-point: Warning Options. (line 454) 54756* Wno-shadow: Warning Options. (line 972) 54757* Wno-sign-compare: Warning Options. (line 1157) 54758* Wno-sign-conversion: Warning Options. (line 1164) 54759* Wno-sign-promo: C++ Dialect Options. 54760 (line 678) 54761* Wno-sizeof-pointer-memaccess: Warning Options. (line 1176) 54762* Wno-stack-protector: Warning Options. (line 1512) 54763* Wno-strict-aliasing: Warning Options. (line 697) 54764* Wno-strict-null-sentinel: C++ Dialect Options. 54765 (line 626) 54766* Wno-strict-overflow: Warning Options. (line 736) 54767* Wno-strict-prototypes: Warning Options. (line 1223) 54768* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 54769 (line 183) 54770* Wno-suggest-attribute=: Warning Options. (line 785) 54771* Wno-suggest-attribute=const: Warning Options. (line 791) 54772* Wno-suggest-attribute=format: Warning Options. (line 805) 54773* Wno-suggest-attribute=noreturn: Warning Options. (line 791) 54774* Wno-suggest-attribute=pure: Warning Options. (line 791) 54775* Wno-switch: Warning Options. (line 518) 54776* Wno-switch-default: Warning Options. (line 526) 54777* Wno-switch-enum: Warning Options. (line 529) 54778* Wno-sync-nand: Warning Options. (line 538) 54779* Wno-system-headers: Warning Options. (line 836) 54780* Wno-traditional: Warning Options. (line 873) 54781* Wno-traditional-conversion: Warning Options. (line 950) 54782* Wno-trampolines: Warning Options. (line 847) 54783* Wno-trigraphs: Warning Options. (line 543) 54784* Wno-type-limits: Warning Options. (line 1034) 54785* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 54786 (line 191) 54787* Wno-undef: Warning Options. (line 965) 54788* Wno-uninitialized: Warning Options. (line 620) 54789* Wno-unknown-pragmas: Warning Options. (line 685) 54790* Wno-unsafe-loop-optimizations: Warning Options. (line 1015) 54791* Wno-unused: Warning Options. (line 613) 54792* Wno-unused-but-set-parameter: Warning Options. (line 548) 54793* Wno-unused-but-set-variable: Warning Options. (line 557) 54794* Wno-unused-function: Warning Options. (line 567) 54795* Wno-unused-label: Warning Options. (line 572) 54796* Wno-unused-parameter: Warning Options. (line 583) 54797* Wno-unused-result: Warning Options. (line 590) 54798* Wno-unused-value: Warning Options. (line 603) 54799* Wno-unused-variable: Warning Options. (line 595) 54800* Wno-useless-cast: Warning Options. (line 1133) 54801* Wno-varargs: Warning Options. (line 1463) 54802* Wno-variadic-macros: Warning Options. (line 1457) 54803* Wno-vector-operation-performance: Warning Options. (line 1468) 54804* Wno-virtual-move-assign: Warning Options. (line 1478) 54805* Wno-vla: Warning Options. (line 1487) 54806* Wno-volatile-register-var: Warning Options. (line 1491) 54807* Wno-write-strings: Warning Options. (line 1078) 54808* Wno-zero-as-null-pointer-constant: Warning Options. (line 1120) 54809* Wnoexcept: C++ Dialect Options. 54810 (line 559) 54811* Wnon-template-friend: C++ Dialect Options. 54812 (line 633) 54813* Wnon-virtual-dtor: C++ Dialect Options. 54814 (line 565) 54815* Wnonnull: Warning Options. (line 337) 54816* Wnormalized=: Warning Options. (line 1291) 54817* Wold-style-cast: C++ Dialect Options. 54818 (line 649) 54819* Wold-style-declaration: Warning Options. (line 1229) 54820* Wold-style-definition: Warning Options. (line 1235) 54821* Wopenm-simd: Warning Options. (line 1346) 54822* Woverflow: Warning Options. (line 1343) 54823* Woverlength-strings: Warning Options. (line 1517) 54824* Woverloaded-virtual: C++ Dialect Options. 54825 (line 655) 54826* Woverride-init: Warning Options. (line 1351) 54827* Wp: Preprocessor Options. 54828 (line 14) 54829* Wpacked: Warning Options. (line 1359) 54830* Wpacked-bitfield-compat: Warning Options. (line 1376) 54831* Wpadded: Warning Options. (line 1393) 54832* Wparentheses: Warning Options. (line 405) 54833* Wpedantic: Warning Options. (line 71) 54834* Wpedantic-ms-format: Warning Options. (line 1021) 54835* Wpmf-conversions: C++ Dialect Options. 54836 (line 674) 54837* Wpointer-arith: Warning Options. (line 1027) 54838* Wpointer-arith <1>: Pointer Arith. (line 13) 54839* Wpointer-sign: Warning Options. (line 1506) 54840* Wpointer-to-int-cast: Warning Options. (line 1444) 54841* Wpragmas: Warning Options. (line 692) 54842* Wprotocol: Objective-C and Objective-C++ Dialect Options. 54843 (line 161) 54844* wrapper: Overall Options. (line 341) 54845* Wredundant-decls: Warning Options. (line 1400) 54846* Wreorder: C++ Dialect Options. 54847 (line 573) 54848* Wreturn-local-addr: Warning Options. (line 500) 54849* Wreturn-type: Warning Options. (line 504) 54850* Wselector: Objective-C and Objective-C++ Dialect Options. 54851 (line 171) 54852* Wsequence-point: Warning Options. (line 454) 54853* Wshadow: Warning Options. (line 972) 54854* Wsign-compare: Warning Options. (line 1157) 54855* Wsign-conversion: Warning Options. (line 1164) 54856* Wsign-promo: C++ Dialect Options. 54857 (line 678) 54858* Wsizeof-pointer-memaccess: Warning Options. (line 1176) 54859* Wstack-protector: Warning Options. (line 1512) 54860* Wstack-usage: Warning Options. (line 995) 54861* Wstrict-aliasing: Warning Options. (line 697) 54862* Wstrict-aliasing=n: Warning Options. (line 704) 54863* Wstrict-null-sentinel: C++ Dialect Options. 54864 (line 626) 54865* Wstrict-overflow: Warning Options. (line 736) 54866* Wstrict-prototypes: Warning Options. (line 1223) 54867* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 54868 (line 183) 54869* Wsuggest-attribute=: Warning Options. (line 785) 54870* Wsuggest-attribute=const: Warning Options. (line 791) 54871* Wsuggest-attribute=format: Warning Options. (line 805) 54872* Wsuggest-attribute=noreturn: Warning Options. (line 791) 54873* Wsuggest-attribute=pure: Warning Options. (line 791) 54874* Wswitch: Warning Options. (line 518) 54875* Wswitch-default: Warning Options. (line 526) 54876* Wswitch-enum: Warning Options. (line 529) 54877* Wsync-nand: Warning Options. (line 538) 54878* Wsystem-headers: Warning Options. (line 836) 54879* Wsystem-headers <1>: Preprocessor Options. 54880 (line 165) 54881* Wtraditional: Warning Options. (line 873) 54882* Wtraditional <1>: Preprocessor Options. 54883 (line 118) 54884* Wtraditional-conversion: Warning Options. (line 950) 54885* Wtrampolines: Warning Options. (line 847) 54886* Wtrigraphs: Warning Options. (line 543) 54887* Wtrigraphs <1>: Preprocessor Options. 54888 (line 106) 54889* Wtype-limits: Warning Options. (line 1034) 54890* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 54891 (line 191) 54892* Wundef: Warning Options. (line 965) 54893* Wundef <1>: Preprocessor Options. 54894 (line 124) 54895* Wuninitialized: Warning Options. (line 620) 54896* Wunknown-pragmas: Warning Options. (line 685) 54897* Wunsafe-loop-optimizations: Warning Options. (line 1015) 54898* Wunsuffixed-float-constants: Warning Options. (line 1532) 54899* Wunused: Warning Options. (line 613) 54900* Wunused-but-set-parameter: Warning Options. (line 548) 54901* Wunused-but-set-variable: Warning Options. (line 557) 54902* Wunused-function: Warning Options. (line 567) 54903* Wunused-label: Warning Options. (line 572) 54904* Wunused-local-typedefs: Warning Options. (line 579) 54905* Wunused-macros: Preprocessor Options. 54906 (line 129) 54907* Wunused-parameter: Warning Options. (line 583) 54908* Wunused-result: Warning Options. (line 590) 54909* Wunused-value: Warning Options. (line 603) 54910* Wunused-variable: Warning Options. (line 595) 54911* Wuseless-cast: Warning Options. (line 1133) 54912* Wvarargs: Warning Options. (line 1463) 54913* Wvariadic-macros: Warning Options. (line 1457) 54914* Wvector-operation-performance: Warning Options. (line 1468) 54915* Wvirtual-move-assign: Warning Options. (line 1478) 54916* Wvla: Warning Options. (line 1487) 54917* Wvolatile-register-var: Warning Options. (line 1491) 54918* Wwrite-strings: Warning Options. (line 1078) 54919* Wzero-as-null-pointer-constant: Warning Options. (line 1120) 54920* x: Overall Options. (line 126) 54921* x <1>: Preprocessor Options. 54922 (line 324) 54923* Xassembler: Assembler Options. (line 13) 54924* Xbind-lazy: VxWorks Options. (line 26) 54925* Xbind-now: VxWorks Options. (line 30) 54926* Xlinker: Link Options. (line 219) 54927* Xpreprocessor: Preprocessor Options. 54928 (line 25) 54929* Ym: System V Options. (line 26) 54930* YP: System V Options. (line 22) 54931 54932 54933File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 54934 54935Keyword Index 54936************* 54937 54938[index] 54939* Menu: 54940 54941* '!' in constraint: Multi-Alternative. (line 33) 54942* '#' in constraint: Modifiers. (line 57) 54943* '#pragma': Pragmas. (line 6) 54944* #pragma implementation: C++ Interface. (line 39) 54945* '#pragma implementation', implied: C++ Interface. (line 46) 54946* #pragma interface: C++ Interface. (line 20) 54947* '#pragma', reason for not using: Function Attributes. 54948 (line 2055) 54949* $: Dollar Signs. (line 6) 54950* '%' in constraint: Modifiers. (line 45) 54951* '%include': Spec Files. (line 26) 54952* '%include_noerr': Spec Files. (line 30) 54953* '%rename': Spec Files. (line 34) 54954* '&' in constraint: Modifiers. (line 25) 54955* ''': Incompatibilities. (line 116) 54956* '*' in constraint: Modifiers. (line 62) 54957* *__builtin_assume_aligned: Other Builtins. (line 332) 54958* '+' in constraint: Modifiers. (line 12) 54959* '-lgcc', use with '-nodefaultlibs': Link Options. (line 85) 54960* '-lgcc', use with '-nostdlib': Link Options. (line 85) 54961* '-march' feature modifiers: AArch64 Options. (line 126) 54962* '-mcpu' feature modifiers: AArch64 Options. (line 126) 54963* '-nodefaultlibs' and unresolved references: Link Options. (line 85) 54964* '-nostdlib' and unresolved references: Link Options. (line 85) 54965* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 54966 (line 739) 54967* '//': C++ Comments. (line 6) 54968* '0' in constraint: Simple Constraints. (line 125) 54969* '<' in constraint: Simple Constraints. (line 47) 54970* '=' in constraint: Modifiers. (line 8) 54971* '>' in constraint: Simple Constraints. (line 59) 54972* '?' in constraint: Multi-Alternative. (line 27) 54973* '?:' extensions: Conditionals. (line 6) 54974* '?:' side effect: Conditionals. (line 20) 54975* '_' in variables in macros: Typeof. (line 46) 54976* '_Accum' data type: Fixed-Point. (line 6) 54977* '_Complex' keyword: Complex. (line 6) 54978* '_Decimal128' data type: Decimal Float. (line 6) 54979* '_Decimal32' data type: Decimal Float. (line 6) 54980* '_Decimal64' data type: Decimal Float. (line 6) 54981* _Exit: Other Builtins. (line 6) 54982* _exit: Other Builtins. (line 6) 54983* '_Fract' data type: Fixed-Point. (line 6) 54984* _HTM_FIRST_USER_ABORT_CODE: S/390 System z Built-in Functions. 54985 (line 44) 54986* '_Sat' data type: Fixed-Point. (line 6) 54987* _xabort: X86 transactional memory intrinsics. 54988 (line 61) 54989* _xbegin: X86 transactional memory intrinsics. 54990 (line 19) 54991* _xend: X86 transactional memory intrinsics. 54992 (line 52) 54993* _xtest: X86 transactional memory intrinsics. 54994 (line 57) 54995* __atomic_add_fetch: __atomic Builtins. (line 153) 54996* __atomic_always_lock_free: __atomic Builtins. (line 230) 54997* __atomic_and_fetch: __atomic Builtins. (line 157) 54998* __atomic_clear: __atomic Builtins. (line 204) 54999* __atomic_compare_exchange: __atomic Builtins. (line 145) 55000* __atomic_compare_exchange_n: __atomic Builtins. (line 124) 55001* __atomic_exchange: __atomic Builtins. (line 118) 55002* __atomic_exchange_n: __atomic Builtins. (line 108) 55003* __atomic_fetch_add: __atomic Builtins. (line 172) 55004* __atomic_fetch_and: __atomic Builtins. (line 176) 55005* __atomic_fetch_nand: __atomic Builtins. (line 182) 55006* __atomic_fetch_or: __atomic Builtins. (line 180) 55007* __atomic_fetch_sub: __atomic Builtins. (line 174) 55008* __atomic_fetch_xor: __atomic Builtins. (line 178) 55009* __atomic_is_lock_free: __atomic Builtins. (line 244) 55010* __atomic_load: __atomic Builtins. (line 90) 55011* __atomic_load_n: __atomic Builtins. (line 83) 55012* __atomic_nand_fetch: __atomic Builtins. (line 163) 55013* __atomic_or_fetch: __atomic Builtins. (line 161) 55014* __atomic_signal_fence: __atomic Builtins. (line 223) 55015* __atomic_store: __atomic Builtins. (line 103) 55016* __atomic_store_n: __atomic Builtins. (line 95) 55017* __atomic_sub_fetch: __atomic Builtins. (line 155) 55018* __atomic_test_and_set: __atomic Builtins. (line 192) 55019* __atomic_thread_fence: __atomic Builtins. (line 216) 55020* __atomic_xor_fetch: __atomic Builtins. (line 159) 55021* __builtin_apply: Constructing Calls. (line 29) 55022* __builtin_apply_args: Constructing Calls. (line 19) 55023* __builtin_arc_aligned: ARC Built-in Functions. 55024 (line 18) 55025* __builtin_arc_brk: ARC Built-in Functions. 55026 (line 28) 55027* __builtin_arc_core_read: ARC Built-in Functions. 55028 (line 32) 55029* __builtin_arc_core_write: ARC Built-in Functions. 55030 (line 39) 55031* __builtin_arc_divaw: ARC Built-in Functions. 55032 (line 46) 55033* __builtin_arc_flag: ARC Built-in Functions. 55034 (line 53) 55035* __builtin_arc_lr: ARC Built-in Functions. 55036 (line 57) 55037* __builtin_arc_mul64: ARC Built-in Functions. 55038 (line 64) 55039* __builtin_arc_mulu64: ARC Built-in Functions. 55040 (line 68) 55041* __builtin_arc_nop: ARC Built-in Functions. 55042 (line 73) 55043* __builtin_arc_norm: ARC Built-in Functions. 55044 (line 77) 55045* __builtin_arc_normw: ARC Built-in Functions. 55046 (line 84) 55047* __builtin_arc_rtie: ARC Built-in Functions. 55048 (line 91) 55049* __builtin_arc_sleep: ARC Built-in Functions. 55050 (line 95) 55051* __builtin_arc_sr: ARC Built-in Functions. 55052 (line 99) 55053* __builtin_arc_swap: ARC Built-in Functions. 55054 (line 106) 55055* __builtin_arc_swi: ARC Built-in Functions. 55056 (line 112) 55057* __builtin_arc_sync: ARC Built-in Functions. 55058 (line 116) 55059* __builtin_arc_trap_s: ARC Built-in Functions. 55060 (line 120) 55061* __builtin_arc_unimp_s: ARC Built-in Functions. 55062 (line 124) 55063* __builtin_bswap16: Other Builtins. (line 599) 55064* __builtin_bswap32: Other Builtins. (line 603) 55065* __builtin_bswap64: Other Builtins. (line 607) 55066* __builtin_choose_expr: Other Builtins. (line 154) 55067* __builtin_clrsb: Other Builtins. (line 529) 55068* __builtin_clrsbl: Other Builtins. (line 551) 55069* __builtin_clrsbll: Other Builtins. (line 574) 55070* __builtin_clz: Other Builtins. (line 521) 55071* __builtin_clzl: Other Builtins. (line 543) 55072* __builtin_clzll: Other Builtins. (line 566) 55073* __builtin_complex: Other Builtins. (line 194) 55074* __builtin_constant_p: Other Builtins. (line 203) 55075* __builtin_cpu_init: X86 Built-in Functions. 55076 (line 62) 55077* __builtin_cpu_is: X86 Built-in Functions. 55078 (line 90) 55079* __builtin_cpu_supports: X86 Built-in Functions. 55080 (line 162) 55081* __builtin_ctz: Other Builtins. (line 525) 55082* __builtin_ctzl: Other Builtins. (line 547) 55083* __builtin_ctzll: Other Builtins. (line 570) 55084* __builtin_expect: Other Builtins. (line 252) 55085* __builtin_extract_return_addr: Return Address. (line 35) 55086* __builtin_ffs: Other Builtins. (line 517) 55087* __builtin_ffsl: Other Builtins. (line 540) 55088* __builtin_ffsll: Other Builtins. (line 562) 55089* __builtin_FILE: Other Builtins. (line 361) 55090* __builtin_fpclassify: Other Builtins. (line 6) 55091* __builtin_fpclassify <1>: Other Builtins. (line 431) 55092* __builtin_frame_address: Return Address. (line 47) 55093* __builtin_frob_return_address: Return Address. (line 44) 55094* __builtin_FUNCTION: Other Builtins. (line 356) 55095* __builtin_huge_val: Other Builtins. (line 419) 55096* __builtin_huge_valf: Other Builtins. (line 424) 55097* __builtin_huge_vall: Other Builtins. (line 427) 55098* __builtin_huge_valq: X86 Built-in Functions. 55099 (line 57) 55100* __builtin_inf: Other Builtins. (line 442) 55101* __builtin_infd128: Other Builtins. (line 452) 55102* __builtin_infd32: Other Builtins. (line 446) 55103* __builtin_infd64: Other Builtins. (line 449) 55104* __builtin_inff: Other Builtins. (line 456) 55105* __builtin_infl: Other Builtins. (line 461) 55106* __builtin_infq: X86 Built-in Functions. 55107 (line 54) 55108* __builtin_isfinite: Other Builtins. (line 6) 55109* __builtin_isgreater: Other Builtins. (line 6) 55110* __builtin_isgreaterequal: Other Builtins. (line 6) 55111* __builtin_isinf_sign: Other Builtins. (line 6) 55112* __builtin_isinf_sign <1>: Other Builtins. (line 465) 55113* __builtin_isless: Other Builtins. (line 6) 55114* __builtin_islessequal: Other Builtins. (line 6) 55115* __builtin_islessgreater: Other Builtins. (line 6) 55116* __builtin_isnormal: Other Builtins. (line 6) 55117* __builtin_isunordered: Other Builtins. (line 6) 55118* __builtin_LINE: Other Builtins. (line 350) 55119* __builtin_nan: Other Builtins. (line 473) 55120* __builtin_nand128: Other Builtins. (line 495) 55121* __builtin_nand32: Other Builtins. (line 489) 55122* __builtin_nand64: Other Builtins. (line 492) 55123* __builtin_nanf: Other Builtins. (line 499) 55124* __builtin_nanl: Other Builtins. (line 502) 55125* __builtin_nans: Other Builtins. (line 506) 55126* __builtin_nansf: Other Builtins. (line 510) 55127* __builtin_nansl: Other Builtins. (line 513) 55128* __builtin_nds32_isb: NDS32 Built-in Functions. 55129 (line 12) 55130* __builtin_nds32_isync: NDS32 Built-in Functions. 55131 (line 8) 55132* __builtin_nds32_mfsr: NDS32 Built-in Functions. 55133 (line 15) 55134* __builtin_nds32_mfusr: NDS32 Built-in Functions. 55135 (line 18) 55136* __builtin_nds32_mtsr: NDS32 Built-in Functions. 55137 (line 21) 55138* __builtin_nds32_mtusr: NDS32 Built-in Functions. 55139 (line 24) 55140* __builtin_nds32_setgie_dis: NDS32 Built-in Functions. 55141 (line 30) 55142* __builtin_nds32_setgie_en: NDS32 Built-in Functions. 55143 (line 27) 55144* __builtin_non_tx_store: S/390 System z Built-in Functions. 55145 (line 98) 55146* __builtin_object_size: Object Size Checking. 55147 (line 6) 55148* __builtin_object_size <1>: Object Size Checking. 55149 (line 9) 55150* __builtin_offsetof: Offsetof. (line 6) 55151* __builtin_parity: Other Builtins. (line 537) 55152* __builtin_parityl: Other Builtins. (line 558) 55153* __builtin_parityll: Other Builtins. (line 582) 55154* __builtin_popcount: Other Builtins. (line 534) 55155* __builtin_popcountl: Other Builtins. (line 554) 55156* __builtin_popcountll: Other Builtins. (line 578) 55157* __builtin_powi: Other Builtins. (line 6) 55158* __builtin_powi <1>: Other Builtins. (line 586) 55159* __builtin_powif: Other Builtins. (line 6) 55160* __builtin_powif <1>: Other Builtins. (line 591) 55161* __builtin_powil: Other Builtins. (line 6) 55162* __builtin_powil <1>: Other Builtins. (line 595) 55163* __builtin_prefetch: Other Builtins. (line 380) 55164* __builtin_return: Constructing Calls. (line 47) 55165* __builtin_return_address: Return Address. (line 9) 55166* __builtin_rx_brk: RX Built-in Functions. 55167 (line 10) 55168* __builtin_rx_clrpsw: RX Built-in Functions. 55169 (line 13) 55170* __builtin_rx_int: RX Built-in Functions. 55171 (line 17) 55172* __builtin_rx_machi: RX Built-in Functions. 55173 (line 21) 55174* __builtin_rx_maclo: RX Built-in Functions. 55175 (line 26) 55176* __builtin_rx_mulhi: RX Built-in Functions. 55177 (line 31) 55178* __builtin_rx_mullo: RX Built-in Functions. 55179 (line 36) 55180* __builtin_rx_mvfachi: RX Built-in Functions. 55181 (line 41) 55182* __builtin_rx_mvfacmi: RX Built-in Functions. 55183 (line 45) 55184* __builtin_rx_mvfc: RX Built-in Functions. 55185 (line 49) 55186* __builtin_rx_mvtachi: RX Built-in Functions. 55187 (line 53) 55188* __builtin_rx_mvtaclo: RX Built-in Functions. 55189 (line 57) 55190* __builtin_rx_mvtc: RX Built-in Functions. 55191 (line 61) 55192* __builtin_rx_mvtipl: RX Built-in Functions. 55193 (line 65) 55194* __builtin_rx_racw: RX Built-in Functions. 55195 (line 69) 55196* __builtin_rx_revw: RX Built-in Functions. 55197 (line 73) 55198* __builtin_rx_rmpa: RX Built-in Functions. 55199 (line 78) 55200* __builtin_rx_round: RX Built-in Functions. 55201 (line 82) 55202* __builtin_rx_sat: RX Built-in Functions. 55203 (line 87) 55204* __builtin_rx_setpsw: RX Built-in Functions. 55205 (line 91) 55206* __builtin_rx_wait: RX Built-in Functions. 55207 (line 95) 55208* __builtin_set_thread_pointer: SH Built-in Functions. 55209 (line 9) 55210* __builtin_tabort: S/390 System z Built-in Functions. 55211 (line 82) 55212* __builtin_tbegin: S/390 System z Built-in Functions. 55213 (line 6) 55214* __builtin_tbeginc: S/390 System z Built-in Functions. 55215 (line 73) 55216* __builtin_tbegin_nofloat: S/390 System z Built-in Functions. 55217 (line 54) 55218* __builtin_tbegin_retry: S/390 System z Built-in Functions. 55219 (line 60) 55220* __builtin_tbegin_retry_nofloat: S/390 System z Built-in Functions. 55221 (line 67) 55222* __builtin_tend: S/390 System z Built-in Functions. 55223 (line 77) 55224* __builtin_thread_pointer: SH Built-in Functions. 55225 (line 18) 55226* __builtin_trap: Other Builtins. (line 276) 55227* __builtin_tx_assist: S/390 System z Built-in Functions. 55228 (line 87) 55229* __builtin_tx_nesting_depth: S/390 System z Built-in Functions. 55230 (line 93) 55231* __builtin_types_compatible_p: Other Builtins. (line 109) 55232* __builtin_unreachable: Other Builtins. (line 283) 55233* __builtin_va_arg_pack: Constructing Calls. (line 52) 55234* __builtin_va_arg_pack_len: Constructing Calls. (line 75) 55235* __builtin___clear_cache: Other Builtins. (line 367) 55236* __builtin___fprintf_chk: Object Size Checking. 55237 (line 6) 55238* __builtin___memcpy_chk: Object Size Checking. 55239 (line 6) 55240* __builtin___memmove_chk: Object Size Checking. 55241 (line 6) 55242* __builtin___mempcpy_chk: Object Size Checking. 55243 (line 6) 55244* __builtin___memset_chk: Object Size Checking. 55245 (line 6) 55246* __builtin___printf_chk: Object Size Checking. 55247 (line 6) 55248* __builtin___snprintf_chk: Object Size Checking. 55249 (line 6) 55250* __builtin___sprintf_chk: Object Size Checking. 55251 (line 6) 55252* __builtin___stpcpy_chk: Object Size Checking. 55253 (line 6) 55254* __builtin___strcat_chk: Object Size Checking. 55255 (line 6) 55256* __builtin___strcpy_chk: Object Size Checking. 55257 (line 6) 55258* __builtin___strncat_chk: Object Size Checking. 55259 (line 6) 55260* __builtin___strncpy_chk: Object Size Checking. 55261 (line 6) 55262* __builtin___vfprintf_chk: Object Size Checking. 55263 (line 6) 55264* __builtin___vprintf_chk: Object Size Checking. 55265 (line 6) 55266* __builtin___vsnprintf_chk: Object Size Checking. 55267 (line 6) 55268* __builtin___vsprintf_chk: Object Size Checking. 55269 (line 6) 55270* '__complex__' keyword: Complex. (line 6) 55271* '__declspec(dllexport)': Function Attributes. 55272 (line 290) 55273* '__declspec(dllimport)': Function Attributes. 55274 (line 323) 55275* '__ea' SPU Named Address Spaces: Named Address Spaces. 55276 (line 155) 55277* __extension__: Alternate Keywords. (line 30) 55278* '__far' M32C Named Address Spaces: Named Address Spaces. 55279 (line 138) 55280* '__far' RL78 Named Address Spaces: Named Address Spaces. 55281 (line 147) 55282* '__flash' AVR Named Address Spaces: Named Address Spaces. 55283 (line 31) 55284* '__flash1' AVR Named Address Spaces: Named Address Spaces. 55285 (line 40) 55286* '__flash2' AVR Named Address Spaces: Named Address Spaces. 55287 (line 40) 55288* '__flash3' AVR Named Address Spaces: Named Address Spaces. 55289 (line 40) 55290* '__flash4' AVR Named Address Spaces: Named Address Spaces. 55291 (line 40) 55292* '__flash5' AVR Named Address Spaces: Named Address Spaces. 55293 (line 40) 55294* '__float128' data type: Floating Types. (line 6) 55295* '__float80' data type: Floating Types. (line 6) 55296* '__fp16' data type: Half-Precision. (line 6) 55297* '__FUNCTION__' identifier: Function Names. (line 6) 55298* '__func__' identifier: Function Names. (line 6) 55299* '__imag__' keyword: Complex. (line 27) 55300* '__int128' data types: __int128. (line 6) 55301* '__memx' AVR Named Address Spaces: Named Address Spaces. 55302 (line 46) 55303* '__PRETTY_FUNCTION__' identifier: Function Names. (line 6) 55304* '__real__' keyword: Complex. (line 27) 55305* __STDC_HOSTED__: Standards. (line 13) 55306* __sync_add_and_fetch: __sync Builtins. (line 60) 55307* __sync_and_and_fetch: __sync Builtins. (line 60) 55308* __sync_bool_compare_and_swap: __sync Builtins. (line 71) 55309* __sync_fetch_and_add: __sync Builtins. (line 44) 55310* __sync_fetch_and_and: __sync Builtins. (line 44) 55311* __sync_fetch_and_nand: __sync Builtins. (line 44) 55312* __sync_fetch_and_or: __sync Builtins. (line 44) 55313* __sync_fetch_and_sub: __sync Builtins. (line 44) 55314* __sync_fetch_and_xor: __sync Builtins. (line 44) 55315* __sync_lock_release: __sync Builtins. (line 101) 55316* __sync_lock_test_and_set: __sync Builtins. (line 83) 55317* __sync_nand_and_fetch: __sync Builtins. (line 60) 55318* __sync_or_and_fetch: __sync Builtins. (line 60) 55319* __sync_sub_and_fetch: __sync Builtins. (line 60) 55320* __sync_synchronize: __sync Builtins. (line 80) 55321* __sync_val_compare_and_swap: __sync Builtins. (line 71) 55322* __sync_xor_and_fetch: __sync Builtins. (line 60) 55323* '__thread': Thread-Local. (line 6) 55324* AArch64 Options: AArch64 Options. (line 6) 55325* ABI: Compatibility. (line 6) 55326* 'abi_tag' attribute: C++ Attributes. (line 9) 55327* abort: Other Builtins. (line 6) 55328* abs: Other Builtins. (line 6) 55329* accessing volatiles: Volatiles. (line 6) 55330* accessing volatiles <1>: C++ Volatiles. (line 6) 55331* acos: Other Builtins. (line 6) 55332* acosf: Other Builtins. (line 6) 55333* acosh: Other Builtins. (line 6) 55334* acoshf: Other Builtins. (line 6) 55335* acoshl: Other Builtins. (line 6) 55336* acosl: Other Builtins. (line 6) 55337* Ada: G++ and GCC. (line 6) 55338* Ada <1>: G++ and GCC. (line 30) 55339* additional floating types: Floating Types. (line 6) 55340* address constraints: Simple Constraints. (line 152) 55341* address of a label: Labels as Values. (line 6) 55342* address_operand: Simple Constraints. (line 156) 55343* 'alias' attribute: Function Attributes. 55344 (line 39) 55345* 'aligned' attribute: Function Attributes. 55346 (line 52) 55347* 'aligned' attribute <1>: Variable Attributes. 55348 (line 23) 55349* 'aligned' attribute <2>: Type Attributes. (line 31) 55350* alignment: Alignment. (line 6) 55351* alloca: Other Builtins. (line 6) 55352* 'alloca' vs variable-length arrays: Variable Length. (line 35) 55353* 'alloc_align' attribute: Function Attributes. 55354 (line 93) 55355* 'alloc_size' attribute: Function Attributes. 55356 (line 72) 55357* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 55358 (line 1068) 55359* Altera Nios II options: Nios II Options. (line 6) 55360* alternate keywords: Alternate Keywords. (line 6) 55361* 'always_inline' function attribute: Function Attributes. 55362 (line 125) 55363* AMD x86-64 Options: i386 and x86-64 Options. 55364 (line 6) 55365* AMD1: Standards. (line 13) 55366* ANSI C: Standards. (line 13) 55367* ANSI C standard: Standards. (line 13) 55368* ANSI C89: Standards. (line 13) 55369* ANSI support: C Dialect Options. (line 10) 55370* ANSI X3.159-1989: Standards. (line 13) 55371* apostrophes: Incompatibilities. (line 116) 55372* application binary interface: Compatibility. (line 6) 55373* ARC options: ARC Options. (line 6) 55374* ARM options: ARM Options. (line 6) 55375* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 55376 (line 6) 55377* arrays of length zero: Zero Length. (line 6) 55378* arrays of variable length: Variable Length. (line 6) 55379* arrays, non-lvalue: Subscripting. (line 6) 55380* 'artificial' function attribute: Function Attributes. 55381 (line 166) 55382* asin: Other Builtins. (line 6) 55383* asinf: Other Builtins. (line 6) 55384* asinh: Other Builtins. (line 6) 55385* asinhf: Other Builtins. (line 6) 55386* asinhl: Other Builtins. (line 6) 55387* asinl: Other Builtins. (line 6) 55388* 'asm' constraints: Constraints. (line 6) 55389* 'asm' expressions: Extended Asm. (line 6) 55390* assembler instructions: Extended Asm. (line 6) 55391* assembler names for identifiers: Asm Labels. (line 6) 55392* assembly code, invalid: Bug Criteria. (line 12) 55393* 'assume_aligned' attribute: Function Attributes. 55394 (line 110) 55395* atan: Other Builtins. (line 6) 55396* atan2: Other Builtins. (line 6) 55397* atan2f: Other Builtins. (line 6) 55398* atan2l: Other Builtins. (line 6) 55399* atanf: Other Builtins. (line 6) 55400* atanh: Other Builtins. (line 6) 55401* atanhf: Other Builtins. (line 6) 55402* atanhl: Other Builtins. (line 6) 55403* atanl: Other Builtins. (line 6) 55404* attribute of types: Type Attributes. (line 6) 55405* attribute of variables: Variable Attributes. 55406 (line 6) 55407* attribute syntax: Attribute Syntax. (line 6) 55408* autoincrement/decrement addressing: Simple Constraints. (line 30) 55409* automatic 'inline' for C++ member fns: Inline. (line 71) 55410* AVR Options: AVR Options. (line 6) 55411* Backwards Compatibility: Backwards Compatibility. 55412 (line 6) 55413* base class members: Name lookup. (line 6) 55414* bcmp: Other Builtins. (line 6) 55415* 'below100' attribute: Variable Attributes. 55416 (line 578) 55417* binary compatibility: Compatibility. (line 6) 55418* Binary constants using the '0b' prefix: Binary constants. (line 6) 55419* Blackfin Options: Blackfin Options. (line 6) 55420* bound pointer to member function: Bound member functions. 55421 (line 6) 55422* bug criteria: Bug Criteria. (line 6) 55423* bugs: Bugs. (line 6) 55424* bugs, known: Trouble. (line 6) 55425* built-in functions: C Dialect Options. (line 210) 55426* built-in functions <1>: Other Builtins. (line 6) 55427* bzero: Other Builtins. (line 6) 55428* C compilation options: Invoking GCC. (line 17) 55429* C intermediate output, nonexistent: G++ and GCC. (line 35) 55430* C language extensions: C Extensions. (line 6) 55431* C language, traditional: C Dialect Options. (line 331) 55432* C standard: Standards. (line 13) 55433* C standards: Standards. (line 13) 55434* c++: Invoking G++. (line 14) 55435* C++: G++ and GCC. (line 30) 55436* C++ comments: C++ Comments. (line 6) 55437* C++ compilation options: Invoking GCC. (line 23) 55438* C++ interface and implementation headers: C++ Interface. (line 6) 55439* C++ language extensions: C++ Extensions. (line 6) 55440* C++ member fns, automatically 'inline': Inline. (line 71) 55441* C++ misunderstandings: C++ Misunderstandings. 55442 (line 6) 55443* C++ options, command-line: C++ Dialect Options. 55444 (line 6) 55445* C++ pragmas, effect on inlining: C++ Interface. (line 66) 55446* C++ source file suffixes: Invoking G++. (line 6) 55447* C++ static data, declaring and defining: Static Definitions. 55448 (line 6) 55449* C11: Standards. (line 13) 55450* C1X: Standards. (line 13) 55451* C6X Options: C6X Options. (line 6) 55452* C89: Standards. (line 13) 55453* C90: Standards. (line 13) 55454* C94: Standards. (line 13) 55455* C95: Standards. (line 13) 55456* C99: Standards. (line 13) 55457* C9X: Standards. (line 13) 55458* cabs: Other Builtins. (line 6) 55459* cabsf: Other Builtins. (line 6) 55460* cabsl: Other Builtins. (line 6) 55461* cacos: Other Builtins. (line 6) 55462* cacosf: Other Builtins. (line 6) 55463* cacosh: Other Builtins. (line 6) 55464* cacoshf: Other Builtins. (line 6) 55465* cacoshl: Other Builtins. (line 6) 55466* cacosl: Other Builtins. (line 6) 55467* 'callee_pop_aggregate_return' attribute: Function Attributes. 55468 (line 1016) 55469* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 55470 (line 564) 55471* calloc: Other Builtins. (line 6) 55472* caret GCC_COLORS capability: Language Independent Options. 55473 (line 76) 55474* carg: Other Builtins. (line 6) 55475* cargf: Other Builtins. (line 6) 55476* cargl: Other Builtins. (line 6) 55477* case labels in initializers: Designated Inits. (line 6) 55478* case ranges: Case Ranges. (line 6) 55479* casin: Other Builtins. (line 6) 55480* casinf: Other Builtins. (line 6) 55481* casinh: Other Builtins. (line 6) 55482* casinhf: Other Builtins. (line 6) 55483* casinhl: Other Builtins. (line 6) 55484* casinl: Other Builtins. (line 6) 55485* cast to a union: Cast to Union. (line 6) 55486* catan: Other Builtins. (line 6) 55487* catanf: Other Builtins. (line 6) 55488* catanh: Other Builtins. (line 6) 55489* catanhf: Other Builtins. (line 6) 55490* catanhl: Other Builtins. (line 6) 55491* catanl: Other Builtins. (line 6) 55492* cbrt: Other Builtins. (line 6) 55493* cbrtf: Other Builtins. (line 6) 55494* cbrtl: Other Builtins. (line 6) 55495* ccos: Other Builtins. (line 6) 55496* ccosf: Other Builtins. (line 6) 55497* ccosh: Other Builtins. (line 6) 55498* ccoshf: Other Builtins. (line 6) 55499* ccoshl: Other Builtins. (line 6) 55500* ccosl: Other Builtins. (line 6) 55501* ceil: Other Builtins. (line 6) 55502* ceilf: Other Builtins. (line 6) 55503* ceill: Other Builtins. (line 6) 55504* cexp: Other Builtins. (line 6) 55505* cexpf: Other Builtins. (line 6) 55506* cexpl: Other Builtins. (line 6) 55507* character set, execution: Preprocessor Options. 55508 (line 554) 55509* character set, input: Preprocessor Options. 55510 (line 567) 55511* character set, input normalization: Warning Options. (line 1291) 55512* character set, wide execution: Preprocessor Options. 55513 (line 559) 55514* cimag: Other Builtins. (line 6) 55515* cimagf: Other Builtins. (line 6) 55516* cimagl: Other Builtins. (line 6) 55517* 'cleanup' attribute: Variable Attributes. 55518 (line 89) 55519* clog: Other Builtins. (line 6) 55520* clogf: Other Builtins. (line 6) 55521* clogl: Other Builtins. (line 6) 55522* COBOL: G++ and GCC. (line 23) 55523* code generation conventions: Code Gen Options. (line 6) 55524* code, mixed with declarations: Mixed Declarations. (line 6) 55525* 'cold' function attribute: Function Attributes. 55526 (line 1307) 55527* 'cold' label attribute: Function Attributes. 55528 (line 1325) 55529* command options: Invoking GCC. (line 6) 55530* comments, C++ style: C++ Comments. (line 6) 55531* 'common' attribute: Variable Attributes. 55532 (line 104) 55533* comparison of signed and unsigned values, warning: Warning Options. 55534 (line 1157) 55535* compiler bugs, reporting: Bug Reporting. (line 6) 55536* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 55537* compiler options, C++: C++ Dialect Options. 55538 (line 6) 55539* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 55540 (line 6) 55541* compiler version, specifying: Target Options. (line 6) 55542* COMPILER_PATH: Environment Variables. 55543 (line 91) 55544* complex conjugation: Complex. (line 34) 55545* complex numbers: Complex. (line 6) 55546* compound literals: Compound Literals. (line 6) 55547* computed gotos: Labels as Values. (line 6) 55548* conditional expressions, extensions: Conditionals. (line 6) 55549* conflicting types: Disappointments. (line 21) 55550* conj: Other Builtins. (line 6) 55551* conjf: Other Builtins. (line 6) 55552* conjl: Other Builtins. (line 6) 55553* 'const' applied to function: Function Attributes. 55554 (line 6) 55555* 'const' function attribute: Function Attributes. 55556 (line 215) 55557* constants in constraints: Simple Constraints. (line 68) 55558* constraint modifier characters: Modifiers. (line 6) 55559* constraint, matching: Simple Constraints. (line 137) 55560* constraints, 'asm': Constraints. (line 6) 55561* constraints, machine specific: Machine Constraints. 55562 (line 6) 55563* constructing calls: Constructing Calls. (line 6) 55564* constructor expressions: Compound Literals. (line 6) 55565* 'constructor' function attribute: Function Attributes. 55566 (line 243) 55567* contributors: Contributors. (line 6) 55568* copysign: Other Builtins. (line 6) 55569* copysignf: Other Builtins. (line 6) 55570* copysignl: Other Builtins. (line 6) 55571* core dump: Bug Criteria. (line 9) 55572* cos: Other Builtins. (line 6) 55573* cosf: Other Builtins. (line 6) 55574* cosh: Other Builtins. (line 6) 55575* coshf: Other Builtins. (line 6) 55576* coshl: Other Builtins. (line 6) 55577* cosl: Other Builtins. (line 6) 55578* CPATH: Environment Variables. 55579 (line 127) 55580* CPLUS_INCLUDE_PATH: Environment Variables. 55581 (line 129) 55582* cpow: Other Builtins. (line 6) 55583* cpowf: Other Builtins. (line 6) 55584* cpowl: Other Builtins. (line 6) 55585* cproj: Other Builtins. (line 6) 55586* cprojf: Other Builtins. (line 6) 55587* cprojl: Other Builtins. (line 6) 55588* CR16 Options: CR16 Options. (line 6) 55589* creal: Other Builtins. (line 6) 55590* crealf: Other Builtins. (line 6) 55591* creall: Other Builtins. (line 6) 55592* CRIS Options: CRIS Options. (line 6) 55593* 'critical' attribute: Function Attributes. 55594 (line 717) 55595* cross compiling: Target Options. (line 6) 55596* csin: Other Builtins. (line 6) 55597* csinf: Other Builtins. (line 6) 55598* csinh: Other Builtins. (line 6) 55599* csinhf: Other Builtins. (line 6) 55600* csinhl: Other Builtins. (line 6) 55601* csinl: Other Builtins. (line 6) 55602* csqrt: Other Builtins. (line 6) 55603* csqrtf: Other Builtins. (line 6) 55604* csqrtl: Other Builtins. (line 6) 55605* ctan: Other Builtins. (line 6) 55606* ctanf: Other Builtins. (line 6) 55607* ctanh: Other Builtins. (line 6) 55608* ctanhf: Other Builtins. (line 6) 55609* ctanhl: Other Builtins. (line 6) 55610* ctanl: Other Builtins. (line 6) 55611* C_INCLUDE_PATH: Environment Variables. 55612 (line 128) 55613* Darwin options: Darwin Options. (line 6) 55614* dcgettext: Other Builtins. (line 6) 55615* 'dd' integer suffix: Decimal Float. (line 6) 55616* 'DD' integer suffix: Decimal Float. (line 6) 55617* deallocating variable length arrays: Variable Length. (line 22) 55618* debugging information options: Debugging Options. (line 6) 55619* decimal floating types: Decimal Float. (line 6) 55620* declaration scope: Incompatibilities. (line 80) 55621* declarations inside expressions: Statement Exprs. (line 6) 55622* declarations, mixed with code: Mixed Declarations. (line 6) 55623* declaring attributes of functions: Function Attributes. 55624 (line 6) 55625* declaring static data in C++: Static Definitions. (line 6) 55626* defining static data in C++: Static Definitions. (line 6) 55627* dependencies for make as output: Environment Variables. 55628 (line 155) 55629* dependencies for make as output <1>: Environment Variables. 55630 (line 171) 55631* dependencies, 'make': Preprocessor Options. 55632 (line 185) 55633* DEPENDENCIES_OUTPUT: Environment Variables. 55634 (line 154) 55635* dependent name lookup: Name lookup. (line 6) 55636* 'deprecated' attribute: Variable Attributes. 55637 (line 113) 55638* 'deprecated' attribute.: Function Attributes. 55639 (line 265) 55640* designated initializers: Designated Inits. (line 6) 55641* designator lists: Designated Inits. (line 96) 55642* designators: Designated Inits. (line 64) 55643* 'destructor' function attribute: Function Attributes. 55644 (line 243) 55645* 'df' integer suffix: Decimal Float. (line 6) 55646* 'DF' integer suffix: Decimal Float. (line 6) 55647* dgettext: Other Builtins. (line 6) 55648* diagnostic messages: Language Independent Options. 55649 (line 6) 55650* dialect options: C Dialect Options. (line 6) 55651* digits in constraint: Simple Constraints. (line 125) 55652* directory options: Directory Options. (line 6) 55653* 'disinterrupt' attribute: Function Attributes. 55654 (line 285) 55655* 'dl' integer suffix: Decimal Float. (line 6) 55656* 'DL' integer suffix: Decimal Float. (line 6) 55657* dollar signs in identifier names: Dollar Signs. (line 6) 55658* double-word arithmetic: Long Long. (line 6) 55659* downward funargs: Nested Functions. (line 6) 55660* drem: Other Builtins. (line 6) 55661* dremf: Other Builtins. (line 6) 55662* dreml: Other Builtins. (line 6) 55663* 'E' in constraint: Simple Constraints. (line 87) 55664* earlyclobber operand: Modifiers. (line 25) 55665* eight-bit data on the H8/300, H8/300H, and H8S: Function Attributes. 55666 (line 375) 55667* 'EIND': AVR Options. (line 222) 55668* empty structures: Empty Structures. (line 6) 55669* Enable Cilk Plus: C Dialect Options. (line 276) 55670* environment variables: Environment Variables. 55671 (line 6) 55672* erf: Other Builtins. (line 6) 55673* erfc: Other Builtins. (line 6) 55674* erfcf: Other Builtins. (line 6) 55675* erfcl: Other Builtins. (line 6) 55676* erff: Other Builtins. (line 6) 55677* erfl: Other Builtins. (line 6) 55678* 'error' function attribute: Function Attributes. 55679 (line 185) 55680* error GCC_COLORS capability: Language Independent Options. 55681 (line 67) 55682* error messages: Warnings and Errors. 55683 (line 6) 55684* escaped newlines: Escaped Newlines. (line 6) 55685* exception handler functions: Function Attributes. 55686 (line 385) 55687* exception handler functions on the Blackfin processor: Function Attributes. 55688 (line 390) 55689* exclamation point: Multi-Alternative. (line 33) 55690* exit: Other Builtins. (line 6) 55691* exp: Other Builtins. (line 6) 55692* exp10: Other Builtins. (line 6) 55693* exp10f: Other Builtins. (line 6) 55694* exp10l: Other Builtins. (line 6) 55695* exp2: Other Builtins. (line 6) 55696* exp2f: Other Builtins. (line 6) 55697* exp2l: Other Builtins. (line 6) 55698* expf: Other Builtins. (line 6) 55699* expl: Other Builtins. (line 6) 55700* explicit register variables: Explicit Reg Vars. (line 6) 55701* expm1: Other Builtins. (line 6) 55702* expm1f: Other Builtins. (line 6) 55703* expm1l: Other Builtins. (line 6) 55704* expressions containing statements: Statement Exprs. (line 6) 55705* expressions, constructor: Compound Literals. (line 6) 55706* extended 'asm': Extended Asm. (line 6) 55707* extensible constraints: Simple Constraints. (line 161) 55708* extensions, '?:': Conditionals. (line 6) 55709* extensions, C language: C Extensions. (line 6) 55710* extensions, C++ language: C++ Extensions. (line 6) 55711* external declaration scope: Incompatibilities. (line 80) 55712* 'externally_visible' attribute.: Function Attributes. 55713 (line 396) 55714* 'F' in constraint: Simple Constraints. (line 92) 55715* fabs: Other Builtins. (line 6) 55716* fabsf: Other Builtins. (line 6) 55717* fabsl: Other Builtins. (line 6) 55718* fatal signal: Bug Criteria. (line 9) 55719* fdim: Other Builtins. (line 6) 55720* fdimf: Other Builtins. (line 6) 55721* fdiml: Other Builtins. (line 6) 55722* FDL, GNU Free Documentation License: GNU Free Documentation License. 55723 (line 6) 55724* ffs: Other Builtins. (line 6) 55725* file name suffix: Overall Options. (line 14) 55726* file names: Link Options. (line 10) 55727* fixed-point types: Fixed-Point. (line 6) 55728* 'flatten' function attribute: Function Attributes. 55729 (line 178) 55730* flexible array members: Zero Length. (line 6) 55731* 'float' as function value type: Incompatibilities. (line 141) 55732* floating point precision: Disappointments. (line 68) 55733* floating-point precision: Optimize Options. (line 1917) 55734* floor: Other Builtins. (line 6) 55735* floorf: Other Builtins. (line 6) 55736* floorl: Other Builtins. (line 6) 55737* fma: Other Builtins. (line 6) 55738* fmaf: Other Builtins. (line 6) 55739* fmal: Other Builtins. (line 6) 55740* fmax: Other Builtins. (line 6) 55741* fmaxf: Other Builtins. (line 6) 55742* fmaxl: Other Builtins. (line 6) 55743* fmin: Other Builtins. (line 6) 55744* fminf: Other Builtins. (line 6) 55745* fminl: Other Builtins. (line 6) 55746* fmod: Other Builtins. (line 6) 55747* fmodf: Other Builtins. (line 6) 55748* fmodl: Other Builtins. (line 6) 55749* 'force_align_arg_pointer' attribute: Function Attributes. 55750 (line 1384) 55751* 'format' function attribute: Function Attributes. 55752 (line 453) 55753* 'format_arg' function attribute: Function Attributes. 55754 (line 518) 55755* Fortran: G++ and GCC. (line 6) 55756* 'forwarder_section' attribute: Function Attributes. 55757 (line 756) 55758* forwarding calls: Constructing Calls. (line 6) 55759* fprintf: Other Builtins. (line 6) 55760* fprintf_unlocked: Other Builtins. (line 6) 55761* fputs: Other Builtins. (line 6) 55762* fputs_unlocked: Other Builtins. (line 6) 55763* FR30 Options: FR30 Options. (line 6) 55764* freestanding environment: Standards. (line 13) 55765* freestanding implementation: Standards. (line 13) 55766* frexp: Other Builtins. (line 6) 55767* frexpf: Other Builtins. (line 6) 55768* frexpl: Other Builtins. (line 6) 55769* FRV Options: FRV Options. (line 6) 55770* fscanf: Other Builtins. (line 6) 55771* 'fscanf', and constant strings: Incompatibilities. (line 17) 55772* function addressability on the M32R/D: Function Attributes. 55773 (line 974) 55774* function attributes: Function Attributes. 55775 (line 6) 55776* function pointers, arithmetic: Pointer Arith. (line 6) 55777* function prototype declarations: Function Prototypes. 55778 (line 6) 55779* function versions: Function Multiversioning. 55780 (line 6) 55781* function without a prologue/epilogue code: Function Attributes. 55782 (line 1046) 55783* function, size of pointer to: Pointer Arith. (line 6) 55784* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 55785 (line 911) 55786* functions in arbitrary sections: Function Attributes. 55787 (line 6) 55788* functions that are dynamically resolved: Function Attributes. 55789 (line 6) 55790* functions that are passed arguments in registers on the 386: Function Attributes. 55791 (line 6) 55792* functions that are passed arguments in registers on the 386 <1>: Function Attributes. 55793 (line 1349) 55794* functions that behave like malloc: Function Attributes. 55795 (line 6) 55796* functions that do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 55797 (line 1058) 55798* functions that do not pop the argument stack on the 386: Function Attributes. 55799 (line 6) 55800* functions that do pop the argument stack on the 386: Function Attributes. 55801 (line 209) 55802* functions that handle memory bank switching: Function Attributes. 55803 (line 409) 55804* functions that have different compilation options on the 386: Function Attributes. 55805 (line 6) 55806* functions that have different optimization options: Function Attributes. 55807 (line 6) 55808* functions that have no side effects: Function Attributes. 55809 (line 6) 55810* functions that never return: Function Attributes. 55811 (line 6) 55812* functions that pop the argument stack on the 386: Function Attributes. 55813 (line 6) 55814* functions that pop the argument stack on the 386 <1>: Function Attributes. 55815 (line 435) 55816* functions that pop the argument stack on the 386 <2>: Function Attributes. 55817 (line 443) 55818* functions that pop the argument stack on the 386 <3>: Function Attributes. 55819 (line 1507) 55820* functions that return more than once: Function Attributes. 55821 (line 6) 55822* functions with non-null pointer arguments: Function Attributes. 55823 (line 6) 55824* functions with 'printf', 'scanf', 'strftime' or 'strfmon' style arguments: Function Attributes. 55825 (line 6) 55826* 'G' in constraint: Simple Constraints. (line 96) 55827* 'g' in constraint: Simple Constraints. (line 118) 55828* g++: Invoking G++. (line 14) 55829* G++: G++ and GCC. (line 30) 55830* gamma: Other Builtins. (line 6) 55831* gammaf: Other Builtins. (line 6) 55832* gammaf_r: Other Builtins. (line 6) 55833* gammal: Other Builtins. (line 6) 55834* gammal_r: Other Builtins. (line 6) 55835* gamma_r: Other Builtins. (line 6) 55836* GCC: G++ and GCC. (line 6) 55837* GCC command options: Invoking GCC. (line 6) 55838* GCC_COLORS environment variable: Language Independent Options. 55839 (line 35) 55840* GCC_COMPARE_DEBUG: Environment Variables. 55841 (line 52) 55842* GCC_EXEC_PREFIX: Environment Variables. 55843 (line 57) 55844* 'gcc_struct': Type Attributes. (line 323) 55845* 'gcc_struct' attribute: Variable Attributes. 55846 (line 438) 55847* 'gcov': Debugging Options. (line 495) 55848* gettext: Other Builtins. (line 6) 55849* global offset table: Code Gen Options. (line 279) 55850* global register after 'longjmp': Global Reg Vars. (line 65) 55851* global register variables: Global Reg Vars. (line 6) 55852* GNAT: G++ and GCC. (line 30) 55853* GNU C Compiler: G++ and GCC. (line 6) 55854* GNU Compiler Collection: G++ and GCC. (line 6) 55855* 'gnu_inline' function attribute: Function Attributes. 55856 (line 130) 55857* Go: G++ and GCC. (line 6) 55858* goto with computed label: Labels as Values. (line 6) 55859* 'gprof': Debugging Options. (line 420) 55860* grouping options: Invoking GCC. (line 26) 55861* 'H' in constraint: Simple Constraints. (line 96) 55862* half-precision floating point: Half-Precision. (line 6) 55863* hardware models and configurations, specifying: Submodel Options. 55864 (line 6) 55865* hex floats: Hex Floats. (line 6) 55866* highlight, color, colour: Language Independent Options. 55867 (line 35) 55868* 'hk' fixed-suffix: Fixed-Point. (line 6) 55869* 'HK' fixed-suffix: Fixed-Point. (line 6) 55870* hosted environment: Standards. (line 13) 55871* hosted environment <1>: C Dialect Options. (line 244) 55872* hosted environment <2>: C Dialect Options. (line 252) 55873* hosted implementation: Standards. (line 13) 55874* 'hot' function attribute: Function Attributes. 55875 (line 1285) 55876* 'hot' label attribute: Function Attributes. 55877 (line 1297) 55878* 'hotpatch' attribute: Function Attributes. 55879 (line 1037) 55880* HPPA Options: HPPA Options. (line 6) 55881* 'hr' fixed-suffix: Fixed-Point. (line 6) 55882* 'HR' fixed-suffix: Fixed-Point. (line 6) 55883* hypot: Other Builtins. (line 6) 55884* hypotf: Other Builtins. (line 6) 55885* hypotl: Other Builtins. (line 6) 55886* 'i' in constraint: Simple Constraints. (line 68) 55887* 'I' in constraint: Simple Constraints. (line 79) 55888* i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 55889 (line 6) 55890* i386 Options: i386 and x86-64 Options. 55891 (line 6) 55892* IA-64 Options: IA-64 Options. (line 6) 55893* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 55894 (line 6) 55895* identifier names, dollar signs in: Dollar Signs. (line 6) 55896* identifiers, names in assembler code: Asm Labels. (line 6) 55897* 'ifunc' attribute: Function Attributes. 55898 (line 625) 55899* ilogb: Other Builtins. (line 6) 55900* ilogbf: Other Builtins. (line 6) 55901* ilogbl: Other Builtins. (line 6) 55902* imaxabs: Other Builtins. (line 6) 55903* implementation-defined behavior, C language: C Implementation. 55904 (line 6) 55905* implementation-defined behavior, C++ language: C++ Implementation. 55906 (line 6) 55907* implied '#pragma implementation': C++ Interface. (line 46) 55908* incompatibilities of GCC: Incompatibilities. (line 6) 55909* increment operators: Bug Criteria. (line 17) 55910* index: Other Builtins. (line 6) 55911* indirect calls on ARC: Function Attributes. 55912 (line 888) 55913* indirect calls on ARM: Function Attributes. 55914 (line 888) 55915* indirect calls on Epiphany: Function Attributes. 55916 (line 888) 55917* indirect calls on MIPS: Function Attributes. 55918 (line 923) 55919* initializations in expressions: Compound Literals. (line 6) 55920* initializers with labeled elements: Designated Inits. (line 6) 55921* initializers, non-constant: Initializers. (line 6) 55922* 'init_priority' attribute: C++ Attributes. (line 35) 55923* 'inline' automatic for C++ member fns: Inline. (line 71) 55924* inline functions: Inline. (line 6) 55925* inline functions, omission of: Inline. (line 51) 55926* inlining and C++ pragmas: C++ Interface. (line 66) 55927* installation trouble: Trouble. (line 6) 55928* integrating function code: Inline. (line 6) 55929* Intel 386 Options: i386 and x86-64 Options. 55930 (line 6) 55931* interface and implementation headers, C++: C++ Interface. (line 6) 55932* intermediate C version, nonexistent: G++ and GCC. (line 35) 55933* interrupt handler functions: Function Attributes. 55934 (line 173) 55935* interrupt handler functions <1>: Function Attributes. 55936 (line 429) 55937* interrupt handler functions <2>: Function Attributes. 55938 (line 665) 55939* interrupt handler functions on the AVR processors: Function Attributes. 55940 (line 1479) 55941* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 55942 (line 826) 55943* interrupt service routines on ARM: Function Attributes. 55944 (line 840) 55945* interrupt thread functions on fido: Function Attributes. 55946 (line 832) 55947* introduction: Top. (line 6) 55948* invalid assembly code: Bug Criteria. (line 12) 55949* invalid input: Bug Criteria. (line 42) 55950* invoking 'g++': Invoking G++. (line 22) 55951* isalnum: Other Builtins. (line 6) 55952* isalpha: Other Builtins. (line 6) 55953* isascii: Other Builtins. (line 6) 55954* isblank: Other Builtins. (line 6) 55955* iscntrl: Other Builtins. (line 6) 55956* isdigit: Other Builtins. (line 6) 55957* isgraph: Other Builtins. (line 6) 55958* islower: Other Builtins. (line 6) 55959* ISO 9899: Standards. (line 13) 55960* ISO C: Standards. (line 13) 55961* ISO C standard: Standards. (line 13) 55962* ISO C11: Standards. (line 13) 55963* ISO C1X: Standards. (line 13) 55964* ISO C90: Standards. (line 13) 55965* ISO C94: Standards. (line 13) 55966* ISO C95: Standards. (line 13) 55967* ISO C99: Standards. (line 13) 55968* ISO C9X: Standards. (line 13) 55969* ISO support: C Dialect Options. (line 10) 55970* ISO/IEC 9899: Standards. (line 13) 55971* isprint: Other Builtins. (line 6) 55972* ispunct: Other Builtins. (line 6) 55973* isspace: Other Builtins. (line 6) 55974* isupper: Other Builtins. (line 6) 55975* iswalnum: Other Builtins. (line 6) 55976* iswalpha: Other Builtins. (line 6) 55977* iswblank: Other Builtins. (line 6) 55978* iswcntrl: Other Builtins. (line 6) 55979* iswdigit: Other Builtins. (line 6) 55980* iswgraph: Other Builtins. (line 6) 55981* iswlower: Other Builtins. (line 6) 55982* iswprint: Other Builtins. (line 6) 55983* iswpunct: Other Builtins. (line 6) 55984* iswspace: Other Builtins. (line 6) 55985* iswupper: Other Builtins. (line 6) 55986* iswxdigit: Other Builtins. (line 6) 55987* isxdigit: Other Builtins. (line 6) 55988* j0: Other Builtins. (line 6) 55989* j0f: Other Builtins. (line 6) 55990* j0l: Other Builtins. (line 6) 55991* j1: Other Builtins. (line 6) 55992* j1f: Other Builtins. (line 6) 55993* j1l: Other Builtins. (line 6) 55994* Java: G++ and GCC. (line 6) 55995* 'java_interface' attribute: C++ Attributes. (line 56) 55996* jn: Other Builtins. (line 6) 55997* jnf: Other Builtins. (line 6) 55998* jnl: Other Builtins. (line 6) 55999* 'k' fixed-suffix: Fixed-Point. (line 6) 56000* 'K' fixed-suffix: Fixed-Point. (line 6) 56001* 'keep_interrupts_masked' attribute: Function Attributes. 56002 (line 778) 56003* keywords, alternate: Alternate Keywords. (line 6) 56004* known causes of trouble: Trouble. (line 6) 56005* 'l1_data' variable attribute: Variable Attributes. 56006 (line 352) 56007* 'l1_data_A' variable attribute: Variable Attributes. 56008 (line 352) 56009* 'l1_data_B' variable attribute: Variable Attributes. 56010 (line 352) 56011* 'l1_text' function attribute: Function Attributes. 56012 (line 849) 56013* 'l2' function attribute: Function Attributes. 56014 (line 855) 56015* 'l2' variable attribute: Variable Attributes. 56016 (line 360) 56017* labeled elements in initializers: Designated Inits. (line 6) 56018* labels as values: Labels as Values. (line 6) 56019* labs: Other Builtins. (line 6) 56020* LANG: Environment Variables. 56021 (line 21) 56022* LANG <1>: Environment Variables. 56023 (line 106) 56024* language dialect options: C Dialect Options. (line 6) 56025* LC_ALL: Environment Variables. 56026 (line 21) 56027* LC_CTYPE: Environment Variables. 56028 (line 21) 56029* LC_MESSAGES: Environment Variables. 56030 (line 21) 56031* ldexp: Other Builtins. (line 6) 56032* ldexpf: Other Builtins. (line 6) 56033* ldexpl: Other Builtins. (line 6) 56034* 'leaf' function attribute: Function Attributes. 56035 (line 861) 56036* length-zero arrays: Zero Length. (line 6) 56037* lgamma: Other Builtins. (line 6) 56038* lgammaf: Other Builtins. (line 6) 56039* lgammaf_r: Other Builtins. (line 6) 56040* lgammal: Other Builtins. (line 6) 56041* lgammal_r: Other Builtins. (line 6) 56042* lgamma_r: Other Builtins. (line 6) 56043* Libraries: Link Options. (line 24) 56044* LIBRARY_PATH: Environment Variables. 56045 (line 97) 56046* link options: Link Options. (line 6) 56047* linker script: Link Options. (line 213) 56048* 'lk' fixed-suffix: Fixed-Point. (line 6) 56049* 'LK' fixed-suffix: Fixed-Point. (line 6) 56050* 'LL' integer suffix: Long Long. (line 6) 56051* llabs: Other Builtins. (line 6) 56052* 'llk' fixed-suffix: Fixed-Point. (line 6) 56053* 'LLK' fixed-suffix: Fixed-Point. (line 6) 56054* 'llr' fixed-suffix: Fixed-Point. (line 6) 56055* 'LLR' fixed-suffix: Fixed-Point. (line 6) 56056* llrint: Other Builtins. (line 6) 56057* llrintf: Other Builtins. (line 6) 56058* llrintl: Other Builtins. (line 6) 56059* llround: Other Builtins. (line 6) 56060* llroundf: Other Builtins. (line 6) 56061* llroundl: Other Builtins. (line 6) 56062* LM32 options: LM32 Options. (line 6) 56063* load address instruction: Simple Constraints. (line 152) 56064* local labels: Local Labels. (line 6) 56065* local variables in macros: Typeof. (line 46) 56066* local variables, specifying registers: Local Reg Vars. (line 6) 56067* locale: Environment Variables. 56068 (line 21) 56069* locale definition: Environment Variables. 56070 (line 106) 56071* locus GCC_COLORS capability: Language Independent Options. 56072 (line 79) 56073* log: Other Builtins. (line 6) 56074* log10: Other Builtins. (line 6) 56075* log10f: Other Builtins. (line 6) 56076* log10l: Other Builtins. (line 6) 56077* log1p: Other Builtins. (line 6) 56078* log1pf: Other Builtins. (line 6) 56079* log1pl: Other Builtins. (line 6) 56080* log2: Other Builtins. (line 6) 56081* log2f: Other Builtins. (line 6) 56082* log2l: Other Builtins. (line 6) 56083* logb: Other Builtins. (line 6) 56084* logbf: Other Builtins. (line 6) 56085* logbl: Other Builtins. (line 6) 56086* logf: Other Builtins. (line 6) 56087* logl: Other Builtins. (line 6) 56088* 'long long' data types: Long Long. (line 6) 56089* longjmp: Global Reg Vars. (line 65) 56090* 'longjmp' incompatibilities: Incompatibilities. (line 39) 56091* 'longjmp' warnings: Warning Options. (line 668) 56092* 'lr' fixed-suffix: Fixed-Point. (line 6) 56093* 'LR' fixed-suffix: Fixed-Point. (line 6) 56094* lrint: Other Builtins. (line 6) 56095* lrintf: Other Builtins. (line 6) 56096* lrintl: Other Builtins. (line 6) 56097* lround: Other Builtins. (line 6) 56098* lroundf: Other Builtins. (line 6) 56099* lroundl: Other Builtins. (line 6) 56100* 'm' in constraint: Simple Constraints. (line 17) 56101* M32C options: M32C Options. (line 6) 56102* M32R/D options: M32R/D Options. (line 6) 56103* M680x0 options: M680x0 Options. (line 6) 56104* machine dependent options: Submodel Options. (line 6) 56105* machine specific constraints: Machine Constraints. 56106 (line 6) 56107* macro with variable arguments: Variadic Macros. (line 6) 56108* macros containing 'asm': Extended Asm. (line 237) 56109* macros, inline alternative: Inline. (line 6) 56110* macros, local labels: Local Labels. (line 6) 56111* macros, local variables in: Typeof. (line 46) 56112* macros, statements in expressions: Statement Exprs. (line 6) 56113* macros, types of arguments: Typeof. (line 6) 56114* 'make': Preprocessor Options. 56115 (line 185) 56116* malloc: Other Builtins. (line 6) 56117* 'malloc' attribute: Function Attributes. 56118 (line 933) 56119* matching constraint: Simple Constraints. (line 137) 56120* MCore options: MCore Options. (line 6) 56121* member fns, automatically 'inline': Inline. (line 71) 56122* memchr: Other Builtins. (line 6) 56123* memcmp: Other Builtins. (line 6) 56124* memcpy: Other Builtins. (line 6) 56125* memory references in constraints: Simple Constraints. (line 17) 56126* mempcpy: Other Builtins. (line 6) 56127* memset: Other Builtins. (line 6) 56128* MeP options: MeP Options. (line 6) 56129* Mercury: G++ and GCC. (line 23) 56130* message formatting: Language Independent Options. 56131 (line 6) 56132* messages, warning: Warning Options. (line 6) 56133* messages, warning and error: Warnings and Errors. 56134 (line 6) 56135* MicroBlaze Options: MicroBlaze Options. (line 6) 56136* 'micromips' attribute: Function Attributes. 56137 (line 957) 56138* middle-operands, omitted: Conditionals. (line 6) 56139* MIPS options: MIPS Options. (line 6) 56140* 'mips16' attribute: Function Attributes. 56141 (line 942) 56142* misunderstandings in C++: C++ Misunderstandings. 56143 (line 6) 56144* mixed declarations and code: Mixed Declarations. (line 6) 56145* 'mktemp', and constant strings: Incompatibilities. (line 13) 56146* MMIX Options: MMIX Options. (line 6) 56147* MN10300 options: MN10300 Options. (line 6) 56148* 'mode' attribute: Variable Attributes. 56149 (line 133) 56150* modf: Other Builtins. (line 6) 56151* modff: Other Builtins. (line 6) 56152* modfl: Other Builtins. (line 6) 56153* modifiers in constraints: Modifiers. (line 6) 56154* Moxie Options: Moxie Options. (line 6) 56155* MSP430 Options: MSP430 Options. (line 6) 56156* 'ms_abi' attribute: Function Attributes. 56157 (line 1003) 56158* 'ms_hook_prologue' attribute: Function Attributes. 56159 (line 1030) 56160* 'ms_struct': Type Attributes. (line 323) 56161* 'ms_struct' attribute: Variable Attributes. 56162 (line 438) 56163* multiple alternative constraints: Multi-Alternative. (line 6) 56164* multiprecision arithmetic: Long Long. (line 6) 56165* 'n' in constraint: Simple Constraints. (line 73) 56166* Named Address Spaces: Named Address Spaces. 56167 (line 6) 56168* names used in assembler code: Asm Labels. (line 6) 56169* naming convention, implementation headers: C++ Interface. (line 46) 56170* NDS32 Options: NDS32 Options. (line 6) 56171* nearbyint: Other Builtins. (line 6) 56172* nearbyintf: Other Builtins. (line 6) 56173* nearbyintl: Other Builtins. (line 6) 56174* 'nested' attribute: Function Attributes. 56175 (line 806) 56176* nested functions: Nested Functions. (line 6) 56177* 'nested_ready' attribute: Function Attributes. 56178 (line 810) 56179* newlines (escaped): Escaped Newlines. (line 6) 56180* nextafter: Other Builtins. (line 6) 56181* nextafterf: Other Builtins. (line 6) 56182* nextafterl: Other Builtins. (line 6) 56183* nexttoward: Other Builtins. (line 6) 56184* nexttowardf: Other Builtins. (line 6) 56185* nexttowardl: Other Builtins. (line 6) 56186* NFC: Warning Options. (line 1291) 56187* NFKC: Warning Options. (line 1291) 56188* Nios II options: Nios II Options. (line 6) 56189* 'nmi' attribute: Function Attributes. 56190 (line 1371) 56191* NMI handler functions on the Blackfin processor: Function Attributes. 56192 (line 1073) 56193* 'noclone' function attribute: Function Attributes. 56194 (line 1107) 56195* 'nocommon' attribute: Variable Attributes. 56196 (line 104) 56197* 'nocompression' attribute: Function Attributes. 56198 (line 1079) 56199* 'noinline' function attribute: Function Attributes. 56200 (line 1096) 56201* 'nomicromips' attribute: Function Attributes. 56202 (line 957) 56203* 'nomips16' attribute: Function Attributes. 56204 (line 942) 56205* non-constant initializers: Initializers. (line 6) 56206* non-static inline function: Inline. (line 85) 56207* 'nonnull' function attribute: Function Attributes. 56208 (line 1113) 56209* 'noreturn' function attribute: Function Attributes. 56210 (line 1147) 56211* 'nosave_low_regs' attribute: Function Attributes. 56212 (line 1197) 56213* note GCC_COLORS capability: Language Independent Options. 56214 (line 73) 56215* 'nothrow' function attribute: Function Attributes. 56216 (line 1189) 56217* 'not_nested' attribute: Function Attributes. 56218 (line 808) 56219* 'no_instrument_function' function attribute: Function Attributes. 56220 (line 1085) 56221* 'no_sanitize_address' function attribute: Function Attributes. 56222 (line 1335) 56223* 'no_sanitize_undefined' function attribute: Function Attributes. 56224 (line 1343) 56225* 'no_split_stack' function attribute: Function Attributes. 56226 (line 1090) 56227* 'o' in constraint: Simple Constraints. (line 23) 56228* OBJC_INCLUDE_PATH: Environment Variables. 56229 (line 130) 56230* Objective-C: G++ and GCC. (line 6) 56231* Objective-C <1>: Standards. (line 162) 56232* Objective-C and Objective-C++ options, command-line: Objective-C and Objective-C++ Dialect Options. 56233 (line 6) 56234* Objective-C++: G++ and GCC. (line 6) 56235* Objective-C++ <1>: Standards. (line 162) 56236* offsettable address: Simple Constraints. (line 23) 56237* old-style function definitions: Function Prototypes. 56238 (line 6) 56239* omitted middle-operands: Conditionals. (line 6) 56240* open coding: Inline. (line 6) 56241* OpenMP parallel: C Dialect Options. (line 263) 56242* OpenMP SIMD: C Dialect Options. (line 272) 56243* operand constraints, 'asm': Constraints. (line 6) 56244* 'optimize' function attribute: Function Attributes. 56245 (line 1203) 56246* optimize options: Optimize Options. (line 6) 56247* options to control diagnostics formatting: Language Independent Options. 56248 (line 6) 56249* options to control warnings: Warning Options. (line 6) 56250* options, C++: C++ Dialect Options. 56251 (line 6) 56252* options, code generation: Code Gen Options. (line 6) 56253* options, debugging: Debugging Options. (line 6) 56254* options, dialect: C Dialect Options. (line 6) 56255* options, directory search: Directory Options. (line 6) 56256* options, GCC command: Invoking GCC. (line 6) 56257* options, grouping: Invoking GCC. (line 26) 56258* options, linking: Link Options. (line 6) 56259* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 56260 (line 6) 56261* options, optimization: Optimize Options. (line 6) 56262* options, order: Invoking GCC. (line 30) 56263* options, preprocessor: Preprocessor Options. 56264 (line 6) 56265* order of evaluation, side effects: Non-bugs. (line 196) 56266* order of options: Invoking GCC. (line 30) 56267* 'OS_main' AVR function attribute: Function Attributes. 56268 (line 1220) 56269* 'OS_task' AVR function attribute: Function Attributes. 56270 (line 1220) 56271* other register constraints: Simple Constraints. (line 161) 56272* output file option: Overall Options. (line 191) 56273* overloaded virtual function, warning: C++ Dialect Options. 56274 (line 655) 56275* 'p' in constraint: Simple Constraints. (line 152) 56276* 'packed' attribute: Variable Attributes. 56277 (line 144) 56278* parameter forward declaration: Variable Length. (line 68) 56279* 'partial_save' attribute: Function Attributes. 56280 (line 818) 56281* Pascal: G++ and GCC. (line 23) 56282* 'pcs' function attribute: Function Attributes. 56283 (line 1244) 56284* PDP-11 Options: PDP-11 Options. (line 6) 56285* PIC: Code Gen Options. (line 279) 56286* picoChip options: picoChip Options. (line 6) 56287* pmf: Bound member functions. 56288 (line 6) 56289* pointer arguments: Function Attributes. 56290 (line 220) 56291* pointer to member function: Bound member functions. 56292 (line 6) 56293* portions of temporary objects, pointers to: Temporaries. (line 6) 56294* pow: Other Builtins. (line 6) 56295* pow10: Other Builtins. (line 6) 56296* pow10f: Other Builtins. (line 6) 56297* pow10l: Other Builtins. (line 6) 56298* PowerPC options: PowerPC Options. (line 6) 56299* powf: Other Builtins. (line 6) 56300* powl: Other Builtins. (line 6) 56301* pragma GCC ivdep: Loop-Specific Pragmas. 56302 (line 7) 56303* pragma GCC optimize: Function Specific Option Pragmas. 56304 (line 20) 56305* pragma GCC pop_options: Function Specific Option Pragmas. 56306 (line 34) 56307* pragma GCC push_options: Function Specific Option Pragmas. 56308 (line 34) 56309* pragma GCC reset_options: Function Specific Option Pragmas. 56310 (line 45) 56311* pragma GCC target: Function Specific Option Pragmas. 56312 (line 7) 56313* pragma, address: M32C Pragmas. (line 15) 56314* pragma, align: Solaris Pragmas. (line 11) 56315* pragma, call: MeP Pragmas. (line 48) 56316* pragma, coprocessor available: MeP Pragmas. (line 13) 56317* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 56318* pragma, coprocessor subclass: MeP Pragmas. (line 28) 56319* pragma, custom io_volatile: MeP Pragmas. (line 7) 56320* pragma, diagnostic: Diagnostic Pragmas. (line 14) 56321* pragma, diagnostic <1>: Diagnostic Pragmas. (line 57) 56322* pragma, disinterrupt: MeP Pragmas. (line 38) 56323* pragma, fini: Solaris Pragmas. (line 20) 56324* pragma, init: Solaris Pragmas. (line 26) 56325* pragma, longcall: RS/6000 and PowerPC Pragmas. 56326 (line 14) 56327* pragma, long_calls: ARM Pragmas. (line 11) 56328* pragma, long_calls_off: ARM Pragmas. (line 17) 56329* pragma, mark: Darwin Pragmas. (line 11) 56330* pragma, memregs: M32C Pragmas. (line 7) 56331* pragma, no_long_calls: ARM Pragmas. (line 14) 56332* pragma, options align: Darwin Pragmas. (line 14) 56333* pragma, pop_macro: Push/Pop Macro Pragmas. 56334 (line 15) 56335* pragma, push_macro: Push/Pop Macro Pragmas. 56336 (line 11) 56337* pragma, reason for not using: Function Attributes. 56338 (line 2055) 56339* pragma, redefine_extname: Symbol-Renaming Pragmas. 56340 (line 12) 56341* pragma, segment: Darwin Pragmas. (line 21) 56342* pragma, unused: Darwin Pragmas. (line 24) 56343* pragma, visibility: Visibility Pragmas. (line 8) 56344* pragma, weak: Weak Pragmas. (line 10) 56345* pragmas: Pragmas. (line 6) 56346* pragmas in C++, effect on inlining: C++ Interface. (line 66) 56347* pragmas, interface and implementation: C++ Interface. (line 6) 56348* pragmas, warning of unknown: Warning Options. (line 685) 56349* precompiled headers: Precompiled Headers. 56350 (line 6) 56351* preprocessing numbers: Incompatibilities. (line 173) 56352* preprocessing tokens: Incompatibilities. (line 173) 56353* preprocessor options: Preprocessor Options. 56354 (line 6) 56355* printf: Other Builtins. (line 6) 56356* printf_unlocked: Other Builtins. (line 6) 56357* 'prof': Debugging Options. (line 414) 56358* 'progmem' AVR variable attribute: Variable Attributes. 56359 (line 314) 56360* promotion of formal parameters: Function Prototypes. 56361 (line 6) 56362* 'pure' function attribute: Function Attributes. 56363 (line 1263) 56364* push address instruction: Simple Constraints. (line 152) 56365* putchar: Other Builtins. (line 6) 56366* puts: Other Builtins. (line 6) 56367* 'q' floating point suffix: Floating Types. (line 6) 56368* 'Q' floating point suffix: Floating Types. (line 6) 56369* 'qsort', and global register variables: Global Reg Vars. (line 41) 56370* question mark: Multi-Alternative. (line 27) 56371* quote GCC_COLORS capability: Language Independent Options. 56372 (line 83) 56373* 'r' fixed-suffix: Fixed-Point. (line 6) 56374* 'R' fixed-suffix: Fixed-Point. (line 6) 56375* 'r' in constraint: Simple Constraints. (line 64) 56376* 'RAMPD': AVR Options. (line 333) 56377* 'RAMPX': AVR Options. (line 333) 56378* 'RAMPY': AVR Options. (line 333) 56379* 'RAMPZ': AVR Options. (line 333) 56380* ranges in case statements: Case Ranges. (line 6) 56381* read-only strings: Incompatibilities. (line 9) 56382* 'reentrant' attribute: Function Attributes. 56383 (line 723) 56384* register variable after 'longjmp': Global Reg Vars. (line 65) 56385* registers: Extended Asm. (line 6) 56386* registers for local variables: Local Reg Vars. (line 6) 56387* registers in constraints: Simple Constraints. (line 64) 56388* registers, global allocation: Explicit Reg Vars. (line 6) 56389* registers, global variables in: Global Reg Vars. (line 6) 56390* 'regparm' attribute: Function Attributes. 56391 (line 1349) 56392* relocation truncated to fit (ColdFire): M680x0 Options. (line 325) 56393* relocation truncated to fit (MIPS): MIPS Options. (line 207) 56394* remainder: Other Builtins. (line 6) 56395* remainderf: Other Builtins. (line 6) 56396* remainderl: Other Builtins. (line 6) 56397* remquo: Other Builtins. (line 6) 56398* remquof: Other Builtins. (line 6) 56399* remquol: Other Builtins. (line 6) 56400* 'renesas' attribute: Function Attributes. 56401 (line 1392) 56402* reordering, warning: C++ Dialect Options. 56403 (line 573) 56404* reporting bugs: Bugs. (line 6) 56405* 'resbank' attribute: Function Attributes. 56406 (line 1396) 56407* reset handler functions: Function Attributes. 56408 (line 1366) 56409* rest argument (in macro): Variadic Macros. (line 6) 56410* restricted pointers: Restricted Pointers. 56411 (line 6) 56412* restricted references: Restricted Pointers. 56413 (line 6) 56414* restricted this pointer: Restricted Pointers. 56415 (line 6) 56416* 'returns_nonnull' function attribute: Function Attributes. 56417 (line 1137) 56418* 'returns_twice' attribute: Function Attributes. 56419 (line 1410) 56420* rindex: Other Builtins. (line 6) 56421* rint: Other Builtins. (line 6) 56422* rintf: Other Builtins. (line 6) 56423* rintl: Other Builtins. (line 6) 56424* RL78 Options: RL78 Options. (line 6) 56425* round: Other Builtins. (line 6) 56426* roundf: Other Builtins. (line 6) 56427* roundl: Other Builtins. (line 6) 56428* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 56429 (line 6) 56430* RTTI: Vague Linkage. (line 42) 56431* run-time options: Code Gen Options. (line 6) 56432* RX Options: RX Options. (line 6) 56433* 's' in constraint: Simple Constraints. (line 100) 56434* S/390 and zSeries Options: S/390 and zSeries Options. 56435 (line 6) 56436* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 56437 (line 1419) 56438* save volatile registers on the MicroBlaze: Function Attributes. 56439 (line 1424) 56440* 'save_all' attribute: Function Attributes. 56441 (line 815) 56442* scalb: Other Builtins. (line 6) 56443* scalbf: Other Builtins. (line 6) 56444* scalbl: Other Builtins. (line 6) 56445* scalbln: Other Builtins. (line 6) 56446* scalblnf: Other Builtins. (line 6) 56447* scalblnf <1>: Other Builtins. (line 6) 56448* scalbn: Other Builtins. (line 6) 56449* scalbnf: Other Builtins. (line 6) 56450* 'scanf', and constant strings: Incompatibilities. (line 17) 56451* scanfnl: Other Builtins. (line 6) 56452* scope of a variable length array: Variable Length. (line 22) 56453* scope of declaration: Disappointments. (line 21) 56454* scope of external declarations: Incompatibilities. (line 80) 56455* Score Options: Score Options. (line 6) 56456* search path: Directory Options. (line 6) 56457* 'section' function attribute: Function Attributes. 56458 (line 1432) 56459* 'section' variable attribute: Variable Attributes. 56460 (line 165) 56461* 'sentinel' function attribute: Function Attributes. 56462 (line 1448) 56463* setjmp: Global Reg Vars. (line 65) 56464* 'setjmp' incompatibilities: Incompatibilities. (line 39) 56465* shared strings: Incompatibilities. (line 9) 56466* 'shared' variable attribute: Variable Attributes. 56467 (line 210) 56468* side effect in '?:': Conditionals. (line 20) 56469* side effects, macro argument: Statement Exprs. (line 35) 56470* side effects, order of evaluation: Non-bugs. (line 196) 56471* signbit: Other Builtins. (line 6) 56472* signbitd128: Other Builtins. (line 6) 56473* signbitd32: Other Builtins. (line 6) 56474* signbitd64: Other Builtins. (line 6) 56475* signbitf: Other Builtins. (line 6) 56476* signbitl: Other Builtins. (line 6) 56477* signed and unsigned values, comparison warning: Warning Options. 56478 (line 1157) 56479* significand: Other Builtins. (line 6) 56480* significandf: Other Builtins. (line 6) 56481* significandl: Other Builtins. (line 6) 56482* SIMD: C Dialect Options. (line 272) 56483* simple constraints: Simple Constraints. (line 6) 56484* sin: Other Builtins. (line 6) 56485* sincos: Other Builtins. (line 6) 56486* sincosf: Other Builtins. (line 6) 56487* sincosl: Other Builtins. (line 6) 56488* sinf: Other Builtins. (line 6) 56489* sinh: Other Builtins. (line 6) 56490* sinhf: Other Builtins. (line 6) 56491* sinhl: Other Builtins. (line 6) 56492* sinl: Other Builtins. (line 6) 56493* sizeof: Typeof. (line 6) 56494* smaller data references: M32R/D Options. (line 57) 56495* smaller data references <1>: Nios II Options. (line 9) 56496* smaller data references (PowerPC): RS/6000 and PowerPC Options. 56497 (line 739) 56498* snprintf: Other Builtins. (line 6) 56499* Solaris 2 options: Solaris 2 Options. (line 6) 56500* SPARC options: SPARC Options. (line 6) 56501* Spec Files: Spec Files. (line 6) 56502* specified registers: Explicit Reg Vars. (line 6) 56503* specifying compiler version and target machine: Target Options. 56504 (line 6) 56505* specifying hardware config: Submodel Options. (line 6) 56506* specifying machine version: Target Options. (line 6) 56507* specifying registers for local variables: Local Reg Vars. (line 6) 56508* speed of compilation: Precompiled Headers. 56509 (line 6) 56510* sprintf: Other Builtins. (line 6) 56511* SPU options: SPU Options. (line 6) 56512* 'sp_switch' attribute: Function Attributes. 56513 (line 1497) 56514* sqrt: Other Builtins. (line 6) 56515* sqrtf: Other Builtins. (line 6) 56516* sqrtl: Other Builtins. (line 6) 56517* sscanf: Other Builtins. (line 6) 56518* 'sscanf', and constant strings: Incompatibilities. (line 17) 56519* 'sseregparm' attribute: Function Attributes. 56520 (line 1377) 56521* statements inside expressions: Statement Exprs. (line 6) 56522* static data in C++, declaring and defining: Static Definitions. 56523 (line 6) 56524* stpcpy: Other Builtins. (line 6) 56525* stpncpy: Other Builtins. (line 6) 56526* strcasecmp: Other Builtins. (line 6) 56527* strcat: Other Builtins. (line 6) 56528* strchr: Other Builtins. (line 6) 56529* strcmp: Other Builtins. (line 6) 56530* strcpy: Other Builtins. (line 6) 56531* strcspn: Other Builtins. (line 6) 56532* strdup: Other Builtins. (line 6) 56533* strfmon: Other Builtins. (line 6) 56534* strftime: Other Builtins. (line 6) 56535* string constants: Incompatibilities. (line 9) 56536* strlen: Other Builtins. (line 6) 56537* strncasecmp: Other Builtins. (line 6) 56538* strncat: Other Builtins. (line 6) 56539* strncmp: Other Builtins. (line 6) 56540* strncpy: Other Builtins. (line 6) 56541* strndup: Other Builtins. (line 6) 56542* strpbrk: Other Builtins. (line 6) 56543* strrchr: Other Builtins. (line 6) 56544* strspn: Other Builtins. (line 6) 56545* strstr: Other Builtins. (line 6) 56546* 'struct': Unnamed Fields. (line 6) 56547* struct __htm_tdb: S/390 System z Built-in Functions. 56548 (line 49) 56549* structures: Incompatibilities. (line 146) 56550* structures, constructor expression: Compound Literals. (line 6) 56551* submodel options: Submodel Options. (line 6) 56552* subscripting: Subscripting. (line 6) 56553* subscripting and function values: Subscripting. (line 6) 56554* suffixes for C++ source: Invoking G++. (line 6) 56555* SUNPRO_DEPENDENCIES: Environment Variables. 56556 (line 170) 56557* suppressing warnings: Warning Options. (line 6) 56558* surprises in C++: C++ Misunderstandings. 56559 (line 6) 56560* syntax checking: Warning Options. (line 13) 56561* 'syscall_linkage' attribute: Function Attributes. 56562 (line 1512) 56563* system headers, warnings from: Warning Options. (line 836) 56564* 'sysv_abi' attribute: Function Attributes. 56565 (line 1003) 56566* tan: Other Builtins. (line 6) 56567* tanf: Other Builtins. (line 6) 56568* tanh: Other Builtins. (line 6) 56569* tanhf: Other Builtins. (line 6) 56570* tanhl: Other Builtins. (line 6) 56571* tanl: Other Builtins. (line 6) 56572* 'target' function attribute: Function Attributes. 56573 (line 1519) 56574* target machine, specifying: Target Options. (line 6) 56575* target options: Target Options. (line 6) 56576* 'target("abm")' attribute: Function Attributes. 56577 (line 1552) 56578* 'target("aes")' attribute: Function Attributes. 56579 (line 1557) 56580* 'target("align-stringops")' attribute: Function Attributes. 56581 (line 1651) 56582* 'target("altivec")' attribute: Function Attributes. 56583 (line 1677) 56584* 'target("arch=ARCH")' attribute: Function Attributes. 56585 (line 1660) 56586* 'target("avoid-indexed-addresses")' attribute: Function Attributes. 56587 (line 1798) 56588* 'target("cld")' attribute: Function Attributes. 56589 (line 1622) 56590* 'target("cmpb")' attribute: Function Attributes. 56591 (line 1683) 56592* 'target("cpu=CPU")' attribute: Function Attributes. 56593 (line 1813) 56594* 'target("custom-fpu-cfg=NAME")' attribute: Function Attributes. 56595 (line 1839) 56596* 'target("custom-INSN=N")' attribute: Function Attributes. 56597 (line 1830) 56598* 'target("default")' attribute: Function Attributes. 56599 (line 1560) 56600* 'target("dlmzb")' attribute: Function Attributes. 56601 (line 1689) 56602* 'target("fancy-math-387")' attribute: Function Attributes. 56603 (line 1626) 56604* 'target("fma4")' attribute: Function Attributes. 56605 (line 1606) 56606* 'target("fpmath=FPMATH")' attribute: Function Attributes. 56607 (line 1668) 56608* 'target("fprnd")' attribute: Function Attributes. 56609 (line 1696) 56610* 'target("friz")' attribute: Function Attributes. 56611 (line 1789) 56612* 'target("fused-madd")' attribute: Function Attributes. 56613 (line 1631) 56614* 'target("hard-dfp")' attribute: Function Attributes. 56615 (line 1702) 56616* 'target("ieee-fp")' attribute: Function Attributes. 56617 (line 1636) 56618* 'target("inline-all-stringops")' attribute: Function Attributes. 56619 (line 1641) 56620* 'target("inline-stringops-dynamically")' attribute: Function Attributes. 56621 (line 1645) 56622* 'target("isel")' attribute: Function Attributes. 56623 (line 1708) 56624* 'target("longcall")' attribute: Function Attributes. 56625 (line 1808) 56626* 'target("lwp")' attribute: Function Attributes. 56627 (line 1614) 56628* 'target("mfcrf")' attribute: Function Attributes. 56629 (line 1712) 56630* 'target("mfpgpr")' attribute: Function Attributes. 56631 (line 1719) 56632* 'target("mmx")' attribute: Function Attributes. 56633 (line 1565) 56634* 'target("mulhw")' attribute: Function Attributes. 56635 (line 1726) 56636* 'target("multiple")' attribute: Function Attributes. 56637 (line 1733) 56638* 'target("no-custom-INSN")' attribute: Function Attributes. 56639 (line 1830) 56640* 'target("paired")' attribute: Function Attributes. 56641 (line 1803) 56642* 'target("pclmul")' attribute: Function Attributes. 56643 (line 1569) 56644* 'target("popcnt")' attribute: Function Attributes. 56645 (line 1573) 56646* 'target("popcntb")' attribute: Function Attributes. 56647 (line 1744) 56648* 'target("popcntd")' attribute: Function Attributes. 56649 (line 1751) 56650* 'target("powerpc-gfxopt")' attribute: Function Attributes. 56651 (line 1757) 56652* 'target("powerpc-gpopt")' attribute: Function Attributes. 56653 (line 1763) 56654* 'target("recip")' attribute: Function Attributes. 56655 (line 1655) 56656* 'target("recip-precision")' attribute: Function Attributes. 56657 (line 1769) 56658* 'target("sse")' attribute: Function Attributes. 56659 (line 1577) 56660* 'target("sse2")' attribute: Function Attributes. 56661 (line 1581) 56662* 'target("sse3")' attribute: Function Attributes. 56663 (line 1585) 56664* 'target("sse4")' attribute: Function Attributes. 56665 (line 1589) 56666* 'target("sse4.1")' attribute: Function Attributes. 56667 (line 1594) 56668* 'target("sse4.2")' attribute: Function Attributes. 56669 (line 1598) 56670* 'target("sse4a")' attribute: Function Attributes. 56671 (line 1602) 56672* 'target("ssse3")' attribute: Function Attributes. 56673 (line 1618) 56674* 'target("string")' attribute: Function Attributes. 56675 (line 1775) 56676* 'target("tune=TUNE")' attribute: Function Attributes. 56677 (line 1664) 56678* 'target("tune=TUNE")' attribute <1>: Function Attributes. 56679 (line 1820) 56680* 'target("update")' attribute: Function Attributes. 56681 (line 1738) 56682* 'target("vsx")' attribute: Function Attributes. 56683 (line 1781) 56684* 'target("xop")' attribute: Function Attributes. 56685 (line 1610) 56686* TC1: Standards. (line 13) 56687* TC2: Standards. (line 13) 56688* TC3: Standards. (line 13) 56689* Technical Corrigenda: Standards. (line 13) 56690* Technical Corrigendum 1: Standards. (line 13) 56691* Technical Corrigendum 2: Standards. (line 13) 56692* Technical Corrigendum 3: Standards. (line 13) 56693* template instantiation: Template Instantiation. 56694 (line 6) 56695* temporaries, lifetime of: Temporaries. (line 6) 56696* tgamma: Other Builtins. (line 6) 56697* tgammaf: Other Builtins. (line 6) 56698* tgammal: Other Builtins. (line 6) 56699* Thread-Local Storage: Thread-Local. (line 6) 56700* thunks: Nested Functions. (line 6) 56701* TILE-Gx options: TILE-Gx Options. (line 6) 56702* TILEPro options: TILEPro Options. (line 6) 56703* tiny data section on the H8/300H and H8S: Function Attributes. 56704 (line 1852) 56705* TLS: Thread-Local. (line 6) 56706* 'tls_model' attribute: Variable Attributes. 56707 (line 233) 56708* TMPDIR: Environment Variables. 56709 (line 45) 56710* toascii: Other Builtins. (line 6) 56711* tolower: Other Builtins. (line 6) 56712* toupper: Other Builtins. (line 6) 56713* towlower: Other Builtins. (line 6) 56714* towupper: Other Builtins. (line 6) 56715* traditional C language: C Dialect Options. (line 331) 56716* 'trapa_handler' attribute: Function Attributes. 56717 (line 1864) 56718* 'trap_exit' attribute: Function Attributes. 56719 (line 1859) 56720* trunc: Other Builtins. (line 6) 56721* truncf: Other Builtins. (line 6) 56722* truncl: Other Builtins. (line 6) 56723* two-stage name lookup: Name lookup. (line 6) 56724* type alignment: Alignment. (line 6) 56725* type attributes: Type Attributes. (line 6) 56726* typedef names as function parameters: Incompatibilities. (line 97) 56727* typeof: Typeof. (line 6) 56728* 'type_info': Vague Linkage. (line 42) 56729* 'uhk' fixed-suffix: Fixed-Point. (line 6) 56730* 'UHK' fixed-suffix: Fixed-Point. (line 6) 56731* 'uhr' fixed-suffix: Fixed-Point. (line 6) 56732* 'UHR' fixed-suffix: Fixed-Point. (line 6) 56733* 'uk' fixed-suffix: Fixed-Point. (line 6) 56734* 'UK' fixed-suffix: Fixed-Point. (line 6) 56735* 'ulk' fixed-suffix: Fixed-Point. (line 6) 56736* 'ULK' fixed-suffix: Fixed-Point. (line 6) 56737* 'ULL' integer suffix: Long Long. (line 6) 56738* 'ullk' fixed-suffix: Fixed-Point. (line 6) 56739* 'ULLK' fixed-suffix: Fixed-Point. (line 6) 56740* 'ullr' fixed-suffix: Fixed-Point. (line 6) 56741* 'ULLR' fixed-suffix: Fixed-Point. (line 6) 56742* 'ulr' fixed-suffix: Fixed-Point. (line 6) 56743* 'ULR' fixed-suffix: Fixed-Point. (line 6) 56744* undefined behavior: Bug Criteria. (line 17) 56745* undefined function value: Bug Criteria. (line 17) 56746* underscores in variables in macros: Typeof. (line 46) 56747* 'union': Unnamed Fields. (line 6) 56748* union, casting to a: Cast to Union. (line 6) 56749* unions: Incompatibilities. (line 146) 56750* unknown pragmas, warning: Warning Options. (line 685) 56751* unresolved references and '-nodefaultlibs': Link Options. (line 85) 56752* unresolved references and '-nostdlib': Link Options. (line 85) 56753* 'unused' attribute.: Function Attributes. 56754 (line 1868) 56755* 'ur' fixed-suffix: Fixed-Point. (line 6) 56756* 'UR' fixed-suffix: Fixed-Point. (line 6) 56757* 'used' attribute.: Function Attributes. 56758 (line 1873) 56759* User stack pointer in interrupts on the Blackfin: Function Attributes. 56760 (line 844) 56761* 'use_debug_exception_return' attribute: Function Attributes. 56762 (line 783) 56763* 'use_shadow_register_set' attribute: Function Attributes. 56764 (line 774) 56765* 'V' in constraint: Simple Constraints. (line 43) 56766* V850 Options: V850 Options. (line 6) 56767* vague linkage: Vague Linkage. (line 6) 56768* value after 'longjmp': Global Reg Vars. (line 65) 56769* variable addressability on the IA-64: Function Attributes. 56770 (line 974) 56771* variable addressability on the M32R/D: Variable Attributes. 56772 (line 370) 56773* variable alignment: Alignment. (line 6) 56774* variable attributes: Variable Attributes. 56775 (line 6) 56776* variable number of arguments: Variadic Macros. (line 6) 56777* variable-length array in a structure: Variable Length. (line 26) 56778* variable-length array scope: Variable Length. (line 22) 56779* variable-length arrays: Variable Length. (line 6) 56780* variables in specified registers: Explicit Reg Vars. (line 6) 56781* variables, local, in macros: Typeof. (line 46) 56782* variadic macros: Variadic Macros. (line 6) 56783* VAX options: VAX Options. (line 6) 56784* 'version_id' attribute: Function Attributes. 56785 (line 1883) 56786* vfprintf: Other Builtins. (line 6) 56787* vfscanf: Other Builtins. (line 6) 56788* 'visibility' attribute: Function Attributes. 56789 (line 1893) 56790* VLAs: Variable Length. (line 6) 56791* 'vliw' attribute: Function Attributes. 56792 (line 1989) 56793* void pointers, arithmetic: Pointer Arith. (line 6) 56794* void, size of pointer to: Pointer Arith. (line 6) 56795* volatile access: Volatiles. (line 6) 56796* volatile access <1>: C++ Volatiles. (line 6) 56797* 'volatile' applied to function: Function Attributes. 56798 (line 6) 56799* volatile read: Volatiles. (line 6) 56800* volatile read <1>: C++ Volatiles. (line 6) 56801* volatile write: Volatiles. (line 6) 56802* volatile write <1>: C++ Volatiles. (line 6) 56803* vprintf: Other Builtins. (line 6) 56804* vscanf: Other Builtins. (line 6) 56805* vsnprintf: Other Builtins. (line 6) 56806* vsprintf: Other Builtins. (line 6) 56807* vsscanf: Other Builtins. (line 6) 56808* vtable: Vague Linkage. (line 27) 56809* VxWorks Options: VxWorks Options. (line 6) 56810* 'w' floating point suffix: Floating Types. (line 6) 56811* 'W' floating point suffix: Floating Types. (line 6) 56812* 'wakeup' attribute: Function Attributes. 56813 (line 729) 56814* 'warm' attribute: Function Attributes. 56815 (line 1373) 56816* warning for comparison of signed and unsigned values: Warning Options. 56817 (line 1157) 56818* warning for overloaded virtual function: C++ Dialect Options. 56819 (line 655) 56820* warning for reordering of member initializers: C++ Dialect Options. 56821 (line 573) 56822* warning for unknown pragmas: Warning Options. (line 685) 56823* 'warning' function attribute: Function Attributes. 56824 (line 198) 56825* warning GCC_COLORS capability: Language Independent Options. 56826 (line 70) 56827* warning messages: Warning Options. (line 6) 56828* warnings from system headers: Warning Options. (line 836) 56829* warnings vs errors: Warnings and Errors. 56830 (line 6) 56831* 'warn_unused' attribute: C++ Attributes. (line 64) 56832* 'warn_unused_result' attribute: Function Attributes. 56833 (line 1995) 56834* 'weak' attribute: Function Attributes. 56835 (line 2012) 56836* 'weakref' attribute: Function Attributes. 56837 (line 2021) 56838* whitespace: Incompatibilities. (line 112) 56839* 'X' in constraint: Simple Constraints. (line 122) 56840* X3.159-1989: Standards. (line 13) 56841* x86-64 Options: i386 and x86-64 Options. 56842 (line 6) 56843* x86-64 options: x86-64 Options. (line 6) 56844* Xstormy16 Options: Xstormy16 Options. (line 6) 56845* Xtensa Options: Xtensa Options. (line 6) 56846* y0: Other Builtins. (line 6) 56847* y0f: Other Builtins. (line 6) 56848* y0l: Other Builtins. (line 6) 56849* y1: Other Builtins. (line 6) 56850* y1f: Other Builtins. (line 6) 56851* y1l: Other Builtins. (line 6) 56852* yn: Other Builtins. (line 6) 56853* ynf: Other Builtins. (line 6) 56854* ynl: Other Builtins. (line 6) 56855* zero-length arrays: Zero Length. (line 6) 56856* zero-size structures: Empty Structures. (line 6) 56857* zSeries options: zSeries Options. (line 6) 56858 56859 56860 56861Tag Table: 56862Node: Top1881 56863Node: G++ and GCC3629 56864Node: Standards5686 56865Node: Invoking GCC17845 56866Node: Option Summary21590 56867Node: Overall Options63434 56868Node: Invoking G++77621 56869Node: C Dialect Options79144 56870Node: C++ Dialect Options96142 56871Node: Objective-C and Objective-C++ Dialect Options126687 56872Node: Language Independent Options137194 56873Node: Warning Options141694 56874Node: Debugging Options211735 56875Node: Optimize Options271982 56876Ref: Type-punning331542 56877Node: Preprocessor Options415592 56878Ref: Wtrigraphs420375 56879Ref: dashMF425125 56880Ref: fdollars-in-identifiers436006 56881Node: Assembler Options446231 56882Node: Link Options446922 56883Ref: Link Options-Footnote-1459062 56884Node: Directory Options459398 56885Node: Spec Files465942 56886Node: Target Options487771 56887Node: Submodel Options488170 56888Node: AArch64 Options489936 56889Node: Adapteva Epiphany Options495344 56890Node: ARC Options501292 56891Node: ARM Options513736 56892Node: AVR Options531046 56893Node: Blackfin Options551271 56894Node: C6X Options559289 56895Node: CRIS Options560832 56896Node: CR16 Options564571 56897Node: Darwin Options565482 56898Node: DEC Alpha Options572920 56899Node: FR30 Options584536 56900Node: FRV Options585100 56901Node: GNU/Linux Options591864 56902Node: H8/300 Options593124 56903Node: HPPA Options594576 56904Node: i386 and x86-64 Options603878 56905Node: i386 and x86-64 Windows Options645949 56906Node: IA-64 Options648802 56907Node: LM32 Options656868 56908Node: M32C Options657391 56909Node: M32R/D Options658664 56910Node: M680x0 Options662209 56911Node: MCore Options676244 56912Node: MeP Options677746 56913Node: MicroBlaze Options681706 56914Node: MIPS Options684508 56915Node: MMIX Options716393 56916Node: MN10300 Options718870 56917Node: Moxie Options721411 56918Node: MSP430 Options721781 56919Node: NDS32 Options725306 56920Node: Nios II Options727186 56921Node: PDP-11 Options735651 56922Node: picoChip Options737345 56923Node: PowerPC Options739483 56924Node: RL78 Options739704 56925Node: RS/6000 and PowerPC Options740365 56926Node: RX Options779295 56927Node: S/390 and zSeries Options786627 56928Node: Score Options795174 56929Node: SH Options796023 56930Node: Solaris 2 Options816642 56931Node: SPARC Options818164 56932Node: SPU Options831422 56933Node: System V Options836361 56934Node: TILE-Gx Options837187 56935Node: TILEPro Options838205 56936Node: V850 Options838709 56937Node: VAX Options845417 56938Node: VMS Options845952 56939Node: VxWorks Options846765 56940Node: x86-64 Options847920 56941Node: Xstormy16 Options848138 56942Node: Xtensa Options848427 56943Node: zSeries Options852738 56944Node: Code Gen Options852934 56945Node: Environment Variables883803 56946Node: Precompiled Headers891806 56947Node: C Implementation897809 56948Node: Translation implementation899499 56949Node: Environment implementation900090 56950Node: Identifiers implementation900644 56951Node: Characters implementation901730 56952Node: Integers implementation905380 56953Node: Floating point implementation907265 56954Node: Arrays and pointers implementation910328 56955Ref: Arrays and pointers implementation-Footnote-1911788 56956Node: Hints implementation911914 56957Node: Structures unions enumerations and bit-fields implementation913399 56958Node: Qualifiers implementation915623 56959Node: Declarators implementation917403 56960Node: Statements implementation917744 56961Node: Preprocessing directives implementation918070 56962Node: Library functions implementation920391 56963Node: Architecture implementation921040 56964Node: Locale-specific behavior implementation922685 56965Node: C++ Implementation922990 56966Node: Conditionally-supported behavior924273 56967Node: Exception handling924782 56968Node: C Extensions925190 56969Node: Statement Exprs930260 56970Node: Local Labels934737 56971Node: Labels as Values937710 56972Ref: Labels as Values-Footnote-1940237 56973Node: Nested Functions940422 56974Node: Constructing Calls944380 56975Node: Typeof949097 56976Node: Conditionals953479 56977Node: __int128954368 56978Node: Long Long954893 56979Node: Complex956369 56980Node: Floating Types958957 56981Node: Half-Precision960085 56982Node: Decimal Float962270 56983Node: Hex Floats964126 56984Node: Fixed-Point965163 56985Node: Named Address Spaces968423 56986Ref: AVR Named Address Spaces969104 56987Node: Zero Length974312 56988Node: Empty Structures977599 56989Node: Variable Length978005 56990Node: Variadic Macros980861 56991Node: Escaped Newlines983239 56992Node: Subscripting984078 56993Node: Pointer Arith984803 56994Node: Initializers985371 56995Node: Compound Literals985867 56996Node: Designated Inits989228 56997Node: Case Ranges992966 56998Node: Cast to Union993647 56999Node: Mixed Declarations994737 57000Node: Function Attributes995247 57001Node: Attribute Syntax1089830 57002Node: Function Prototypes1100220 57003Node: C++ Comments1102000 57004Node: Dollar Signs1102519 57005Node: Character Escapes1102984 57006Node: Variable Attributes1103278 57007Ref: AVR Variable Attributes1116953 57008Ref: MeP Variable Attributes1119615 57009Ref: i386 Variable Attributes1121551 57010Node: Type Attributes1127212 57011Ref: MeP Type Attributes1141100 57012Ref: i386 Type Attributes1141374 57013Ref: PowerPC Type Attributes1142066 57014Ref: SPU Type Attributes1142928 57015Node: Alignment1143219 57016Node: Inline1144589 57017Node: Volatiles1149565 57018Node: Extended Asm1152446 57019Ref: Example of asm with clobbered asm reg1158350 57020Ref: Extended asm with goto1168063 57021Node: Constraints1175913 57022Node: Simple Constraints1176997 57023Node: Multi-Alternative1184307 57024Node: Modifiers1186024 57025Node: Machine Constraints1189037 57026Node: Asm Labels1246395 57027Node: Explicit Reg Vars1248071 57028Node: Global Reg Vars1249669 57029Node: Local Reg Vars1254165 57030Node: Alternate Keywords1256581 57031Node: Incomplete Enums1258067 57032Node: Function Names1258823 57033Node: Return Address1260984 57034Node: Vector Extensions1264491 57035Node: Offsetof1271420 57036Node: __sync Builtins1272225 57037Node: __atomic Builtins1277694 57038Node: x86 specific memory model extensions for transactional memory1289328 57039Node: Object Size Checking1290590 57040Node: Cilk Plus Builtins1296083 57041Node: Other Builtins1296952 57042Node: Target Builtins1326259 57043Node: Alpha Built-in Functions1327678 57044Node: Altera Nios II Built-in Functions1330691 57045Node: ARC Built-in Functions1334678 57046Node: ARC SIMD Built-in Functions1339890 57047Node: ARM iWMMXt Built-in Functions1348786 57048Node: ARM NEON Intrinsics1355769 57049Node: ARM ACLE Intrinsics1573263 57050Node: AVR Built-in Functions1574591 57051Node: Blackfin Built-in Functions1577669 57052Node: FR-V Built-in Functions1578286 57053Node: Argument Types1579149 57054Node: Directly-mapped Integer Functions1580903 57055Node: Directly-mapped Media Functions1581987 57056Node: Raw read/write Functions1590193 57057Node: Other Built-in Functions1591101 57058Node: X86 Built-in Functions1592287 57059Node: X86 transactional memory intrinsics1651480 57060Node: MIPS DSP Built-in Functions1654156 57061Node: MIPS Paired-Single Support1666665 57062Node: MIPS Loongson Built-in Functions1668164 57063Node: Paired-Single Arithmetic1674679 57064Node: Paired-Single Built-in Functions1675627 57065Node: MIPS-3D Built-in Functions1678294 57066Node: Other MIPS Built-in Functions1683672 57067Node: MSP430 Built-in Functions1684677 57068Node: NDS32 Built-in Functions1685581 57069Node: picoChip Built-in Functions1686874 57070Node: PowerPC Built-in Functions1688217 57071Node: PowerPC AltiVec/VSX Built-in Functions1691926 57072Node: PowerPC Hardware Transactional Memory Built-in Functions1824824 57073Node: RX Built-in Functions1831365 57074Node: S/390 System z Built-in Functions1835398 57075Node: SH Built-in Functions1840627 57076Node: SPARC VIS Built-in Functions1842020 57077Node: SPU Built-in Functions1847623 57078Node: TI C6X Built-in Functions1849440 57079Node: TILE-Gx Built-in Functions1850465 57080Node: TILEPro Built-in Functions1851584 57081Node: Target Format Checks1852653 57082Node: Solaris Format Checks1853085 57083Node: Darwin Format Checks1853511 57084Node: Pragmas1854329 57085Node: ARM Pragmas1855065 57086Node: M32C Pragmas1855668 57087Node: MeP Pragmas1856740 57088Node: RS/6000 and PowerPC Pragmas1858808 57089Node: Darwin Pragmas1859549 57090Node: Solaris Pragmas1860616 57091Node: Symbol-Renaming Pragmas1861780 57092Node: Structure-Packing Pragmas1863336 57093Node: Weak Pragmas1864981 57094Node: Diagnostic Pragmas1865715 57095Node: Visibility Pragmas1868824 57096Node: Push/Pop Macro Pragmas1869576 57097Node: Function Specific Option Pragmas1870549 57098Node: Loop-Specific Pragmas1872740 57099Node: Unnamed Fields1873839 57100Node: Thread-Local1876066 57101Node: C99 Thread-Local Edits1878171 57102Node: C++98 Thread-Local Edits1880169 57103Node: Binary constants1883614 57104Node: C++ Extensions1884285 57105Node: C++ Volatiles1885996 57106Node: Restricted Pointers1888344 57107Node: Vague Linkage1889935 57108Node: C++ Interface1893558 57109Ref: C++ Interface-Footnote-11897846 57110Node: Template Instantiation1897984 57111Node: Bound member functions1904570 57112Node: C++ Attributes1906102 57113Node: Function Multiversioning1909681 57114Node: Namespace Association1911498 57115Node: Type Traits1912878 57116Node: Java Exceptions1919361 57117Node: Deprecated Features1920751 57118Node: Backwards Compatibility1923718 57119Node: Objective-C1925065 57120Node: GNU Objective-C runtime API1925672 57121Node: Modern GNU Objective-C runtime API1926679 57122Node: Traditional GNU Objective-C runtime API1929115 57123Node: Executing code before main1929842 57124Node: What you can and what you cannot do in +load1932582 57125Node: Type encoding1934970 57126Node: Legacy type encoding1939997 57127Node: @encode1941087 57128Node: Method signatures1941628 57129Node: Garbage Collection1943620 57130Node: Constant string objects1946310 57131Node: compatibility_alias1948819 57132Node: Exceptions1949540 57133Node: Synchronization1952250 57134Node: Fast enumeration1953434 57135Node: Using fast enumeration1953746 57136Node: c99-like fast enumeration syntax1954957 57137Node: Fast enumeration details1955660 57138Node: Fast enumeration protocol1958000 57139Node: Messaging with the GNU Objective-C runtime1961152 57140Node: Dynamically registering methods1962524 57141Node: Forwarding hook1964215 57142Node: Compatibility1967255 57143Node: Gcov1973811 57144Node: Gcov Intro1974344 57145Node: Invoking Gcov1977062 57146Node: Gcov and Optimization1991302 57147Node: Gcov Data Files1994304 57148Node: Cross-profiling1995699 57149Node: Trouble1997553 57150Node: Actual Bugs1998965 57151Node: Interoperation1999412 57152Node: Incompatibilities2006303 57153Node: Fixed Headers2014455 57154Node: Standard Libraries2016113 57155Node: Disappointments2017485 57156Node: C++ Misunderstandings2021844 57157Node: Static Definitions2022655 57158Node: Name lookup2023708 57159Ref: Name lookup-Footnote-12028488 57160Node: Temporaries2028677 57161Node: Copy Assignment2030653 57162Node: Non-bugs2032460 57163Node: Warnings and Errors2042966 57164Node: Bugs2044728 57165Node: Bug Criteria2045195 57166Node: Bug Reporting2047405 57167Node: Service2047626 57168Node: Contributing2048445 57169Node: Funding2049185 57170Node: GNU Project2051675 57171Node: Copying2052321 57172Node: GNU Free Documentation License2089830 57173Node: Contributors2114948 57174Node: Option Index2152817 57175Node: Keyword Index2364855 57176 57177End Tag Table 57178