1This is doc/gcc.info, produced by makeinfo version 4.12 from 2/space/rguenther/gcc-4.5.4/gcc-4.5.4/gcc/doc/gcc.texi. 3 4Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 51999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 6Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9under the terms of the GNU Free Documentation License, Version 1.2 or 10any later version published by the Free Software Foundation; with the 11Invariant Sections being "Funding Free Software", the Front-Cover Texts 12being (a) (see below), and with the Back-Cover Texts being (b) (see 13below). A copy of the license is included in the section entitled "GNU 14Free Documentation License". 15 16 (a) The FSF's Front-Cover Text is: 17 18 A GNU Manual 19 20 (b) The FSF's Back-Cover Text is: 21 22 You have freedom to copy and modify this GNU Manual, like GNU 23software. Copies published by the Free Software Foundation raise 24funds for GNU development. 25 26INFO-DIR-SECTION Software development 27START-INFO-DIR-ENTRY 28* gcc: (gcc). The GNU Compiler Collection. 29* g++: (gcc). The GNU C++ compiler. 30END-INFO-DIR-ENTRY 31 This file documents the use of the GNU compilers. 32 33 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 341999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 35Software Foundation, Inc. 36 37 Permission is granted to copy, distribute and/or modify this document 38under the terms of the GNU Free Documentation License, Version 1.2 or 39any later version published by the Free Software Foundation; with the 40Invariant Sections being "Funding Free Software", the Front-Cover Texts 41being (a) (see below), and with the Back-Cover Texts being (b) (see 42below). A copy of the license is included in the section entitled "GNU 43Free Documentation License". 44 45 (a) The FSF's Front-Cover Text is: 46 47 A GNU Manual 48 49 (b) The FSF's Back-Cover Text is: 50 51 You have freedom to copy and modify this GNU Manual, like GNU 52software. Copies published by the Free Software Foundation raise 53funds for GNU development. 54 55 56 57File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 58 59Introduction 60************ 61 62This manual documents how to use the GNU compilers, as well as their 63features and incompatibilities, and how to report bugs. It corresponds 64to the compilers (GCC) version 4.5.4. The internals of the GNU 65compilers, including how to port them to new targets and some 66information about how to write front ends for new languages, are 67documented in a separate manual. *Note Introduction: (gccint)Top. 68 69* Menu: 70 71* G++ and GCC:: You can compile C or C++ programs. 72* Standards:: Language standards supported by GCC. 73* Invoking GCC:: Command options supported by `gcc'. 74* C Implementation:: How GCC implements the ISO C specification. 75* C Extensions:: GNU extensions to the C language family. 76* C++ Implementation:: How GCC implements the ISO C++ specification. 77* C++ Extensions:: GNU extensions to the C++ language. 78* Objective-C:: GNU Objective-C runtime features. 79* Compatibility:: Binary Compatibility 80* Gcov:: `gcov'---a test coverage program. 81* Trouble:: If you have trouble using GCC. 82* Bugs:: How, why and where to report bugs. 83* Service:: How to find suppliers of support for GCC. 84* Contributing:: How to contribute to testing and developing GCC. 85 86* Funding:: How to help assure funding for free software. 87* GNU Project:: The GNU Project and GNU/Linux. 88 89* Copying:: GNU General Public License says 90 how you can copy and share GCC. 91* GNU Free Documentation License:: How you can copy and share this manual. 92* Contributors:: People who have contributed to GCC. 93 94* Option Index:: Index to command line options. 95* Keyword Index:: Index of concepts and symbol names. 96 97 98File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 99 1001 Programming Languages Supported by GCC 101**************************************** 102 103GCC stands for "GNU Compiler Collection". GCC is an integrated 104distribution of compilers for several major programming languages. 105These languages currently include C, C++, Objective-C, Objective-C++, 106Java, Fortran, and Ada. 107 108 The abbreviation "GCC" has multiple meanings in common use. The 109current official meaning is "GNU Compiler Collection", which refers 110generically to the complete suite of tools. The name historically stood 111for "GNU C Compiler", and this usage is still common when the emphasis 112is on compiling C programs. Finally, the name is also used when 113speaking of the "language-independent" component of GCC: code shared 114among the compilers for all supported languages. 115 116 The language-independent component of GCC includes the majority of the 117optimizers, as well as the "back ends" that generate machine code for 118various processors. 119 120 The part of a compiler that is specific to a particular language is 121called the "front end". In addition to the front ends that are 122integrated components of GCC, there are several other front ends that 123are maintained separately. These support languages such as Pascal, 124Mercury, and COBOL. To use these, they must be built together with GCC 125proper. 126 127 Most of the compilers for languages other than C have their own names. 128The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 129talk about compiling one of those languages, we might refer to that 130compiler by its own name, or as GCC. Either is correct. 131 132 Historically, compilers for many languages, including C++ and Fortran, 133have been implemented as "preprocessors" which emit another high level 134language such as C. None of the compilers included in GCC are 135implemented this way; they all generate machine code directly. This 136sort of preprocessor should not be confused with the "C preprocessor", 137which is an integral feature of the C, C++, Objective-C and 138Objective-C++ languages. 139 140 141File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 142 1432 Language Standards Supported by GCC 144************************************* 145 146For each language compiled by GCC for which there is a standard, GCC 147attempts to follow one or more versions of that standard, possibly with 148some exceptions, and possibly with some extensions. 149 1502.1 C language 151============== 152 153GCC supports three versions of the C standard, although support for the 154most recent version is not yet complete. 155 156 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 157published in 1990. This standard was ratified as an ISO standard 158(ISO/IEC 9899:1990) later in 1990. There were no technical differences 159between these publications, although the sections of the ANSI standard 160were renumbered and became clauses in the ISO standard. This standard, 161in both its forms, is commonly known as "C89", or occasionally as 162"C90", from the dates of ratification. The ANSI standard, but not the 163ISO standard, also came with a Rationale document. To select this 164standard in GCC, use one of the options `-ansi', `-std=c90' or 165`-std=iso9899:1990'; to obtain all the diagnostics required by the 166standard, you should also specify `-pedantic' (or `-pedantic-errors' if 167you want them to be errors rather than warnings). *Note Options 168Controlling C Dialect: C Dialect Options. 169 170 Errors in the 1990 ISO C standard were corrected in two Technical 171Corrigenda published in 1994 and 1996. GCC does not support the 172uncorrected version. 173 174 An amendment to the 1990 standard was published in 1995. This 175amendment added digraphs and `__STDC_VERSION__' to the language, but 176otherwise concerned the library. This amendment is commonly known as 177"AMD1"; the amended standard is sometimes known as "C94" or "C95". To 178select this standard in GCC, use the option `-std=iso9899:199409' 179(with, as for other standard versions, `-pedantic' to receive all 180required diagnostics). 181 182 A new edition of the ISO C standard was published in 1999 as ISO/IEC 1839899:1999, and is commonly known as "C99". GCC has incomplete support 184for this standard version; see 185`http://gcc.gnu.org/gcc-4.5/c99status.html' for details. To select this 186standard, use `-std=c99' or `-std=iso9899:1999'. (While in 187development, drafts of this standard version were referred to as "C9X".) 188 189 Errors in the 1999 ISO C standard were corrected in three Technical 190Corrigenda published in 2001, 2004 and 2007. GCC does not support the 191uncorrected version. 192 193 By default, GCC provides some extensions to the C language that on 194rare occasions conflict with the C standard. *Note Extensions to the C 195Language Family: C Extensions. Use of the `-std' options listed above 196will disable these extensions where they conflict with the C standard 197version selected. You may also select an extended version of the C 198language explicitly with `-std=gnu90' (for C90 with GNU extensions) or 199`-std=gnu99' (for C99 with GNU extensions). The default, if no C 200language dialect options are given, is `-std=gnu90'; this will change to 201`-std=gnu99' in some future release when the C99 support is complete. 202Some features that are part of the C99 standard are accepted as 203extensions in C90 mode. 204 205 The ISO C standard defines (in clause 4) two classes of conforming 206implementation. A "conforming hosted implementation" supports the 207whole standard including all the library facilities; a "conforming 208freestanding implementation" is only required to provide certain 209library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 210and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 211also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 212types, added in C99, are not required for freestanding implementations. 213The standard also defines two environments for programs, a 214"freestanding environment", required of all implementations and which 215may not have library facilities beyond those required of freestanding 216implementations, where the handling of program startup and termination 217are implementation-defined, and a "hosted environment", which is not 218required, in which all the library facilities are provided and startup 219is through a function `int main (void)' or `int main (int, char *[])'. 220An OS kernel would be a freestanding environment; a program using the 221facilities of an operating system would normally be in a hosted 222implementation. 223 224 GCC aims towards being usable as a conforming freestanding 225implementation, or as the compiler for a conforming hosted 226implementation. By default, it will act as the compiler for a hosted 227implementation, defining `__STDC_HOSTED__' as `1' and presuming that 228when the names of ISO C functions are used, they have the semantics 229defined in the standard. To make it act as a conforming freestanding 230implementation for a freestanding environment, use the option 231`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 232make assumptions about the meanings of function names from the standard 233library, with exceptions noted below. To build an OS kernel, you may 234well still need to make your own arrangements for linking and startup. 235*Note Options Controlling C Dialect: C Dialect Options. 236 237 GCC does not provide the library facilities required only of hosted 238implementations, nor yet all the facilities required by C99 of 239freestanding implementations; to use the facilities of a hosted 240environment, you will need to find them elsewhere (for example, in the 241GNU C library). *Note Standard Libraries: Standard Libraries. 242 243 Most of the compiler support routines used by GCC are present in 244`libgcc', but there are a few exceptions. GCC requires the 245freestanding environment provide `memcpy', `memmove', `memset' and 246`memcmp'. Finally, if `__builtin_trap' is used, and the target does 247not implement the `trap' pattern, then GCC will emit a call to `abort'. 248 249 For references to Technical Corrigenda, Rationale documents and 250information concerning the history of C that is available online, see 251`http://gcc.gnu.org/readings.html' 252 2532.2 C++ language 254================ 255 256GCC supports the ISO C++ standard (1998) and contains experimental 257support for the upcoming ISO C++ standard (200x). 258 259 The original ISO C++ standard was published as the ISO standard 260(ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2612003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 262C++03, respectively. GCC implements the majority of C++98 (`export' is 263a notable exception) and most of the changes in C++03. To select this 264standard in GCC, use one of the options `-ansi' or `-std=c++98'; to 265obtain all the diagnostics required by the standard, you should also 266specify `-pedantic' (or `-pedantic-errors' if you want them to be 267errors rather than warnings). 268 269 The ISO C++ committee is working on a new ISO C++ standard, dubbed 270C++0x, that is intended to be published by 2009. C++0x contains several 271changes to the C++ language, some of which have been implemented in an 272experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft 273working paper for the C++0x standard; the latest working paper is 274available on the ISO C++ committee's web site at 275`http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding 276the C++0x features available in the experimental C++0x mode, see 277`http://gcc.gnu.org/projects/cxx0x.html'. To select this standard in 278GCC, use the option `-std=c++0x'; to obtain all the diagnostics 279required by the standard, you should also specify `-pedantic' (or 280`-pedantic-errors' if you want them to be errors rather than warnings). 281 282 By default, GCC provides some extensions to the C++ language; *Note 283Options Controlling C++ Dialect: C++ Dialect Options. Use of the 284`-std' option listed above will disable these extensions. You may also 285select an extended version of the C++ language explicitly with 286`-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for 287C++0x with GNU extensions). The default, if no C++ language dialect 288options are given, is `-std=gnu++98'. 289 2902.3 Objective-C and Objective-C++ languages 291=========================================== 292 293There is no formal written standard for Objective-C or Objective-C++. 294The most authoritative manual is "Object-Oriented Programming and the 295Objective-C Language", available at a number of web sites: 296 297 * 298 `http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/' 299 is a recent (and periodically updated) version; 300 301 * `http://objc.toodarkpark.net' is an older example; 302 303 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html' 304 have additional useful information. 305 306 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 307conformance and compatibility of the Ada compiler. 308 309 *Note Standards: (gfortran)Standards, for details of standards 310supported by GNU Fortran. 311 312 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 313details of compatibility between `gcj' and the Java Platform. 314 315 316File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 317 3183 GCC Command Options 319********************* 320 321When you invoke GCC, it normally does preprocessing, compilation, 322assembly and linking. The "overall options" allow you to stop this 323process at an intermediate stage. For example, the `-c' option says 324not to run the linker. Then the output consists of object files output 325by the assembler. 326 327 Other options are passed on to one stage of processing. Some options 328control the preprocessor and others the compiler itself. Yet other 329options control the assembler and linker; most of these are not 330documented here, since you rarely need to use any of them. 331 332 Most of the command line options that you can use with GCC are useful 333for C programs; when an option is only useful with another language 334(usually C++), the explanation says so explicitly. If the description 335for a particular option does not mention a source language, you can use 336that option with all supported languages. 337 338 *Note Compiling C++ Programs: Invoking G++, for a summary of special 339options for compiling C++ programs. 340 341 The `gcc' program accepts options and file names as operands. Many 342options have multi-letter names; therefore multiple single-letter 343options may _not_ be grouped: `-dv' is very different from `-d -v'. 344 345 You can mix options and other arguments. For the most part, the order 346you use doesn't matter. Order does matter when you use several options 347of the same kind; for example, if you specify `-L' more than once, the 348directories are searched in the order specified. Also, the placement 349of the `-l' option is significant. 350 351 Many options have long names starting with `-f' or with `-W'--for 352example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 353have both positive and negative forms; the negative form of `-ffoo' 354would be `-fno-foo'. This manual documents only one of these two 355forms, whichever one is not the default. 356 357 *Note Option Index::, for an index to GCC's options. 358 359* Menu: 360 361* Option Summary:: Brief list of all options, without explanations. 362* Overall Options:: Controlling the kind of output: 363 an executable, object files, assembler files, 364 or preprocessed source. 365* Invoking G++:: Compiling C++ programs. 366* C Dialect Options:: Controlling the variant of C language compiled. 367* C++ Dialect Options:: Variations on C++. 368* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 369 and Objective-C++. 370* Language Independent Options:: Controlling how diagnostics should be 371 formatted. 372* Warning Options:: How picky should the compiler be? 373* Debugging Options:: Symbol tables, measurements, and debugging dumps. 374* Optimize Options:: How much optimization? 375* Preprocessor Options:: Controlling header files and macro definitions. 376 Also, getting dependency information for Make. 377* Assembler Options:: Passing options to the assembler. 378* Link Options:: Specifying libraries and so on. 379* Directory Options:: Where to find header files and libraries. 380 Where to find the compiler executable files. 381* Spec Files:: How to pass switches to sub-processes. 382* Target Options:: Running a cross-compiler, or an old version of GCC. 383* Submodel Options:: Specifying minor hardware or convention variations, 384 such as 68010 vs 68020. 385* Code Gen Options:: Specifying conventions for function calls, data layout 386 and register usage. 387* Environment Variables:: Env vars that affect GCC. 388* Precompiled Headers:: Compiling a header once, and using it many times. 389 390 391File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 392 3933.1 Option Summary 394================== 395 396Here is a summary of all the options, grouped by type. Explanations are 397in the following sections. 398 399_Overall Options_ 400 *Note Options Controlling the Kind of Output: Overall Options. 401 -c -S -E -o FILE -combine -no-canonical-prefixes 402 -pipe -pass-exit-codes 403 -x LANGUAGE -v -### --help[=CLASS[,...]] --target-help 404 --version -wrapper@FILE -fplugin=FILE -fplugin-arg-NAME=ARG 405 406_C Language Options_ 407 *Note Options Controlling C Dialect: C Dialect Options. 408 -ansi -std=STANDARD -fgnu89-inline 409 -aux-info FILENAME 410 -fno-asm -fno-builtin -fno-builtin-FUNCTION 411 -fhosted -ffreestanding -fopenmp -fms-extensions 412 -trigraphs -no-integrated-cpp -traditional -traditional-cpp 413 -fallow-single-precision -fcond-mismatch -flax-vector-conversions 414 -fsigned-bitfields -fsigned-char 415 -funsigned-bitfields -funsigned-char 416 417_C++ Language Options_ 418 *Note Options Controlling C++ Dialect: C++ Dialect Options. 419 -fabi-version=N -fno-access-control -fcheck-new 420 -fconserve-space -ffriend-injection 421 -fno-elide-constructors 422 -fno-enforce-eh-specs 423 -ffor-scope -fno-for-scope -fno-gnu-keywords 424 -fno-implicit-templates 425 -fno-implicit-inline-templates 426 -fno-implement-inlines -fms-extensions 427 -fno-nonansi-builtins -fno-operator-names 428 -fno-optional-diags -fpermissive 429 -fno-pretty-templates 430 -frepo -fno-rtti -fstats -ftemplate-depth=N 431 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 432 -fno-default-inline -fvisibility-inlines-hidden 433 -fvisibility-ms-compat 434 -Wabi -Wconversion-null -Wctor-dtor-privacy 435 -Wnon-virtual-dtor -Wreorder 436 -Weffc++ -Wstrict-null-sentinel 437 -Wno-non-template-friend -Wold-style-cast 438 -Woverloaded-virtual -Wno-pmf-conversions 439 -Wsign-promo 440 441_Objective-C and Objective-C++ Language Options_ 442 *Note Options Controlling Objective-C and Objective-C++ Dialects: 443 Objective-C and Objective-C++ Dialect Options. 444 -fconstant-string-class=CLASS-NAME 445 -fgnu-runtime -fnext-runtime 446 -fno-nil-receivers 447 -fobjc-call-cxx-cdtors 448 -fobjc-direct-dispatch 449 -fobjc-exceptions 450 -fobjc-gc 451 -freplace-objc-classes 452 -fzero-link 453 -gen-decls 454 -Wassign-intercept 455 -Wno-protocol -Wselector 456 -Wstrict-selector-match 457 -Wundeclared-selector 458 459_Language Independent Options_ 460 *Note Options to Control Diagnostic Messages Formatting: Language 461 Independent Options. 462 -fmessage-length=N 463 -fdiagnostics-show-location=[once|every-line] 464 -fdiagnostics-show-option 465 466_Warning Options_ 467 *Note Options to Request or Suppress Warnings: Warning Options. 468 -fsyntax-only -pedantic -pedantic-errors 469 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 470 -Wno-attributes -Wno-builtin-macro-redefined 471 -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual 472 -Wchar-subscripts -Wclobbered -Wcomment 473 -Wconversion -Wcoverage-mismatch -Wno-deprecated 474 -Wno-deprecated-declarations -Wdisabled-optimization 475 -Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels 476 -Werror -Werror=* 477 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 478 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 479 -Wformat-security -Wformat-y2k 480 -Wframe-larger-than=LEN -Wjump-misses-init -Wignored-qualifiers 481 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 482 -Winit-self -Winline 483 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 484 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 485 -Wlogical-op -Wlong-long 486 -Wmain -Wmissing-braces -Wmissing-field-initializers 487 -Wmissing-format-attribute -Wmissing-include-dirs 488 -Wmissing-noreturn -Wno-mudflap 489 -Wno-multichar -Wnonnull -Wno-overflow 490 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 491 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 492 -Wpointer-arith -Wno-pointer-to-int-cast 493 -Wredundant-decls 494 -Wreturn-type -Wsequence-point -Wshadow 495 -Wsign-compare -Wsign-conversion -Wstack-protector 496 -Wstrict-aliasing -Wstrict-aliasing=n 497 -Wstrict-overflow -Wstrict-overflow=N 498 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand 499 -Wsystem-headers -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized 500 -Wunknown-pragmas -Wno-pragmas 501 -Wunsuffixed-float-constants -Wunused -Wunused-function 502 -Wunused-label -Wunused-parameter -Wno-unused-result -Wunused-value -Wunused-variable 503 -Wvariadic-macros -Wvla 504 -Wvolatile-register-var -Wwrite-strings 505 506_C and Objective-C-only Warning Options_ 507 -Wbad-function-cast -Wmissing-declarations 508 -Wmissing-parameter-type -Wmissing-prototypes -Wnested-externs 509 -Wold-style-declaration -Wold-style-definition 510 -Wstrict-prototypes -Wtraditional -Wtraditional-conversion 511 -Wdeclaration-after-statement -Wpointer-sign 512 513_Debugging Options_ 514 *Note Options for Debugging Your Program or GCC: Debugging Options. 515 -dLETTERS -dumpspecs -dumpmachine -dumpversion 516 -fdbg-cnt-list -fdbg-cnt=COUNTER-VALUE-LIST 517 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links 518 -fdump-translation-unit[-N] 519 -fdump-class-hierarchy[-N] 520 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline 521 -fdump-statistics 522 -fdump-tree-all 523 -fdump-tree-original[-N] 524 -fdump-tree-optimized[-N] 525 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias 526 -fdump-tree-ch 527 -fdump-tree-ssa[-N] -fdump-tree-pre[-N] 528 -fdump-tree-ccp[-N] -fdump-tree-dce[-N] 529 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N] 530 -fdump-tree-dom[-N] 531 -fdump-tree-dse[-N] 532 -fdump-tree-phiprop[-N] 533 -fdump-tree-phiopt[-N] 534 -fdump-tree-forwprop[-N] 535 -fdump-tree-copyrename[-N] 536 -fdump-tree-nrv -fdump-tree-vect 537 -fdump-tree-sink 538 -fdump-tree-sra[-N] 539 -fdump-tree-forwprop[-N] 540 -fdump-tree-fre[-N] 541 -fdump-tree-vrp[-N] 542 -ftree-vectorizer-verbose=N 543 -fdump-tree-storeccp[-N] 544 -fdump-final-insns=FILE 545 -fcompare-debug[=OPTS] -fcompare-debug-second 546 -feliminate-dwarf2-dups -feliminate-unused-debug-types 547 -feliminate-unused-debug-symbols -femit-class-debug-always 548 -fenable-icf-debug 549 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 550 -frandom-seed=STRING -fsched-verbose=N 551 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 552 -ftest-coverage -ftime-report -fvar-tracking 553 -fvar-tracking-assignments -fvar-tracking-assignments-toggle 554 -g -gLEVEL -gtoggle -gcoff -gdwarf-VERSION 555 -ggdb -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 556 -gvms -gxcoff -gxcoff+ 557 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 558 -fdebug-prefix-map=OLD=NEW 559 -femit-struct-debug-baseonly -femit-struct-debug-reduced 560 -femit-struct-debug-detailed[=SPEC-LIST] 561 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 562 -print-multi-directory -print-multi-lib -print-multi-os-directory 563 -print-prog-name=PROGRAM -print-search-dirs -Q 564 -print-sysroot -print-sysroot-headers-suffix 565 -save-temps -save-temps=cwd -save-temps=obj -time[=FILE] 566 567_Optimization Options_ 568 *Note Options that Control Optimization: Optimize Options. 569 -falign-functions[=N] -falign-jumps[=N] 570 -falign-labels[=N] -falign-loops[=N] -fassociative-math 571 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 572 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 573 -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping 574 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range 575 -fdata-sections -fdce -fdce 576 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse 577 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math 578 -ffinite-math-only -ffloat-store -fexcess-precision=STYLE 579 -fforward-propagate -ffunction-sections 580 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm 581 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining 582 -finline-functions -finline-functions-called-once -finline-limit=N 583 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta 584 -fipa-pure-const -fipa-reference -fipa-struct-reorg 585 -fipa-type-escape -fira-algorithm=ALGORITHM 586 -fira-region=REGION -fira-coalesce 587 -fira-loop-pressure -fno-ira-share-save-slots 588 -fno-ira-share-spill-slots -fira-verbose=N 589 -fivopts -fkeep-inline-functions -fkeep-static-consts 590 -floop-block -floop-interchange -floop-strip-mine -fgraphite-identity 591 -floop-parallelize-all -flto -flto-compression-level -flto-report -fltrans 592 -fltrans-output-list -fmerge-all-constants -fmerge-constants -fmodulo-sched 593 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap 594 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline 595 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 596 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 597 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 598 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 599 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 600 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays 601 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 602 -fprofile-generate=PATH 603 -fprofile-use -fprofile-use=PATH -fprofile-values 604 -freciprocal-math -fregmove -frename-registers -freorder-blocks 605 -freorder-blocks-and-partition -freorder-functions 606 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 607 -frounding-math -fsched2-use-superblocks -fsched-pressure 608 -fsched-spec-load -fsched-spec-load-dangerous 609 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 610 -fsched-group-heuristic -fsched-critical-path-heuristic 611 -fsched-spec-insn-heuristic -fsched-rank-heuristic 612 -fsched-last-insn-heuristic -fsched-dep-count-heuristic 613 -fschedule-insns -fschedule-insns2 -fsection-anchors 614 -fselective-scheduling -fselective-scheduling2 615 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 616 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller 617 -fsplit-wide-types -fstack-protector -fstack-protector-all 618 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer 619 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop 620 -ftree-copyrename -ftree-dce 621 -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-loop-im 622 -ftree-phiprop -ftree-loop-distribution 623 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 624 -ftree-parallelize-loops=N -ftree-pre -ftree-pta -ftree-reassoc 625 -ftree-sink -ftree-sra -ftree-switch-conversion 626 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 627 -funit-at-a-time -funroll-all-loops -funroll-loops 628 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 629 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 630 -fwhole-program -fwhopr -fwpa -fuse-linker-plugin 631 --param NAME=VALUE 632 -O -O0 -O1 -O2 -O3 -Os 633 634_Preprocessor Options_ 635 *Note Options Controlling the Preprocessor: Preprocessor Options. 636 -AQUESTION=ANSWER 637 -A-QUESTION[=ANSWER] 638 -C -dD -dI -dM -dN 639 -DMACRO[=DEFN] -E -H 640 -idirafter DIR 641 -include FILE -imacros FILE 642 -iprefix FILE -iwithprefix DIR 643 -iwithprefixbefore DIR -isystem DIR 644 -imultilib DIR -isysroot DIR 645 -M -MM -MF -MG -MP -MQ -MT -nostdinc 646 -P -fworking-directory -remap 647 -trigraphs -undef -UMACRO -Wp,OPTION 648 -Xpreprocessor OPTION 649 650_Assembler Option_ 651 *Note Passing Options to the Assembler: Assembler Options. 652 -Wa,OPTION -Xassembler OPTION 653 654_Linker Options_ 655 *Note Options for Linking: Link Options. 656 OBJECT-FILE-NAME -lLIBRARY 657 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 658 -s -static -static-libgcc -static-libstdc++ -shared 659 -shared-libgcc -symbolic 660 -T SCRIPT -Wl,OPTION -Xlinker OPTION 661 -u SYMBOL 662 663_Directory Options_ 664 *Note Options for Directory Search: Directory Options. 665 -BPREFIX -IDIR -iquoteDIR -LDIR 666 -specs=FILE -I- --sysroot=DIR 667 668_Target Options_ 669 *Note Target Options::. 670 -V VERSION -b MACHINE 671 672_Machine Dependent Options_ 673 *Note Hardware Models and Configurations: Submodel Options. 674 675 _ARC Options_ 676 -EB -EL 677 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 678 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 679 680 _ARM Options_ 681 -mapcs-frame -mno-apcs-frame 682 -mabi=NAME 683 -mapcs-stack-check -mno-apcs-stack-check 684 -mapcs-float -mno-apcs-float 685 -mapcs-reentrant -mno-apcs-reentrant 686 -msched-prolog -mno-sched-prolog 687 -mlittle-endian -mbig-endian -mwords-little-endian 688 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 689 -mfp16-format=NAME 690 -mthumb-interwork -mno-thumb-interwork 691 -mcpu=NAME -march=NAME -mfpu=NAME 692 -mstructure-size-boundary=N 693 -mabort-on-noreturn 694 -mlong-calls -mno-long-calls 695 -msingle-pic-base -mno-single-pic-base 696 -mpic-register=REG 697 -mnop-fun-dllimport 698 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 699 -mpoke-function-name 700 -mthumb -marm 701 -mtpcs-frame -mtpcs-leaf-frame 702 -mcaller-super-interworking -mcallee-super-interworking 703 -mtp=NAME 704 -mword-relocations 705 -mfix-cortex-m3-ldrd 706 707 _AVR Options_ 708 -mmcu=MCU -mno-interrupts 709 -mcall-prologues -mtiny-stack -mint8 710 711 _Blackfin Options_ 712 -mcpu=CPU[-SIREVISION] 713 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 714 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 715 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 716 -mno-id-shared-library -mshared-library-id=N 717 -mleaf-id-shared-library -mno-leaf-id-shared-library 718 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 719 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 720 -micplb 721 722 _CRIS Options_ 723 -mcpu=CPU -march=CPU -mtune=CPU 724 -mmax-stack-frame=N -melinux-stacksize=N 725 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 726 -mstack-align -mdata-align -mconst-align 727 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 728 -melf -maout -melinux -mlinux -sim -sim2 729 -mmul-bug-workaround -mno-mul-bug-workaround 730 731 _CRX Options_ 732 -mmac -mpush-args 733 734 _Darwin Options_ 735 -all_load -allowable_client -arch -arch_errors_fatal 736 -arch_only -bind_at_load -bundle -bundle_loader 737 -client_name -compatibility_version -current_version 738 -dead_strip 739 -dependency-file -dylib_file -dylinker_install_name 740 -dynamic -dynamiclib -exported_symbols_list 741 -filelist -flat_namespace -force_cpusubtype_ALL 742 -force_flat_namespace -headerpad_max_install_names 743 -iframework 744 -image_base -init -install_name -keep_private_externs 745 -multi_module -multiply_defined -multiply_defined_unused 746 -noall_load -no_dead_strip_inits_and_terms 747 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 748 -pagezero_size -prebind -prebind_all_twolevel_modules 749 -private_bundle -read_only_relocs -sectalign 750 -sectobjectsymbols -whyload -seg1addr 751 -sectcreate -sectobjectsymbols -sectorder 752 -segaddr -segs_read_only_addr -segs_read_write_addr 753 -seg_addr_table -seg_addr_table_filename -seglinkedit 754 -segprot -segs_read_only_addr -segs_read_write_addr 755 -single_module -static -sub_library -sub_umbrella 756 -twolevel_namespace -umbrella -undefined 757 -unexported_symbols_list -weak_reference_mismatches 758 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 759 -mkernel -mone-byte-bool 760 761 _DEC Alpha Options_ 762 -mno-fp-regs -msoft-float -malpha-as -mgas 763 -mieee -mieee-with-inexact -mieee-conformant 764 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 765 -mtrap-precision=MODE -mbuild-constants 766 -mcpu=CPU-TYPE -mtune=CPU-TYPE 767 -mbwx -mmax -mfix -mcix 768 -mfloat-vax -mfloat-ieee 769 -mexplicit-relocs -msmall-data -mlarge-data 770 -msmall-text -mlarge-text 771 -mmemory-latency=TIME 772 773 _DEC Alpha/VMS Options_ 774 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 775 776 _FR30 Options_ 777 -msmall-model -mno-lsim 778 779 _FRV Options_ 780 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 781 -mhard-float -msoft-float 782 -malloc-cc -mfixed-cc -mdword -mno-dword 783 -mdouble -mno-double 784 -mmedia -mno-media -mmuladd -mno-muladd 785 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 786 -mlinked-fp -mlong-calls -malign-labels 787 -mlibrary-pic -macc-4 -macc-8 788 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 789 -moptimize-membar -mno-optimize-membar 790 -mscc -mno-scc -mcond-exec -mno-cond-exec 791 -mvliw-branch -mno-vliw-branch 792 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 793 -mno-nested-cond-exec -mtomcat-stats 794 -mTLS -mtls 795 -mcpu=CPU 796 797 _GNU/Linux Options_ 798 -muclibc 799 800 _H8/300 Options_ 801 -mrelax -mh -ms -mn -mint32 -malign-300 802 803 _HPPA Options_ 804 -march=ARCHITECTURE-TYPE 805 -mbig-switch -mdisable-fpregs -mdisable-indexing 806 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 807 -mfixed-range=REGISTER-RANGE 808 -mjump-in-delay -mlinker-opt -mlong-calls 809 -mlong-load-store -mno-big-switch -mno-disable-fpregs 810 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 811 -mno-jump-in-delay -mno-long-load-store 812 -mno-portable-runtime -mno-soft-float 813 -mno-space-regs -msoft-float -mpa-risc-1-0 814 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 815 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 816 -munix=UNIX-STD -nolibdld -static -threads 817 818 _i386 and x86-64 Options_ 819 -mtune=CPU-TYPE -march=CPU-TYPE 820 -mfpmath=UNIT 821 -masm=DIALECT -mno-fancy-math-387 822 -mno-fp-ret-in-387 -msoft-float 823 -mno-wide-multiply -mrtd -malign-double 824 -mpreferred-stack-boundary=NUM 825 -mincoming-stack-boundary=NUM 826 -mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip 827 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 828 -maes -mpclmul -mfused-madd 829 -msse4a -m3dnow -mpopcnt -mabm -mfma4 -mxop -mlwp 830 -mthreads -mno-align-stringops -minline-all-stringops 831 -minline-stringops-dynamically -mstringop-strategy=ALG 832 -mpush-args -maccumulate-outgoing-args -m128bit-long-double 833 -m96bit-long-double -mregparm=NUM -msseregparm 834 -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign 835 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 836 -mcmodel=CODE-MODEL -mabi=NAME 837 -m32 -m64 -mlarge-data-threshold=NUM 838 -msse2avx 839 840 _i386 and x86-64 Windows Options_ 841 -mconsole -mcygwin -mno-cygwin -mdll 842 -mnop-fun-dllimport -mthread -municode -mwin32 -mwindows 843 -fno-set-stack-executable 844 845 _IA-64 Options_ 846 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 847 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata 848 -mconstant-gp -mauto-pic -mfused-madd 849 -minline-float-divide-min-latency 850 -minline-float-divide-max-throughput 851 -mno-inline-float-divide 852 -minline-int-divide-min-latency 853 -minline-int-divide-max-throughput 854 -mno-inline-int-divide 855 -minline-sqrt-min-latency -minline-sqrt-max-throughput 856 -mno-inline-sqrt 857 -mdwarf2-asm -mearly-stop-bits 858 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 859 -mtune=CPU-TYPE -milp32 -mlp64 860 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec 861 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 862 -msched-spec-ldc -msched-spec-control-ldc 863 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns 864 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path 865 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost 866 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=MAX-INSNS 867 868 _IA-64/VMS Options_ 869 -mvms-return-codes -mdebug-main=PREFIX -mmalloc64 870 871 _LM32 Options_ 872 -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled 873 -msign-extend-enabled -muser-enabled 874 875 _M32R/D Options_ 876 -m32r2 -m32rx -m32r 877 -mdebug 878 -malign-loops -mno-align-loops 879 -missue-rate=NUMBER 880 -mbranch-cost=NUMBER 881 -mmodel=CODE-SIZE-MODEL-TYPE 882 -msdata=SDATA-TYPE 883 -mno-flush-func -mflush-func=NAME 884 -mno-flush-trap -mflush-trap=NUMBER 885 -G NUM 886 887 _M32C Options_ 888 -mcpu=CPU -msim -memregs=NUMBER 889 890 _M680x0 Options_ 891 -march=ARCH -mcpu=CPU -mtune=TUNE 892 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 893 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 894 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 895 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 896 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 897 -malign-int -mstrict-align -msep-data -mno-sep-data 898 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 899 -mxgot -mno-xgot 900 901 _M68hc1x Options_ 902 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 903 -mauto-incdec -minmax -mlong-calls -mshort 904 -msoft-reg-count=COUNT 905 906 _MCore Options_ 907 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 908 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 909 -m4byte-functions -mno-4byte-functions -mcallgraph-data 910 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 911 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 912 913 _MeP Options_ 914 -mabsdiff -mall-opts -maverage -mbased=N -mbitops 915 -mc=N -mclip -mconfig=NAME -mcop -mcop32 -mcop64 -mivc2 916 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax 917 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf 918 -mtiny=N 919 920 _MIPS Options_ 921 -EL -EB -march=ARCH -mtune=ARCH 922 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 923 -mips64 -mips64r2 924 -mips16 -mno-mips16 -mflip-mips16 925 -minterlink-mips16 -mno-interlink-mips16 926 -mabi=ABI -mabicalls -mno-abicalls 927 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 928 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 929 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 930 -mfpu=FPU-TYPE 931 -msmartmips -mno-smartmips 932 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 933 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 934 -mlong64 -mlong32 -msym32 -mno-sym32 935 -GNUM -mlocal-sdata -mno-local-sdata 936 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 937 -membedded-data -mno-embedded-data 938 -muninit-const-in-rodata -mno-uninit-const-in-rodata 939 -mcode-readable=SETTING 940 -msplit-addresses -mno-split-addresses 941 -mexplicit-relocs -mno-explicit-relocs 942 -mcheck-zero-division -mno-check-zero-division 943 -mdivide-traps -mdivide-breaks 944 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 945 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 946 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 947 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 948 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 949 -mflush-func=FUNC -mno-flush-func 950 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 951 -mfp-exceptions -mno-fp-exceptions 952 -mvr4130-align -mno-vr4130-align -msynci -mno-synci 953 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address 954 955 _MMIX Options_ 956 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 957 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 958 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 959 -mno-base-addresses -msingle-exit -mno-single-exit 960 961 _MN10300 Options_ 962 -mmult-bug -mno-mult-bug 963 -mam33 -mno-am33 964 -mam33-2 -mno-am33-2 965 -mreturn-pointer-on-d0 966 -mno-crt0 -mrelax 967 968 _PDP-11 Options_ 969 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 970 -mbcopy -mbcopy-builtin -mint32 -mno-int16 971 -mint16 -mno-int32 -mfloat32 -mno-float64 972 -mfloat64 -mno-float32 -mabshi -mno-abshi 973 -mbranch-expensive -mbranch-cheap 974 -msplit -mno-split -munix-asm -mdec-asm 975 976 _picoChip Options_ 977 -mae=AE_TYPE -mvliw-lookahead=N 978 -msymbol-as-address -mno-inefficient-warnings 979 980 _PowerPC Options_ See RS/6000 and PowerPC Options. 981 982 _RS/6000 and PowerPC Options_ 983 -mcpu=CPU-TYPE 984 -mtune=CPU-TYPE 985 -mpower -mno-power -mpower2 -mno-power2 986 -mpowerpc -mpowerpc64 -mno-powerpc 987 -maltivec -mno-altivec 988 -mpowerpc-gpopt -mno-powerpc-gpopt 989 -mpowerpc-gfxopt -mno-powerpc-gfxopt 990 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd 991 -mfprnd -mno-fprnd 992 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 993 -mnew-mnemonics -mold-mnemonics 994 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 995 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 996 -malign-power -malign-natural 997 -msoft-float -mhard-float -mmultiple -mno-multiple 998 -msingle-float -mdouble-float -msimple-fpu 999 -mstring -mno-string -mupdate -mno-update 1000 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 1001 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 1002 -mstrict-align -mno-strict-align -mrelocatable 1003 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 1004 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 1005 -mdynamic-no-pic -maltivec -mswdiv 1006 -mprioritize-restricted-insns=PRIORITY 1007 -msched-costly-dep=DEPENDENCE_TYPE 1008 -minsert-sched-nops=SCHEME 1009 -mcall-sysv -mcall-netbsd 1010 -maix-struct-return -msvr4-struct-return 1011 -mabi=ABI-TYPE -msecure-plt -mbss-plt 1012 -misel -mno-isel 1013 -misel=yes -misel=no 1014 -mspe -mno-spe 1015 -mspe=yes -mspe=no 1016 -mpaired 1017 -mgen-cell-microcode -mwarn-cell-microcode 1018 -mvrsave -mno-vrsave 1019 -mmulhw -mno-mulhw 1020 -mdlmzb -mno-dlmzb 1021 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 1022 -mprototype -mno-prototype 1023 -msim -mmvme -mads -myellowknife -memb -msdata 1024 -msdata=OPT -mvxworks -G NUM -pthread 1025 1026 _RX Options_ 1027 -m64bit-doubles -m32bit-doubles -fpu -nofpu 1028 -mcpu= -patch= 1029 -mbig-endian-data -mlittle-endian-data 1030 -msmall-data 1031 -msim -mno-sim 1032 -mas100-syntax -mno-as100-syntax 1033 -mrelax 1034 -mmax-constant-size= 1035 -mint-register= 1036 -msave-acc-in-interrupts 1037 1038 _S/390 and zSeries Options_ 1039 -mtune=CPU-TYPE -march=CPU-TYPE 1040 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 1041 -mlong-double-64 -mlong-double-128 1042 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1043 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1044 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1045 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1046 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1047 1048 _Score Options_ 1049 -meb -mel 1050 -mnhwloop 1051 -muls 1052 -mmac 1053 -mscore5 -mscore5u -mscore7 -mscore7d 1054 1055 _SH Options_ 1056 -m1 -m2 -m2e 1057 -m2a-nofpu -m2a-single-only -m2a-single -m2a 1058 -m3 -m3e 1059 -m4-nofpu -m4-single-only -m4-single -m4 1060 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1061 -m5-64media -m5-64media-nofpu 1062 -m5-32media -m5-32media-nofpu 1063 -m5-compact -m5-compact-nofpu 1064 -mb -ml -mdalign -mrelax 1065 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1066 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace 1067 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1068 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1069 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1070 -minvalid-symbols 1071 1072 _SPARC Options_ 1073 -mcpu=CPU-TYPE 1074 -mtune=CPU-TYPE 1075 -mcmodel=CODE-MODEL 1076 -m32 -m64 -mapp-regs -mno-app-regs 1077 -mfaster-structs -mno-faster-structs 1078 -mfpu -mno-fpu -mhard-float -msoft-float 1079 -mhard-quad-float -msoft-quad-float 1080 -mimpure-text -mno-impure-text -mlittle-endian 1081 -mstack-bias -mno-stack-bias 1082 -munaligned-doubles -mno-unaligned-doubles 1083 -mv8plus -mno-v8plus -mvis -mno-vis 1084 -threads -pthreads -pthread 1085 1086 _SPU Options_ 1087 -mwarn-reloc -merror-reloc 1088 -msafe-dma -munsafe-dma 1089 -mbranch-hints 1090 -msmall-mem -mlarge-mem -mstdmain 1091 -mfixed-range=REGISTER-RANGE 1092 -mea32 -mea64 1093 -maddress-space-conversion -mno-address-space-conversion 1094 -mcache-size=CACHE-SIZE 1095 -matomic-updates -mno-atomic-updates 1096 1097 _System V Options_ 1098 -Qy -Qn -YP,PATHS -Ym,DIR 1099 1100 _V850 Options_ 1101 -mlong-calls -mno-long-calls -mep -mno-ep 1102 -mprolog-function -mno-prolog-function -mspace 1103 -mtda=N -msda=N -mzda=N 1104 -mapp-regs -mno-app-regs 1105 -mdisable-callt -mno-disable-callt 1106 -mv850e1 1107 -mv850e 1108 -mv850 -mbig-switch 1109 1110 _VAX Options_ 1111 -mg -mgnu -munix 1112 1113 _VxWorks Options_ 1114 -mrtp -non-static -Bstatic -Bdynamic 1115 -Xbind-lazy -Xbind-now 1116 1117 _x86-64 Options_ See i386 and x86-64 Options. 1118 1119 _Xstormy16 Options_ 1120 -msim 1121 1122 _Xtensa Options_ 1123 -mconst16 -mno-const16 1124 -mfused-madd -mno-fused-madd 1125 -mserialize-volatile -mno-serialize-volatile 1126 -mtext-section-literals -mno-text-section-literals 1127 -mtarget-align -mno-target-align 1128 -mlongcalls -mno-longcalls 1129 1130 _zSeries Options_ See S/390 and zSeries Options. 1131 1132_Code Generation Options_ 1133 *Note Options for Code Generation Conventions: Code Gen Options. 1134 -fcall-saved-REG -fcall-used-REG 1135 -ffixed-REG -fexceptions 1136 -fnon-call-exceptions -funwind-tables 1137 -fasynchronous-unwind-tables 1138 -finhibit-size-directive -finstrument-functions 1139 -finstrument-functions-exclude-function-list=SYM,SYM,... 1140 -finstrument-functions-exclude-file-list=FILE,FILE,... 1141 -fno-common -fno-ident 1142 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1143 -fno-jump-tables 1144 -frecord-gcc-switches 1145 -freg-struct-return -fshort-enums 1146 -fshort-double -fshort-wchar 1147 -fverbose-asm -fpack-struct[=N] -fstack-check 1148 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1149 -fno-stack-limit -fargument-alias -fargument-noalias 1150 -fargument-noalias-global -fargument-noalias-anything 1151 -fleading-underscore -ftls-model=MODEL 1152 -ftrapv -fwrapv -fbounds-check 1153 -fvisibility 1154 1155 1156* Menu: 1157 1158* Overall Options:: Controlling the kind of output: 1159 an executable, object files, assembler files, 1160 or preprocessed source. 1161* C Dialect Options:: Controlling the variant of C language compiled. 1162* C++ Dialect Options:: Variations on C++. 1163* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1164 and Objective-C++. 1165* Language Independent Options:: Controlling how diagnostics should be 1166 formatted. 1167* Warning Options:: How picky should the compiler be? 1168* Debugging Options:: Symbol tables, measurements, and debugging dumps. 1169* Optimize Options:: How much optimization? 1170* Preprocessor Options:: Controlling header files and macro definitions. 1171 Also, getting dependency information for Make. 1172* Assembler Options:: Passing options to the assembler. 1173* Link Options:: Specifying libraries and so on. 1174* Directory Options:: Where to find header files and libraries. 1175 Where to find the compiler executable files. 1176* Spec Files:: How to pass switches to sub-processes. 1177* Target Options:: Running a cross-compiler, or an old version of GCC. 1178 1179 1180File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1181 11823.2 Options Controlling the Kind of Output 1183========================================== 1184 1185Compilation can involve up to four stages: preprocessing, compilation 1186proper, assembly and linking, always in that order. GCC is capable of 1187preprocessing and compiling several files either into several assembler 1188input files, or into one assembler input file; then each assembler 1189input file produces an object file, and linking combines all the object 1190files (those newly compiled, and those specified as input) into an 1191executable file. 1192 1193 For any given input file, the file name suffix determines what kind of 1194compilation is done: 1195 1196`FILE.c' 1197 C source code which must be preprocessed. 1198 1199`FILE.i' 1200 C source code which should not be preprocessed. 1201 1202`FILE.ii' 1203 C++ source code which should not be preprocessed. 1204 1205`FILE.m' 1206 Objective-C source code. Note that you must link with the 1207 `libobjc' library to make an Objective-C program work. 1208 1209`FILE.mi' 1210 Objective-C source code which should not be preprocessed. 1211 1212`FILE.mm' 1213`FILE.M' 1214 Objective-C++ source code. Note that you must link with the 1215 `libobjc' library to make an Objective-C++ program work. Note 1216 that `.M' refers to a literal capital M. 1217 1218`FILE.mii' 1219 Objective-C++ source code which should not be preprocessed. 1220 1221`FILE.h' 1222 C, C++, Objective-C or Objective-C++ header file to be turned into 1223 a precompiled header. 1224 1225`FILE.cc' 1226`FILE.cp' 1227`FILE.cxx' 1228`FILE.cpp' 1229`FILE.CPP' 1230`FILE.c++' 1231`FILE.C' 1232 C++ source code which must be preprocessed. Note that in `.cxx', 1233 the last two letters must both be literally `x'. Likewise, `.C' 1234 refers to a literal capital C. 1235 1236`FILE.mm' 1237`FILE.M' 1238 Objective-C++ source code which must be preprocessed. 1239 1240`FILE.mii' 1241 Objective-C++ source code which should not be preprocessed. 1242 1243`FILE.hh' 1244`FILE.H' 1245`FILE.hp' 1246`FILE.hxx' 1247`FILE.hpp' 1248`FILE.HPP' 1249`FILE.h++' 1250`FILE.tcc' 1251 C++ header file to be turned into a precompiled header. 1252 1253`FILE.f' 1254`FILE.for' 1255`FILE.ftn' 1256 Fixed form Fortran source code which should not be preprocessed. 1257 1258`FILE.F' 1259`FILE.FOR' 1260`FILE.fpp' 1261`FILE.FPP' 1262`FILE.FTN' 1263 Fixed form Fortran source code which must be preprocessed (with 1264 the traditional preprocessor). 1265 1266`FILE.f90' 1267`FILE.f95' 1268`FILE.f03' 1269`FILE.f08' 1270 Free form Fortran source code which should not be preprocessed. 1271 1272`FILE.F90' 1273`FILE.F95' 1274`FILE.F03' 1275`FILE.F08' 1276 Free form Fortran source code which must be preprocessed (with the 1277 traditional preprocessor). 1278 1279`FILE.ads' 1280 Ada source code file which contains a library unit declaration (a 1281 declaration of a package, subprogram, or generic, or a generic 1282 instantiation), or a library unit renaming declaration (a package, 1283 generic, or subprogram renaming declaration). Such files are also 1284 called "specs". 1285 1286`FILE.adb' 1287 Ada source code file containing a library unit body (a subprogram 1288 or package body). Such files are also called "bodies". 1289 1290`FILE.s' 1291 Assembler code. 1292 1293`FILE.S' 1294`FILE.sx' 1295 Assembler code which must be preprocessed. 1296 1297`OTHER' 1298 An object file to be fed straight into linking. Any file name 1299 with no recognized suffix is treated this way. 1300 1301 You can specify the input language explicitly with the `-x' option: 1302 1303`-x LANGUAGE' 1304 Specify explicitly the LANGUAGE for the following input files 1305 (rather than letting the compiler choose a default based on the 1306 file name suffix). This option applies to all following input 1307 files until the next `-x' option. Possible values for LANGUAGE 1308 are: 1309 c c-header c-cpp-output 1310 c++ c++-header c++-cpp-output 1311 objective-c objective-c-header objective-c-cpp-output 1312 objective-c++ objective-c++-header objective-c++-cpp-output 1313 assembler assembler-with-cpp 1314 ada 1315 f77 f77-cpp-input f95 f95-cpp-input 1316 java 1317 1318`-x none' 1319 Turn off any specification of a language, so that subsequent files 1320 are handled according to their file name suffixes (as they are if 1321 `-x' has not been used at all). 1322 1323`-pass-exit-codes' 1324 Normally the `gcc' program will exit with the code of 1 if any 1325 phase of the compiler returns a non-success return code. If you 1326 specify `-pass-exit-codes', the `gcc' program will instead return 1327 with numerically highest error produced by any phase that returned 1328 an error indication. The C, C++, and Fortran frontends return 4, 1329 if an internal compiler error is encountered. 1330 1331 If you only want some of the stages of compilation, you can use `-x' 1332(or filename suffixes) to tell `gcc' where to start, and one of the 1333options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1334some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1335do nothing at all. 1336 1337`-c' 1338 Compile or assemble the source files, but do not link. The linking 1339 stage simply is not done. The ultimate output is in the form of an 1340 object file for each source file. 1341 1342 By default, the object file name for a source file is made by 1343 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1344 1345 Unrecognized input files, not requiring compilation or assembly, 1346 are ignored. 1347 1348`-S' 1349 Stop after the stage of compilation proper; do not assemble. The 1350 output is in the form of an assembler code file for each 1351 non-assembler input file specified. 1352 1353 By default, the assembler file name for a source file is made by 1354 replacing the suffix `.c', `.i', etc., with `.s'. 1355 1356 Input files that don't require compilation are ignored. 1357 1358`-E' 1359 Stop after the preprocessing stage; do not run the compiler 1360 proper. The output is in the form of preprocessed source code, 1361 which is sent to the standard output. 1362 1363 Input files which don't require preprocessing are ignored. 1364 1365`-o FILE' 1366 Place output in file FILE. This applies regardless to whatever 1367 sort of output is being produced, whether it be an executable file, 1368 an object file, an assembler file or preprocessed C code. 1369 1370 If `-o' is not specified, the default is to put an executable file 1371 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1372 assembler file in `SOURCE.s', a precompiled header file in 1373 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1374 output. 1375 1376`-v' 1377 Print (on standard error output) the commands executed to run the 1378 stages of compilation. Also print the version number of the 1379 compiler driver program and of the preprocessor and the compiler 1380 proper. 1381 1382`-###' 1383 Like `-v' except the commands are not executed and all command 1384 arguments are quoted. This is useful for shell scripts to capture 1385 the driver-generated command lines. 1386 1387`-pipe' 1388 Use pipes rather than temporary files for communication between the 1389 various stages of compilation. This fails to work on some systems 1390 where the assembler is unable to read from a pipe; but the GNU 1391 assembler has no trouble. 1392 1393`-combine' 1394 If you are compiling multiple source files, this option tells the 1395 driver to pass all the source files to the compiler at once (for 1396 those languages for which the compiler can handle this). This 1397 will allow intermodule analysis (IMA) to be performed by the 1398 compiler. Currently the only language for which this is supported 1399 is C. If you pass source files for multiple languages to the 1400 driver, using this option, the driver will invoke the compiler(s) 1401 that support IMA once each, passing each compiler all the source 1402 files appropriate for it. For those languages that do not support 1403 IMA this option will be ignored, and the compiler will be invoked 1404 once for each source file in that language. If you use this 1405 option in conjunction with `-save-temps', the compiler will 1406 generate multiple pre-processed files (one for each source file), 1407 but only one (combined) `.o' or `.s' file. 1408 1409`--help' 1410 Print (on the standard output) a description of the command line 1411 options understood by `gcc'. If the `-v' option is also specified 1412 then `--help' will also be passed on to the various processes 1413 invoked by `gcc', so that they can display the command line options 1414 they accept. If the `-Wextra' option has also been specified 1415 (prior to the `--help' option), then command line options which 1416 have no documentation associated with them will also be displayed. 1417 1418`--target-help' 1419 Print (on the standard output) a description of target-specific 1420 command line options for each tool. For some targets extra 1421 target-specific information may also be printed. 1422 1423`--help={CLASS|[^]QUALIFIER}[,...]' 1424 Print (on the standard output) a description of the command line 1425 options understood by the compiler that fit into all specified 1426 classes and qualifiers. These are the supported classes: 1427 1428 `optimizers' 1429 This will display all of the optimization options supported 1430 by the compiler. 1431 1432 `warnings' 1433 This will display all of the options controlling warning 1434 messages produced by the compiler. 1435 1436 `target' 1437 This will display target-specific options. Unlike the 1438 `--target-help' option however, target-specific options of the 1439 linker and assembler will not be displayed. This is because 1440 those tools do not currently support the extended `--help=' 1441 syntax. 1442 1443 `params' 1444 This will display the values recognized by the `--param' 1445 option. 1446 1447 LANGUAGE 1448 This will display the options supported for LANGUAGE, where 1449 LANGUAGE is the name of one of the languages supported in this 1450 version of GCC. 1451 1452 `common' 1453 This will display the options that are common to all 1454 languages. 1455 1456 These are the supported qualifiers: 1457 1458 `undocumented' 1459 Display only those options which are undocumented. 1460 1461 `joined' 1462 Display options which take an argument that appears after an 1463 equal sign in the same continuous piece of text, such as: 1464 `--help=target'. 1465 1466 `separate' 1467 Display options which take an argument that appears as a 1468 separate word following the original option, such as: `-o 1469 output-file'. 1470 1471 Thus for example to display all the undocumented target-specific 1472 switches supported by the compiler the following can be used: 1473 1474 --help=target,undocumented 1475 1476 The sense of a qualifier can be inverted by prefixing it with the 1477 `^' character, so for example to display all binary warning 1478 options (i.e., ones that are either on or off and that do not take 1479 an argument), which have a description the following can be used: 1480 1481 --help=warnings,^joined,^undocumented 1482 1483 The argument to `--help=' should not consist solely of inverted 1484 qualifiers. 1485 1486 Combining several classes is possible, although this usually 1487 restricts the output by so much that there is nothing to display. 1488 One case where it does work however is when one of the classes is 1489 TARGET. So for example to display all the target-specific 1490 optimization options the following can be used: 1491 1492 --help=target,optimizers 1493 1494 The `--help=' option can be repeated on the command line. Each 1495 successive use will display its requested class of options, 1496 skipping those that have already been displayed. 1497 1498 If the `-Q' option appears on the command line before the 1499 `--help=' option, then the descriptive text displayed by `--help=' 1500 is changed. Instead of describing the displayed options, an 1501 indication is given as to whether the option is enabled, disabled 1502 or set to a specific value (assuming that the compiler knows this 1503 at the point where the `--help=' option is used). 1504 1505 Here is a truncated example from the ARM port of `gcc': 1506 1507 % gcc -Q -mabi=2 --help=target -c 1508 The following options are target specific: 1509 -mabi= 2 1510 -mabort-on-noreturn [disabled] 1511 -mapcs [disabled] 1512 1513 The output is sensitive to the effects of previous command line 1514 options, so for example it is possible to find out which 1515 optimizations are enabled at `-O2' by using: 1516 1517 -Q -O2 --help=optimizers 1518 1519 Alternatively you can discover which binary optimizations are 1520 enabled by `-O3' by using: 1521 1522 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1523 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1524 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1525 1526`-no-canonical-prefixes' 1527 Do not expand any symbolic links, resolve references to `/../' or 1528 `/./', or make the path absolute when generating a relative prefix. 1529 1530`--version' 1531 Display the version number and copyrights of the invoked GCC. 1532 1533`-wrapper' 1534 Invoke all subcommands under a wrapper program. It takes a single 1535 comma separated list as an argument, which will be used to invoke 1536 the wrapper: 1537 1538 gcc -c t.c -wrapper gdb,--args 1539 1540 This will invoke all subprograms of gcc under "gdb -args", thus 1541 cc1 invocation will be "gdb -args cc1 ...". 1542 1543`-fplugin=NAME.so' 1544 Load the plugin code in file NAME.so, assumed to be a shared 1545 object to be dlopen'd by the compiler. The base name of the 1546 shared object file is used to identify the plugin for the purposes 1547 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1548 Each plugin should define the callback functions specified in the 1549 Plugins API. 1550 1551`-fplugin-arg-NAME-KEY=VALUE' 1552 Define an argument called KEY with a value of VALUE for the plugin 1553 called NAME. 1554 1555`@FILE' 1556 Read command-line options from FILE. The options read are 1557 inserted in place of the original @FILE option. If FILE does not 1558 exist, or cannot be read, then the option will be treated 1559 literally, and not removed. 1560 1561 Options in FILE are separated by whitespace. A whitespace 1562 character may be included in an option by surrounding the entire 1563 option in either single or double quotes. Any character 1564 (including a backslash) may be included by prefixing the character 1565 to be included with a backslash. The FILE may itself contain 1566 additional @FILE options; any such options will be processed 1567 recursively. 1568 1569 1570File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1571 15723.3 Compiling C++ Programs 1573========================== 1574 1575C++ source files conventionally use one of the suffixes `.C', `.cc', 1576`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1577`.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1578preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1579these names and compiles them as C++ programs even if you call the 1580compiler the same way as for compiling C programs (usually with the 1581name `gcc'). 1582 1583 However, the use of `gcc' does not add the C++ library. `g++' is a 1584program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1585source files instead of C source files unless `-x' is used, and 1586automatically specifies linking against the C++ library. This program 1587is also useful when precompiling a C header file with a `.h' extension 1588for use in C++ compilations. On many systems, `g++' is also installed 1589with the name `c++'. 1590 1591 When you compile C++ programs, you may specify many of the same 1592command-line options that you use for compiling programs in any 1593language; or command-line options meaningful for C and related 1594languages; or options that are meaningful only for C++ programs. *Note 1595Options Controlling C Dialect: C Dialect Options, for explanations of 1596options for languages related to C. *Note Options Controlling C++ 1597Dialect: C++ Dialect Options, for explanations of options that are 1598meaningful only for C++ programs. 1599 1600 1601File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1602 16033.4 Options Controlling C Dialect 1604================================= 1605 1606The following options control the dialect of C (or languages derived 1607from C, such as C++, Objective-C and Objective-C++) that the compiler 1608accepts: 1609 1610`-ansi' 1611 In C mode, this is equivalent to `-std=c90'. In C++ mode, it is 1612 equivalent to `-std=c++98'. 1613 1614 This turns off certain features of GCC that are incompatible with 1615 ISO C90 (when compiling C code), or of standard C++ (when 1616 compiling C++ code), such as the `asm' and `typeof' keywords, and 1617 predefined macros such as `unix' and `vax' that identify the type 1618 of system you are using. It also enables the undesirable and 1619 rarely used ISO trigraph feature. For the C compiler, it disables 1620 recognition of C++ style `//' comments as well as the `inline' 1621 keyword. 1622 1623 The alternate keywords `__asm__', `__extension__', `__inline__' 1624 and `__typeof__' continue to work despite `-ansi'. You would not 1625 want to use them in an ISO C program, of course, but it is useful 1626 to put them in header files that might be included in compilations 1627 done with `-ansi'. Alternate predefined macros such as `__unix__' 1628 and `__vax__' are also available, with or without `-ansi'. 1629 1630 The `-ansi' option does not cause non-ISO programs to be rejected 1631 gratuitously. For that, `-pedantic' is required in addition to 1632 `-ansi'. *Note Warning Options::. 1633 1634 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1635 is used. Some header files may notice this macro and refrain from 1636 declaring certain functions or defining certain macros that the 1637 ISO standard doesn't call for; this is to avoid interfering with 1638 any programs that might use these names for other things. 1639 1640 Functions that would normally be built in but do not have semantics 1641 defined by ISO C (such as `alloca' and `ffs') are not built-in 1642 functions when `-ansi' is used. *Note Other built-in functions 1643 provided by GCC: Other Builtins, for details of the functions 1644 affected. 1645 1646`-std=' 1647 Determine the language standard. *Note Language Standards 1648 Supported by GCC: Standards, for details of these standard 1649 versions. This option is currently only supported when compiling 1650 C or C++. 1651 1652 The compiler can accept several base standards, such as `c90' or 1653 `c++98', and GNU dialects of those standards, such as `gnu90' or 1654 `gnu++98'. By specifying a base standard, the compiler will 1655 accept all programs following that standard and those using GNU 1656 extensions that do not contradict it. For example, `-std=c90' 1657 turns off certain features of GCC that are incompatible with ISO 1658 C90, such as the `asm' and `typeof' keywords, but not other GNU 1659 extensions that do not have a meaning in ISO C90, such as omitting 1660 the middle term of a `?:' expression. On the other hand, by 1661 specifying a GNU dialect of a standard, all features the compiler 1662 support are enabled, even when those features change the meaning 1663 of the base standard and some strict-conforming programs may be 1664 rejected. The particular standard is used by `-pedantic' to 1665 identify which features are GNU extensions given that version of 1666 the standard. For example `-std=gnu90 -pedantic' would warn about 1667 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1668 1669 A value for this option must be provided; possible values are 1670 1671 `c90' 1672 `c89' 1673 `iso9899:1990' 1674 Support all ISO C90 programs (certain GNU extensions that 1675 conflict with ISO C90 are disabled). Same as `-ansi' for C 1676 code. 1677 1678 `iso9899:199409' 1679 ISO C90 as modified in amendment 1. 1680 1681 `c99' 1682 `c9x' 1683 `iso9899:1999' 1684 `iso9899:199x' 1685 ISO C99. Note that this standard is not yet fully supported; 1686 see `http://gcc.gnu.org/gcc-4.5/c99status.html' for more 1687 information. The names `c9x' and `iso9899:199x' are 1688 deprecated. 1689 1690 `gnu90' 1691 `gnu89' 1692 GNU dialect of ISO C90 (including some C99 features). This is 1693 the default for C code. 1694 1695 `gnu99' 1696 `gnu9x' 1697 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1698 GCC, this will become the default. The name `gnu9x' is 1699 deprecated. 1700 1701 `c++98' 1702 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1703 C++ code. 1704 1705 `gnu++98' 1706 GNU dialect of `-std=c++98'. This is the default for C++ 1707 code. 1708 1709 `c++0x' 1710 The working draft of the upcoming ISO C++0x standard. This 1711 option enables experimental features that are likely to be 1712 included in C++0x. The working draft is constantly changing, 1713 and any feature that is enabled by this flag may be removed 1714 from future versions of GCC if it is not part of the C++0x 1715 standard. 1716 1717 `gnu++0x' 1718 GNU dialect of `-std=c++0x'. This option enables experimental 1719 features that may be removed in future versions of GCC. 1720 1721`-fgnu89-inline' 1722 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1723 semantics for `inline' functions when in C99 mode. *Note An 1724 Inline Function is As Fast As a Macro: Inline. This option is 1725 accepted and ignored by GCC versions 4.1.3 up to but not including 1726 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1727 in C99 mode. Using this option is roughly equivalent to adding the 1728 `gnu_inline' function attribute to all inline functions (*note 1729 Function Attributes::). 1730 1731 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1732 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1733 specifies the default behavior). This option was first supported 1734 in GCC 4.3. This option is not supported in `-std=c90' or 1735 `-std=gnu90' mode. 1736 1737 The preprocessor macros `__GNUC_GNU_INLINE__' and 1738 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1739 effect for `inline' functions. *Note Common Predefined Macros: 1740 (cpp)Common Predefined Macros. 1741 1742`-aux-info FILENAME' 1743 Output to the given filename prototyped declarations for all 1744 functions declared and/or defined in a translation unit, including 1745 those in header files. This option is silently ignored in any 1746 language other than C. 1747 1748 Besides declarations, the file indicates, in comments, the origin 1749 of each declaration (source file and line), whether the 1750 declaration was implicit, prototyped or unprototyped (`I', `N' for 1751 new or `O' for old, respectively, in the first character after the 1752 line number and the colon), and whether it came from a declaration 1753 or a definition (`C' or `F', respectively, in the following 1754 character). In the case of function definitions, a K&R-style list 1755 of arguments followed by their declarations is also provided, 1756 inside comments, after the declaration. 1757 1758`-fno-asm' 1759 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1760 code can use these words as identifiers. You can use the keywords 1761 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1762 `-fno-asm'. 1763 1764 In C++, this switch only affects the `typeof' keyword, since `asm' 1765 and `inline' are standard keywords. You may want to use the 1766 `-fno-gnu-keywords' flag instead, which has the same effect. In 1767 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1768 the `asm' and `typeof' keywords, since `inline' is a standard 1769 keyword in ISO C99. 1770 1771`-fno-builtin' 1772`-fno-builtin-FUNCTION' 1773 Don't recognize built-in functions that do not begin with 1774 `__builtin_' as prefix. *Note Other built-in functions provided 1775 by GCC: Other Builtins, for details of the functions affected, 1776 including those which are not built-in functions when `-ansi' or 1777 `-std' options for strict ISO C conformance are used because they 1778 do not have an ISO standard meaning. 1779 1780 GCC normally generates special code to handle certain built-in 1781 functions more efficiently; for instance, calls to `alloca' may 1782 become single instructions that adjust the stack directly, and 1783 calls to `memcpy' may become inline copy loops. The resulting 1784 code is often both smaller and faster, but since the function 1785 calls no longer appear as such, you cannot set a breakpoint on 1786 those calls, nor can you change the behavior of the functions by 1787 linking with a different library. In addition, when a function is 1788 recognized as a built-in function, GCC may use information about 1789 that function to warn about problems with calls to that function, 1790 or to generate more efficient code, even if the resulting code 1791 still contains calls to that function. For example, warnings are 1792 given with `-Wformat' for bad calls to `printf', when `printf' is 1793 built in, and `strlen' is known not to modify global memory. 1794 1795 With the `-fno-builtin-FUNCTION' option only the built-in function 1796 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1797 If a function is named that is not built-in in this version of 1798 GCC, this option is ignored. There is no corresponding 1799 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1800 functions selectively when using `-fno-builtin' or 1801 `-ffreestanding', you may define macros such as: 1802 1803 #define abs(n) __builtin_abs ((n)) 1804 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1805 1806`-fhosted' 1807 Assert that compilation takes place in a hosted environment. This 1808 implies `-fbuiltin'. A hosted environment is one in which the 1809 entire standard library is available, and in which `main' has a 1810 return type of `int'. Examples are nearly everything except a 1811 kernel. This is equivalent to `-fno-freestanding'. 1812 1813`-ffreestanding' 1814 Assert that compilation takes place in a freestanding environment. 1815 This implies `-fno-builtin'. A freestanding environment is one in 1816 which the standard library may not exist, and program startup may 1817 not necessarily be at `main'. The most obvious example is an OS 1818 kernel. This is equivalent to `-fno-hosted'. 1819 1820 *Note Language Standards Supported by GCC: Standards, for details 1821 of freestanding and hosted environments. 1822 1823`-fopenmp' 1824 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1825 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1826 generates parallel code according to the OpenMP Application 1827 Program Interface v3.0 `http://www.openmp.org/'. This option 1828 implies `-pthread', and thus is only supported on targets that 1829 have support for `-pthread'. 1830 1831`-fms-extensions' 1832 Accept some non-standard constructs used in Microsoft header files. 1833 1834 Some cases of unnamed fields in structures and unions are only 1835 accepted with this option. *Note Unnamed struct/union fields 1836 within structs/unions: Unnamed Fields, for details. 1837 1838`-trigraphs' 1839 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1840 for strict ISO C conformance) implies `-trigraphs'. 1841 1842`-no-integrated-cpp' 1843 Performs a compilation in two passes: preprocessing and compiling. 1844 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1845 via the `-B' option. The user supplied compilation step can then 1846 add in an additional preprocessing step after normal preprocessing 1847 but before compiling. The default is to use the integrated cpp 1848 (internal cpp) 1849 1850 The semantics of this option will change if "cc1", "cc1plus", and 1851 "cc1obj" are merged. 1852 1853`-traditional' 1854`-traditional-cpp' 1855 Formerly, these options caused GCC to attempt to emulate a 1856 pre-standard C compiler. They are now only supported with the 1857 `-E' switch. The preprocessor continues to support a pre-standard 1858 mode. See the GNU CPP manual for details. 1859 1860`-fcond-mismatch' 1861 Allow conditional expressions with mismatched types in the second 1862 and third arguments. The value of such an expression is void. 1863 This option is not supported for C++. 1864 1865`-flax-vector-conversions' 1866 Allow implicit conversions between vectors with differing numbers 1867 of elements and/or incompatible element types. This option should 1868 not be used for new code. 1869 1870`-funsigned-char' 1871 Let the type `char' be unsigned, like `unsigned char'. 1872 1873 Each kind of machine has a default for what `char' should be. It 1874 is either like `unsigned char' by default or like `signed char' by 1875 default. 1876 1877 Ideally, a portable program should always use `signed char' or 1878 `unsigned char' when it depends on the signedness of an object. 1879 But many programs have been written to use plain `char' and expect 1880 it to be signed, or expect it to be unsigned, depending on the 1881 machines they were written for. This option, and its inverse, let 1882 you make such a program work with the opposite default. 1883 1884 The type `char' is always a distinct type from each of `signed 1885 char' or `unsigned char', even though its behavior is always just 1886 like one of those two. 1887 1888`-fsigned-char' 1889 Let the type `char' be signed, like `signed char'. 1890 1891 Note that this is equivalent to `-fno-unsigned-char', which is the 1892 negative form of `-funsigned-char'. Likewise, the option 1893 `-fno-signed-char' is equivalent to `-funsigned-char'. 1894 1895`-fsigned-bitfields' 1896`-funsigned-bitfields' 1897`-fno-signed-bitfields' 1898`-fno-unsigned-bitfields' 1899 These options control whether a bit-field is signed or unsigned, 1900 when the declaration does not use either `signed' or `unsigned'. 1901 By default, such a bit-field is signed, because this is 1902 consistent: the basic integer types such as `int' are signed types. 1903 1904 1905File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1906 19073.5 Options Controlling C++ Dialect 1908=================================== 1909 1910This section describes the command-line options that are only meaningful 1911for C++ programs; but you can also use most of the GNU compiler options 1912regardless of what language your program is in. For example, you might 1913compile a file `firstClass.C' like this: 1914 1915 g++ -g -frepo -O -c firstClass.C 1916 1917In this example, only `-frepo' is an option meant only for C++ 1918programs; you can use the other options with any language supported by 1919GCC. 1920 1921 Here is a list of options that are _only_ for compiling C++ programs: 1922 1923`-fabi-version=N' 1924 Use version N of the C++ ABI. Version 2 is the version of the C++ 1925 ABI that first appeared in G++ 3.4. Version 1 is the version of 1926 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1927 be the version that conforms most closely to the C++ ABI 1928 specification. Therefore, the ABI obtained using version 0 will 1929 change as ABI bugs are fixed. 1930 1931 The default is version 2. 1932 1933 Version 3 corrects an error in mangling a constant address as a 1934 template argument. 1935 1936 Version 4 implements a standard mangling for vector types. 1937 1938 See also `-Wabi'. 1939 1940`-fno-access-control' 1941 Turn off all access checking. This switch is mainly useful for 1942 working around bugs in the access control code. 1943 1944`-fcheck-new' 1945 Check that the pointer returned by `operator new' is non-null 1946 before attempting to modify the storage allocated. This check is 1947 normally unnecessary because the C++ standard specifies that 1948 `operator new' will only return `0' if it is declared `throw()', 1949 in which case the compiler will always check the return value even 1950 without this option. In all other cases, when `operator new' has 1951 a non-empty exception specification, memory exhaustion is 1952 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1953 1954`-fconserve-space' 1955 Put uninitialized or runtime-initialized global variables into the 1956 common segment, as C does. This saves space in the executable at 1957 the cost of not diagnosing duplicate definitions. If you compile 1958 with this flag and your program mysteriously crashes after 1959 `main()' has completed, you may have an object that is being 1960 destroyed twice because two definitions were merged. 1961 1962 This option is no longer useful on most targets, now that support 1963 has been added for putting variables into BSS without making them 1964 common. 1965 1966`-fno-deduce-init-list' 1967 Disable deduction of a template type parameter as 1968 std::initializer_list from a brace-enclosed initializer list, i.e. 1969 1970 template <class T> auto forward(T t) -> decltype (realfn (t)) 1971 { 1972 return realfn (t); 1973 } 1974 1975 void f() 1976 { 1977 forward({1,2}); // call forward<std::initializer_list<int>> 1978 } 1979 1980 This option is present because this deduction is an extension to 1981 the current specification in the C++0x working draft, and there was 1982 some concern about potential overload resolution problems. 1983 1984`-ffriend-injection' 1985 Inject friend functions into the enclosing namespace, so that they 1986 are visible outside the scope of the class in which they are 1987 declared. Friend functions were documented to work this way in 1988 the old Annotated C++ Reference Manual, and versions of G++ before 1989 4.1 always worked that way. However, in ISO C++ a friend function 1990 which is not declared in an enclosing scope can only be found 1991 using argument dependent lookup. This option causes friends to be 1992 injected as they were in earlier releases. 1993 1994 This option is for compatibility, and may be removed in a future 1995 release of G++. 1996 1997`-fno-elide-constructors' 1998 The C++ standard allows an implementation to omit creating a 1999 temporary which is only used to initialize another object of the 2000 same type. Specifying this option disables that optimization, and 2001 forces G++ to call the copy constructor in all cases. 2002 2003`-fno-enforce-eh-specs' 2004 Don't generate code to check for violation of exception 2005 specifications at runtime. This option violates the C++ standard, 2006 but may be useful for reducing code size in production builds, 2007 much like defining `NDEBUG'. This does not give user code 2008 permission to throw exceptions in violation of the exception 2009 specifications; the compiler will still optimize based on the 2010 specifications, so throwing an unexpected exception will result in 2011 undefined behavior. 2012 2013`-ffor-scope' 2014`-fno-for-scope' 2015 If `-ffor-scope' is specified, the scope of variables declared in 2016 a for-init-statement is limited to the `for' loop itself, as 2017 specified by the C++ standard. If `-fno-for-scope' is specified, 2018 the scope of variables declared in a for-init-statement extends to 2019 the end of the enclosing scope, as was the case in old versions of 2020 G++, and other (traditional) implementations of C++. 2021 2022 The default if neither flag is given to follow the standard, but 2023 to allow and give a warning for old-style code that would 2024 otherwise be invalid, or have different behavior. 2025 2026`-fno-gnu-keywords' 2027 Do not recognize `typeof' as a keyword, so that code can use this 2028 word as an identifier. You can use the keyword `__typeof__' 2029 instead. `-ansi' implies `-fno-gnu-keywords'. 2030 2031`-fno-implicit-templates' 2032 Never emit code for non-inline templates which are instantiated 2033 implicitly (i.e. by use); only emit code for explicit 2034 instantiations. *Note Template Instantiation::, for more 2035 information. 2036 2037`-fno-implicit-inline-templates' 2038 Don't emit code for implicit instantiations of inline templates, 2039 either. The default is to handle inlines differently so that 2040 compiles with and without optimization will need the same set of 2041 explicit instantiations. 2042 2043`-fno-implement-inlines' 2044 To save space, do not emit out-of-line copies of inline functions 2045 controlled by `#pragma implementation'. This will cause linker 2046 errors if these functions are not inlined everywhere they are 2047 called. 2048 2049`-fms-extensions' 2050 Disable pedantic warnings about constructs used in MFC, such as 2051 implicit int and getting a pointer to member function via 2052 non-standard syntax. 2053 2054`-fno-nonansi-builtins' 2055 Disable built-in declarations of functions that are not mandated by 2056 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2057 `bzero', `conjf', and other related functions. 2058 2059`-fno-operator-names' 2060 Do not treat the operator name keywords `and', `bitand', `bitor', 2061 `compl', `not', `or' and `xor' as synonyms as keywords. 2062 2063`-fno-optional-diags' 2064 Disable diagnostics that the standard says a compiler does not 2065 need to issue. Currently, the only such diagnostic issued by G++ 2066 is the one for a name having multiple meanings within a class. 2067 2068`-fpermissive' 2069 Downgrade some diagnostics about nonconformant code from errors to 2070 warnings. Thus, using `-fpermissive' will allow some 2071 nonconforming code to compile. 2072 2073`-fno-pretty-templates' 2074 When an error message refers to a specialization of a function 2075 template, the compiler will normally print the signature of the 2076 template followed by the template arguments and any typedefs or 2077 typenames in the signature (e.g. `void f(T) [with T = int]' rather 2078 than `void f(int)') so that it's clear which template is involved. 2079 When an error message refers to a specialization of a class 2080 template, the compiler will omit any template arguments which match 2081 the default template arguments for that template. If either of 2082 these behaviors make it harder to understand the error message 2083 rather than easier, using `-fno-pretty-templates' will disable 2084 them. 2085 2086`-frepo' 2087 Enable automatic template instantiation at link time. This option 2088 also implies `-fno-implicit-templates'. *Note Template 2089 Instantiation::, for more information. 2090 2091`-fno-rtti' 2092 Disable generation of information about every class with virtual 2093 functions for use by the C++ runtime type identification features 2094 (`dynamic_cast' and `typeid'). If you don't use those parts of 2095 the language, you can save some space by using this flag. Note 2096 that exception handling uses the same information, but it will 2097 generate it as needed. The `dynamic_cast' operator can still be 2098 used for casts that do not require runtime type information, i.e. 2099 casts to `void *' or to unambiguous base classes. 2100 2101`-fstats' 2102 Emit statistics about front-end processing at the end of the 2103 compilation. This information is generally only useful to the G++ 2104 development team. 2105 2106`-ftemplate-depth=N' 2107 Set the maximum instantiation depth for template classes to N. A 2108 limit on the template instantiation depth is needed to detect 2109 endless recursions during template class instantiation. ANSI/ISO 2110 C++ conforming programs must not rely on a maximum depth greater 2111 than 17 (changed to 1024 in C++0x). 2112 2113`-fno-threadsafe-statics' 2114 Do not emit the extra code to use the routines specified in the C++ 2115 ABI for thread-safe initialization of local statics. You can use 2116 this option to reduce code size slightly in code that doesn't need 2117 to be thread-safe. 2118 2119`-fuse-cxa-atexit' 2120 Register destructors for objects with static storage duration with 2121 the `__cxa_atexit' function rather than the `atexit' function. 2122 This option is required for fully standards-compliant handling of 2123 static destructors, but will only work if your C library supports 2124 `__cxa_atexit'. 2125 2126`-fno-use-cxa-get-exception-ptr' 2127 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2128 will cause `std::uncaught_exception' to be incorrect, but is 2129 necessary if the runtime routine is not available. 2130 2131`-fvisibility-inlines-hidden' 2132 This switch declares that the user does not attempt to compare 2133 pointers to inline methods where the addresses of the two functions 2134 were taken in different shared objects. 2135 2136 The effect of this is that GCC may, effectively, mark inline 2137 methods with `__attribute__ ((visibility ("hidden")))' so that 2138 they do not appear in the export table of a DSO and do not require 2139 a PLT indirection when used within the DSO. Enabling this option 2140 can have a dramatic effect on load and link times of a DSO as it 2141 massively reduces the size of the dynamic export table when the 2142 library makes heavy use of templates. 2143 2144 The behavior of this switch is not quite the same as marking the 2145 methods as hidden directly, because it does not affect static 2146 variables local to the function or cause the compiler to deduce 2147 that the function is defined in only one shared object. 2148 2149 You may mark a method as having a visibility explicitly to negate 2150 the effect of the switch for that method. For example, if you do 2151 want to compare pointers to a particular inline method, you might 2152 mark it as having default visibility. Marking the enclosing class 2153 with explicit visibility will have no effect. 2154 2155 Explicitly instantiated inline methods are unaffected by this 2156 option as their linkage might otherwise cross a shared library 2157 boundary. *Note Template Instantiation::. 2158 2159`-fvisibility-ms-compat' 2160 This flag attempts to use visibility settings to make GCC's C++ 2161 linkage model compatible with that of Microsoft Visual Studio. 2162 2163 The flag makes these changes to GCC's linkage model: 2164 2165 1. It sets the default visibility to `hidden', like 2166 `-fvisibility=hidden'. 2167 2168 2. Types, but not their members, are not hidden by default. 2169 2170 3. The One Definition Rule is relaxed for types without explicit 2171 visibility specifications which are defined in more than one 2172 different shared object: those declarations are permitted if 2173 they would have been permitted when this option was not used. 2174 2175 In new code it is better to use `-fvisibility=hidden' and export 2176 those classes which are intended to be externally visible. 2177 Unfortunately it is possible for code to rely, perhaps 2178 accidentally, on the Visual Studio behavior. 2179 2180 Among the consequences of these changes are that static data 2181 members of the same type with the same name but defined in 2182 different shared objects will be different, so changing one will 2183 not change the other; and that pointers to function members 2184 defined in different shared objects may not compare equal. When 2185 this flag is given, it is a violation of the ODR to define types 2186 with the same name differently. 2187 2188`-fno-weak' 2189 Do not use weak symbol support, even if it is provided by the 2190 linker. By default, G++ will use weak symbols if they are 2191 available. This option exists only for testing, and should not be 2192 used by end-users; it will result in inferior code and has no 2193 benefits. This option may be removed in a future release of G++. 2194 2195`-nostdinc++' 2196 Do not search for header files in the standard directories 2197 specific to C++, but do still search the other standard 2198 directories. (This option is used when building the C++ library.) 2199 2200 In addition, these optimization, warning, and code generation options 2201have meanings only for C++ programs: 2202 2203`-fno-default-inline' 2204 Do not assume `inline' for functions defined inside a class scope. 2205 *Note Options That Control Optimization: Optimize Options. Note 2206 that these functions will have linkage like inline functions; they 2207 just won't be inlined by default. 2208 2209`-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2210 Warn when G++ generates code that is probably not compatible with 2211 the vendor-neutral C++ ABI. Although an effort has been made to 2212 warn about all such cases, there are probably some cases that are 2213 not warned about, even though G++ is generating incompatible code. 2214 There may also be cases where warnings are emitted even though the 2215 code that is generated will be compatible. 2216 2217 You should rewrite your code to avoid these warnings if you are 2218 concerned about the fact that code generated by G++ may not be 2219 binary compatible with code generated by other compilers. 2220 2221 The known incompatibilities in `-fabi-version=2' (the default) 2222 include: 2223 2224 * A template with a non-type template parameter of reference 2225 type is mangled incorrectly: 2226 extern int N; 2227 template <int &> struct S {}; 2228 void n (S<N>) {2} 2229 2230 This is fixed in `-fabi-version=3'. 2231 2232 * SIMD vector types declared using `__attribute 2233 ((vector_size))' are mangled in a non-standard way that does 2234 not allow for overloading of functions taking vectors of 2235 different sizes. 2236 2237 The mangling is changed in `-fabi-version=4'. 2238 2239 The known incompatibilities in `-fabi-version=1' include: 2240 2241 * Incorrect handling of tail-padding for bit-fields. G++ may 2242 attempt to pack data into the same byte as a base class. For 2243 example: 2244 2245 struct A { virtual void f(); int f1 : 1; }; 2246 struct B : public A { int f2 : 1; }; 2247 2248 In this case, G++ will place `B::f2' into the same byte 2249 as`A::f1'; other compilers will not. You can avoid this 2250 problem by explicitly padding `A' so that its size is a 2251 multiple of the byte size on your platform; that will cause 2252 G++ and other compilers to layout `B' identically. 2253 2254 * Incorrect handling of tail-padding for virtual bases. G++ 2255 does not use tail padding when laying out virtual bases. For 2256 example: 2257 2258 struct A { virtual void f(); char c1; }; 2259 struct B { B(); char c2; }; 2260 struct C : public A, public virtual B {}; 2261 2262 In this case, G++ will not place `B' into the tail-padding for 2263 `A'; other compilers will. You can avoid this problem by 2264 explicitly padding `A' so that its size is a multiple of its 2265 alignment (ignoring virtual base classes); that will cause 2266 G++ and other compilers to layout `C' identically. 2267 2268 * Incorrect handling of bit-fields with declared widths greater 2269 than that of their underlying types, when the bit-fields 2270 appear in a union. For example: 2271 2272 union U { int i : 4096; }; 2273 2274 Assuming that an `int' does not have 4096 bits, G++ will make 2275 the union too small by the number of bits in an `int'. 2276 2277 * Empty classes can be placed at incorrect offsets. For 2278 example: 2279 2280 struct A {}; 2281 2282 struct B { 2283 A a; 2284 virtual void f (); 2285 }; 2286 2287 struct C : public B, public A {}; 2288 2289 G++ will place the `A' base class of `C' at a nonzero offset; 2290 it should be placed at offset zero. G++ mistakenly believes 2291 that the `A' data member of `B' is already at offset zero. 2292 2293 * Names of template functions whose types involve `typename' or 2294 template template parameters can be mangled incorrectly. 2295 2296 template <typename Q> 2297 void f(typename Q::X) {} 2298 2299 template <template <typename> class Q> 2300 void f(typename Q<int>::X) {} 2301 2302 Instantiations of these templates may be mangled incorrectly. 2303 2304 2305 It also warns psABI related changes. The known psABI changes at 2306 this point include: 2307 2308 * For SYSV/x86-64, when passing union with long double, it is 2309 changed to pass in memory as specified in psABI. For example: 2310 2311 union U { 2312 long double ld; 2313 int i; 2314 }; 2315 2316 `union U' will always be passed in memory. 2317 2318 2319`-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2320 Warn when a class seems unusable because all the constructors or 2321 destructors in that class are private, and it has neither friends 2322 nor public static member functions. 2323 2324`-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2325 Warn when a class has virtual functions and accessible non-virtual 2326 destructor, in which case it would be possible but unsafe to delete 2327 an instance of a derived class through a pointer to the base class. 2328 This warning is also enabled if -Weffc++ is specified. 2329 2330`-Wreorder (C++ and Objective-C++ only)' 2331 Warn when the order of member initializers given in the code does 2332 not match the order in which they must be executed. For instance: 2333 2334 struct A { 2335 int i; 2336 int j; 2337 A(): j (0), i (1) { } 2338 }; 2339 2340 The compiler will rearrange the member initializers for `i' and 2341 `j' to match the declaration order of the members, emitting a 2342 warning to that effect. This warning is enabled by `-Wall'. 2343 2344 The following `-W...' options are not affected by `-Wall'. 2345 2346`-Weffc++ (C++ and Objective-C++ only)' 2347 Warn about violations of the following style guidelines from Scott 2348 Meyers' `Effective C++' book: 2349 2350 * Item 11: Define a copy constructor and an assignment 2351 operator for classes with dynamically allocated memory. 2352 2353 * Item 12: Prefer initialization to assignment in constructors. 2354 2355 * Item 14: Make destructors virtual in base classes. 2356 2357 * Item 15: Have `operator=' return a reference to `*this'. 2358 2359 * Item 23: Don't try to return a reference when you must 2360 return an object. 2361 2362 2363 Also warn about violations of the following style guidelines from 2364 Scott Meyers' `More Effective C++' book: 2365 2366 * Item 6: Distinguish between prefix and postfix forms of 2367 increment and decrement operators. 2368 2369 * Item 7: Never overload `&&', `||', or `,'. 2370 2371 2372 When selecting this option, be aware that the standard library 2373 headers do not obey all of these guidelines; use `grep -v' to 2374 filter out those warnings. 2375 2376`-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2377 Warn also about the use of an uncasted `NULL' as sentinel. When 2378 compiling only with GCC this is a valid sentinel, as `NULL' is 2379 defined to `__null'. Although it is a null pointer constant not a 2380 null pointer, it is guaranteed to be of the same size as a 2381 pointer. But this use is not portable across different compilers. 2382 2383`-Wno-non-template-friend (C++ and Objective-C++ only)' 2384 Disable warnings when non-templatized friend functions are declared 2385 within a template. Since the advent of explicit template 2386 specification support in G++, if the name of the friend is an 2387 unqualified-id (i.e., `friend foo(int)'), the C++ language 2388 specification demands that the friend declare or define an 2389 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2390 implemented explicit specification, unqualified-ids could be 2391 interpreted as a particular specialization of a templatized 2392 function. Because this non-conforming behavior is no longer the 2393 default behavior for G++, `-Wnon-template-friend' allows the 2394 compiler to check existing code for potential trouble spots and is 2395 on by default. This new compiler behavior can be turned off with 2396 `-Wno-non-template-friend' which keeps the conformant compiler code 2397 but disables the helpful warning. 2398 2399`-Wold-style-cast (C++ and Objective-C++ only)' 2400 Warn if an old-style (C-style) cast to a non-void type is used 2401 within a C++ program. The new-style casts (`dynamic_cast', 2402 `static_cast', `reinterpret_cast', and `const_cast') are less 2403 vulnerable to unintended effects and much easier to search for. 2404 2405`-Woverloaded-virtual (C++ and Objective-C++ only)' 2406 Warn when a function declaration hides virtual functions from a 2407 base class. For example, in: 2408 2409 struct A { 2410 virtual void f(); 2411 }; 2412 2413 struct B: public A { 2414 void f(int); 2415 }; 2416 2417 the `A' class version of `f' is hidden in `B', and code like: 2418 2419 B* b; 2420 b->f(); 2421 2422 will fail to compile. 2423 2424`-Wno-pmf-conversions (C++ and Objective-C++ only)' 2425 Disable the diagnostic for converting a bound pointer to member 2426 function to a plain pointer. 2427 2428`-Wsign-promo (C++ and Objective-C++ only)' 2429 Warn when overload resolution chooses a promotion from unsigned or 2430 enumerated type to a signed type, over a conversion to an unsigned 2431 type of the same size. Previous versions of G++ would try to 2432 preserve unsignedness, but the standard mandates the current 2433 behavior. 2434 2435 struct A { 2436 operator int (); 2437 A& operator = (int); 2438 }; 2439 2440 main () 2441 { 2442 A a,b; 2443 a = b; 2444 } 2445 2446 In this example, G++ will synthesize a default `A& operator = 2447 (const A&);', while cfront will use the user-defined `operator ='. 2448 2449 2450File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2451 24523.6 Options Controlling Objective-C and Objective-C++ Dialects 2453============================================================== 2454 2455(NOTE: This manual does not describe the Objective-C and Objective-C++ 2456languages themselves. *Note Language Standards Supported by GCC: 2457Standards, for references.) 2458 2459 This section describes the command-line options that are only 2460meaningful for Objective-C and Objective-C++ programs, but you can also 2461use most of the language-independent GNU compiler options. For 2462example, you might compile a file `some_class.m' like this: 2463 2464 gcc -g -fgnu-runtime -O -c some_class.m 2465 2466In this example, `-fgnu-runtime' is an option meant only for 2467Objective-C and Objective-C++ programs; you can use the other options 2468with any language supported by GCC. 2469 2470 Note that since Objective-C is an extension of the C language, 2471Objective-C compilations may also use options specific to the C 2472front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2473compilations may use C++-specific options (e.g., `-Wabi'). 2474 2475 Here is a list of options that are _only_ for compiling Objective-C 2476and Objective-C++ programs: 2477 2478`-fconstant-string-class=CLASS-NAME' 2479 Use CLASS-NAME as the name of the class to instantiate for each 2480 literal string specified with the syntax `@"..."'. The default 2481 class name is `NXConstantString' if the GNU runtime is being used, 2482 and `NSConstantString' if the NeXT runtime is being used (see 2483 below). The `-fconstant-cfstrings' option, if also present, will 2484 override the `-fconstant-string-class' setting and cause `@"..."' 2485 literals to be laid out as constant CoreFoundation strings. 2486 2487`-fgnu-runtime' 2488 Generate object code compatible with the standard GNU Objective-C 2489 runtime. This is the default for most types of systems. 2490 2491`-fnext-runtime' 2492 Generate output compatible with the NeXT runtime. This is the 2493 default for NeXT-based systems, including Darwin and Mac OS X. 2494 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2495 option is used. 2496 2497`-fno-nil-receivers' 2498 Assume that all Objective-C message dispatches (e.g., `[receiver 2499 message:arg]') in this translation unit ensure that the receiver 2500 is not `nil'. This allows for more efficient entry points in the 2501 runtime to be used. Currently, this option is only available in 2502 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2503 2504`-fobjc-call-cxx-cdtors' 2505 For each Objective-C class, check if any of its instance variables 2506 is a C++ object with a non-trivial default constructor. If so, 2507 synthesize a special `- (id) .cxx_construct' instance method that 2508 will run non-trivial default constructors on any such instance 2509 variables, in order, and then return `self'. Similarly, check if 2510 any instance variable is a C++ object with a non-trivial 2511 destructor, and if so, synthesize a special `- (void) 2512 .cxx_destruct' method that will run all such default destructors, 2513 in reverse order. 2514 2515 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2516 thusly generated will only operate on instance variables declared 2517 in the current Objective-C class, and not those inherited from 2518 superclasses. It is the responsibility of the Objective-C runtime 2519 to invoke all such methods in an object's inheritance hierarchy. 2520 The `- (id) .cxx_construct' methods will be invoked by the runtime 2521 immediately after a new object instance is allocated; the `- 2522 (void) .cxx_destruct' methods will be invoked immediately before 2523 the runtime deallocates an object instance. 2524 2525 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2526 later has support for invoking the `- (id) .cxx_construct' and `- 2527 (void) .cxx_destruct' methods. 2528 2529`-fobjc-direct-dispatch' 2530 Allow fast jumps to the message dispatcher. On Darwin this is 2531 accomplished via the comm page. 2532 2533`-fobjc-exceptions' 2534 Enable syntactic support for structured exception handling in 2535 Objective-C, similar to what is offered by C++ and Java. This 2536 option is unavailable in conjunction with the NeXT runtime on Mac 2537 OS X 10.2 and earlier. 2538 2539 @try { 2540 ... 2541 @throw expr; 2542 ... 2543 } 2544 @catch (AnObjCClass *exc) { 2545 ... 2546 @throw expr; 2547 ... 2548 @throw; 2549 ... 2550 } 2551 @catch (AnotherClass *exc) { 2552 ... 2553 } 2554 @catch (id allOthers) { 2555 ... 2556 } 2557 @finally { 2558 ... 2559 @throw expr; 2560 ... 2561 } 2562 2563 The `@throw' statement may appear anywhere in an Objective-C or 2564 Objective-C++ program; when used inside of a `@catch' block, the 2565 `@throw' may appear without an argument (as shown above), in which 2566 case the object caught by the `@catch' will be rethrown. 2567 2568 Note that only (pointers to) Objective-C objects may be thrown and 2569 caught using this scheme. When an object is thrown, it will be 2570 caught by the nearest `@catch' clause capable of handling objects 2571 of that type, analogously to how `catch' blocks work in C++ and 2572 Java. A `@catch(id ...)' clause (as shown above) may also be 2573 provided to catch any and all Objective-C exceptions not caught by 2574 previous `@catch' clauses (if any). 2575 2576 The `@finally' clause, if present, will be executed upon exit from 2577 the immediately preceding `@try ... @catch' section. This will 2578 happen regardless of whether any exceptions are thrown, caught or 2579 rethrown inside the `@try ... @catch' section, analogously to the 2580 behavior of the `finally' clause in Java. 2581 2582 There are several caveats to using the new exception mechanism: 2583 2584 * Although currently designed to be binary compatible with 2585 `NS_HANDLER'-style idioms provided by the `NSException' 2586 class, the new exceptions can only be used on Mac OS X 10.3 2587 (Panther) and later systems, due to additional functionality 2588 needed in the (NeXT) Objective-C runtime. 2589 2590 * As mentioned above, the new exceptions do not support handling 2591 types other than Objective-C objects. Furthermore, when 2592 used from Objective-C++, the Objective-C exception model does 2593 not interoperate with C++ exceptions at this time. This 2594 means you cannot `@throw' an exception from Objective-C and 2595 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2596 2597 The `-fobjc-exceptions' switch also enables the use of 2598 synchronization blocks for thread-safe execution: 2599 2600 @synchronized (ObjCClass *guard) { 2601 ... 2602 } 2603 2604 Upon entering the `@synchronized' block, a thread of execution 2605 shall first check whether a lock has been placed on the 2606 corresponding `guard' object by another thread. If it has, the 2607 current thread shall wait until the other thread relinquishes its 2608 lock. Once `guard' becomes available, the current thread will 2609 place its own lock on it, execute the code contained in the 2610 `@synchronized' block, and finally relinquish the lock (thereby 2611 making `guard' available to other threads). 2612 2613 Unlike Java, Objective-C does not allow for entire methods to be 2614 marked `@synchronized'. Note that throwing exceptions out of 2615 `@synchronized' blocks is allowed, and will cause the guarding 2616 object to be unlocked properly. 2617 2618`-fobjc-gc' 2619 Enable garbage collection (GC) in Objective-C and Objective-C++ 2620 programs. 2621 2622`-freplace-objc-classes' 2623 Emit a special marker instructing `ld(1)' not to statically link in 2624 the resulting object file, and allow `dyld(1)' to load it in at 2625 run time instead. This is used in conjunction with the 2626 Fix-and-Continue debugging mode, where the object file in question 2627 may be recompiled and dynamically reloaded in the course of 2628 program execution, without the need to restart the program itself. 2629 Currently, Fix-and-Continue functionality is only available in 2630 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2631 2632`-fzero-link' 2633 When compiling for the NeXT runtime, the compiler ordinarily 2634 replaces calls to `objc_getClass("...")' (when the name of the 2635 class is known at compile time) with static class references that 2636 get initialized at load time, which improves run-time performance. 2637 Specifying the `-fzero-link' flag suppresses this behavior and 2638 causes calls to `objc_getClass("...")' to be retained. This is 2639 useful in Zero-Link debugging mode, since it allows for individual 2640 class implementations to be modified during program execution. 2641 2642`-gen-decls' 2643 Dump interface declarations for all classes seen in the source 2644 file to a file named `SOURCENAME.decl'. 2645 2646`-Wassign-intercept (Objective-C and Objective-C++ only)' 2647 Warn whenever an Objective-C assignment is being intercepted by the 2648 garbage collector. 2649 2650`-Wno-protocol (Objective-C and Objective-C++ only)' 2651 If a class is declared to implement a protocol, a warning is 2652 issued for every method in the protocol that is not implemented by 2653 the class. The default behavior is to issue a warning for every 2654 method not explicitly implemented in the class, even if a method 2655 implementation is inherited from the superclass. If you use the 2656 `-Wno-protocol' option, then methods inherited from the superclass 2657 are considered to be implemented, and no warning is issued for 2658 them. 2659 2660`-Wselector (Objective-C and Objective-C++ only)' 2661 Warn if multiple methods of different types for the same selector 2662 are found during compilation. The check is performed on the list 2663 of methods in the final stage of compilation. Additionally, a 2664 check is performed for each selector appearing in a 2665 `@selector(...)' expression, and a corresponding method for that 2666 selector has been found during compilation. Because these checks 2667 scan the method table only at the end of compilation, these 2668 warnings are not produced if the final stage of compilation is not 2669 reached, for example because an error is found during compilation, 2670 or because the `-fsyntax-only' option is being used. 2671 2672`-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2673 Warn if multiple methods with differing argument and/or return 2674 types are found for a given selector when attempting to send a 2675 message using this selector to a receiver of type `id' or `Class'. 2676 When this flag is off (which is the default behavior), the 2677 compiler will omit such warnings if any differences found are 2678 confined to types which share the same size and alignment. 2679 2680`-Wundeclared-selector (Objective-C and Objective-C++ only)' 2681 Warn if a `@selector(...)' expression referring to an undeclared 2682 selector is found. A selector is considered undeclared if no 2683 method with that name has been declared before the 2684 `@selector(...)' expression, either explicitly in an `@interface' 2685 or `@protocol' declaration, or implicitly in an `@implementation' 2686 section. This option always performs its checks as soon as a 2687 `@selector(...)' expression is found, while `-Wselector' only 2688 performs its checks in the final stage of compilation. This also 2689 enforces the coding style convention that methods and selectors 2690 must be declared before being used. 2691 2692`-print-objc-runtime-info' 2693 Generate C header describing the largest structure that is passed 2694 by value, if any. 2695 2696 2697 2698File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2699 27003.7 Options to Control Diagnostic Messages Formatting 2701===================================================== 2702 2703Traditionally, diagnostic messages have been formatted irrespective of 2704the output device's aspect (e.g. its width, ...). The options described 2705below can be used to control the diagnostic messages formatting 2706algorithm, e.g. how many characters per line, how often source location 2707information should be reported. Right now, only the C++ front end can 2708honor these options. However it is expected, in the near future, that 2709the remaining front ends would be able to digest them correctly. 2710 2711`-fmessage-length=N' 2712 Try to format error messages so that they fit on lines of about N 2713 characters. The default is 72 characters for `g++' and 0 for the 2714 rest of the front ends supported by GCC. If N is zero, then no 2715 line-wrapping will be done; each error message will appear on a 2716 single line. 2717 2718`-fdiagnostics-show-location=once' 2719 Only meaningful in line-wrapping mode. Instructs the diagnostic 2720 messages reporter to emit _once_ source location information; that 2721 is, in case the message is too long to fit on a single physical 2722 line and has to be wrapped, the source location won't be emitted 2723 (as prefix) again, over and over, in subsequent continuation 2724 lines. This is the default behavior. 2725 2726`-fdiagnostics-show-location=every-line' 2727 Only meaningful in line-wrapping mode. Instructs the diagnostic 2728 messages reporter to emit the same source location information (as 2729 prefix) for physical lines that result from the process of breaking 2730 a message which is too long to fit on a single line. 2731 2732`-fdiagnostics-show-option' 2733 This option instructs the diagnostic machinery to add text to each 2734 diagnostic emitted, which indicates which command line option 2735 directly controls that diagnostic, when such an option is known to 2736 the diagnostic machinery. 2737 2738`-Wcoverage-mismatch' 2739 Warn if feedback profiles do not match when using the 2740 `-fprofile-use' option. If a source file was changed between 2741 `-fprofile-gen' and `-fprofile-use', the files with the profile 2742 feedback can fail to match the source file and GCC can not use the 2743 profile feedback information. By default, GCC emits an error 2744 message in this case. The option `-Wcoverage-mismatch' emits a 2745 warning instead of an error. GCC does not use appropriate 2746 feedback profiles, so using this option can result in poorly 2747 optimized code. This option is useful only in the case of very 2748 minor changes such as bug fixes to an existing code-base. 2749 2750 2751 2752File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2753 27543.8 Options to Request or Suppress Warnings 2755=========================================== 2756 2757Warnings are diagnostic messages that report constructions which are 2758not inherently erroneous but which are risky or suggest there may have 2759been an error. 2760 2761 The following language-independent options do not enable specific 2762warnings but control the kinds of diagnostics produced by GCC. 2763 2764`-fsyntax-only' 2765 Check the code for syntax errors, but don't do anything beyond 2766 that. 2767 2768`-w' 2769 Inhibit all warning messages. 2770 2771`-Werror' 2772 Make all warnings into errors. 2773 2774`-Werror=' 2775 Make the specified warning into an error. The specifier for a 2776 warning is appended, for example `-Werror=switch' turns the 2777 warnings controlled by `-Wswitch' into errors. This switch takes a 2778 negative form, to be used to negate `-Werror' for specific 2779 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2780 warnings not be errors, even when `-Werror' is in effect. You can 2781 use the `-fdiagnostics-show-option' option to have each 2782 controllable warning amended with the option which controls it, to 2783 determine what to use with this option. 2784 2785 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2786 However, `-Wno-error='FOO does not imply anything. 2787 2788`-Wfatal-errors' 2789 This option causes the compiler to abort compilation on the first 2790 error occurred rather than trying to keep going and printing 2791 further error messages. 2792 2793 2794 You can request many specific warnings with options beginning `-W', 2795for example `-Wimplicit' to request warnings on implicit declarations. 2796Each of these specific warning options also has a negative form 2797beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2798This manual lists only one of the two forms, whichever is not the 2799default. For further, language-specific options also refer to *note 2800C++ Dialect Options:: and *note Objective-C and Objective-C++ Dialect 2801Options::. 2802 2803`-pedantic' 2804 Issue all the warnings demanded by strict ISO C and ISO C++; 2805 reject all programs that use forbidden extensions, and some other 2806 programs that do not follow ISO C and ISO C++. For ISO C, follows 2807 the version of the ISO C standard specified by any `-std' option 2808 used. 2809 2810 Valid ISO C and ISO C++ programs should compile properly with or 2811 without this option (though a rare few will require `-ansi' or a 2812 `-std' option specifying the required version of ISO C). However, 2813 without this option, certain GNU extensions and traditional C and 2814 C++ features are supported as well. With this option, they are 2815 rejected. 2816 2817 `-pedantic' does not cause warning messages for use of the 2818 alternate keywords whose names begin and end with `__'. Pedantic 2819 warnings are also disabled in the expression that follows 2820 `__extension__'. However, only system header files should use 2821 these escape routes; application programs should avoid them. 2822 *Note Alternate Keywords::. 2823 2824 Some users try to use `-pedantic' to check programs for strict ISO 2825 C conformance. They soon find that it does not do quite what they 2826 want: it finds some non-ISO practices, but not all--only those for 2827 which ISO C _requires_ a diagnostic, and some others for which 2828 diagnostics have been added. 2829 2830 A feature to report any failure to conform to ISO C might be 2831 useful in some instances, but would require considerable 2832 additional work and would be quite different from `-pedantic'. We 2833 don't have plans to support such a feature in the near future. 2834 2835 Where the standard specified with `-std' represents a GNU extended 2836 dialect of C, such as `gnu90' or `gnu99', there is a corresponding 2837 "base standard", the version of ISO C on which the GNU extended 2838 dialect is based. Warnings from `-pedantic' are given where they 2839 are required by the base standard. (It would not make sense for 2840 such warnings to be given only for features not in the specified 2841 GNU C dialect, since by definition the GNU dialects of C include 2842 all features the compiler supports with the given option, and 2843 there would be nothing to warn about.) 2844 2845`-pedantic-errors' 2846 Like `-pedantic', except that errors are produced rather than 2847 warnings. 2848 2849`-Wall' 2850 This enables all the warnings about constructions that some users 2851 consider questionable, and that are easy to avoid (or modify to 2852 prevent the warning), even in conjunction with macros. This also 2853 enables some language-specific warnings described in *note C++ 2854 Dialect Options:: and *note Objective-C and Objective-C++ Dialect 2855 Options::. 2856 2857 `-Wall' turns on the following warning flags: 2858 2859 -Waddress 2860 -Warray-bounds (only with `-O2') 2861 -Wc++0x-compat 2862 -Wchar-subscripts 2863 -Wenum-compare (in C/Objc; this is on by default in C++) 2864 -Wimplicit-int 2865 -Wimplicit-function-declaration 2866 -Wcomment 2867 -Wformat 2868 -Wmain (only for C/ObjC and unless `-ffreestanding') 2869 -Wmissing-braces 2870 -Wnonnull 2871 -Wparentheses 2872 -Wpointer-sign 2873 -Wreorder 2874 -Wreturn-type 2875 -Wsequence-point 2876 -Wsign-compare (only in C++) 2877 -Wstrict-aliasing 2878 -Wstrict-overflow=1 2879 -Wswitch 2880 -Wtrigraphs 2881 -Wuninitialized 2882 -Wunknown-pragmas 2883 -Wunused-function 2884 -Wunused-label 2885 -Wunused-value 2886 -Wunused-variable 2887 -Wvolatile-register-var 2888 2889 Note that some warning flags are not implied by `-Wall'. Some of 2890 them warn about constructions that users generally do not consider 2891 questionable, but which occasionally you might wish to check for; 2892 others warn about constructions that are necessary or hard to 2893 avoid in some cases, and there is no simple way to modify the code 2894 to suppress the warning. Some of them are enabled by `-Wextra' but 2895 many of them must be enabled individually. 2896 2897`-Wextra' 2898 This enables some extra warning flags that are not enabled by 2899 `-Wall'. (This option used to be called `-W'. The older name is 2900 still supported, but the newer name is more descriptive.) 2901 2902 -Wclobbered 2903 -Wempty-body 2904 -Wignored-qualifiers 2905 -Wmissing-field-initializers 2906 -Wmissing-parameter-type (C only) 2907 -Wold-style-declaration (C only) 2908 -Woverride-init 2909 -Wsign-compare 2910 -Wtype-limits 2911 -Wuninitialized 2912 -Wunused-parameter (only with `-Wunused' or `-Wall') 2913 2914 The option `-Wextra' also prints warning messages for the 2915 following cases: 2916 2917 * A pointer is compared against integer zero with `<', `<=', 2918 `>', or `>='. 2919 2920 * (C++ only) An enumerator and a non-enumerator both appear in a 2921 conditional expression. 2922 2923 * (C++ only) Ambiguous virtual bases. 2924 2925 * (C++ only) Subscripting an array which has been declared 2926 `register'. 2927 2928 * (C++ only) Taking the address of a variable which has been 2929 declared `register'. 2930 2931 * (C++ only) A base class is not initialized in a derived 2932 class' copy constructor. 2933 2934 2935`-Wchar-subscripts' 2936 Warn if an array subscript has type `char'. This is a common cause 2937 of error, as programmers often forget that this type is signed on 2938 some machines. This warning is enabled by `-Wall'. 2939 2940`-Wcomment' 2941 Warn whenever a comment-start sequence `/*' appears in a `/*' 2942 comment, or whenever a Backslash-Newline appears in a `//' comment. 2943 This warning is enabled by `-Wall'. 2944 2945`-Wformat' 2946 Check calls to `printf' and `scanf', etc., to make sure that the 2947 arguments supplied have types appropriate to the format string 2948 specified, and that the conversions specified in the format string 2949 make sense. This includes standard functions, and others 2950 specified by format attributes (*note Function Attributes::), in 2951 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2952 extension, not in the C standard) families (or other 2953 target-specific families). Which functions are checked without 2954 format attributes having been specified depends on the standard 2955 version selected, and such checks of functions without the 2956 attribute specified are disabled by `-ffreestanding' or 2957 `-fno-builtin'. 2958 2959 The formats are checked against the format features supported by 2960 GNU libc version 2.2. These include all ISO C90 and C99 features, 2961 as well as features from the Single Unix Specification and some 2962 BSD and GNU extensions. Other library implementations may not 2963 support all these features; GCC does not support warning about 2964 features that go beyond a particular library's limitations. 2965 However, if `-pedantic' is used with `-Wformat', warnings will be 2966 given about format features not in the selected standard version 2967 (but not for `strfmon' formats, since those are not in any version 2968 of the C standard). *Note Options Controlling C Dialect: C 2969 Dialect Options. 2970 2971 Since `-Wformat' also checks for null format arguments for several 2972 functions, `-Wformat' also implies `-Wnonnull'. 2973 2974 `-Wformat' is included in `-Wall'. For more control over some 2975 aspects of format checking, the options `-Wformat-y2k', 2976 `-Wno-format-extra-args', `-Wno-format-zero-length', 2977 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2978 available, but are not included in `-Wall'. 2979 2980`-Wformat-y2k' 2981 If `-Wformat' is specified, also warn about `strftime' formats 2982 which may yield only a two-digit year. 2983 2984`-Wno-format-contains-nul' 2985 If `-Wformat' is specified, do not warn about format strings that 2986 contain NUL bytes. 2987 2988`-Wno-format-extra-args' 2989 If `-Wformat' is specified, do not warn about excess arguments to a 2990 `printf' or `scanf' format function. The C standard specifies 2991 that such arguments are ignored. 2992 2993 Where the unused arguments lie between used arguments that are 2994 specified with `$' operand number specifications, normally 2995 warnings are still given, since the implementation could not know 2996 what type to pass to `va_arg' to skip the unused arguments. 2997 However, in the case of `scanf' formats, this option will suppress 2998 the warning if the unused arguments are all pointers, since the 2999 Single Unix Specification says that such unused arguments are 3000 allowed. 3001 3002`-Wno-format-zero-length (C and Objective-C only)' 3003 If `-Wformat' is specified, do not warn about zero-length formats. 3004 The C standard specifies that zero-length formats are allowed. 3005 3006`-Wformat-nonliteral' 3007 If `-Wformat' is specified, also warn if the format string is not a 3008 string literal and so cannot be checked, unless the format function 3009 takes its format arguments as a `va_list'. 3010 3011`-Wformat-security' 3012 If `-Wformat' is specified, also warn about uses of format 3013 functions that represent possible security problems. At present, 3014 this warns about calls to `printf' and `scanf' functions where the 3015 format string is not a string literal and there are no format 3016 arguments, as in `printf (foo);'. This may be a security hole if 3017 the format string came from untrusted input and contains `%n'. 3018 (This is currently a subset of what `-Wformat-nonliteral' warns 3019 about, but in future warnings may be added to `-Wformat-security' 3020 that are not included in `-Wformat-nonliteral'.) 3021 3022`-Wformat=2' 3023 Enable `-Wformat' plus format checks not included in `-Wformat'. 3024 Currently equivalent to `-Wformat -Wformat-nonliteral 3025 -Wformat-security -Wformat-y2k'. 3026 3027`-Wnonnull (C and Objective-C only)' 3028 Warn about passing a null pointer for arguments marked as 3029 requiring a non-null value by the `nonnull' function attribute. 3030 3031 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 3032 disabled with the `-Wno-nonnull' option. 3033 3034`-Winit-self (C, C++, Objective-C and Objective-C++ only)' 3035 Warn about uninitialized variables which are initialized with 3036 themselves. Note this option can only be used with the 3037 `-Wuninitialized' option. 3038 3039 For example, GCC will warn about `i' being uninitialized in the 3040 following snippet only when `-Winit-self' has been specified: 3041 int f() 3042 { 3043 int i = i; 3044 return i; 3045 } 3046 3047`-Wimplicit-int (C and Objective-C only)' 3048 Warn when a declaration does not specify a type. This warning is 3049 enabled by `-Wall'. 3050 3051`-Wimplicit-function-declaration (C and Objective-C only)' 3052 Give a warning whenever a function is used before being declared. 3053 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 3054 by default and it is made into an error by `-pedantic-errors'. 3055 This warning is also enabled by `-Wall'. 3056 3057`-Wimplicit' 3058 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 3059 This warning is enabled by `-Wall'. 3060 3061`-Wignored-qualifiers (C and C++ only)' 3062 Warn if the return type of a function has a type qualifier such as 3063 `const'. For ISO C such a type qualifier has no effect, since the 3064 value returned by a function is not an lvalue. For C++, the 3065 warning is only emitted for scalar types or `void'. ISO C 3066 prohibits qualified `void' return types on function definitions, 3067 so such return types always receive a warning even without this 3068 option. 3069 3070 This warning is also enabled by `-Wextra'. 3071 3072`-Wmain' 3073 Warn if the type of `main' is suspicious. `main' should be a 3074 function with external linkage, returning int, taking either zero 3075 arguments, two, or three arguments of appropriate types. This 3076 warning is enabled by default in C++ and is enabled by either 3077 `-Wall' or `-pedantic'. 3078 3079`-Wmissing-braces' 3080 Warn if an aggregate or union initializer is not fully bracketed. 3081 In the following example, the initializer for `a' is not fully 3082 bracketed, but that for `b' is fully bracketed. 3083 3084 int a[2][2] = { 0, 1, 2, 3 }; 3085 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3086 3087 This warning is enabled by `-Wall'. 3088 3089`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3090 Warn if a user-supplied include directory does not exist. 3091 3092`-Wparentheses' 3093 Warn if parentheses are omitted in certain contexts, such as when 3094 there is an assignment in a context where a truth value is 3095 expected, or when operators are nested whose precedence people 3096 often get confused about. 3097 3098 Also warn if a comparison like `x<=y<=z' appears; this is 3099 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3100 interpretation from that of ordinary mathematical notation. 3101 3102 Also warn about constructions where there may be confusion to which 3103 `if' statement an `else' branch belongs. Here is an example of 3104 such a case: 3105 3106 { 3107 if (a) 3108 if (b) 3109 foo (); 3110 else 3111 bar (); 3112 } 3113 3114 In C/C++, every `else' branch belongs to the innermost possible 3115 `if' statement, which in this example is `if (b)'. This is often 3116 not what the programmer expected, as illustrated in the above 3117 example by indentation the programmer chose. When there is the 3118 potential for this confusion, GCC will issue a warning when this 3119 flag is specified. To eliminate the warning, add explicit braces 3120 around the innermost `if' statement so there is no way the `else' 3121 could belong to the enclosing `if'. The resulting code would look 3122 like this: 3123 3124 { 3125 if (a) 3126 { 3127 if (b) 3128 foo (); 3129 else 3130 bar (); 3131 } 3132 } 3133 3134 This warning is enabled by `-Wall'. 3135 3136`-Wsequence-point' 3137 Warn about code that may have undefined semantics because of 3138 violations of sequence point rules in the C and C++ standards. 3139 3140 The C and C++ standards defines the order in which expressions in 3141 a C/C++ program are evaluated in terms of "sequence points", which 3142 represent a partial ordering between the execution of parts of the 3143 program: those executed before the sequence point, and those 3144 executed after it. These occur after the evaluation of a full 3145 expression (one which is not part of a larger expression), after 3146 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3147 (comma) operator, before a function is called (but after the 3148 evaluation of its arguments and the expression denoting the called 3149 function), and in certain other places. Other than as expressed 3150 by the sequence point rules, the order of evaluation of 3151 subexpressions of an expression is not specified. All these rules 3152 describe only a partial order rather than a total order, since, 3153 for example, if two functions are called within one expression 3154 with no sequence point between them, the order in which the 3155 functions are called is not specified. However, the standards 3156 committee have ruled that function calls do not overlap. 3157 3158 It is not specified when between sequence points modifications to 3159 the values of objects take effect. Programs whose behavior 3160 depends on this have undefined behavior; the C and C++ standards 3161 specify that "Between the previous and next sequence point an 3162 object shall have its stored value modified at most once by the 3163 evaluation of an expression. Furthermore, the prior value shall 3164 be read only to determine the value to be stored.". If a program 3165 breaks these rules, the results on any particular implementation 3166 are entirely unpredictable. 3167 3168 Examples of code with undefined behavior are `a = a++;', `a[n] = 3169 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3170 diagnosed by this option, and it may give an occasional false 3171 positive result, but in general it has been found fairly effective 3172 at detecting this sort of problem in programs. 3173 3174 The standard is worded confusingly, therefore there is some debate 3175 over the precise meaning of the sequence point rules in subtle 3176 cases. Links to discussions of the problem, including proposed 3177 formal definitions, may be found on the GCC readings page, at 3178 `http://gcc.gnu.org/readings.html'. 3179 3180 This warning is enabled by `-Wall' for C and C++. 3181 3182`-Wreturn-type' 3183 Warn whenever a function is defined with a return-type that 3184 defaults to `int'. Also warn about any `return' statement with no 3185 return-value in a function whose return-type is not `void' 3186 (falling off the end of the function body is considered returning 3187 without a value), and about a `return' statement with an 3188 expression in a function whose return-type is `void'. 3189 3190 For C++, a function without return type always produces a 3191 diagnostic message, even when `-Wno-return-type' is specified. 3192 The only exceptions are `main' and functions defined in system 3193 headers. 3194 3195 This warning is enabled by `-Wall'. 3196 3197`-Wswitch' 3198 Warn whenever a `switch' statement has an index of enumerated type 3199 and lacks a `case' for one or more of the named codes of that 3200 enumeration. (The presence of a `default' label prevents this 3201 warning.) `case' labels outside the enumeration range also 3202 provoke warnings when this option is used (even if there is a 3203 `default' label). This warning is enabled by `-Wall'. 3204 3205`-Wswitch-default' 3206 Warn whenever a `switch' statement does not have a `default' case. 3207 3208`-Wswitch-enum' 3209 Warn whenever a `switch' statement has an index of enumerated type 3210 and lacks a `case' for one or more of the named codes of that 3211 enumeration. `case' labels outside the enumeration range also 3212 provoke warnings when this option is used. The only difference 3213 between `-Wswitch' and this option is that this option gives a 3214 warning about an omitted enumeration code even if there is a 3215 `default' label. 3216 3217`-Wsync-nand (C and C++ only)' 3218 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3219 built-in functions are used. These functions changed semantics in 3220 GCC 4.4. 3221 3222`-Wtrigraphs' 3223 Warn if any trigraphs are encountered that might change the 3224 meaning of the program (trigraphs within comments are not warned 3225 about). This warning is enabled by `-Wall'. 3226 3227`-Wunused-function' 3228 Warn whenever a static function is declared but not defined or a 3229 non-inline static function is unused. This warning is enabled by 3230 `-Wall'. 3231 3232`-Wunused-label' 3233 Warn whenever a label is declared but not used. This warning is 3234 enabled by `-Wall'. 3235 3236 To suppress this warning use the `unused' attribute (*note 3237 Variable Attributes::). 3238 3239`-Wunused-parameter' 3240 Warn whenever a function parameter is unused aside from its 3241 declaration. 3242 3243 To suppress this warning use the `unused' attribute (*note 3244 Variable Attributes::). 3245 3246`-Wno-unused-result' 3247 Do not warn if a caller of a function marked with attribute 3248 `warn_unused_result' (*note Variable Attributes::) does not use 3249 its return value. The default is `-Wunused-result'. 3250 3251`-Wunused-variable' 3252 Warn whenever a local variable or non-constant static variable is 3253 unused aside from its declaration. This warning is enabled by 3254 `-Wall'. 3255 3256 To suppress this warning use the `unused' attribute (*note 3257 Variable Attributes::). 3258 3259`-Wunused-value' 3260 Warn whenever a statement computes a result that is explicitly not 3261 used. To suppress this warning cast the unused expression to 3262 `void'. This includes an expression-statement or the left-hand 3263 side of a comma expression that contains no side effects. For 3264 example, an expression such as `x[i,j]' will cause a warning, while 3265 `x[(void)i,j]' will not. 3266 3267 This warning is enabled by `-Wall'. 3268 3269`-Wunused' 3270 All the above `-Wunused' options combined. 3271 3272 In order to get a warning about an unused function parameter, you 3273 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3274 `-Wunused'), or separately specify `-Wunused-parameter'. 3275 3276`-Wuninitialized' 3277 Warn if an automatic variable is used without first being 3278 initialized or if a variable may be clobbered by a `setjmp' call. 3279 In C++, warn if a non-static reference or non-static `const' member 3280 appears in a class without constructors. 3281 3282 If you want to warn about code which uses the uninitialized value 3283 of the variable in its own initializer, use the `-Winit-self' 3284 option. 3285 3286 These warnings occur for individual uninitialized or clobbered 3287 elements of structure, union or array variables as well as for 3288 variables which are uninitialized or clobbered as a whole. They do 3289 not occur for variables or elements declared `volatile'. Because 3290 these warnings depend on optimization, the exact variables or 3291 elements for which there are warnings will depend on the precise 3292 optimization options and version of GCC used. 3293 3294 Note that there may be no warning about a variable that is used 3295 only to compute a value that itself is never used, because such 3296 computations may be deleted by data flow analysis before the 3297 warnings are printed. 3298 3299 These warnings are made optional because GCC is not smart enough 3300 to see all the reasons why the code might be correct despite 3301 appearing to have an error. Here is one example of how this can 3302 happen: 3303 3304 { 3305 int x; 3306 switch (y) 3307 { 3308 case 1: x = 1; 3309 break; 3310 case 2: x = 4; 3311 break; 3312 case 3: x = 5; 3313 } 3314 foo (x); 3315 } 3316 3317 If the value of `y' is always 1, 2 or 3, then `x' is always 3318 initialized, but GCC doesn't know this. Here is another common 3319 case: 3320 3321 { 3322 int save_y; 3323 if (change_y) save_y = y, y = new_y; 3324 ... 3325 if (change_y) y = save_y; 3326 } 3327 3328 This has no bug because `save_y' is used only if it is set. 3329 3330 This option also warns when a non-volatile automatic variable 3331 might be changed by a call to `longjmp'. These warnings as well 3332 are possible only in optimizing compilation. 3333 3334 The compiler sees only the calls to `setjmp'. It cannot know 3335 where `longjmp' will be called; in fact, a signal handler could 3336 call it at any point in the code. As a result, you may get a 3337 warning even when there is in fact no problem because `longjmp' 3338 cannot in fact be called at the place which would cause a problem. 3339 3340 Some spurious warnings can be avoided if you declare all the 3341 functions you use that never return as `noreturn'. *Note Function 3342 Attributes::. 3343 3344 This warning is enabled by `-Wall' or `-Wextra'. 3345 3346`-Wunknown-pragmas' 3347 Warn when a #pragma directive is encountered which is not 3348 understood by GCC. If this command line option is used, warnings 3349 will even be issued for unknown pragmas in system header files. 3350 This is not the case if the warnings were only enabled by the 3351 `-Wall' command line option. 3352 3353`-Wno-pragmas' 3354 Do not warn about misuses of pragmas, such as incorrect parameters, 3355 invalid syntax, or conflicts between pragmas. See also 3356 `-Wunknown-pragmas'. 3357 3358`-Wstrict-aliasing' 3359 This option is only active when `-fstrict-aliasing' is active. It 3360 warns about code which might break the strict aliasing rules that 3361 the compiler is using for optimization. The warning does not 3362 catch all cases, but does attempt to catch the more common 3363 pitfalls. It is included in `-Wall'. It is equivalent to 3364 `-Wstrict-aliasing=3' 3365 3366`-Wstrict-aliasing=n' 3367 This option is only active when `-fstrict-aliasing' is active. It 3368 warns about code which might break the strict aliasing rules that 3369 the compiler is using for optimization. Higher levels correspond 3370 to higher accuracy (fewer false positives). Higher levels also 3371 correspond to more effort, similar to the way -O works. 3372 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3373 n=3. 3374 3375 Level 1: Most aggressive, quick, least accurate. Possibly useful 3376 when higher levels do not warn but -fstrict-aliasing still breaks 3377 the code, as it has very few false negatives. However, it has 3378 many false positives. Warns for all pointer conversions between 3379 possibly incompatible types, even if never dereferenced. Runs in 3380 the frontend only. 3381 3382 Level 2: Aggressive, quick, not too precise. May still have many 3383 false positives (not as many as level 1 though), and few false 3384 negatives (but possibly more than level 1). Unlike level 1, it 3385 only warns when an address is taken. Warns about incomplete 3386 types. Runs in the frontend only. 3387 3388 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3389 false positives and few false negatives. Slightly slower than 3390 levels 1 or 2 when optimization is enabled. Takes care of the 3391 common pun+dereference pattern in the frontend: 3392 `*(int*)&some_float'. If optimization is enabled, it also runs in 3393 the backend, where it deals with multiple statement cases using 3394 flow-sensitive points-to information. Only warns when the 3395 converted pointer is dereferenced. Does not warn about incomplete 3396 types. 3397 3398`-Wstrict-overflow' 3399`-Wstrict-overflow=N' 3400 This option is only active when `-fstrict-overflow' is active. It 3401 warns about cases where the compiler optimizes based on the 3402 assumption that signed overflow does not occur. Note that it does 3403 not warn about all cases where the code might overflow: it only 3404 warns about cases where the compiler implements some optimization. 3405 Thus this warning depends on the optimization level. 3406 3407 An optimization which assumes that signed overflow does not occur 3408 is perfectly safe if the values of the variables involved are such 3409 that overflow never does, in fact, occur. Therefore this warning 3410 can easily give a false positive: a warning about code which is not 3411 actually a problem. To help focus on important issues, several 3412 warning levels are defined. No warnings are issued for the use of 3413 undefined signed overflow when estimating how many iterations a 3414 loop will require, in particular when determining whether a loop 3415 will be executed at all. 3416 3417 `-Wstrict-overflow=1' 3418 Warn about cases which are both questionable and easy to 3419 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3420 the compiler will simplify this to `1'. This level of 3421 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3422 not, and must be explicitly requested. 3423 3424 `-Wstrict-overflow=2' 3425 Also warn about other cases where a comparison is simplified 3426 to a constant. For example: `abs (x) >= 0'. This can only be 3427 simplified when `-fstrict-overflow' is in effect, because 3428 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3429 zero. `-Wstrict-overflow' (with no level) is the same as 3430 `-Wstrict-overflow=2'. 3431 3432 `-Wstrict-overflow=3' 3433 Also warn about other cases where a comparison is simplified. 3434 For example: `x + 1 > 1' will be simplified to `x > 0'. 3435 3436 `-Wstrict-overflow=4' 3437 Also warn about other simplifications not covered by the 3438 above cases. For example: `(x * 10) / 5' will be simplified 3439 to `x * 2'. 3440 3441 `-Wstrict-overflow=5' 3442 Also warn about cases where the compiler reduces the 3443 magnitude of a constant involved in a comparison. For 3444 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3445 This is reported only at the highest warning level because 3446 this simplification applies to many comparisons, so this 3447 warning level will give a very large number of false 3448 positives. 3449 3450`-Warray-bounds' 3451 This option is only active when `-ftree-vrp' is active (default 3452 for -O2 and above). It warns about subscripts to arrays that are 3453 always out of bounds. This warning is enabled by `-Wall'. 3454 3455`-Wno-div-by-zero' 3456 Do not warn about compile-time integer division by zero. Floating 3457 point division by zero is not warned about, as it can be a 3458 legitimate way of obtaining infinities and NaNs. 3459 3460`-Wsystem-headers' 3461 Print warning messages for constructs found in system header files. 3462 Warnings from system headers are normally suppressed, on the 3463 assumption that they usually do not indicate real problems and 3464 would only make the compiler output harder to read. Using this 3465 command line option tells GCC to emit warnings from system headers 3466 as if they occurred in user code. However, note that using 3467 `-Wall' in conjunction with this option will _not_ warn about 3468 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3469 must also be used. 3470 3471`-Wfloat-equal' 3472 Warn if floating point values are used in equality comparisons. 3473 3474 The idea behind this is that sometimes it is convenient (for the 3475 programmer) to consider floating-point values as approximations to 3476 infinitely precise real numbers. If you are doing this, then you 3477 need to compute (by analyzing the code, or in some other way) the 3478 maximum or likely maximum error that the computation introduces, 3479 and allow for it when performing comparisons (and when producing 3480 output, but that's a different problem). In particular, instead 3481 of testing for equality, you would check to see whether the two 3482 values have ranges that overlap; and this is done with the 3483 relational operators, so equality comparisons are probably 3484 mistaken. 3485 3486`-Wtraditional (C and Objective-C only)' 3487 Warn about certain constructs that behave differently in 3488 traditional and ISO C. Also warn about ISO C constructs that have 3489 no traditional C equivalent, and/or problematic constructs which 3490 should be avoided. 3491 3492 * Macro parameters that appear within string literals in the 3493 macro body. In traditional C macro replacement takes place 3494 within string literals, but does not in ISO C. 3495 3496 * In traditional C, some preprocessor directives did not exist. 3497 Traditional preprocessors would only consider a line to be a 3498 directive if the `#' appeared in column 1 on the line. 3499 Therefore `-Wtraditional' warns about directives that 3500 traditional C understands but would ignore because the `#' 3501 does not appear as the first character on the line. It also 3502 suggests you hide directives like `#pragma' not understood by 3503 traditional C by indenting them. Some traditional 3504 implementations would not recognize `#elif', so it suggests 3505 avoiding it altogether. 3506 3507 * A function-like macro that appears without arguments. 3508 3509 * The unary plus operator. 3510 3511 * The `U' integer constant suffix, or the `F' or `L' floating 3512 point constant suffixes. (Traditional C does support the `L' 3513 suffix on integer constants.) Note, these suffixes appear in 3514 macros defined in the system headers of most modern systems, 3515 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3516 macros in user code might normally lead to spurious warnings, 3517 however GCC's integrated preprocessor has enough context to 3518 avoid warning in these cases. 3519 3520 * A function declared external in one block and then used after 3521 the end of the block. 3522 3523 * A `switch' statement has an operand of type `long'. 3524 3525 * A non-`static' function declaration follows a `static' one. 3526 This construct is not accepted by some traditional C 3527 compilers. 3528 3529 * The ISO type of an integer constant has a different width or 3530 signedness from its traditional type. This warning is only 3531 issued if the base of the constant is ten. I.e. hexadecimal 3532 or octal values, which typically represent bit patterns, are 3533 not warned about. 3534 3535 * Usage of ISO string concatenation is detected. 3536 3537 * Initialization of automatic aggregates. 3538 3539 * Identifier conflicts with labels. Traditional C lacks a 3540 separate namespace for labels. 3541 3542 * Initialization of unions. If the initializer is zero, the 3543 warning is omitted. This is done under the assumption that 3544 the zero initializer in user code appears conditioned on e.g. 3545 `__STDC__' to avoid missing initializer warnings and relies 3546 on default initialization to zero in the traditional C case. 3547 3548 * Conversions by prototypes between fixed/floating point values 3549 and vice versa. The absence of these prototypes when 3550 compiling with traditional C would cause serious problems. 3551 This is a subset of the possible conversion warnings, for the 3552 full set use `-Wtraditional-conversion'. 3553 3554 * Use of ISO C style function definitions. This warning 3555 intentionally is _not_ issued for prototype declarations or 3556 variadic functions because these ISO C features will appear 3557 in your code when using libiberty's traditional C 3558 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3559 is also bypassed for nested functions because that feature is 3560 already a GCC extension and thus not relevant to traditional 3561 C compatibility. 3562 3563`-Wtraditional-conversion (C and Objective-C only)' 3564 Warn if a prototype causes a type conversion that is different 3565 from what would happen to the same argument in the absence of a 3566 prototype. This includes conversions of fixed point to floating 3567 and vice versa, and conversions changing the width or signedness 3568 of a fixed point argument except when the same as the default 3569 promotion. 3570 3571`-Wdeclaration-after-statement (C and Objective-C only)' 3572 Warn when a declaration is found after a statement in a block. 3573 This construct, known from C++, was introduced with ISO C99 and is 3574 by default allowed in GCC. It is not supported by ISO C90 and was 3575 not supported by GCC versions before GCC 3.0. *Note Mixed 3576 Declarations::. 3577 3578`-Wundef' 3579 Warn if an undefined identifier is evaluated in an `#if' directive. 3580 3581`-Wno-endif-labels' 3582 Do not warn whenever an `#else' or an `#endif' are followed by 3583 text. 3584 3585`-Wshadow' 3586 Warn whenever a local variable shadows another local variable, 3587 parameter or global variable or whenever a built-in function is 3588 shadowed. 3589 3590`-Wlarger-than=LEN' 3591 Warn whenever an object of larger than LEN bytes is defined. 3592 3593`-Wframe-larger-than=LEN' 3594 Warn if the size of a function frame is larger than LEN bytes. 3595 The computation done to determine the stack frame size is 3596 approximate and not conservative. The actual requirements may be 3597 somewhat greater than LEN even if you do not get a warning. In 3598 addition, any space allocated via `alloca', variable-length 3599 arrays, or related constructs is not included by the compiler when 3600 determining whether or not to issue a warning. 3601 3602`-Wunsafe-loop-optimizations' 3603 Warn if the loop cannot be optimized because the compiler could not 3604 assume anything on the bounds of the loop indices. With 3605 `-funsafe-loop-optimizations' warn if the compiler made such 3606 assumptions. 3607 3608`-Wno-pedantic-ms-format (MinGW targets only)' 3609 Disables the warnings about non-ISO `printf' / `scanf' format 3610 width specifiers `I32', `I64', and `I' used on Windows targets 3611 depending on the MS runtime, when you are using the options 3612 `-Wformat' and `-pedantic' without gnu-extensions. 3613 3614`-Wpointer-arith' 3615 Warn about anything that depends on the "size of" a function type 3616 or of `void'. GNU C assigns these types a size of 1, for 3617 convenience in calculations with `void *' pointers and pointers to 3618 functions. In C++, warn also when an arithmetic operation involves 3619 `NULL'. This warning is also enabled by `-pedantic'. 3620 3621`-Wtype-limits' 3622 Warn if a comparison is always true or always false due to the 3623 limited range of the data type, but do not warn for constant 3624 expressions. For example, warn if an unsigned variable is 3625 compared against zero with `<' or `>='. This warning is also 3626 enabled by `-Wextra'. 3627 3628`-Wbad-function-cast (C and Objective-C only)' 3629 Warn whenever a function call is cast to a non-matching type. For 3630 example, warn if `int malloc()' is cast to `anything *'. 3631 3632`-Wc++-compat (C and Objective-C only)' 3633 Warn about ISO C constructs that are outside of the common subset 3634 of ISO C and ISO C++, e.g. request for implicit conversion from 3635 `void *' to a pointer to non-`void' type. 3636 3637`-Wc++0x-compat (C++ and Objective-C++ only)' 3638 Warn about C++ constructs whose meaning differs between ISO C++ 3639 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 3640 become keywords in ISO C++ 200x. This warning is enabled by 3641 `-Wall'. 3642 3643`-Wcast-qual' 3644 Warn whenever a pointer is cast so as to remove a type qualifier 3645 from the target type. For example, warn if a `const char *' is 3646 cast to an ordinary `char *'. 3647 3648 Also warn when making a cast which introduces a type qualifier in 3649 an unsafe way. For example, casting `char **' to `const char **' 3650 is unsafe, as in this example: 3651 3652 /* p is char ** value. */ 3653 const char **q = (const char **) p; 3654 /* Assignment of readonly string to const char * is OK. */ 3655 *q = "string"; 3656 /* Now char** pointer points to read-only memory. */ 3657 **p = 'b'; 3658 3659`-Wcast-align' 3660 Warn whenever a pointer is cast such that the required alignment 3661 of the target is increased. For example, warn if a `char *' is 3662 cast to an `int *' on machines where integers can only be accessed 3663 at two- or four-byte boundaries. 3664 3665`-Wwrite-strings' 3666 When compiling C, give string constants the type `const 3667 char[LENGTH]' so that copying the address of one into a 3668 non-`const' `char *' pointer will get a warning. These warnings 3669 will help you find at compile time code that can try to write into 3670 a string constant, but only if you have been very careful about 3671 using `const' in declarations and prototypes. Otherwise, it will 3672 just be a nuisance. This is why we did not make `-Wall' request 3673 these warnings. 3674 3675 When compiling C++, warn about the deprecated conversion from 3676 string literals to `char *'. This warning is enabled by default 3677 for C++ programs. 3678 3679`-Wclobbered' 3680 Warn for variables that might be changed by `longjmp' or `vfork'. 3681 This warning is also enabled by `-Wextra'. 3682 3683`-Wconversion' 3684 Warn for implicit conversions that may alter a value. This includes 3685 conversions between real and integer, like `abs (x)' when `x' is 3686 `double'; conversions between signed and unsigned, like `unsigned 3687 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 3688 Do not warn for explicit casts like `abs ((int) x)' and `ui = 3689 (unsigned) -1', or if the value is not changed by the conversion 3690 like in `abs (2.0)'. Warnings about conversions between signed 3691 and unsigned integers can be disabled by using 3692 `-Wno-sign-conversion'. 3693 3694 For C++, also warn for confusing overload resolution for 3695 user-defined conversions; and conversions that will never use a 3696 type conversion operator: conversions to `void', the same type, a 3697 base class or a reference to them. Warnings about conversions 3698 between signed and unsigned integers are disabled by default in 3699 C++ unless `-Wsign-conversion' is explicitly enabled. 3700 3701`-Wno-conversion-null (C++ and Objective-C++ only)' 3702 Do not warn for conversions between `NULL' and non-pointer types. 3703 `-Wconversion-null' is enabled by default. 3704 3705`-Wempty-body' 3706 Warn if an empty body occurs in an `if', `else' or `do while' 3707 statement. This warning is also enabled by `-Wextra'. 3708 3709`-Wenum-compare' 3710 Warn about a comparison between values of different enum types. In 3711 C++ this warning is enabled by default. In C this warning is 3712 enabled by `-Wall'. 3713 3714`-Wjump-misses-init (C, Objective-C only)' 3715 Warn if a `goto' statement or a `switch' statement jumps forward 3716 across the initialization of a variable, or jumps backward to a 3717 label after the variable has been initialized. This only warns 3718 about variables which are initialized when they are declared. 3719 This warning is only supported for C and Objective C; in C++ this 3720 sort of branch is an error in any case. 3721 3722 `-Wjump-misses-init' is included in `-Wc++-compat'. It can be 3723 disabled with the `-Wno-jump-misses-init' option. 3724 3725`-Wsign-compare' 3726 Warn when a comparison between signed and unsigned values could 3727 produce an incorrect result when the signed value is converted to 3728 unsigned. This warning is also enabled by `-Wextra'; to get the 3729 other warnings of `-Wextra' without this warning, use `-Wextra 3730 -Wno-sign-compare'. 3731 3732`-Wsign-conversion' 3733 Warn for implicit conversions that may change the sign of an 3734 integer value, like assigning a signed integer expression to an 3735 unsigned integer variable. An explicit cast silences the warning. 3736 In C, this option is enabled also by `-Wconversion'. 3737 3738`-Waddress' 3739 Warn about suspicious uses of memory addresses. These include using 3740 the address of a function in a conditional expression, such as 3741 `void func(void); if (func)', and comparisons against the memory 3742 address of a string literal, such as `if (x == "abc")'. Such uses 3743 typically indicate a programmer error: the address of a function 3744 always evaluates to true, so their use in a conditional usually 3745 indicate that the programmer forgot the parentheses in a function 3746 call; and comparisons against string literals result in unspecified 3747 behavior and are not portable in C, so they usually indicate that 3748 the programmer intended to use `strcmp'. This warning is enabled 3749 by `-Wall'. 3750 3751`-Wlogical-op' 3752 Warn about suspicious uses of logical operators in expressions. 3753 This includes using logical operators in contexts where a bit-wise 3754 operator is likely to be expected. 3755 3756`-Waggregate-return' 3757 Warn if any functions that return structures or unions are defined 3758 or called. (In languages where you can return an array, this also 3759 elicits a warning.) 3760 3761`-Wno-attributes' 3762 Do not warn if an unexpected `__attribute__' is used, such as 3763 unrecognized attributes, function attributes applied to variables, 3764 etc. This will not stop errors for incorrect use of supported 3765 attributes. 3766 3767`-Wno-builtin-macro-redefined' 3768 Do not warn if certain built-in macros are redefined. This 3769 suppresses warnings for redefinition of `__TIMESTAMP__', 3770 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 3771 3772`-Wstrict-prototypes (C and Objective-C only)' 3773 Warn if a function is declared or defined without specifying the 3774 argument types. (An old-style function definition is permitted 3775 without a warning if preceded by a declaration which specifies the 3776 argument types.) 3777 3778`-Wold-style-declaration (C and Objective-C only)' 3779 Warn for obsolescent usages, according to the C Standard, in a 3780 declaration. For example, warn if storage-class specifiers like 3781 `static' are not the first things in a declaration. This warning 3782 is also enabled by `-Wextra'. 3783 3784`-Wold-style-definition (C and Objective-C only)' 3785 Warn if an old-style function definition is used. A warning is 3786 given even if there is a previous prototype. 3787 3788`-Wmissing-parameter-type (C and Objective-C only)' 3789 A function parameter is declared without a type specifier in 3790 K&R-style functions: 3791 3792 void foo(bar) { } 3793 3794 This warning is also enabled by `-Wextra'. 3795 3796`-Wmissing-prototypes (C and Objective-C only)' 3797 Warn if a global function is defined without a previous prototype 3798 declaration. This warning is issued even if the definition itself 3799 provides a prototype. The aim is to detect global functions that 3800 fail to be declared in header files. 3801 3802`-Wmissing-declarations' 3803 Warn if a global function is defined without a previous 3804 declaration. Do so even if the definition itself provides a 3805 prototype. Use this option to detect global functions that are 3806 not declared in header files. In C++, no warnings are issued for 3807 function templates, or for inline functions, or for functions in 3808 anonymous namespaces. 3809 3810`-Wmissing-field-initializers' 3811 Warn if a structure's initializer has some fields missing. For 3812 example, the following code would cause such a warning, because 3813 `x.h' is implicitly zero: 3814 3815 struct s { int f, g, h; }; 3816 struct s x = { 3, 4 }; 3817 3818 This option does not warn about designated initializers, so the 3819 following modification would not trigger a warning: 3820 3821 struct s { int f, g, h; }; 3822 struct s x = { .f = 3, .g = 4 }; 3823 3824 This warning is included in `-Wextra'. To get other `-Wextra' 3825 warnings without this one, use `-Wextra 3826 -Wno-missing-field-initializers'. 3827 3828`-Wmissing-noreturn' 3829 Warn about functions which might be candidates for attribute 3830 `noreturn'. Note these are only possible candidates, not absolute 3831 ones. Care should be taken to manually verify functions actually 3832 do not ever return before adding the `noreturn' attribute, 3833 otherwise subtle code generation bugs could be introduced. You 3834 will not get a warning for `main' in hosted C environments. 3835 3836`-Wmissing-format-attribute' 3837 Warn about function pointers which might be candidates for `format' 3838 attributes. Note these are only possible candidates, not absolute 3839 ones. GCC will guess that function pointers with `format' 3840 attributes that are used in assignment, initialization, parameter 3841 passing or return statements should have a corresponding `format' 3842 attribute in the resulting type. I.e. the left-hand side of the 3843 assignment or initialization, the type of the parameter variable, 3844 or the return type of the containing function respectively should 3845 also have a `format' attribute to avoid the warning. 3846 3847 GCC will also warn about function definitions which might be 3848 candidates for `format' attributes. Again, these are only 3849 possible candidates. GCC will guess that `format' attributes 3850 might be appropriate for any function that calls a function like 3851 `vprintf' or `vscanf', but this might not always be the case, and 3852 some functions for which `format' attributes are appropriate may 3853 not be detected. 3854 3855`-Wno-multichar' 3856 Do not warn if a multicharacter constant (`'FOOF'') is used. 3857 Usually they indicate a typo in the user's code, as they have 3858 implementation-defined values, and should not be used in portable 3859 code. 3860 3861`-Wnormalized=<none|id|nfc|nfkc>' 3862 In ISO C and ISO C++, two identifiers are different if they are 3863 different sequences of characters. However, sometimes when 3864 characters outside the basic ASCII character set are used, you can 3865 have two different character sequences that look the same. To 3866 avoid confusion, the ISO 10646 standard sets out some 3867 "normalization rules" which when applied ensure that two sequences 3868 that look the same are turned into the same sequence. GCC can 3869 warn you if you are using identifiers which have not been 3870 normalized; this option controls that warning. 3871 3872 There are four levels of warning that GCC supports. The default is 3873 `-Wnormalized=nfc', which warns about any identifier which is not 3874 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3875 recommended form for most uses. 3876 3877 Unfortunately, there are some characters which ISO C and ISO C++ 3878 allow in identifiers that when turned into NFC aren't allowable as 3879 identifiers. That is, there's no way to use these symbols in 3880 portable ISO C or C++ and have all your identifiers in NFC. 3881 `-Wnormalized=id' suppresses the warning for these characters. It 3882 is hoped that future versions of the standards involved will 3883 correct this, which is why this option is not the default. 3884 3885 You can switch the warning off for all characters by writing 3886 `-Wnormalized=none'. You would only want to do this if you were 3887 using some other normalization scheme (like "D"), because 3888 otherwise you can easily create bugs that are literally impossible 3889 to see. 3890 3891 Some characters in ISO 10646 have distinct meanings but look 3892 identical in some fonts or display methodologies, especially once 3893 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3894 LATIN SMALL LETTER N", will display just like a regular `n' which 3895 has been placed in a superscript. ISO 10646 defines the "NFKC" 3896 normalization scheme to convert all these into a standard form as 3897 well, and GCC will warn if your code is not in NFKC if you use 3898 `-Wnormalized=nfkc'. This warning is comparable to warning about 3899 every identifier that contains the letter O because it might be 3900 confused with the digit 0, and so is not the default, but may be 3901 useful as a local coding convention if the programming environment 3902 is unable to be fixed to display these characters distinctly. 3903 3904`-Wno-deprecated' 3905 Do not warn about usage of deprecated features. *Note Deprecated 3906 Features::. 3907 3908`-Wno-deprecated-declarations' 3909 Do not warn about uses of functions (*note Function Attributes::), 3910 variables (*note Variable Attributes::), and types (*note Type 3911 Attributes::) marked as deprecated by using the `deprecated' 3912 attribute. 3913 3914`-Wno-overflow' 3915 Do not warn about compile-time overflow in constant expressions. 3916 3917`-Woverride-init (C and Objective-C only)' 3918 Warn if an initialized field without side effects is overridden 3919 when using designated initializers (*note Designated Initializers: 3920 Designated Inits.). 3921 3922 This warning is included in `-Wextra'. To get other `-Wextra' 3923 warnings without this one, use `-Wextra -Wno-override-init'. 3924 3925`-Wpacked' 3926 Warn if a structure is given the packed attribute, but the packed 3927 attribute has no effect on the layout or size of the structure. 3928 Such structures may be mis-aligned for little benefit. For 3929 instance, in this code, the variable `f.x' in `struct bar' will be 3930 misaligned even though `struct bar' does not itself have the 3931 packed attribute: 3932 3933 struct foo { 3934 int x; 3935 char a, b, c, d; 3936 } __attribute__((packed)); 3937 struct bar { 3938 char z; 3939 struct foo f; 3940 }; 3941 3942`-Wpacked-bitfield-compat' 3943 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 3944 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 3945 the change can lead to differences in the structure layout. GCC 3946 informs you when the offset of such a field has changed in GCC 4.4. 3947 For example there is no longer a 4-bit padding between field `a' 3948 and `b' in this structure: 3949 3950 struct foo 3951 { 3952 char a:4; 3953 char b:8; 3954 } __attribute__ ((packed)); 3955 3956 This warning is enabled by default. Use 3957 `-Wno-packed-bitfield-compat' to disable this warning. 3958 3959`-Wpadded' 3960 Warn if padding is included in a structure, either to align an 3961 element of the structure or to align the whole structure. 3962 Sometimes when this happens it is possible to rearrange the fields 3963 of the structure to reduce the padding and so make the structure 3964 smaller. 3965 3966`-Wredundant-decls' 3967 Warn if anything is declared more than once in the same scope, 3968 even in cases where multiple declaration is valid and changes 3969 nothing. 3970 3971`-Wnested-externs (C and Objective-C only)' 3972 Warn if an `extern' declaration is encountered within a function. 3973 3974`-Winline' 3975 Warn if a function can not be inlined and it was declared as 3976 inline. Even with this option, the compiler will not warn about 3977 failures to inline functions declared in system headers. 3978 3979 The compiler uses a variety of heuristics to determine whether or 3980 not to inline a function. For example, the compiler takes into 3981 account the size of the function being inlined and the amount of 3982 inlining that has already been done in the current function. 3983 Therefore, seemingly insignificant changes in the source program 3984 can cause the warnings produced by `-Winline' to appear or 3985 disappear. 3986 3987`-Wno-invalid-offsetof (C++ and Objective-C++ only)' 3988 Suppress warnings from applying the `offsetof' macro to a non-POD 3989 type. According to the 1998 ISO C++ standard, applying `offsetof' 3990 to a non-POD type is undefined. In existing C++ implementations, 3991 however, `offsetof' typically gives meaningful results even when 3992 applied to certain kinds of non-POD types. (Such as a simple 3993 `struct' that fails to be a POD type only by virtue of having a 3994 constructor.) This flag is for users who are aware that they are 3995 writing nonportable code and who have deliberately chosen to 3996 ignore the warning about it. 3997 3998 The restrictions on `offsetof' may be relaxed in a future version 3999 of the C++ standard. 4000 4001`-Wno-int-to-pointer-cast (C and Objective-C only)' 4002 Suppress warnings from casts to pointer type of an integer of a 4003 different size. 4004 4005`-Wno-pointer-to-int-cast (C and Objective-C only)' 4006 Suppress warnings from casts from a pointer to an integer type of a 4007 different size. 4008 4009`-Winvalid-pch' 4010 Warn if a precompiled header (*note Precompiled Headers::) is 4011 found in the search path but can't be used. 4012 4013`-Wlong-long' 4014 Warn if `long long' type is used. This is enabled by either 4015 `-pedantic' or `-Wtraditional' in ISO C90 and C++98 modes. To 4016 inhibit the warning messages, use `-Wno-long-long'. 4017 4018`-Wvariadic-macros' 4019 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4020 GNU alternate syntax when in pedantic ISO C99 mode. This is 4021 default. To inhibit the warning messages, use 4022 `-Wno-variadic-macros'. 4023 4024`-Wvla' 4025 Warn if variable length array is used in the code. `-Wno-vla' 4026 will prevent the `-pedantic' warning of the variable length array. 4027 4028`-Wvolatile-register-var' 4029 Warn if a register variable is declared volatile. The volatile 4030 modifier does not inhibit all optimizations that may eliminate 4031 reads and/or writes to register variables. This warning is 4032 enabled by `-Wall'. 4033 4034`-Wdisabled-optimization' 4035 Warn if a requested optimization pass is disabled. This warning 4036 does not generally indicate that there is anything wrong with your 4037 code; it merely indicates that GCC's optimizers were unable to 4038 handle the code effectively. Often, the problem is that your code 4039 is too big or too complex; GCC will refuse to optimize programs 4040 when the optimization itself is likely to take inordinate amounts 4041 of time. 4042 4043`-Wpointer-sign (C and Objective-C only)' 4044 Warn for pointer argument passing or assignment with different 4045 signedness. This option is only supported for C and Objective-C. 4046 It is implied by `-Wall' and by `-pedantic', which can be disabled 4047 with `-Wno-pointer-sign'. 4048 4049`-Wstack-protector' 4050 This option is only active when `-fstack-protector' is active. It 4051 warns about functions that will not be protected against stack 4052 smashing. 4053 4054`-Wno-mudflap' 4055 Suppress warnings about constructs that cannot be instrumented by 4056 `-fmudflap'. 4057 4058`-Woverlength-strings' 4059 Warn about string constants which are longer than the "minimum 4060 maximum" length specified in the C standard. Modern compilers 4061 generally allow string constants which are much longer than the 4062 standard's minimum limit, but very portable programs should avoid 4063 using longer strings. 4064 4065 The limit applies _after_ string constant concatenation, and does 4066 not count the trailing NUL. In C90, the limit was 509 characters; 4067 in C99, it was raised to 4095. C++98 does not specify a normative 4068 minimum maximum, so we do not diagnose overlength strings in C++. 4069 4070 This option is implied by `-pedantic', and can be disabled with 4071 `-Wno-overlength-strings'. 4072 4073`-Wunsuffixed-float-constants (C and Objective-C only)' 4074 GCC will issue a warning for any floating constant that does not 4075 have a suffix. When used together with `-Wsystem-headers' it will 4076 warn about such constants in system header files. This can be 4077 useful when preparing code to use with the `FLOAT_CONST_DECIMAL64' 4078 pragma from the decimal floating-point extension to C99. 4079 4080 4081File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4082 40833.9 Options for Debugging Your Program or GCC 4084============================================= 4085 4086GCC has various special options that are used for debugging either your 4087program or GCC: 4088 4089`-g' 4090 Produce debugging information in the operating system's native 4091 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4092 debugging information. 4093 4094 On most systems that use stabs format, `-g' enables use of extra 4095 debugging information that only GDB can use; this extra information 4096 makes debugging work better in GDB but will probably make other 4097 debuggers crash or refuse to read the program. If you want to 4098 control for certain whether to generate the extra information, use 4099 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4100 below). 4101 4102 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4103 optimized code may occasionally produce surprising results: some 4104 variables you declared may not exist at all; flow of control may 4105 briefly move where you did not expect it; some statements may not 4106 be executed because they compute constant results or their values 4107 were already at hand; some statements may execute in different 4108 places because they were moved out of loops. 4109 4110 Nevertheless it proves possible to debug optimized output. This 4111 makes it reasonable to use the optimizer for programs that might 4112 have bugs. 4113 4114 The following options are useful when GCC is generated with the 4115 capability for more than one debugging format. 4116 4117`-ggdb' 4118 Produce debugging information for use by GDB. This means to use 4119 the most expressive format available (DWARF 2, stabs, or the 4120 native format if neither of those are supported), including GDB 4121 extensions if at all possible. 4122 4123`-gstabs' 4124 Produce debugging information in stabs format (if that is 4125 supported), without GDB extensions. This is the format used by 4126 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4127 systems this option produces stabs debugging output which is not 4128 understood by DBX or SDB. On System V Release 4 systems this 4129 option requires the GNU assembler. 4130 4131`-feliminate-unused-debug-symbols' 4132 Produce debugging information in stabs format (if that is 4133 supported), for only symbols that are actually used. 4134 4135`-femit-class-debug-always' 4136 Instead of emitting debugging information for a C++ class in only 4137 one object file, emit it in all object files using the class. 4138 This option should be used only with debuggers that are unable to 4139 handle the way GCC normally emits debugging information for 4140 classes because using this option will increase the size of 4141 debugging information by as much as a factor of two. 4142 4143`-gstabs+' 4144 Produce debugging information in stabs format (if that is 4145 supported), using GNU extensions understood only by the GNU 4146 debugger (GDB). The use of these extensions is likely to make 4147 other debuggers crash or refuse to read the program. 4148 4149`-gcoff' 4150 Produce debugging information in COFF format (if that is 4151 supported). This is the format used by SDB on most System V 4152 systems prior to System V Release 4. 4153 4154`-gxcoff' 4155 Produce debugging information in XCOFF format (if that is 4156 supported). This is the format used by the DBX debugger on IBM 4157 RS/6000 systems. 4158 4159`-gxcoff+' 4160 Produce debugging information in XCOFF format (if that is 4161 supported), using GNU extensions understood only by the GNU 4162 debugger (GDB). The use of these extensions is likely to make 4163 other debuggers crash or refuse to read the program, and may cause 4164 assemblers other than the GNU assembler (GAS) to fail with an 4165 error. 4166 4167`-gdwarf-VERSION' 4168 Produce debugging information in DWARF format (if that is 4169 supported). This is the format used by DBX on IRIX 6. The value 4170 of VERSION may be either 2, 3 or 4; the default version is 2. 4171 4172 Note that with DWARF version 2 some ports require, and will always 4173 use, some non-conflicting DWARF 3 extensions in the unwind tables. 4174 4175 Version 4 may require GDB 7.0 and `-fvar-tracking-assignments' for 4176 maximum benefit. 4177 4178`-gstrict-dwarf' 4179 Disallow using extensions of later DWARF standard version than 4180 selected with `-gdwarf-VERSION'. On most targets using 4181 non-conflicting DWARF extensions from later standard versions is 4182 allowed. 4183 4184`-gno-strict-dwarf' 4185 Allow using extensions of later DWARF standard version than 4186 selected with `-gdwarf-VERSION'. 4187 4188`-gvms' 4189 Produce debugging information in VMS debug format (if that is 4190 supported). This is the format used by DEBUG on VMS systems. 4191 4192`-gLEVEL' 4193`-ggdbLEVEL' 4194`-gstabsLEVEL' 4195`-gcoffLEVEL' 4196`-gxcoffLEVEL' 4197`-gvmsLEVEL' 4198 Request debugging information and also use LEVEL to specify how 4199 much information. The default level is 2. 4200 4201 Level 0 produces no debug information at all. Thus, `-g0' negates 4202 `-g'. 4203 4204 Level 1 produces minimal information, enough for making backtraces 4205 in parts of the program that you don't plan to debug. This 4206 includes descriptions of functions and external variables, but no 4207 information about local variables and no line numbers. 4208 4209 Level 3 includes extra information, such as all the macro 4210 definitions present in the program. Some debuggers support macro 4211 expansion when you use `-g3'. 4212 4213 `-gdwarf-2' does not accept a concatenated debug level, because 4214 GCC used to support an option `-gdwarf' that meant to generate 4215 debug information in version 1 of the DWARF format (which is very 4216 different from version 2), and it would have been too confusing. 4217 That debug format is long obsolete, but the option cannot be 4218 changed now. Instead use an additional `-gLEVEL' option to change 4219 the debug level for DWARF. 4220 4221`-gtoggle' 4222 Turn off generation of debug info, if leaving out this option 4223 would have generated it, or turn it on at level 2 otherwise. The 4224 position of this argument in the command line does not matter, it 4225 takes effect after all other options are processed, and it does so 4226 only once, no matter how many times it is given. This is mainly 4227 intended to be used with `-fcompare-debug'. 4228 4229`-fdump-final-insns[=FILE]' 4230 Dump the final internal representation (RTL) to FILE. If the 4231 optional argument is omitted (or if FILE is `.'), the name of the 4232 dump file will be determined by appending `.gkd' to the 4233 compilation output file name. 4234 4235`-fcompare-debug[=OPTS]' 4236 If no error occurs during compilation, run the compiler a second 4237 time, adding OPTS and `-fcompare-debug-second' to the arguments 4238 passed to the second compilation. Dump the final internal 4239 representation in both compilations, and print an error if they 4240 differ. 4241 4242 If the equal sign is omitted, the default `-gtoggle' is used. 4243 4244 The environment variable `GCC_COMPARE_DEBUG', if defined, non-empty 4245 and nonzero, implicitly enables `-fcompare-debug'. If 4246 `GCC_COMPARE_DEBUG' is defined to a string starting with a dash, 4247 then it is used for OPTS, otherwise the default `-gtoggle' is used. 4248 4249 `-fcompare-debug=', with the equal sign but without OPTS, is 4250 equivalent to `-fno-compare-debug', which disables the dumping of 4251 the final representation and the second compilation, preventing 4252 even `GCC_COMPARE_DEBUG' from taking effect. 4253 4254 To verify full coverage during `-fcompare-debug' testing, set 4255 `GCC_COMPARE_DEBUG' to say `-fcompare-debug-not-overridden', which 4256 GCC will reject as an invalid option in any actual compilation 4257 (rather than preprocessing, assembly or linking). To get just a 4258 warning, setting `GCC_COMPARE_DEBUG' to `-w%n-fcompare-debug not 4259 overridden' will do. 4260 4261`-fcompare-debug-second' 4262 This option is implicitly passed to the compiler for the second 4263 compilation requested by `-fcompare-debug', along with options to 4264 silence warnings, and omitting other options that would cause 4265 side-effect compiler outputs to files or to the standard output. 4266 Dump files and preserved temporary files are renamed so as to 4267 contain the `.gk' additional extension during the second 4268 compilation, to avoid overwriting those generated by the first. 4269 4270 When this option is passed to the compiler driver, it causes the 4271 _first_ compilation to be skipped, which makes it useful for little 4272 other than debugging the compiler proper. 4273 4274`-feliminate-dwarf2-dups' 4275 Compress DWARF2 debugging information by eliminating duplicated 4276 information about each symbol. This option only makes sense when 4277 generating DWARF2 debugging information with `-gdwarf-2'. 4278 4279`-femit-struct-debug-baseonly' 4280 Emit debug information for struct-like types only when the base 4281 name of the compilation source file matches the base name of file 4282 in which the struct was defined. 4283 4284 This option substantially reduces the size of debugging 4285 information, but at significant potential loss in type information 4286 to the debugger. See `-femit-struct-debug-reduced' for a less 4287 aggressive option. See `-femit-struct-debug-detailed' for more 4288 detailed control. 4289 4290 This option works only with DWARF 2. 4291 4292`-femit-struct-debug-reduced' 4293 Emit debug information for struct-like types only when the base 4294 name of the compilation source file matches the base name of file 4295 in which the type was defined, unless the struct is a template or 4296 defined in a system header. 4297 4298 This option significantly reduces the size of debugging 4299 information, with some potential loss in type information to the 4300 debugger. See `-femit-struct-debug-baseonly' for a more 4301 aggressive option. See `-femit-struct-debug-detailed' for more 4302 detailed control. 4303 4304 This option works only with DWARF 2. 4305 4306`-femit-struct-debug-detailed[=SPEC-LIST]' 4307 Specify the struct-like types for which the compiler will generate 4308 debug information. The intent is to reduce duplicate struct debug 4309 information between different object files within the same program. 4310 4311 This option is a detailed version of `-femit-struct-debug-reduced' 4312 and `-femit-struct-debug-baseonly', which will serve for most 4313 needs. 4314 4315 A specification has the syntax 4316 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4317 4318 The optional first word limits the specification to structs that 4319 are used directly (`dir:') or used indirectly (`ind:'). A struct 4320 type is used directly when it is the type of a variable, member. 4321 Indirect uses arise through pointers to structs. That is, when 4322 use of an incomplete struct would be legal, the use is indirect. 4323 An example is `struct one direct; struct two * indirect;'. 4324 4325 The optional second word limits the specification to ordinary 4326 structs (`ord:') or generic structs (`gen:'). Generic structs are 4327 a bit complicated to explain. For C++, these are non-explicit 4328 specializations of template classes, or non-template classes 4329 within the above. Other programming languages have generics, but 4330 `-femit-struct-debug-detailed' does not yet implement them. 4331 4332 The third word specifies the source files for those structs for 4333 which the compiler will emit debug information. The values `none' 4334 and `any' have the normal meaning. The value `base' means that 4335 the base of name of the file in which the type declaration appears 4336 must match the base of the name of the main compilation file. In 4337 practice, this means that types declared in `foo.c' and `foo.h' 4338 will have debug information, but types declared in other header 4339 will not. The value `sys' means those types satisfying `base' or 4340 declared in system or compiler headers. 4341 4342 You may need to experiment to determine the best settings for your 4343 application. 4344 4345 The default is `-femit-struct-debug-detailed=all'. 4346 4347 This option works only with DWARF 2. 4348 4349`-fenable-icf-debug' 4350 Generate additional debug information to support identical code 4351 folding (ICF). This option only works with DWARF version 2 or 4352 higher. 4353 4354`-fno-merge-debug-strings' 4355 Direct the linker to not merge together strings in the debugging 4356 information which are identical in different object files. 4357 Merging is not supported by all assemblers or linkers. Merging 4358 decreases the size of the debug information in the output file at 4359 the cost of increasing link processing time. Merging is enabled 4360 by default. 4361 4362`-fdebug-prefix-map=OLD=NEW' 4363 When compiling files in directory `OLD', record debugging 4364 information describing them as in `NEW' instead. 4365 4366`-fno-dwarf2-cfi-asm' 4367 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4368 instead of using GAS `.cfi_*' directives. 4369 4370`-p' 4371 Generate extra code to write profile information suitable for the 4372 analysis program `prof'. You must use this option when compiling 4373 the source files you want data about, and you must also use it when 4374 linking. 4375 4376`-pg' 4377 Generate extra code to write profile information suitable for the 4378 analysis program `gprof'. You must use this option when compiling 4379 the source files you want data about, and you must also use it when 4380 linking. 4381 4382`-Q' 4383 Makes the compiler print out each function name as it is compiled, 4384 and print some statistics about each pass when it finishes. 4385 4386`-ftime-report' 4387 Makes the compiler print some statistics about the time consumed 4388 by each pass when it finishes. 4389 4390`-fmem-report' 4391 Makes the compiler print some statistics about permanent memory 4392 allocation when it finishes. 4393 4394`-fpre-ipa-mem-report' 4395 4396`-fpost-ipa-mem-report' 4397 Makes the compiler print some statistics about permanent memory 4398 allocation before or after interprocedural optimization. 4399 4400`-fprofile-arcs' 4401 Add code so that program flow "arcs" are instrumented. During 4402 execution the program records how many times each branch and call 4403 is executed and how many times it is taken or returns. When the 4404 compiled program exits it saves this data to a file called 4405 `AUXNAME.gcda' for each source file. The data may be used for 4406 profile-directed optimizations (`-fbranch-probabilities'), or for 4407 test coverage analysis (`-ftest-coverage'). Each object file's 4408 AUXNAME is generated from the name of the output file, if 4409 explicitly specified and it is not the final executable, otherwise 4410 it is the basename of the source file. In both cases any suffix 4411 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4412 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4413 *Note Cross-profiling::. 4414 4415`--coverage' 4416 This option is used to compile and link code instrumented for 4417 coverage analysis. The option is a synonym for `-fprofile-arcs' 4418 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4419 See the documentation for those options for more details. 4420 4421 * Compile the source files with `-fprofile-arcs' plus 4422 optimization and code generation options. For test coverage 4423 analysis, use the additional `-ftest-coverage' option. You 4424 do not need to profile every source file in a program. 4425 4426 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4427 latter implies the former). 4428 4429 * Run the program on a representative workload to generate the 4430 arc profile information. This may be repeated any number of 4431 times. You can run concurrent instances of your program, and 4432 provided that the file system supports locking, the data 4433 files will be correctly updated. Also `fork' calls are 4434 detected and correctly handled (double counting will not 4435 happen). 4436 4437 * For profile-directed optimizations, compile the source files 4438 again with the same optimization and code generation options 4439 plus `-fbranch-probabilities' (*note Options that Control 4440 Optimization: Optimize Options.). 4441 4442 * For test coverage analysis, use `gcov' to produce human 4443 readable information from the `.gcno' and `.gcda' files. 4444 Refer to the `gcov' documentation for further information. 4445 4446 4447 With `-fprofile-arcs', for each function of your program GCC 4448 creates a program flow graph, then finds a spanning tree for the 4449 graph. Only arcs that are not on the spanning tree have to be 4450 instrumented: the compiler adds code to count the number of times 4451 that these arcs are executed. When an arc is the only exit or 4452 only entrance to a block, the instrumentation code can be added to 4453 the block; otherwise, a new basic block must be created to hold 4454 the instrumentation code. 4455 4456`-ftest-coverage' 4457 Produce a notes file that the `gcov' code-coverage utility (*note 4458 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4459 coverage. Each source file's note file is called `AUXNAME.gcno'. 4460 Refer to the `-fprofile-arcs' option above for a description of 4461 AUXNAME and instructions on how to generate test coverage data. 4462 Coverage data will match the source files more closely, if you do 4463 not optimize. 4464 4465`-fdbg-cnt-list' 4466 Print the name and the counter upperbound for all debug counters. 4467 4468`-fdbg-cnt=COUNTER-VALUE-LIST' 4469 Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a 4470 comma-separated list of NAME:VALUE pairs which sets the upperbound 4471 of each debug counter NAME to VALUE. All debug counters have the 4472 initial upperbound of UINT_MAX, thus dbg_cnt() returns true always 4473 unless the upperbound is set by this option. e.g. With 4474 -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only 4475 for first 10 invocations and dbg_cnt(tail_call) will return false 4476 always. 4477 4478`-dLETTERS' 4479`-fdump-rtl-PASS' 4480 Says to make debugging dumps during compilation at times specified 4481 by LETTERS. This is used for debugging the RTL-based passes of the 4482 compiler. The file names for most of the dumps are made by 4483 appending a pass number and a word to the DUMPNAME, and the files 4484 are created in the directory of the output file. DUMPNAME is 4485 generated from the name of the output file, if explicitly specified 4486 and it is not an executable, otherwise it is the basename of the 4487 source file. These switches may have different effects when `-E' 4488 is used for preprocessing. 4489 4490 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 4491 option LETTERS. Here are the possible letters for use in PASS and 4492 LETTERS, and their meanings: 4493 4494 `-fdump-rtl-alignments' 4495 Dump after branch alignments have been computed. 4496 4497 `-fdump-rtl-asmcons' 4498 Dump after fixing rtl statements that have unsatisfied in/out 4499 constraints. 4500 4501 `-fdump-rtl-auto_inc_dec' 4502 Dump after auto-inc-dec discovery. This pass is only run on 4503 architectures that have auto inc or auto dec instructions. 4504 4505 `-fdump-rtl-barriers' 4506 Dump after cleaning up the barrier instructions. 4507 4508 `-fdump-rtl-bbpart' 4509 Dump after partitioning hot and cold basic blocks. 4510 4511 `-fdump-rtl-bbro' 4512 Dump after block reordering. 4513 4514 `-fdump-rtl-btl1' 4515 `-fdump-rtl-btl2' 4516 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 4517 the two branch target load optimization passes. 4518 4519 `-fdump-rtl-bypass' 4520 Dump after jump bypassing and control flow optimizations. 4521 4522 `-fdump-rtl-combine' 4523 Dump after the RTL instruction combination pass. 4524 4525 `-fdump-rtl-compgotos' 4526 Dump after duplicating the computed gotos. 4527 4528 `-fdump-rtl-ce1' 4529 `-fdump-rtl-ce2' 4530 `-fdump-rtl-ce3' 4531 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 4532 enable dumping after the three if conversion passes. 4533 4534 `-fdump-rtl-cprop_hardreg' 4535 Dump after hard register copy propagation. 4536 4537 `-fdump-rtl-csa' 4538 Dump after combining stack adjustments. 4539 4540 `-fdump-rtl-cse1' 4541 `-fdump-rtl-cse2' 4542 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 4543 the two common sub-expression elimination passes. 4544 4545 `-fdump-rtl-dce' 4546 Dump after the standalone dead code elimination passes. 4547 4548 `-fdump-rtl-dbr' 4549 Dump after delayed branch scheduling. 4550 4551 `-fdump-rtl-dce1' 4552 `-fdump-rtl-dce2' 4553 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 4554 the two dead store elimination passes. 4555 4556 `-fdump-rtl-eh' 4557 Dump after finalization of EH handling code. 4558 4559 `-fdump-rtl-eh_ranges' 4560 Dump after conversion of EH handling range regions. 4561 4562 `-fdump-rtl-expand' 4563 Dump after RTL generation. 4564 4565 `-fdump-rtl-fwprop1' 4566 `-fdump-rtl-fwprop2' 4567 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 4568 after the two forward propagation passes. 4569 4570 `-fdump-rtl-gcse1' 4571 `-fdump-rtl-gcse2' 4572 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 4573 after global common subexpression elimination. 4574 4575 `-fdump-rtl-init-regs' 4576 Dump after the initialization of the registers. 4577 4578 `-fdump-rtl-initvals' 4579 Dump after the computation of the initial value sets. 4580 4581 `-fdump-rtl-into_cfglayout' 4582 Dump after converting to cfglayout mode. 4583 4584 `-fdump-rtl-ira' 4585 Dump after iterated register allocation. 4586 4587 `-fdump-rtl-jump' 4588 Dump after the second jump optimization. 4589 4590 `-fdump-rtl-loop2' 4591 `-fdump-rtl-loop2' enables dumping after the rtl loop 4592 optimization passes. 4593 4594 `-fdump-rtl-mach' 4595 Dump after performing the machine dependent reorganization 4596 pass, if that pass exists. 4597 4598 `-fdump-rtl-mode_sw' 4599 Dump after removing redundant mode switches. 4600 4601 `-fdump-rtl-rnreg' 4602 Dump after register renumbering. 4603 4604 `-fdump-rtl-outof_cfglayout' 4605 Dump after converting from cfglayout mode. 4606 4607 `-fdump-rtl-peephole2' 4608 Dump after the peephole pass. 4609 4610 `-fdump-rtl-postreload' 4611 Dump after post-reload optimizations. 4612 4613 `-fdump-rtl-pro_and_epilogue' 4614 Dump after generating the function pro and epilogues. 4615 4616 `-fdump-rtl-regmove' 4617 Dump after the register move pass. 4618 4619 `-fdump-rtl-sched1' 4620 `-fdump-rtl-sched2' 4621 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 4622 after the basic block scheduling passes. 4623 4624 `-fdump-rtl-see' 4625 Dump after sign extension elimination. 4626 4627 `-fdump-rtl-seqabstr' 4628 Dump after common sequence discovery. 4629 4630 `-fdump-rtl-shorten' 4631 Dump after shortening branches. 4632 4633 `-fdump-rtl-sibling' 4634 Dump after sibling call optimizations. 4635 4636 `-fdump-rtl-split1' 4637 `-fdump-rtl-split2' 4638 `-fdump-rtl-split3' 4639 `-fdump-rtl-split4' 4640 `-fdump-rtl-split5' 4641 `-fdump-rtl-split1', `-fdump-rtl-split2', 4642 `-fdump-rtl-split3', `-fdump-rtl-split4' and 4643 `-fdump-rtl-split5' enable dumping after five rounds of 4644 instruction splitting. 4645 4646 `-fdump-rtl-sms' 4647 Dump after modulo scheduling. This pass is only run on some 4648 architectures. 4649 4650 `-fdump-rtl-stack' 4651 Dump after conversion from GCC's "flat register file" 4652 registers to the x87's stack-like registers. This pass is 4653 only run on x86 variants. 4654 4655 `-fdump-rtl-subreg1' 4656 `-fdump-rtl-subreg2' 4657 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 4658 after the two subreg expansion passes. 4659 4660 `-fdump-rtl-unshare' 4661 Dump after all rtl has been unshared. 4662 4663 `-fdump-rtl-vartrack' 4664 Dump after variable tracking. 4665 4666 `-fdump-rtl-vregs' 4667 Dump after converting virtual registers to hard registers. 4668 4669 `-fdump-rtl-web' 4670 Dump after live range splitting. 4671 4672 `-fdump-rtl-regclass' 4673 `-fdump-rtl-subregs_of_mode_init' 4674 `-fdump-rtl-subregs_of_mode_finish' 4675 `-fdump-rtl-dfinit' 4676 `-fdump-rtl-dfinish' 4677 These dumps are defined but always produce empty files. 4678 4679 `-fdump-rtl-all' 4680 Produce all the dumps listed above. 4681 4682 `-dA' 4683 Annotate the assembler output with miscellaneous debugging 4684 information. 4685 4686 `-dD' 4687 Dump all macro definitions, at the end of preprocessing, in 4688 addition to normal output. 4689 4690 `-dH' 4691 Produce a core dump whenever an error occurs. 4692 4693 `-dm' 4694 Print statistics on memory usage, at the end of the run, to 4695 standard error. 4696 4697 `-dp' 4698 Annotate the assembler output with a comment indicating which 4699 pattern and alternative was used. The length of each 4700 instruction is also printed. 4701 4702 `-dP' 4703 Dump the RTL in the assembler output as a comment before each 4704 instruction. Also turns on `-dp' annotation. 4705 4706 `-dv' 4707 For each of the other indicated dump files 4708 (`-fdump-rtl-PASS'), dump a representation of the control 4709 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 4710 4711 `-dx' 4712 Just generate RTL for a function instead of compiling it. 4713 Usually used with `-fdump-rtl-expand'. 4714 4715 `-dy' 4716 Dump debugging information during parsing, to standard error. 4717 4718`-fdump-noaddr' 4719 When doing debugging dumps, suppress address output. This makes 4720 it more feasible to use diff on debugging dumps for compiler 4721 invocations with different compiler binaries and/or different text 4722 / bss / data / heap / stack / dso start locations. 4723 4724`-fdump-unnumbered' 4725 When doing debugging dumps, suppress instruction numbers and 4726 address output. This makes it more feasible to use diff on 4727 debugging dumps for compiler invocations with different options, 4728 in particular with and without `-g'. 4729 4730`-fdump-unnumbered-links' 4731 When doing debugging dumps (see `-d' option above), suppress 4732 instruction numbers for the links to the previous and next 4733 instructions in a sequence. 4734 4735`-fdump-translation-unit (C++ only)' 4736`-fdump-translation-unit-OPTIONS (C++ only)' 4737 Dump a representation of the tree structure for the entire 4738 translation unit to a file. The file name is made by appending 4739 `.tu' to the source file name, and the file is created in the same 4740 directory as the output file. If the `-OPTIONS' form is used, 4741 OPTIONS controls the details of the dump as described for the 4742 `-fdump-tree' options. 4743 4744`-fdump-class-hierarchy (C++ only)' 4745`-fdump-class-hierarchy-OPTIONS (C++ only)' 4746 Dump a representation of each class's hierarchy and virtual 4747 function table layout to a file. The file name is made by 4748 appending `.class' to the source file name, and the file is 4749 created in the same directory as the output file. If the 4750 `-OPTIONS' form is used, OPTIONS controls the details of the dump 4751 as described for the `-fdump-tree' options. 4752 4753`-fdump-ipa-SWITCH' 4754 Control the dumping at various stages of inter-procedural analysis 4755 language tree to a file. The file name is generated by appending a 4756 switch specific suffix to the source file name, and the file is 4757 created in the same directory as the output file. The following 4758 dumps are possible: 4759 4760 `all' 4761 Enables all inter-procedural analysis dumps. 4762 4763 `cgraph' 4764 Dumps information about call-graph optimization, unused 4765 function removal, and inlining decisions. 4766 4767 `inline' 4768 Dump after function inlining. 4769 4770 4771`-fdump-statistics-OPTION' 4772 Enable and control dumping of pass statistics in a separate file. 4773 The file name is generated by appending a suffix ending in 4774 `.statistics' to the source file name, and the file is created in 4775 the same directory as the output file. If the `-OPTION' form is 4776 used, `-stats' will cause counters to be summed over the whole 4777 compilation unit while `-details' will dump every event as the 4778 passes generate them. The default with no option is to sum 4779 counters for each function compiled. 4780 4781`-fdump-tree-SWITCH' 4782`-fdump-tree-SWITCH-OPTIONS' 4783 Control the dumping at various stages of processing the 4784 intermediate language tree to a file. The file name is generated 4785 by appending a switch specific suffix to the source file name, and 4786 the file is created in the same directory as the output file. If 4787 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 4788 options that control the details of the dump. Not all options are 4789 applicable to all dumps, those which are not meaningful will be 4790 ignored. The following options are available 4791 4792 `address' 4793 Print the address of each node. Usually this is not 4794 meaningful as it changes according to the environment and 4795 source file. Its primary use is for tying up a dump file 4796 with a debug environment. 4797 4798 `asmname' 4799 If `DECL_ASSEMBLER_NAME' has been set for a given decl, use 4800 that in the dump instead of `DECL_NAME'. Its primary use is 4801 ease of use working backward from mangled names in the 4802 assembly file. 4803 4804 `slim' 4805 Inhibit dumping of members of a scope or body of a function 4806 merely because that scope has been reached. Only dump such 4807 items when they are directly reachable by some other path. 4808 When dumping pretty-printed trees, this option inhibits 4809 dumping the bodies of control structures. 4810 4811 `raw' 4812 Print a raw representation of the tree. By default, trees are 4813 pretty-printed into a C-like representation. 4814 4815 `details' 4816 Enable more detailed dumps (not honored by every dump option). 4817 4818 `stats' 4819 Enable dumping various statistics about the pass (not honored 4820 by every dump option). 4821 4822 `blocks' 4823 Enable showing basic block boundaries (disabled in raw dumps). 4824 4825 `vops' 4826 Enable showing virtual operands for every statement. 4827 4828 `lineno' 4829 Enable showing line numbers for statements. 4830 4831 `uid' 4832 Enable showing the unique ID (`DECL_UID') for each variable. 4833 4834 `verbose' 4835 Enable showing the tree dump for each statement. 4836 4837 `eh' 4838 Enable showing the EH region number holding each statement. 4839 4840 `all' 4841 Turn on all options, except `raw', `slim', `verbose' and 4842 `lineno'. 4843 4844 The following tree dumps are possible: 4845 `original' 4846 Dump before any tree based optimization, to `FILE.original'. 4847 4848 `optimized' 4849 Dump after all tree based optimization, to `FILE.optimized'. 4850 4851 `gimple' 4852 Dump each function before and after the gimplification pass 4853 to a file. The file name is made by appending `.gimple' to 4854 the source file name. 4855 4856 `cfg' 4857 Dump the control flow graph of each function to a file. The 4858 file name is made by appending `.cfg' to the source file name. 4859 4860 `vcg' 4861 Dump the control flow graph of each function to a file in VCG 4862 format. The file name is made by appending `.vcg' to the 4863 source file name. Note that if the file contains more than 4864 one function, the generated file cannot be used directly by 4865 VCG. You will need to cut and paste each function's graph 4866 into its own separate file first. 4867 4868 `ch' 4869 Dump each function after copying loop headers. The file name 4870 is made by appending `.ch' to the source file name. 4871 4872 `ssa' 4873 Dump SSA related information to a file. The file name is 4874 made by appending `.ssa' to the source file name. 4875 4876 `alias' 4877 Dump aliasing information for each function. The file name 4878 is made by appending `.alias' to the source file name. 4879 4880 `ccp' 4881 Dump each function after CCP. The file name is made by 4882 appending `.ccp' to the source file name. 4883 4884 `storeccp' 4885 Dump each function after STORE-CCP. The file name is made by 4886 appending `.storeccp' to the source file name. 4887 4888 `pre' 4889 Dump trees after partial redundancy elimination. The file 4890 name is made by appending `.pre' to the source file name. 4891 4892 `fre' 4893 Dump trees after full redundancy elimination. The file name 4894 is made by appending `.fre' to the source file name. 4895 4896 `copyprop' 4897 Dump trees after copy propagation. The file name is made by 4898 appending `.copyprop' to the source file name. 4899 4900 `store_copyprop' 4901 Dump trees after store copy-propagation. The file name is 4902 made by appending `.store_copyprop' to the source file name. 4903 4904 `dce' 4905 Dump each function after dead code elimination. The file 4906 name is made by appending `.dce' to the source file name. 4907 4908 `mudflap' 4909 Dump each function after adding mudflap instrumentation. The 4910 file name is made by appending `.mudflap' to the source file 4911 name. 4912 4913 `sra' 4914 Dump each function after performing scalar replacement of 4915 aggregates. The file name is made by appending `.sra' to the 4916 source file name. 4917 4918 `sink' 4919 Dump each function after performing code sinking. The file 4920 name is made by appending `.sink' to the source file name. 4921 4922 `dom' 4923 Dump each function after applying dominator tree 4924 optimizations. The file name is made by appending `.dom' to 4925 the source file name. 4926 4927 `dse' 4928 Dump each function after applying dead store elimination. 4929 The file name is made by appending `.dse' to the source file 4930 name. 4931 4932 `phiopt' 4933 Dump each function after optimizing PHI nodes into 4934 straightline code. The file name is made by appending 4935 `.phiopt' to the source file name. 4936 4937 `forwprop' 4938 Dump each function after forward propagating single use 4939 variables. The file name is made by appending `.forwprop' to 4940 the source file name. 4941 4942 `copyrename' 4943 Dump each function after applying the copy rename 4944 optimization. The file name is made by appending 4945 `.copyrename' to the source file name. 4946 4947 `nrv' 4948 Dump each function after applying the named return value 4949 optimization on generic trees. The file name is made by 4950 appending `.nrv' to the source file name. 4951 4952 `vect' 4953 Dump each function after applying vectorization of loops. 4954 The file name is made by appending `.vect' to the source file 4955 name. 4956 4957 `slp' 4958 Dump each function after applying vectorization of basic 4959 blocks. The file name is made by appending `.slp' to the 4960 source file name. 4961 4962 `vrp' 4963 Dump each function after Value Range Propagation (VRP). The 4964 file name is made by appending `.vrp' to the source file name. 4965 4966 `all' 4967 Enable all the available tree dumps with the flags provided 4968 in this option. 4969 4970`-ftree-vectorizer-verbose=N' 4971 This option controls the amount of debugging output the vectorizer 4972 prints. This information is written to standard error, unless 4973 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4974 case it is output to the usual dump listing file, `.vect'. For 4975 N=0 no diagnostic information is reported. If N=1 the vectorizer 4976 reports each loop that got vectorized, and the total number of 4977 loops that got vectorized. If N=2 the vectorizer also reports 4978 non-vectorized loops that passed the first analysis phase 4979 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4980 single-entry/exit loops. This is the same verbosity level that 4981 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4982 either more information dumped for each reported loop, or same 4983 amount of information reported for more loops: if N=3, vectorizer 4984 cost model information is reported. If N=4, alignment related 4985 information is added to the reports. If N=5, data-references 4986 related information (e.g. memory dependences, memory 4987 access-patterns) is added to the reports. If N=6, the vectorizer 4988 reports also non-vectorized inner-most loops that did not pass the 4989 first analysis phase (i.e., may not be countable, or may have 4990 complicated control-flow). If N=7, the vectorizer reports also 4991 non-vectorized nested loops. If N=8, SLP related information is 4992 added to the reports. For N=9, all the information the vectorizer 4993 generates during its analysis and transformation is reported. 4994 This is the same verbosity level that `-fdump-tree-vect-details' 4995 uses. 4996 4997`-frandom-seed=STRING' 4998 This option provides a seed that GCC uses when it would otherwise 4999 use random numbers. It is used to generate certain symbol names 5000 that have to be different in every compiled file. It is also used 5001 to place unique stamps in coverage data files and the object files 5002 that produce them. You can use the `-frandom-seed' option to 5003 produce reproducibly identical object files. 5004 5005 The STRING should be different for every file you compile. 5006 5007`-fsched-verbose=N' 5008 On targets that use instruction scheduling, this option controls 5009 the amount of debugging output the scheduler prints. This 5010 information is written to standard error, unless 5011 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 5012 case it is output to the usual dump listing file, `.sched1' or 5013 `.sched2' respectively. However for N greater than nine, the 5014 output is always printed to standard error. 5015 5016 For N greater than zero, `-fsched-verbose' outputs the same 5017 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 5018 greater than one, it also output basic block probabilities, 5019 detailed ready list information and unit/insn info. For N greater 5020 than two, it includes RTL at abort point, control-flow and regions 5021 info. And for N over four, `-fsched-verbose' also includes 5022 dependence info. 5023 5024`-save-temps' 5025`-save-temps=cwd' 5026 Store the usual "temporary" intermediate files permanently; place 5027 them in the current directory and name them based on the source 5028 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 5029 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 5030 preprocessed `foo.i' output file even though the compiler now 5031 normally uses an integrated preprocessor. 5032 5033 When used in combination with the `-x' command line option, 5034 `-save-temps' is sensible enough to avoid over writing an input 5035 source file with the same extension as an intermediate file. The 5036 corresponding intermediate file may be obtained by renaming the 5037 source file before using `-save-temps'. 5038 5039 If you invoke GCC in parallel, compiling several different source 5040 files that share a common base name in different subdirectories or 5041 the same source file compiled for multiple output destinations, it 5042 is likely that the different parallel compilers will interfere 5043 with each other, and overwrite the temporary files. For instance: 5044 5045 gcc -save-temps -o outdir1/foo.o indir1/foo.c& 5046 gcc -save-temps -o outdir2/foo.o indir2/foo.c& 5047 5048 may result in `foo.i' and `foo.o' being written to simultaneously 5049 by both compilers. 5050 5051`-save-temps=obj' 5052 Store the usual "temporary" intermediate files permanently. If the 5053 `-o' option is used, the temporary files are based on the object 5054 file. If the `-o' option is not used, the `-save-temps=obj' 5055 switch behaves like `-save-temps'. 5056 5057 For example: 5058 5059 gcc -save-temps=obj -c foo.c 5060 gcc -save-temps=obj -c bar.c -o dir/xbar.o 5061 gcc -save-temps=obj foobar.c -o dir2/yfoobar 5062 5063 would create `foo.i', `foo.s', `dir/xbar.i', `dir/xbar.s', 5064 `dir2/yfoobar.i', `dir2/yfoobar.s', and `dir2/yfoobar.o'. 5065 5066`-time[=FILE]' 5067 Report the CPU time taken by each subprocess in the compilation 5068 sequence. For C source files, this is the compiler proper and 5069 assembler (plus the linker if linking is done). 5070 5071 Without the specification of an output file, the output looks like 5072 this: 5073 5074 # cc1 0.12 0.01 5075 # as 0.00 0.01 5076 5077 The first number on each line is the "user time", that is time 5078 spent executing the program itself. The second number is "system 5079 time", time spent executing operating system routines on behalf of 5080 the program. Both numbers are in seconds. 5081 5082 With the specification of an output file, the output is appended 5083 to the named file, and it looks like this: 5084 5085 0.12 0.01 cc1 OPTIONS 5086 0.00 0.01 as OPTIONS 5087 5088 The "user time" and the "system time" are moved before the program 5089 name, and the options passed to the program are displayed, so that 5090 one can later tell what file was being compiled, and with which 5091 options. 5092 5093`-fvar-tracking' 5094 Run variable tracking pass. It computes where variables are 5095 stored at each position in code. Better debugging information is 5096 then generated (if the debugging information format supports this 5097 information). 5098 5099 It is enabled by default when compiling with optimization (`-Os', 5100 `-O', `-O2', ...), debugging information (`-g') and the debug info 5101 format supports it. 5102 5103`-fvar-tracking-assignments' 5104 Annotate assignments to user variables early in the compilation and 5105 attempt to carry the annotations over throughout the compilation 5106 all the way to the end, in an attempt to improve debug information 5107 while optimizing. Use of `-gdwarf-4' is recommended along with it. 5108 5109 It can be enabled even if var-tracking is disabled, in which case 5110 annotations will be created and maintained, but discarded at the 5111 end. 5112 5113`-fvar-tracking-assignments-toggle' 5114 Toggle `-fvar-tracking-assignments', in the same way that 5115 `-gtoggle' toggles `-g'. 5116 5117`-print-file-name=LIBRARY' 5118 Print the full absolute name of the library file LIBRARY that 5119 would be used when linking--and don't do anything else. With this 5120 option, GCC does not compile or link anything; it just prints the 5121 file name. 5122 5123`-print-multi-directory' 5124 Print the directory name corresponding to the multilib selected by 5125 any other switches present in the command line. This directory is 5126 supposed to exist in `GCC_EXEC_PREFIX'. 5127 5128`-print-multi-lib' 5129 Print the mapping from multilib directory names to compiler 5130 switches that enable them. The directory name is separated from 5131 the switches by `;', and each switch starts with an `@' instead of 5132 the `-', without spaces between multiple switches. This is 5133 supposed to ease shell-processing. 5134 5135`-print-multi-os-directory' 5136 Print the path to OS libraries for the selected multilib, relative 5137 to some `lib' subdirectory. If OS libraries are present in the 5138 `lib' subdirectory and no multilibs are used, this is usually just 5139 `.', if OS libraries are present in `libSUFFIX' sibling 5140 directories this prints e.g. `../lib64', `../lib' or `../lib32', 5141 or if OS libraries are present in `lib/SUBDIR' subdirectories it 5142 prints e.g. `amd64', `sparcv9' or `ev6'. 5143 5144`-print-prog-name=PROGRAM' 5145 Like `-print-file-name', but searches for a program such as `cpp'. 5146 5147`-print-libgcc-file-name' 5148 Same as `-print-file-name=libgcc.a'. 5149 5150 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5151 you do want to link with `libgcc.a'. You can do 5152 5153 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5154 5155`-print-search-dirs' 5156 Print the name of the configured installation directory and a list 5157 of program and library directories `gcc' will search--and don't do 5158 anything else. 5159 5160 This is useful when `gcc' prints the error message `installation 5161 problem, cannot exec cpp0: No such file or directory'. To resolve 5162 this you either need to put `cpp0' and the other compiler 5163 components where `gcc' expects to find them, or you can set the 5164 environment variable `GCC_EXEC_PREFIX' to the directory where you 5165 installed them. Don't forget the trailing `/'. *Note Environment 5166 Variables::. 5167 5168`-print-sysroot' 5169 Print the target sysroot directory that will be used during 5170 compilation. This is the target sysroot specified either at 5171 configure time or using the `--sysroot' option, possibly with an 5172 extra suffix that depends on compilation options. If no target 5173 sysroot is specified, the option prints nothing. 5174 5175`-print-sysroot-headers-suffix' 5176 Print the suffix added to the target sysroot when searching for 5177 headers, or give an error if the compiler is not configured with 5178 such a suffix--and don't do anything else. 5179 5180`-dumpmachine' 5181 Print the compiler's target machine (for example, 5182 `i686-pc-linux-gnu')--and don't do anything else. 5183 5184`-dumpversion' 5185 Print the compiler version (for example, `3.0')--and don't do 5186 anything else. 5187 5188`-dumpspecs' 5189 Print the compiler's built-in specs--and don't do anything else. 5190 (This is used when GCC itself is being built.) *Note Spec Files::. 5191 5192`-feliminate-unused-debug-types' 5193 Normally, when producing DWARF2 output, GCC will emit debugging 5194 information for all types declared in a compilation unit, 5195 regardless of whether or not they are actually used in that 5196 compilation unit. Sometimes this is useful, such as if, in the 5197 debugger, you want to cast a value to a type that is not actually 5198 used in your program (but is declared). More often, however, this 5199 results in a significant amount of wasted space. With this 5200 option, GCC will avoid producing debug symbol output for types 5201 that are nowhere used in the source file being compiled. 5202 5203 5204File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5205 52063.10 Options That Control Optimization 5207====================================== 5208 5209These options control various sorts of optimizations. 5210 5211 Without any optimization option, the compiler's goal is to reduce the 5212cost of compilation and to make debugging produce the expected results. 5213Statements are independent: if you stop the program with a breakpoint 5214between statements, you can then assign a new value to any variable or 5215change the program counter to any other statement in the function and 5216get exactly the results you would expect from the source code. 5217 5218 Turning on optimization flags makes the compiler attempt to improve 5219the performance and/or code size at the expense of compilation time and 5220possibly the ability to debug the program. 5221 5222 The compiler performs optimization based on the knowledge it has of the 5223program. Compiling multiple files at once to a single output file mode 5224allows the compiler to use information gained from all of the files 5225when compiling each of them. 5226 5227 Not all optimizations are controlled directly by a flag. Only 5228optimizations that have a flag are listed in this section. 5229 5230 Most optimizations are only enabled if an `-O' level is set on the 5231command line. Otherwise they are disabled, even if individual 5232optimization flags are specified. 5233 5234 Depending on the target and how GCC was configured, a slightly 5235different set of optimizations may be enabled at each `-O' level than 5236those listed here. You can invoke GCC with `-Q --help=optimizers' to 5237find out the exact set of optimizations that are enabled at each level. 5238*Note Overall Options::, for examples. 5239 5240`-O' 5241`-O1' 5242 Optimize. Optimizing compilation takes somewhat more time, and a 5243 lot more memory for a large function. 5244 5245 With `-O', the compiler tries to reduce code size and execution 5246 time, without performing any optimizations that take a great deal 5247 of compilation time. 5248 5249 `-O' turns on the following optimization flags: 5250 -fauto-inc-dec 5251 -fcprop-registers 5252 -fdce 5253 -fdefer-pop 5254 -fdelayed-branch 5255 -fdse 5256 -fguess-branch-probability 5257 -fif-conversion2 5258 -fif-conversion 5259 -fipa-pure-const 5260 -fipa-reference 5261 -fmerge-constants 5262 -fsplit-wide-types 5263 -ftree-builtin-call-dce 5264 -ftree-ccp 5265 -ftree-ch 5266 -ftree-copyrename 5267 -ftree-dce 5268 -ftree-dominator-opts 5269 -ftree-dse 5270 -ftree-forwprop 5271 -ftree-fre 5272 -ftree-phiprop 5273 -ftree-sra 5274 -ftree-pta 5275 -ftree-ter 5276 -funit-at-a-time 5277 5278 `-O' also turns on `-fomit-frame-pointer' on machines where doing 5279 so does not interfere with debugging. 5280 5281`-O2' 5282 Optimize even more. GCC performs nearly all supported 5283 optimizations that do not involve a space-speed tradeoff. As 5284 compared to `-O', this option increases both compilation time and 5285 the performance of the generated code. 5286 5287 `-O2' turns on all optimization flags specified by `-O'. It also 5288 turns on the following optimization flags: 5289 -fthread-jumps 5290 -falign-functions -falign-jumps 5291 -falign-loops -falign-labels 5292 -fcaller-saves 5293 -fcrossjumping 5294 -fcse-follow-jumps -fcse-skip-blocks 5295 -fdelete-null-pointer-checks 5296 -fexpensive-optimizations 5297 -fgcse -fgcse-lm 5298 -finline-small-functions 5299 -findirect-inlining 5300 -fipa-sra 5301 -foptimize-sibling-calls 5302 -fpeephole2 5303 -fregmove 5304 -freorder-blocks -freorder-functions 5305 -frerun-cse-after-loop 5306 -fsched-interblock -fsched-spec 5307 -fschedule-insns -fschedule-insns2 5308 -fstrict-aliasing -fstrict-overflow 5309 -ftree-switch-conversion 5310 -ftree-pre 5311 -ftree-vrp 5312 5313 Please note the warning under `-fgcse' about invoking `-O2' on 5314 programs that use computed gotos. 5315 5316`-O3' 5317 Optimize yet more. `-O3' turns on all optimizations specified by 5318 `-O2' and also turns on the `-finline-functions', 5319 `-funswitch-loops', `-fpredictive-commoning', 5320 `-fgcse-after-reload', `-ftree-vectorize' and `-fipa-cp-clone' 5321 options. 5322 5323`-O0' 5324 Reduce compilation time and make debugging produce the expected 5325 results. This is the default. 5326 5327`-Os' 5328 Optimize for size. `-Os' enables all `-O2' optimizations that do 5329 not typically increase code size. It also performs further 5330 optimizations designed to reduce code size. 5331 5332 `-Os' disables the following optimization flags: 5333 -falign-functions -falign-jumps -falign-loops 5334 -falign-labels -freorder-blocks -freorder-blocks-and-partition 5335 -fprefetch-loop-arrays -ftree-vect-loop-version 5336 5337 If you use multiple `-O' options, with or without level numbers, 5338 the last such option is the one that is effective. 5339 5340 Options of the form `-fFLAG' specify machine-independent flags. Most 5341flags have both positive and negative forms; the negative form of 5342`-ffoo' would be `-fno-foo'. In the table below, only one of the forms 5343is listed--the one you typically will use. You can figure out the 5344other form by either removing `no-' or adding it. 5345 5346 The following options control specific optimizations. They are either 5347activated by `-O' options or are related to ones that are. You can use 5348the following flags in the rare cases when "fine-tuning" of 5349optimizations to be performed is desired. 5350 5351`-fno-default-inline' 5352 Do not make member functions inline by default merely because they 5353 are defined inside the class scope (C++ only). Otherwise, when 5354 you specify `-O', member functions defined inside class scope are 5355 compiled inline by default; i.e., you don't need to add `inline' 5356 in front of the member function name. 5357 5358`-fno-defer-pop' 5359 Always pop the arguments to each function call as soon as that 5360 function returns. For machines which must pop arguments after a 5361 function call, the compiler normally lets arguments accumulate on 5362 the stack for several function calls and pops them all at once. 5363 5364 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5365 5366`-fforward-propagate' 5367 Perform a forward propagation pass on RTL. The pass tries to 5368 combine two instructions and checks if the result can be 5369 simplified. If loop unrolling is active, two passes are performed 5370 and the second is scheduled after loop unrolling. 5371 5372 This option is enabled by default at optimization levels `-O', 5373 `-O2', `-O3', `-Os'. 5374 5375`-fomit-frame-pointer' 5376 Don't keep the frame pointer in a register for functions that 5377 don't need one. This avoids the instructions to save, set up and 5378 restore frame pointers; it also makes an extra register available 5379 in many functions. *It also makes debugging impossible on some 5380 machines.* 5381 5382 On some machines, such as the VAX, this flag has no effect, because 5383 the standard calling sequence automatically handles the frame 5384 pointer and nothing is saved by pretending it doesn't exist. The 5385 machine-description macro `FRAME_POINTER_REQUIRED' controls 5386 whether a target machine supports this flag. *Note Register 5387 Usage: (gccint)Registers. 5388 5389 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5390 5391`-foptimize-sibling-calls' 5392 Optimize sibling and tail recursive calls. 5393 5394 Enabled at levels `-O2', `-O3', `-Os'. 5395 5396`-fno-inline' 5397 Don't pay attention to the `inline' keyword. Normally this option 5398 is used to keep the compiler from expanding any functions inline. 5399 Note that if you are not optimizing, no functions can be expanded 5400 inline. 5401 5402`-finline-small-functions' 5403 Integrate functions into their callers when their body is smaller 5404 than expected function call code (so overall size of program gets 5405 smaller). The compiler heuristically decides which functions are 5406 simple enough to be worth integrating in this way. 5407 5408 Enabled at level `-O2'. 5409 5410`-findirect-inlining' 5411 Inline also indirect calls that are discovered to be known at 5412 compile time thanks to previous inlining. This option has any 5413 effect only when inlining itself is turned on by the 5414 `-finline-functions' or `-finline-small-functions' options. 5415 5416 Enabled at level `-O2'. 5417 5418`-finline-functions' 5419 Integrate all simple functions into their callers. The compiler 5420 heuristically decides which functions are simple enough to be worth 5421 integrating in this way. 5422 5423 If all calls to a given function are integrated, and the function 5424 is declared `static', then the function is normally not output as 5425 assembler code in its own right. 5426 5427 Enabled at level `-O3'. 5428 5429`-finline-functions-called-once' 5430 Consider all `static' functions called once for inlining into their 5431 caller even if they are not marked `inline'. If a call to a given 5432 function is integrated, then the function is not output as 5433 assembler code in its own right. 5434 5435 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 5436 5437`-fearly-inlining' 5438 Inline functions marked by `always_inline' and functions whose 5439 body seems smaller than the function call overhead early before 5440 doing `-fprofile-generate' instrumentation and real inlining pass. 5441 Doing so makes profiling significantly cheaper and usually 5442 inlining faster on programs having large chains of nested wrapper 5443 functions. 5444 5445 Enabled by default. 5446 5447`-fipa-sra' 5448 Perform interprocedural scalar replacement of aggregates, removal 5449 of unused parameters and replacement of parameters passed by 5450 reference by parameters passed by value. 5451 5452 Enabled at levels `-O2', `-O3' and `-Os'. 5453 5454`-finline-limit=N' 5455 By default, GCC limits the size of functions that can be inlined. 5456 This flag allows coarse control of this limit. N is the size of 5457 functions that can be inlined in number of pseudo instructions. 5458 5459 Inlining is actually controlled by a number of parameters, which 5460 may be specified individually by using `--param NAME=VALUE'. The 5461 `-finline-limit=N' option sets some of these parameters as follows: 5462 5463 `max-inline-insns-single' 5464 is set to N/2. 5465 5466 `max-inline-insns-auto' 5467 is set to N/2. 5468 5469 See below for a documentation of the individual parameters 5470 controlling inlining and for the defaults of these parameters. 5471 5472 _Note:_ there may be no value to `-finline-limit' that results in 5473 default behavior. 5474 5475 _Note:_ pseudo instruction represents, in this particular context, 5476 an abstract measurement of function's size. In no way does it 5477 represent a count of assembly instructions and as such its exact 5478 meaning might change from one release to an another. 5479 5480`-fkeep-inline-functions' 5481 In C, emit `static' functions that are declared `inline' into the 5482 object file, even if the function has been inlined into all of its 5483 callers. This switch does not affect functions using the `extern 5484 inline' extension in GNU C90. In C++, emit any and all inline 5485 functions into the object file. 5486 5487`-fkeep-static-consts' 5488 Emit variables declared `static const' when optimization isn't 5489 turned on, even if the variables aren't referenced. 5490 5491 GCC enables this option by default. If you want to force the 5492 compiler to check if the variable was referenced, regardless of 5493 whether or not optimization is turned on, use the 5494 `-fno-keep-static-consts' option. 5495 5496`-fmerge-constants' 5497 Attempt to merge identical constants (string constants and 5498 floating point constants) across compilation units. 5499 5500 This option is the default for optimized compilation if the 5501 assembler and linker support it. Use `-fno-merge-constants' to 5502 inhibit this behavior. 5503 5504 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5505 5506`-fmerge-all-constants' 5507 Attempt to merge identical constants and identical variables. 5508 5509 This option implies `-fmerge-constants'. In addition to 5510 `-fmerge-constants' this considers e.g. even constant initialized 5511 arrays or initialized constant variables with integral or floating 5512 point types. Languages like C or C++ require each variable, 5513 including multiple instances of the same variable in recursive 5514 calls, to have distinct locations, so using this option will 5515 result in non-conforming behavior. 5516 5517`-fmodulo-sched' 5518 Perform swing modulo scheduling immediately before the first 5519 scheduling pass. This pass looks at innermost loops and reorders 5520 their instructions by overlapping different iterations. 5521 5522`-fmodulo-sched-allow-regmoves' 5523 Perform more aggressive SMS based modulo scheduling with register 5524 moves allowed. By setting this flag certain anti-dependences 5525 edges will be deleted which will trigger the generation of 5526 reg-moves based on the life-range analysis. This option is 5527 effective only with `-fmodulo-sched' enabled. 5528 5529`-fno-branch-count-reg' 5530 Do not use "decrement and branch" instructions on a count register, 5531 but instead generate a sequence of instructions that decrement a 5532 register, compare it against zero, then branch based upon the 5533 result. This option is only meaningful on architectures that 5534 support such instructions, which include x86, PowerPC, IA-64 and 5535 S/390. 5536 5537 The default is `-fbranch-count-reg'. 5538 5539`-fno-function-cse' 5540 Do not put function addresses in registers; make each instruction 5541 that calls a constant function contain the function's address 5542 explicitly. 5543 5544 This option results in less efficient code, but some strange hacks 5545 that alter the assembler output may be confused by the 5546 optimizations performed when this option is not used. 5547 5548 The default is `-ffunction-cse' 5549 5550`-fno-zero-initialized-in-bss' 5551 If the target supports a BSS section, GCC by default puts 5552 variables that are initialized to zero into BSS. This can save 5553 space in the resulting code. 5554 5555 This option turns off this behavior because some programs 5556 explicitly rely on variables going to the data section. E.g., so 5557 that the resulting executable can find the beginning of that 5558 section and/or make assumptions based on that. 5559 5560 The default is `-fzero-initialized-in-bss'. 5561 5562`-fmudflap -fmudflapth -fmudflapir' 5563 For front-ends that support it (C and C++), instrument all risky 5564 pointer/array dereferencing operations, some standard library 5565 string/heap functions, and some other associated constructs with 5566 range/validity tests. Modules so instrumented should be immune to 5567 buffer overflows, invalid heap use, and some other classes of C/C++ 5568 programming errors. The instrumentation relies on a separate 5569 runtime library (`libmudflap'), which will be linked into a 5570 program if `-fmudflap' is given at link time. Run-time behavior 5571 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 5572 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 5573 its options. 5574 5575 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 5576 your program is multi-threaded. Use `-fmudflapir', in addition to 5577 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 5578 pointer reads. This produces less instrumentation (and therefore 5579 faster execution) and still provides some protection against 5580 outright memory corrupting writes, but allows erroneously read 5581 data to propagate within a program. 5582 5583`-fthread-jumps' 5584 Perform optimizations where we check to see if a jump branches to a 5585 location where another comparison subsumed by the first is found. 5586 If so, the first branch is redirected to either the destination of 5587 the second branch or a point immediately following it, depending 5588 on whether the condition is known to be true or false. 5589 5590 Enabled at levels `-O2', `-O3', `-Os'. 5591 5592`-fsplit-wide-types' 5593 When using a type that occupies multiple registers, such as `long 5594 long' on a 32-bit system, split the registers apart and allocate 5595 them independently. This normally generates better code for those 5596 types, but may make debugging more difficult. 5597 5598 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5599 5600`-fcse-follow-jumps' 5601 In common subexpression elimination (CSE), scan through jump 5602 instructions when the target of the jump is not reached by any 5603 other path. For example, when CSE encounters an `if' statement 5604 with an `else' clause, CSE will follow the jump when the condition 5605 tested is false. 5606 5607 Enabled at levels `-O2', `-O3', `-Os'. 5608 5609`-fcse-skip-blocks' 5610 This is similar to `-fcse-follow-jumps', but causes CSE to follow 5611 jumps which conditionally skip over blocks. When CSE encounters a 5612 simple `if' statement with no else clause, `-fcse-skip-blocks' 5613 causes CSE to follow the jump around the body of the `if'. 5614 5615 Enabled at levels `-O2', `-O3', `-Os'. 5616 5617`-frerun-cse-after-loop' 5618 Re-run common subexpression elimination after loop optimizations 5619 has been performed. 5620 5621 Enabled at levels `-O2', `-O3', `-Os'. 5622 5623`-fgcse' 5624 Perform a global common subexpression elimination pass. This pass 5625 also performs global constant and copy propagation. 5626 5627 _Note:_ When compiling a program using computed gotos, a GCC 5628 extension, you may get better runtime performance if you disable 5629 the global common subexpression elimination pass by adding 5630 `-fno-gcse' to the command line. 5631 5632 Enabled at levels `-O2', `-O3', `-Os'. 5633 5634`-fgcse-lm' 5635 When `-fgcse-lm' is enabled, global common subexpression 5636 elimination will attempt to move loads which are only killed by 5637 stores into themselves. This allows a loop containing a 5638 load/store sequence to be changed to a load outside the loop, and 5639 a copy/store within the loop. 5640 5641 Enabled by default when gcse is enabled. 5642 5643`-fgcse-sm' 5644 When `-fgcse-sm' is enabled, a store motion pass is run after 5645 global common subexpression elimination. This pass will attempt 5646 to move stores out of loops. When used in conjunction with 5647 `-fgcse-lm', loops containing a load/store sequence can be changed 5648 to a load before the loop and a store after the loop. 5649 5650 Not enabled at any optimization level. 5651 5652`-fgcse-las' 5653 When `-fgcse-las' is enabled, the global common subexpression 5654 elimination pass eliminates redundant loads that come after stores 5655 to the same memory location (both partial and full redundancies). 5656 5657 Not enabled at any optimization level. 5658 5659`-fgcse-after-reload' 5660 When `-fgcse-after-reload' is enabled, a redundant load elimination 5661 pass is performed after reload. The purpose of this pass is to 5662 cleanup redundant spilling. 5663 5664`-funsafe-loop-optimizations' 5665 If given, the loop optimizer will assume that loop indices do not 5666 overflow, and that the loops with nontrivial exit condition are not 5667 infinite. This enables a wider range of loop optimizations even if 5668 the loop optimizer itself cannot prove that these assumptions are 5669 valid. Using `-Wunsafe-loop-optimizations', the compiler will 5670 warn you if it finds this kind of loop. 5671 5672`-fcrossjumping' 5673 Perform cross-jumping transformation. This transformation unifies 5674 equivalent code and save code size. The resulting code may or may 5675 not perform better than without cross-jumping. 5676 5677 Enabled at levels `-O2', `-O3', `-Os'. 5678 5679`-fauto-inc-dec' 5680 Combine increments or decrements of addresses with memory accesses. 5681 This pass is always skipped on architectures that do not have 5682 instructions to support this. Enabled by default at `-O' and 5683 higher on architectures that support this. 5684 5685`-fdce' 5686 Perform dead code elimination (DCE) on RTL. Enabled by default at 5687 `-O' and higher. 5688 5689`-fdse' 5690 Perform dead store elimination (DSE) on RTL. Enabled by default 5691 at `-O' and higher. 5692 5693`-fif-conversion' 5694 Attempt to transform conditional jumps into branch-less 5695 equivalents. This include use of conditional moves, min, max, set 5696 flags and abs instructions, and some tricks doable by standard 5697 arithmetics. The use of conditional execution on chips where it 5698 is available is controlled by `if-conversion2'. 5699 5700 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5701 5702`-fif-conversion2' 5703 Use conditional execution (where available) to transform 5704 conditional jumps into branch-less equivalents. 5705 5706 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5707 5708`-fdelete-null-pointer-checks' 5709 Assume that programs cannot safely dereference null pointers, and 5710 that no code or data element resides there. This enables simple 5711 constant folding optimizations at all optimization levels. In 5712 addition, other optimization passes in GCC use this flag to 5713 control global dataflow analyses that eliminate useless checks for 5714 null pointers; these assume that if a pointer is checked after it 5715 has already been dereferenced, it cannot be null. 5716 5717 Note however that in some environments this assumption is not true. 5718 Use `-fno-delete-null-pointer-checks' to disable this optimization 5719 for programs which depend on that behavior. 5720 5721 Some targets, especially embedded ones, disable this option at all 5722 levels. Otherwise it is enabled at all levels: `-O0', `-O1', 5723 `-O2', `-O3', `-Os'. Passes that use the information are enabled 5724 independently at different optimization levels. 5725 5726`-fexpensive-optimizations' 5727 Perform a number of minor optimizations that are relatively 5728 expensive. 5729 5730 Enabled at levels `-O2', `-O3', `-Os'. 5731 5732`-foptimize-register-move' 5733`-fregmove' 5734 Attempt to reassign register numbers in move instructions and as 5735 operands of other simple instructions in order to maximize the 5736 amount of register tying. This is especially helpful on machines 5737 with two-operand instructions. 5738 5739 Note `-fregmove' and `-foptimize-register-move' are the same 5740 optimization. 5741 5742 Enabled at levels `-O2', `-O3', `-Os'. 5743 5744`-fira-algorithm=ALGORITHM' 5745 Use specified coloring algorithm for the integrated register 5746 allocator. The ALGORITHM argument should be `priority' or `CB'. 5747 The first algorithm specifies Chow's priority coloring, the second 5748 one specifies Chaitin-Briggs coloring. The second algorithm can 5749 be unimplemented for some architectures. If it is implemented, it 5750 is the default because Chaitin-Briggs coloring as a rule generates 5751 a better code. 5752 5753`-fira-region=REGION' 5754 Use specified regions for the integrated register allocator. The 5755 REGION argument should be one of `all', `mixed', or `one'. The 5756 first value means using all loops as register allocation regions, 5757 the second value which is the default means using all loops except 5758 for loops with small register pressure as the regions, and third 5759 one means using all function as a single region. The first value 5760 can give best result for machines with small size and irregular 5761 register set, the third one results in faster and generates decent 5762 code and the smallest size code, and the default value usually 5763 give the best results in most cases and for most architectures. 5764 5765`-fira-coalesce' 5766 Do optimistic register coalescing. This option might be 5767 profitable for architectures with big regular register files. 5768 5769`-fira-loop-pressure' 5770 Use IRA to evaluate register pressure in loops for decision to move 5771 loop invariants. Usage of this option usually results in 5772 generation of faster and smaller code on machines with big 5773 register files (>= 32 registers) but it can slow compiler down. 5774 5775 This option is enabled at level `-O3' for some targets. 5776 5777`-fno-ira-share-save-slots' 5778 Switch off sharing stack slots used for saving call used hard 5779 registers living through a call. Each hard register will get a 5780 separate stack slot and as a result function stack frame will be 5781 bigger. 5782 5783`-fno-ira-share-spill-slots' 5784 Switch off sharing stack slots allocated for pseudo-registers. 5785 Each pseudo-register which did not get a hard register will get a 5786 separate stack slot and as a result function stack frame will be 5787 bigger. 5788 5789`-fira-verbose=N' 5790 Set up how verbose dump file for the integrated register allocator 5791 will be. Default value is 5. If the value is greater or equal to 5792 10, the dump file will be stderr as if the value were N minus 10. 5793 5794`-fdelayed-branch' 5795 If supported for the target machine, attempt to reorder 5796 instructions to exploit instruction slots available after delayed 5797 branch instructions. 5798 5799 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5800 5801`-fschedule-insns' 5802 If supported for the target machine, attempt to reorder 5803 instructions to eliminate execution stalls due to required data 5804 being unavailable. This helps machines that have slow floating 5805 point or memory load instructions by allowing other instructions 5806 to be issued until the result of the load or floating point 5807 instruction is required. 5808 5809 Enabled at levels `-O2', `-O3'. 5810 5811`-fschedule-insns2' 5812 Similar to `-fschedule-insns', but requests an additional pass of 5813 instruction scheduling after register allocation has been done. 5814 This is especially useful on machines with a relatively small 5815 number of registers and where memory load instructions take more 5816 than one cycle. 5817 5818 Enabled at levels `-O2', `-O3', `-Os'. 5819 5820`-fno-sched-interblock' 5821 Don't schedule instructions across basic blocks. This is normally 5822 enabled by default when scheduling before register allocation, i.e. 5823 with `-fschedule-insns' or at `-O2' or higher. 5824 5825`-fno-sched-spec' 5826 Don't allow speculative motion of non-load instructions. This is 5827 normally enabled by default when scheduling before register 5828 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 5829 5830`-fsched-pressure' 5831 Enable register pressure sensitive insn scheduling before the 5832 register allocation. This only makes sense when scheduling before 5833 register allocation is enabled, i.e. with `-fschedule-insns' or at 5834 `-O2' or higher. Usage of this option can improve the generated 5835 code and decrease its size by preventing register pressure 5836 increase above the number of available hard registers and as a 5837 consequence register spills in the register allocation. 5838 5839`-fsched-spec-load' 5840 Allow speculative motion of some load instructions. This only 5841 makes sense when scheduling before register allocation, i.e. with 5842 `-fschedule-insns' or at `-O2' or higher. 5843 5844`-fsched-spec-load-dangerous' 5845 Allow speculative motion of more load instructions. This only 5846 makes sense when scheduling before register allocation, i.e. with 5847 `-fschedule-insns' or at `-O2' or higher. 5848 5849`-fsched-stalled-insns' 5850`-fsched-stalled-insns=N' 5851 Define how many insns (if any) can be moved prematurely from the 5852 queue of stalled insns into the ready list, during the second 5853 scheduling pass. `-fno-sched-stalled-insns' means that no insns 5854 will be moved prematurely, `-fsched-stalled-insns=0' means there 5855 is no limit on how many queued insns can be moved prematurely. 5856 `-fsched-stalled-insns' without a value is equivalent to 5857 `-fsched-stalled-insns=1'. 5858 5859`-fsched-stalled-insns-dep' 5860`-fsched-stalled-insns-dep=N' 5861 Define how many insn groups (cycles) will be examined for a 5862 dependency on a stalled insn that is candidate for premature 5863 removal from the queue of stalled insns. This has an effect only 5864 during the second scheduling pass, and only if 5865 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 5866 is equivalent to `-fsched-stalled-insns-dep=0'. 5867 `-fsched-stalled-insns-dep' without a value is equivalent to 5868 `-fsched-stalled-insns-dep=1'. 5869 5870`-fsched2-use-superblocks' 5871 When scheduling after register allocation, do use superblock 5872 scheduling algorithm. Superblock scheduling allows motion across 5873 basic block boundaries resulting on faster schedules. This option 5874 is experimental, as not all machine descriptions used by GCC model 5875 the CPU closely enough to avoid unreliable results from the 5876 algorithm. 5877 5878 This only makes sense when scheduling after register allocation, 5879 i.e. with `-fschedule-insns2' or at `-O2' or higher. 5880 5881`-fsched-group-heuristic' 5882 Enable the group heuristic in the scheduler. This heuristic favors 5883 the instruction that belongs to a schedule group. This is enabled 5884 by default when scheduling is enabled, i.e. with `-fschedule-insns' 5885 or `-fschedule-insns2' or at `-O2' or higher. 5886 5887`-fsched-critical-path-heuristic' 5888 Enable the critical-path heuristic in the scheduler. This 5889 heuristic favors instructions on the critical path. This is 5890 enabled by default when scheduling is enabled, i.e. with 5891 `-fschedule-insns' or `-fschedule-insns2' or at `-O2' or higher. 5892 5893`-fsched-spec-insn-heuristic' 5894 Enable the speculative instruction heuristic in the scheduler. 5895 This heuristic favors speculative instructions with greater 5896 dependency weakness. This is enabled by default when scheduling 5897 is enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' 5898 or at `-O2' or higher. 5899 5900`-fsched-rank-heuristic' 5901 Enable the rank heuristic in the scheduler. This heuristic favors 5902 the instruction belonging to a basic block with greater size or 5903 frequency. This is enabled by default when scheduling is enabled, 5904 i.e. with `-fschedule-insns' or `-fschedule-insns2' or at `-O2' 5905 or higher. 5906 5907`-fsched-last-insn-heuristic' 5908 Enable the last-instruction heuristic in the scheduler. This 5909 heuristic favors the instruction that is less dependent on the 5910 last instruction scheduled. This is enabled by default when 5911 scheduling is enabled, i.e. with `-fschedule-insns' or 5912 `-fschedule-insns2' or at `-O2' or higher. 5913 5914`-fsched-dep-count-heuristic' 5915 Enable the dependent-count heuristic in the scheduler. This 5916 heuristic favors the instruction that has more instructions 5917 depending on it. This is enabled by default when scheduling is 5918 enabled, i.e. with `-fschedule-insns' or `-fschedule-insns2' or 5919 at `-O2' or higher. 5920 5921`-freschedule-modulo-scheduled-loops' 5922 The modulo scheduling comes before the traditional scheduling, if 5923 a loop was modulo scheduled we may want to prevent the later 5924 scheduling passes from changing its schedule, we use this option 5925 to control that. 5926 5927`-fselective-scheduling' 5928 Schedule instructions using selective scheduling algorithm. 5929 Selective scheduling runs instead of the first scheduler pass. 5930 5931`-fselective-scheduling2' 5932 Schedule instructions using selective scheduling algorithm. 5933 Selective scheduling runs instead of the second scheduler pass. 5934 5935`-fsel-sched-pipelining' 5936 Enable software pipelining of innermost loops during selective 5937 scheduling. This option has no effect until one of 5938 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 5939 5940`-fsel-sched-pipelining-outer-loops' 5941 When pipelining loops during selective scheduling, also pipeline 5942 outer loops. This option has no effect until 5943 `-fsel-sched-pipelining' is turned on. 5944 5945`-fcaller-saves' 5946 Enable values to be allocated in registers that will be clobbered 5947 by function calls, by emitting extra instructions to save and 5948 restore the registers around such calls. Such allocation is done 5949 only when it seems to result in better code than would otherwise 5950 be produced. 5951 5952 This option is always enabled by default on certain machines, 5953 usually those which have no call-preserved registers to use 5954 instead. 5955 5956 Enabled at levels `-O2', `-O3', `-Os'. 5957 5958`-fconserve-stack' 5959 Attempt to minimize stack usage. The compiler will attempt to use 5960 less stack space, even if that makes the program slower. This 5961 option implies setting the `large-stack-frame' parameter to 100 5962 and the `large-stack-frame-growth' parameter to 400. 5963 5964`-ftree-reassoc' 5965 Perform reassociation on trees. This flag is enabled by default 5966 at `-O' and higher. 5967 5968`-ftree-pre' 5969 Perform partial redundancy elimination (PRE) on trees. This flag 5970 is enabled by default at `-O2' and `-O3'. 5971 5972`-ftree-forwprop' 5973 Perform forward propagation on trees. This flag is enabled by 5974 default at `-O' and higher. 5975 5976`-ftree-fre' 5977 Perform full redundancy elimination (FRE) on trees. The difference 5978 between FRE and PRE is that FRE only considers expressions that 5979 are computed on all paths leading to the redundant computation. 5980 This analysis is faster than PRE, though it exposes fewer 5981 redundancies. This flag is enabled by default at `-O' and higher. 5982 5983`-ftree-phiprop' 5984 Perform hoisting of loads from conditional pointers on trees. This 5985 pass is enabled by default at `-O' and higher. 5986 5987`-ftree-copy-prop' 5988 Perform copy propagation on trees. This pass eliminates 5989 unnecessary copy operations. This flag is enabled by default at 5990 `-O' and higher. 5991 5992`-fipa-pure-const' 5993 Discover which functions are pure or constant. Enabled by default 5994 at `-O' and higher. 5995 5996`-fipa-reference' 5997 Discover which static variables do not escape cannot escape the 5998 compilation unit. Enabled by default at `-O' and higher. 5999 6000`-fipa-struct-reorg' 6001 Perform structure reorganization optimization, that change C-like 6002 structures layout in order to better utilize spatial locality. 6003 This transformation is effective for programs containing arrays of 6004 structures. Available in two compilation modes: profile-based 6005 (enabled with `-fprofile-generate') or static (which uses built-in 6006 heuristics). Require `-fipa-type-escape' to provide the safety of 6007 this transformation. It works only in whole program mode, so it 6008 requires `-fwhole-program' and `-combine' to be enabled. 6009 Structures considered `cold' by this transformation are not 6010 affected (see `--param struct-reorg-cold-struct-ratio=VALUE'). 6011 6012 With this flag, the program debug info reflects a new structure 6013 layout. 6014 6015`-fipa-pta' 6016 Perform interprocedural pointer analysis. This option is 6017 experimental and does not affect generated code. 6018 6019`-fipa-cp' 6020 Perform interprocedural constant propagation. This optimization 6021 analyzes the program to determine when values passed to functions 6022 are constants and then optimizes accordingly. This optimization 6023 can substantially increase performance if the application has 6024 constants passed to functions. This flag is enabled by default at 6025 `-O2', `-Os' and `-O3'. 6026 6027`-fipa-cp-clone' 6028 Perform function cloning to make interprocedural constant 6029 propagation stronger. When enabled, interprocedural constant 6030 propagation will perform function cloning when externally visible 6031 function can be called with constant arguments. Because this 6032 optimization can create multiple copies of functions, it may 6033 significantly increase code size (see `--param 6034 ipcp-unit-growth=VALUE'). This flag is enabled by default at 6035 `-O3'. 6036 6037`-fipa-matrix-reorg' 6038 Perform matrix flattening and transposing. Matrix flattening 6039 tries to replace an m-dimensional matrix with its equivalent 6040 n-dimensional matrix, where n < m. This reduces the level of 6041 indirection needed for accessing the elements of the matrix. The 6042 second optimization is matrix transposing that attempts to change 6043 the order of the matrix's dimensions in order to improve cache 6044 locality. Both optimizations need the `-fwhole-program' flag. 6045 Transposing is enabled only if profiling information is available. 6046 6047`-ftree-sink' 6048 Perform forward store motion on trees. This flag is enabled by 6049 default at `-O' and higher. 6050 6051`-ftree-ccp' 6052 Perform sparse conditional constant propagation (CCP) on trees. 6053 This pass only operates on local scalar variables and is enabled 6054 by default at `-O' and higher. 6055 6056`-ftree-switch-conversion' 6057 Perform conversion of simple initializations in a switch to 6058 initializations from a scalar array. This flag is enabled by 6059 default at `-O2' and higher. 6060 6061`-ftree-dce' 6062 Perform dead code elimination (DCE) on trees. This flag is 6063 enabled by default at `-O' and higher. 6064 6065`-ftree-builtin-call-dce' 6066 Perform conditional dead code elimination (DCE) for calls to 6067 builtin functions that may set `errno' but are otherwise 6068 side-effect free. This flag is enabled by default at `-O2' and 6069 higher if `-Os' is not also specified. 6070 6071`-ftree-dominator-opts' 6072 Perform a variety of simple scalar cleanups (constant/copy 6073 propagation, redundancy elimination, range propagation and 6074 expression simplification) based on a dominator tree traversal. 6075 This also performs jump threading (to reduce jumps to jumps). This 6076 flag is enabled by default at `-O' and higher. 6077 6078`-ftree-dse' 6079 Perform dead store elimination (DSE) on trees. A dead store is a 6080 store into a memory location which will later be overwritten by 6081 another store without any intervening loads. In this case the 6082 earlier store can be deleted. This flag is enabled by default at 6083 `-O' and higher. 6084 6085`-ftree-ch' 6086 Perform loop header copying on trees. This is beneficial since it 6087 increases effectiveness of code motion optimizations. It also 6088 saves one jump. This flag is enabled by default at `-O' and 6089 higher. It is not enabled for `-Os', since it usually increases 6090 code size. 6091 6092`-ftree-loop-optimize' 6093 Perform loop optimizations on trees. This flag is enabled by 6094 default at `-O' and higher. 6095 6096`-ftree-loop-linear' 6097 Perform linear loop transformations on tree. This flag can 6098 improve cache performance and allow further loop optimizations to 6099 take place. 6100 6101`-floop-interchange' 6102 Perform loop interchange transformations on loops. Interchanging 6103 two nested loops switches the inner and outer loops. For example, 6104 given a loop like: 6105 DO J = 1, M 6106 DO I = 1, N 6107 A(J, I) = A(J, I) * C 6108 ENDDO 6109 ENDDO 6110 loop interchange will transform the loop as if the user had 6111 written: 6112 DO I = 1, N 6113 DO J = 1, M 6114 A(J, I) = A(J, I) * C 6115 ENDDO 6116 ENDDO 6117 which can be beneficial when `N' is larger than the caches, 6118 because in Fortran, the elements of an array are stored in memory 6119 contiguously by column, and the original loop iterates over rows, 6120 potentially creating at each access a cache miss. This 6121 optimization applies to all the languages supported by GCC and is 6122 not limited to Fortran. To use this code transformation, GCC has 6123 to be configured with `--with-ppl' and `--with-cloog' to enable the 6124 Graphite loop transformation infrastructure. 6125 6126`-floop-strip-mine' 6127 Perform loop strip mining transformations on loops. Strip mining 6128 splits a loop into two nested loops. The outer loop has strides 6129 equal to the strip size and the inner loop has strides of the 6130 original loop within a strip. The strip length can be changed 6131 using the `loop-block-tile-size' parameter. For example, given a 6132 loop like: 6133 DO I = 1, N 6134 A(I) = A(I) + C 6135 ENDDO 6136 loop strip mining will transform the loop as if the user had 6137 written: 6138 DO II = 1, N, 51 6139 DO I = II, min (II + 50, N) 6140 A(I) = A(I) + C 6141 ENDDO 6142 ENDDO 6143 This optimization applies to all the languages supported by GCC 6144 and is not limited to Fortran. To use this code transformation, 6145 GCC has to be configured with `--with-ppl' and `--with-cloog' to 6146 enable the Graphite loop transformation infrastructure. 6147 6148`-floop-block' 6149 Perform loop blocking transformations on loops. Blocking strip 6150 mines each loop in the loop nest such that the memory accesses of 6151 the element loops fit inside caches. The strip length can be 6152 changed using the `loop-block-tile-size' parameter. For example, 6153 given a loop like: 6154 DO I = 1, N 6155 DO J = 1, M 6156 A(J, I) = B(I) + C(J) 6157 ENDDO 6158 ENDDO 6159 loop blocking will transform the loop as if the user had written: 6160 DO II = 1, N, 51 6161 DO JJ = 1, M, 51 6162 DO I = II, min (II + 50, N) 6163 DO J = JJ, min (JJ + 50, M) 6164 A(J, I) = B(I) + C(J) 6165 ENDDO 6166 ENDDO 6167 ENDDO 6168 ENDDO 6169 which can be beneficial when `M' is larger than the caches, 6170 because the innermost loop will iterate over a smaller amount of 6171 data that can be kept in the caches. This optimization applies to 6172 all the languages supported by GCC and is not limited to Fortran. 6173 To use this code transformation, GCC has to be configured with 6174 `--with-ppl' and `--with-cloog' to enable the Graphite loop 6175 transformation infrastructure. 6176 6177`-fgraphite-identity' 6178 Enable the identity transformation for graphite. For every SCoP 6179 we generate the polyhedral representation and transform it back to 6180 gimple. Using `-fgraphite-identity' we can check the costs or 6181 benefits of the GIMPLE -> GRAPHITE -> GIMPLE transformation. Some 6182 minimal optimizations are also performed by the code generator 6183 CLooG, like index splitting and dead code elimination in loops. 6184 6185`-floop-parallelize-all' 6186 Use the Graphite data dependence analysis to identify loops that 6187 can be parallelized. Parallelize all the loops that can be 6188 analyzed to not contain loop carried dependences without checking 6189 that it is profitable to parallelize the loops. 6190 6191`-fcheck-data-deps' 6192 Compare the results of several data dependence analyzers. This 6193 option is used for debugging the data dependence analyzers. 6194 6195`-ftree-loop-distribution' 6196 Perform loop distribution. This flag can improve cache 6197 performance on big loop bodies and allow further loop 6198 optimizations, like parallelization or vectorization, to take 6199 place. For example, the loop 6200 DO I = 1, N 6201 A(I) = B(I) + C 6202 D(I) = E(I) * F 6203 ENDDO 6204 is transformed to 6205 DO I = 1, N 6206 A(I) = B(I) + C 6207 ENDDO 6208 DO I = 1, N 6209 D(I) = E(I) * F 6210 ENDDO 6211 6212`-ftree-loop-im' 6213 Perform loop invariant motion on trees. This pass moves only 6214 invariants that would be hard to handle at RTL level (function 6215 calls, operations that expand to nontrivial sequences of insns). 6216 With `-funswitch-loops' it also moves operands of conditions that 6217 are invariant out of the loop, so that we can use just trivial 6218 invariantness analysis in loop unswitching. The pass also includes 6219 store motion. 6220 6221`-ftree-loop-ivcanon' 6222 Create a canonical counter for number of iterations in the loop 6223 for that determining number of iterations requires complicated 6224 analysis. Later optimizations then may determine the number 6225 easily. Useful especially in connection with unrolling. 6226 6227`-fivopts' 6228 Perform induction variable optimizations (strength reduction, 6229 induction variable merging and induction variable elimination) on 6230 trees. 6231 6232`-ftree-parallelize-loops=n' 6233 Parallelize loops, i.e., split their iteration space to run in n 6234 threads. This is only possible for loops whose iterations are 6235 independent and can be arbitrarily reordered. The optimization is 6236 only profitable on multiprocessor machines, for loops that are 6237 CPU-intensive, rather than constrained e.g. by memory bandwidth. 6238 This option implies `-pthread', and thus is only supported on 6239 targets that have support for `-pthread'. 6240 6241`-ftree-pta' 6242 Perform function-local points-to analysis on trees. This flag is 6243 enabled by default at `-O' and higher. 6244 6245`-ftree-sra' 6246 Perform scalar replacement of aggregates. This pass replaces 6247 structure references with scalars to prevent committing structures 6248 to memory too early. This flag is enabled by default at `-O' and 6249 higher. 6250 6251`-ftree-copyrename' 6252 Perform copy renaming on trees. This pass attempts to rename 6253 compiler temporaries to other variables at copy locations, usually 6254 resulting in variable names which more closely resemble the 6255 original variables. This flag is enabled by default at `-O' and 6256 higher. 6257 6258`-ftree-ter' 6259 Perform temporary expression replacement during the SSA->normal 6260 phase. Single use/single def temporaries are replaced at their 6261 use location with their defining expression. This results in 6262 non-GIMPLE code, but gives the expanders much more complex trees 6263 to work on resulting in better RTL generation. This is enabled by 6264 default at `-O' and higher. 6265 6266`-ftree-vectorize' 6267 Perform loop vectorization on trees. This flag is enabled by 6268 default at `-O3'. 6269 6270`-ftree-slp-vectorize' 6271 Perform basic block vectorization on trees. This flag is enabled 6272 by default at `-O3' and when `-ftree-vectorize' is enabled. 6273 6274`-ftree-vect-loop-version' 6275 Perform loop versioning when doing loop vectorization on trees. 6276 When a loop appears to be vectorizable except that data alignment 6277 or data dependence cannot be determined at compile time then 6278 vectorized and non-vectorized versions of the loop are generated 6279 along with runtime checks for alignment or dependence to control 6280 which version is executed. This option is enabled by default 6281 except at level `-Os' where it is disabled. 6282 6283`-fvect-cost-model' 6284 Enable cost model for vectorization. 6285 6286`-ftree-vrp' 6287 Perform Value Range Propagation on trees. This is similar to the 6288 constant propagation pass, but instead of values, ranges of values 6289 are propagated. This allows the optimizers to remove unnecessary 6290 range checks like array bound checks and null pointer checks. 6291 This is enabled by default at `-O2' and higher. Null pointer check 6292 elimination is only done if `-fdelete-null-pointer-checks' is 6293 enabled. 6294 6295`-ftracer' 6296 Perform tail duplication to enlarge superblock size. This 6297 transformation simplifies the control flow of the function 6298 allowing other optimizations to do better job. 6299 6300`-funroll-loops' 6301 Unroll loops whose number of iterations can be determined at 6302 compile time or upon entry to the loop. `-funroll-loops' implies 6303 `-frerun-cse-after-loop'. This option makes code larger, and may 6304 or may not make it run faster. 6305 6306`-funroll-all-loops' 6307 Unroll all loops, even if their number of iterations is uncertain 6308 when the loop is entered. This usually makes programs run more 6309 slowly. `-funroll-all-loops' implies the same options as 6310 `-funroll-loops', 6311 6312`-fsplit-ivs-in-unroller' 6313 Enables expressing of values of induction variables in later 6314 iterations of the unrolled loop using the value in the first 6315 iteration. This breaks long dependency chains, thus improving 6316 efficiency of the scheduling passes. 6317 6318 Combination of `-fweb' and CSE is often sufficient to obtain the 6319 same effect. However in cases the loop body is more complicated 6320 than a single basic block, this is not reliable. It also does not 6321 work at all on some of the architectures due to restrictions in 6322 the CSE pass. 6323 6324 This optimization is enabled by default. 6325 6326`-fvariable-expansion-in-unroller' 6327 With this option, the compiler will create multiple copies of some 6328 local variables when unrolling a loop which can result in superior 6329 code. 6330 6331`-fpredictive-commoning' 6332 Perform predictive commoning optimization, i.e., reusing 6333 computations (especially memory loads and stores) performed in 6334 previous iterations of loops. 6335 6336 This option is enabled at level `-O3'. 6337 6338`-fprefetch-loop-arrays' 6339 If supported by the target machine, generate instructions to 6340 prefetch memory to improve the performance of loops that access 6341 large arrays. 6342 6343 This option may generate better or worse code; results are highly 6344 dependent on the structure of loops within the source code. 6345 6346 Disabled at level `-Os'. 6347 6348`-fno-peephole' 6349`-fno-peephole2' 6350 Disable any machine-specific peephole optimizations. The 6351 difference between `-fno-peephole' and `-fno-peephole2' is in how 6352 they are implemented in the compiler; some targets use one, some 6353 use the other, a few use both. 6354 6355 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 6356 levels `-O2', `-O3', `-Os'. 6357 6358`-fno-guess-branch-probability' 6359 Do not guess branch probabilities using heuristics. 6360 6361 GCC will use heuristics to guess branch probabilities if they are 6362 not provided by profiling feedback (`-fprofile-arcs'). These 6363 heuristics are based on the control flow graph. If some branch 6364 probabilities are specified by `__builtin_expect', then the 6365 heuristics will be used to guess branch probabilities for the rest 6366 of the control flow graph, taking the `__builtin_expect' info into 6367 account. The interactions between the heuristics and 6368 `__builtin_expect' can be complex, and in some cases, it may be 6369 useful to disable the heuristics so that the effects of 6370 `__builtin_expect' are easier to understand. 6371 6372 The default is `-fguess-branch-probability' at levels `-O', `-O2', 6373 `-O3', `-Os'. 6374 6375`-freorder-blocks' 6376 Reorder basic blocks in the compiled function in order to reduce 6377 number of taken branches and improve code locality. 6378 6379 Enabled at levels `-O2', `-O3'. 6380 6381`-freorder-blocks-and-partition' 6382 In addition to reordering basic blocks in the compiled function, 6383 in order to reduce number of taken branches, partitions hot and 6384 cold basic blocks into separate sections of the assembly and .o 6385 files, to improve paging and cache locality performance. 6386 6387 This optimization is automatically turned off in the presence of 6388 exception handling, for linkonce sections, for functions with a 6389 user-defined section attribute and on any architecture that does 6390 not support named sections. 6391 6392`-freorder-functions' 6393 Reorder functions in the object file in order to improve code 6394 locality. This is implemented by using special subsections 6395 `.text.hot' for most frequently executed functions and 6396 `.text.unlikely' for unlikely executed functions. Reordering is 6397 done by the linker so object file format must support named 6398 sections and linker must place them in a reasonable way. 6399 6400 Also profile feedback must be available in to make this option 6401 effective. See `-fprofile-arcs' for details. 6402 6403 Enabled at levels `-O2', `-O3', `-Os'. 6404 6405`-fstrict-aliasing' 6406 Allow the compiler to assume the strictest aliasing rules 6407 applicable to the language being compiled. For C (and C++), this 6408 activates optimizations based on the type of expressions. In 6409 particular, an object of one type is assumed never to reside at 6410 the same address as an object of a different type, unless the 6411 types are almost the same. For example, an `unsigned int' can 6412 alias an `int', but not a `void*' or a `double'. A character type 6413 may alias any other type. 6414 6415 Pay special attention to code like this: 6416 union a_union { 6417 int i; 6418 double d; 6419 }; 6420 6421 int f() { 6422 union a_union t; 6423 t.d = 3.0; 6424 return t.i; 6425 } 6426 The practice of reading from a different union member than the one 6427 most recently written to (called "type-punning") is common. Even 6428 with `-fstrict-aliasing', type-punning is allowed, provided the 6429 memory is accessed through the union type. So, the code above 6430 will work as expected. *Note Structures unions enumerations and 6431 bit-fields implementation::. However, this code might not: 6432 int f() { 6433 union a_union t; 6434 int* ip; 6435 t.d = 3.0; 6436 ip = &t.i; 6437 return *ip; 6438 } 6439 6440 Similarly, access by taking the address, casting the resulting 6441 pointer and dereferencing the result has undefined behavior, even 6442 if the cast uses a union type, e.g.: 6443 int f() { 6444 double d = 3.0; 6445 return ((union a_union *) &d)->i; 6446 } 6447 6448 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 6449 `-Os'. 6450 6451`-fstrict-overflow' 6452 Allow the compiler to assume strict signed overflow rules, 6453 depending on the language being compiled. For C (and C++) this 6454 means that overflow when doing arithmetic with signed numbers is 6455 undefined, which means that the compiler may assume that it will 6456 not happen. This permits various optimizations. For example, the 6457 compiler will assume that an expression like `i + 10 > i' will 6458 always be true for signed `i'. This assumption is only valid if 6459 signed overflow is undefined, as the expression is false if `i + 6460 10' overflows when using twos complement arithmetic. When this 6461 option is in effect any attempt to determine whether an operation 6462 on signed numbers will overflow must be written carefully to not 6463 actually involve overflow. 6464 6465 This option also allows the compiler to assume strict pointer 6466 semantics: given a pointer to an object, if adding an offset to 6467 that pointer does not produce a pointer to the same object, the 6468 addition is undefined. This permits the compiler to conclude that 6469 `p + u > p' is always true for a pointer `p' and unsigned integer 6470 `u'. This assumption is only valid because pointer wraparound is 6471 undefined, as the expression is false if `p + u' overflows using 6472 twos complement arithmetic. 6473 6474 See also the `-fwrapv' option. Using `-fwrapv' means that integer 6475 signed overflow is fully defined: it wraps. When `-fwrapv' is 6476 used, there is no difference between `-fstrict-overflow' and 6477 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 6478 of overflow are permitted. For example, if the compiler gets an 6479 overflow when doing arithmetic on constants, the overflowed value 6480 can still be used with `-fwrapv', but not otherwise. 6481 6482 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 6483 `-Os'. 6484 6485`-falign-functions' 6486`-falign-functions=N' 6487 Align the start of functions to the next power-of-two greater than 6488 N, skipping up to N bytes. For instance, `-falign-functions=32' 6489 aligns functions to the next 32-byte boundary, but 6490 `-falign-functions=24' would align to the next 32-byte boundary 6491 only if this can be done by skipping 23 bytes or less. 6492 6493 `-fno-align-functions' and `-falign-functions=1' are equivalent 6494 and mean that functions will not be aligned. 6495 6496 Some assemblers only support this flag when N is a power of two; 6497 in that case, it is rounded up. 6498 6499 If N is not specified or is zero, use a machine-dependent default. 6500 6501 Enabled at levels `-O2', `-O3'. 6502 6503`-falign-labels' 6504`-falign-labels=N' 6505 Align all branch targets to a power-of-two boundary, skipping up to 6506 N bytes like `-falign-functions'. This option can easily make 6507 code slower, because it must insert dummy operations for when the 6508 branch target is reached in the usual flow of the code. 6509 6510 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 6511 that labels will not be aligned. 6512 6513 If `-falign-loops' or `-falign-jumps' are applicable and are 6514 greater than this value, then their values are used instead. 6515 6516 If N is not specified or is zero, use a machine-dependent default 6517 which is very likely to be `1', meaning no alignment. 6518 6519 Enabled at levels `-O2', `-O3'. 6520 6521`-falign-loops' 6522`-falign-loops=N' 6523 Align loops to a power-of-two boundary, skipping up to N bytes 6524 like `-falign-functions'. The hope is that the loop will be 6525 executed many times, which will make up for any execution of the 6526 dummy operations. 6527 6528 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 6529 that loops will not be aligned. 6530 6531 If N is not specified or is zero, use a machine-dependent default. 6532 6533 Enabled at levels `-O2', `-O3'. 6534 6535`-falign-jumps' 6536`-falign-jumps=N' 6537 Align branch targets to a power-of-two boundary, for branch targets 6538 where the targets can only be reached by jumping, skipping up to N 6539 bytes like `-falign-functions'. In this case, no dummy operations 6540 need be executed. 6541 6542 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 6543 that loops will not be aligned. 6544 6545 If N is not specified or is zero, use a machine-dependent default. 6546 6547 Enabled at levels `-O2', `-O3'. 6548 6549`-funit-at-a-time' 6550 This option is left for compatibility reasons. `-funit-at-a-time' 6551 has no effect, while `-fno-unit-at-a-time' implies 6552 `-fno-toplevel-reorder' and `-fno-section-anchors'. 6553 6554 Enabled by default. 6555 6556`-fno-toplevel-reorder' 6557 Do not reorder top-level functions, variables, and `asm' 6558 statements. Output them in the same order that they appear in the 6559 input file. When this option is used, unreferenced static 6560 variables will not be removed. This option is intended to support 6561 existing code which relies on a particular ordering. For new 6562 code, it is better to use attributes. 6563 6564 Enabled at level `-O0'. When disabled explicitly, it also imply 6565 `-fno-section-anchors' that is otherwise enabled at `-O0' on some 6566 targets. 6567 6568`-fweb' 6569 Constructs webs as commonly used for register allocation purposes 6570 and assign each web individual pseudo register. This allows the 6571 register allocation pass to operate on pseudos directly, but also 6572 strengthens several other optimization passes, such as CSE, loop 6573 optimizer and trivial dead code remover. It can, however, make 6574 debugging impossible, since variables will no longer stay in a 6575 "home register". 6576 6577 Enabled by default with `-funroll-loops'. 6578 6579`-fwhole-program' 6580 Assume that the current compilation unit represents the whole 6581 program being compiled. All public functions and variables with 6582 the exception of `main' and those merged by attribute 6583 `externally_visible' become static functions and in effect are 6584 optimized more aggressively by interprocedural optimizers. While 6585 this option is equivalent to proper use of the `static' keyword for 6586 programs consisting of a single file, in combination with option 6587 `-combine', `-flto' or `-fwhopr' this flag can be used to compile 6588 many smaller scale programs since the functions and variables 6589 become local for the whole combined compilation unit, not for the 6590 single source file itself. 6591 6592 This option implies `-fwhole-file' for Fortran programs. 6593 6594`-flto' 6595 This option runs the standard link-time optimizer. When invoked 6596 with source code, it generates GIMPLE (one of GCC's internal 6597 representations) and writes it to special ELF sections in the 6598 object file. When the object files are linked together, all the 6599 function bodies are read from these ELF sections and instantiated 6600 as if they had been part of the same translation unit. 6601 6602 To use the link-timer optimizer, `-flto' needs to be specified at 6603 compile time and during the final link. For example, 6604 6605 gcc -c -O2 -flto foo.c 6606 gcc -c -O2 -flto bar.c 6607 gcc -o myprog -flto -O2 foo.o bar.o 6608 6609 The first two invocations to GCC will save a bytecode 6610 representation of GIMPLE into special ELF sections inside `foo.o' 6611 and `bar.o'. The final invocation will read the GIMPLE bytecode 6612 from `foo.o' and `bar.o', merge the two files into a single 6613 internal image, and compile the result as usual. Since both 6614 `foo.o' and `bar.o' are merged into a single image, this causes 6615 all the inter-procedural analyses and optimizations in GCC to work 6616 across the two files as if they were a single one. This means, 6617 for example, that the inliner will be able to inline functions in 6618 `bar.o' into functions in `foo.o' and vice-versa. 6619 6620 Another (simpler) way to enable link-time optimization is, 6621 6622 gcc -o myprog -flto -O2 foo.c bar.c 6623 6624 The above will generate bytecode for `foo.c' and `bar.c', merge 6625 them together into a single GIMPLE representation and optimize 6626 them as usual to produce `myprog'. 6627 6628 The only important thing to keep in mind is that to enable 6629 link-time optimizations the `-flto' flag needs to be passed to 6630 both the compile and the link commands. 6631 6632 Note that when a file is compiled with `-flto', the generated 6633 object file will be larger than a regular object file because it 6634 will contain GIMPLE bytecodes and the usual final code. This 6635 means that object files with LTO information can be linked as a 6636 normal object file. So, in the previous example, if the final 6637 link is done with 6638 6639 gcc -o myprog foo.o bar.o 6640 6641 The only difference will be that no inter-procedural optimizations 6642 will be applied to produce `myprog'. The two object files `foo.o' 6643 and `bar.o' will be simply sent to the regular linker. 6644 6645 Additionally, the optimization flags used to compile individual 6646 files are not necessarily related to those used at link-time. For 6647 instance, 6648 6649 gcc -c -O0 -flto foo.c 6650 gcc -c -O0 -flto bar.c 6651 gcc -o myprog -flto -O3 foo.o bar.o 6652 6653 This will produce individual object files with unoptimized 6654 assembler code, but the resulting binary `myprog' will be 6655 optimized at `-O3'. Now, if the final binary is generated without 6656 `-flto', then `myprog' will not be optimized. 6657 6658 When producing the final binary with `-flto', GCC will only apply 6659 link-time optimizations to those files that contain bytecode. 6660 Therefore, you can mix and match object files and libraries with 6661 GIMPLE bytecodes and final object code. GCC will automatically 6662 select which files to optimize in LTO mode and which files to link 6663 without further processing. 6664 6665 There are some code generation flags that GCC will preserve when 6666 generating bytecodes, as they need to be used during the final link 6667 stage. Currently, the following options are saved into the GIMPLE 6668 bytecode files: `-fPIC', `-fcommon' and all the `-m' target flags. 6669 6670 At link time, these options are read-in and reapplied. Note that 6671 the current implementation makes no attempt at recognizing 6672 conflicting values for these options. If two or more files have a 6673 conflicting value (e.g., one file is compiled with `-fPIC' and 6674 another isn't), the compiler will simply use the last value read 6675 from the bytecode files. It is recommended, then, that all the 6676 files participating in the same link be compiled with the same 6677 options. 6678 6679 Another feature of LTO is that it is possible to apply 6680 interprocedural optimizations on files written in different 6681 languages. This requires some support in the language front end. 6682 Currently, the C, C++ and Fortran front ends are capable of 6683 emitting GIMPLE bytecodes, so something like this should work 6684 6685 gcc -c -flto foo.c 6686 g++ -c -flto bar.cc 6687 gfortran -c -flto baz.f90 6688 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran 6689 6690 Notice that the final link is done with `g++' to get the C++ 6691 runtime libraries and `-lgfortran' is added to get the Fortran 6692 runtime libraries. In general, when mixing languages in LTO mode, 6693 you should use the same link command used when mixing languages in 6694 a regular (non-LTO) compilation. This means that if your build 6695 process was mixing languages before, all you need to add is 6696 `-flto' to all the compile and link commands. 6697 6698 If LTO encounters objects with C linkage declared with incompatible 6699 types in separate translation units to be linked together 6700 (undefined behavior according to ISO C99 6.2.7), a non-fatal 6701 diagnostic may be issued. The behavior is still undefined at 6702 runtime. 6703 6704 If object files containing GIMPLE bytecode are stored in a library 6705 archive, say `libfoo.a', it is possible to extract and use them in 6706 an LTO link if you are using `gold' as the linker (which, in turn 6707 requires GCC to be configured with `--enable-gold'). To enable 6708 this feature, use the flag `-fuse-linker-plugin' at link-time: 6709 6710 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo 6711 6712 With the linker plugin enabled, `gold' will extract the needed 6713 GIMPLE files from `libfoo.a' and pass them on to the running GCC 6714 to make them part of the aggregated GIMPLE image to be optimized. 6715 6716 If you are not using `gold' and/or do not specify 6717 `-fuse-linker-plugin' then the objects inside `libfoo.a' will be 6718 extracted and linked as usual, but they will not participate in 6719 the LTO optimization process. 6720 6721 Link time optimizations do not require the presence of the whole 6722 program to operate. If the program does not require any symbols to 6723 be exported, it is possible to combine `-flto' and `-fwhopr' with 6724 `-fwhole-program' to allow the interprocedural optimizers to use 6725 more aggressive assumptions which may lead to improved 6726 optimization opportunities. 6727 6728 Regarding portability: the current implementation of LTO makes no 6729 attempt at generating bytecode that can be ported between different 6730 types of hosts. The bytecode files are versioned and there is a 6731 strict version check, so bytecode files generated in one version of 6732 GCC will not work with an older/newer version of GCC. 6733 6734 Link time optimization does not play well with generating debugging 6735 information. Combining `-flto' or `-fwhopr' with `-g' is 6736 experimental. 6737 6738 This option is disabled by default. 6739 6740`-fwhopr' 6741 This option is identical in functionality to `-flto' but it 6742 differs in how the final link stage is executed. Instead of 6743 loading all the function bodies in memory, the callgraph is 6744 analyzed and optimization decisions are made (whole program 6745 analysis or WPA). Once optimization decisions are made, the 6746 callgraph is partitioned and the different sections are compiled 6747 separately (local transformations or LTRANS). This process allows 6748 optimizations on very large programs that otherwise would not fit 6749 in memory. This option enables `-fwpa' and `-fltrans' 6750 automatically. 6751 6752 Disabled by default. 6753 6754 This option is experimental. 6755 6756`-fwpa' 6757 This is an internal option used by GCC when compiling with 6758 `-fwhopr'. You should never need to use it. 6759 6760 This option runs the link-time optimizer in the 6761 whole-program-analysis (WPA) mode, which reads in summary 6762 information from all inputs and performs a whole-program analysis 6763 based on summary information only. It generates object files for 6764 subsequent runs of the link-time optimizer where individual object 6765 files are optimized using both summary information from the WPA 6766 mode and the actual function bodies. It then drives the LTRANS 6767 phase. 6768 6769 Disabled by default. 6770 6771`-fltrans' 6772 This is an internal option used by GCC when compiling with 6773 `-fwhopr'. You should never need to use it. 6774 6775 This option runs the link-time optimizer in the 6776 local-transformation (LTRANS) mode, which reads in output from a 6777 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 6778 optimizes an object and produces the final assembly. 6779 6780 Disabled by default. 6781 6782`-fltrans-output-list=FILE' 6783 This is an internal option used by GCC when compiling with 6784 `-fwhopr'. You should never need to use it. 6785 6786 This option specifies a file to which the names of LTRANS output 6787 files are written. This option is only meaningful in conjunction 6788 with `-fwpa'. 6789 6790 Disabled by default. 6791 6792`-flto-compression-level=N' 6793 This option specifies the level of compression used for 6794 intermediate language written to LTO object files, and is only 6795 meaningful in conjunction with LTO mode (`-fwhopr', `-flto'). 6796 Valid values are 0 (no compression) to 9 (maximum compression). 6797 Values outside this range are clamped to either 0 or 9. If the 6798 option is not given, a default balanced compression setting is 6799 used. 6800 6801`-flto-report' 6802 Prints a report with internal details on the workings of the 6803 link-time optimizer. The contents of this report vary from 6804 version to version, it is meant to be useful to GCC developers 6805 when processing object files in LTO mode (via `-fwhopr' or 6806 `-flto'). 6807 6808 Disabled by default. 6809 6810`-fuse-linker-plugin' 6811 Enables the extraction of objects with GIMPLE bytecode information 6812 from library archives. This option relies on features available 6813 only in `gold', so to use this you must configure GCC with 6814 `--enable-gold'. See `-flto' for a description on the effect of 6815 this flag and how to use it. 6816 6817 Disabled by default. 6818 6819`-fcprop-registers' 6820 After register allocation and post-register allocation instruction 6821 splitting, we perform a copy-propagation pass to try to reduce 6822 scheduling dependencies and occasionally eliminate the copy. 6823 6824 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6825 6826`-fprofile-correction' 6827 Profiles collected using an instrumented binary for multi-threaded 6828 programs may be inconsistent due to missed counter updates. When 6829 this option is specified, GCC will use heuristics to correct or 6830 smooth out such inconsistencies. By default, GCC will emit an 6831 error message when an inconsistent profile is detected. 6832 6833`-fprofile-dir=PATH' 6834 Set the directory to search the profile data files in to PATH. 6835 This option affects only the profile data generated by 6836 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 6837 by `-fprofile-use' and `-fbranch-probabilities' and its related 6838 options. By default, GCC will use the current directory as PATH 6839 thus the profile data file will appear in the same directory as 6840 the object file. 6841 6842`-fprofile-generate' 6843`-fprofile-generate=PATH' 6844 Enable options usually used for instrumenting application to 6845 produce profile useful for later recompilation with profile 6846 feedback based optimization. You must use `-fprofile-generate' 6847 both when compiling and when linking your program. 6848 6849 The following options are enabled: `-fprofile-arcs', 6850 `-fprofile-values', `-fvpt'. 6851 6852 If PATH is specified, GCC will look at the PATH to find the 6853 profile feedback data files. See `-fprofile-dir'. 6854 6855`-fprofile-use' 6856`-fprofile-use=PATH' 6857 Enable profile feedback directed optimizations, and optimizations 6858 generally profitable only with profile feedback available. 6859 6860 The following options are enabled: `-fbranch-probabilities', 6861 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer' 6862 6863 By default, GCC emits an error message if the feedback profiles do 6864 not match the source code. This error can be turned into a 6865 warning by using `-Wcoverage-mismatch'. Note this may result in 6866 poorly optimized code. 6867 6868 If PATH is specified, GCC will look at the PATH to find the 6869 profile feedback data files. See `-fprofile-dir'. 6870 6871 The following options control compiler behavior regarding floating 6872point arithmetic. These options trade off between speed and 6873correctness. All must be specifically enabled. 6874 6875`-ffloat-store' 6876 Do not store floating point variables in registers, and inhibit 6877 other options that might change whether a floating point value is 6878 taken from a register or memory. 6879 6880 This option prevents undesirable excess precision on machines such 6881 as the 68000 where the floating registers (of the 68881) keep more 6882 precision than a `double' is supposed to have. Similarly for the 6883 x86 architecture. For most programs, the excess precision does 6884 only good, but a few programs rely on the precise definition of 6885 IEEE floating point. Use `-ffloat-store' for such programs, after 6886 modifying them to store all pertinent intermediate computations 6887 into variables. 6888 6889`-fexcess-precision=STYLE' 6890 This option allows further control over excess precision on 6891 machines where floating-point registers have more precision than 6892 the IEEE `float' and `double' types and the processor does not 6893 support operations rounding to those types. By default, 6894 `-fexcess-precision=fast' is in effect; this means that operations 6895 are carried out in the precision of the registers and that it is 6896 unpredictable when rounding to the types specified in the source 6897 code takes place. When compiling C, if 6898 `-fexcess-precision=standard' is specified then excess precision 6899 will follow the rules specified in ISO C99; in particular, both 6900 casts and assignments cause values to be rounded to their semantic 6901 types (whereas `-ffloat-store' only affects assignments). This 6902 option is enabled by default for C if a strict conformance option 6903 such as `-std=c99' is used. 6904 6905 `-fexcess-precision=standard' is not implemented for languages 6906 other than C, and has no effect if `-funsafe-math-optimizations' 6907 or `-ffast-math' is specified. On the x86, it also has no effect 6908 if `-mfpmath=sse' or `-mfpmath=sse+387' is specified; in the 6909 former case, IEEE semantics apply without excess precision, and in 6910 the latter, rounding is unpredictable. 6911 6912`-ffast-math' 6913 Sets `-fno-math-errno', `-funsafe-math-optimizations', 6914 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 6915 and `-fcx-limited-range'. 6916 6917 This option causes the preprocessor macro `__FAST_MATH__' to be 6918 defined. 6919 6920 This option is not turned on by any `-O' option since it can 6921 result in incorrect output for programs which depend on an exact 6922 implementation of IEEE or ISO rules/specifications for math 6923 functions. It may, however, yield faster code for programs that do 6924 not require the guarantees of these specifications. 6925 6926`-fno-math-errno' 6927 Do not set ERRNO after calling math functions that are executed 6928 with a single instruction, e.g., sqrt. A program that relies on 6929 IEEE exceptions for math error handling may want to use this flag 6930 for speed while maintaining IEEE arithmetic compatibility. 6931 6932 This option is not turned on by any `-O' option since it can 6933 result in incorrect output for programs which depend on an exact 6934 implementation of IEEE or ISO rules/specifications for math 6935 functions. It may, however, yield faster code for programs that do 6936 not require the guarantees of these specifications. 6937 6938 The default is `-fmath-errno'. 6939 6940 On Darwin systems, the math library never sets `errno'. There is 6941 therefore no reason for the compiler to consider the possibility 6942 that it might, and `-fno-math-errno' is the default. 6943 6944`-funsafe-math-optimizations' 6945 Allow optimizations for floating-point arithmetic that (a) assume 6946 that arguments and results are valid and (b) may violate IEEE or 6947 ANSI standards. When used at link-time, it may include libraries 6948 or startup files that change the default FPU control word or other 6949 similar optimizations. 6950 6951 This option is not turned on by any `-O' option since it can 6952 result in incorrect output for programs which depend on an exact 6953 implementation of IEEE or ISO rules/specifications for math 6954 functions. It may, however, yield faster code for programs that do 6955 not require the guarantees of these specifications. Enables 6956 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 6957 and `-freciprocal-math'. 6958 6959 The default is `-fno-unsafe-math-optimizations'. 6960 6961`-fassociative-math' 6962 Allow re-association of operands in series of floating-point 6963 operations. This violates the ISO C and C++ language standard by 6964 possibly changing computation result. NOTE: re-ordering may 6965 change the sign of zero as well as ignore NaNs and inhibit or 6966 create underflow or overflow (and thus cannot be used on a code 6967 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 6968 May also reorder floating-point comparisons and thus may not be 6969 used when ordered comparisons are required. This option requires 6970 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 6971 effect. Moreover, it doesn't make much sense with 6972 `-frounding-math'. For Fortran the option is automatically enabled 6973 when both `-fno-signed-zeros' and `-fno-trapping-math' are in 6974 effect. 6975 6976 The default is `-fno-associative-math'. 6977 6978`-freciprocal-math' 6979 Allow the reciprocal of a value to be used instead of dividing by 6980 the value if this enables optimizations. For example `x / y' can 6981 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 6982 to common subexpression elimination. Note that this loses 6983 precision and increases the number of flops operating on the value. 6984 6985 The default is `-fno-reciprocal-math'. 6986 6987`-ffinite-math-only' 6988 Allow optimizations for floating-point arithmetic that assume that 6989 arguments and results are not NaNs or +-Infs. 6990 6991 This option is not turned on by any `-O' option since it can 6992 result in incorrect output for programs which depend on an exact 6993 implementation of IEEE or ISO rules/specifications for math 6994 functions. It may, however, yield faster code for programs that do 6995 not require the guarantees of these specifications. 6996 6997 The default is `-fno-finite-math-only'. 6998 6999`-fno-signed-zeros' 7000 Allow optimizations for floating point arithmetic that ignore the 7001 signedness of zero. IEEE arithmetic specifies the behavior of 7002 distinct +0.0 and -0.0 values, which then prohibits simplification 7003 of expressions such as x+0.0 or 0.0*x (even with 7004 `-ffinite-math-only'). This option implies that the sign of a 7005 zero result isn't significant. 7006 7007 The default is `-fsigned-zeros'. 7008 7009`-fno-trapping-math' 7010 Compile code assuming that floating-point operations cannot 7011 generate user-visible traps. These traps include division by 7012 zero, overflow, underflow, inexact result and invalid operation. 7013 This option requires that `-fno-signaling-nans' be in effect. 7014 Setting this option may allow faster code if one relies on 7015 "non-stop" IEEE arithmetic, for example. 7016 7017 This option should never be turned on by any `-O' option since it 7018 can result in incorrect output for programs which depend on an 7019 exact implementation of IEEE or ISO rules/specifications for math 7020 functions. 7021 7022 The default is `-ftrapping-math'. 7023 7024`-frounding-math' 7025 Disable transformations and optimizations that assume default 7026 floating point rounding behavior. This is round-to-zero for all 7027 floating point to integer conversions, and round-to-nearest for 7028 all other arithmetic truncations. This option should be specified 7029 for programs that change the FP rounding mode dynamically, or that 7030 may be executed with a non-default rounding mode. This option 7031 disables constant folding of floating point expressions at 7032 compile-time (which may be affected by rounding mode) and 7033 arithmetic transformations that are unsafe in the presence of 7034 sign-dependent rounding modes. 7035 7036 The default is `-fno-rounding-math'. 7037 7038 This option is experimental and does not currently guarantee to 7039 disable all GCC optimizations that are affected by rounding mode. 7040 Future versions of GCC may provide finer control of this setting 7041 using C99's `FENV_ACCESS' pragma. This command line option will 7042 be used to specify the default state for `FENV_ACCESS'. 7043 7044`-fsignaling-nans' 7045 Compile code assuming that IEEE signaling NaNs may generate 7046 user-visible traps during floating-point operations. Setting this 7047 option disables optimizations that may change the number of 7048 exceptions visible with signaling NaNs. This option implies 7049 `-ftrapping-math'. 7050 7051 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 7052 defined. 7053 7054 The default is `-fno-signaling-nans'. 7055 7056 This option is experimental and does not currently guarantee to 7057 disable all GCC optimizations that affect signaling NaN behavior. 7058 7059`-fsingle-precision-constant' 7060 Treat floating point constant as single precision constant instead 7061 of implicitly converting it to double precision constant. 7062 7063`-fcx-limited-range' 7064 When enabled, this option states that a range reduction step is not 7065 needed when performing complex division. Also, there is no 7066 checking whether the result of a complex multiplication or 7067 division is `NaN + I*NaN', with an attempt to rescue the situation 7068 in that case. The default is `-fno-cx-limited-range', but is 7069 enabled by `-ffast-math'. 7070 7071 This option controls the default setting of the ISO C99 7072 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 7073 all languages. 7074 7075`-fcx-fortran-rules' 7076 Complex multiplication and division follow Fortran rules. Range 7077 reduction is done as part of complex division, but there is no 7078 checking whether the result of a complex multiplication or 7079 division is `NaN + I*NaN', with an attempt to rescue the situation 7080 in that case. 7081 7082 The default is `-fno-cx-fortran-rules'. 7083 7084 7085 The following options control optimizations that may improve 7086performance, but are not enabled by any `-O' options. This section 7087includes experimental options that may produce broken code. 7088 7089`-fbranch-probabilities' 7090 After running a program compiled with `-fprofile-arcs' (*note 7091 Options for Debugging Your Program or `gcc': Debugging Options.), 7092 you can compile it a second time using `-fbranch-probabilities', 7093 to improve optimizations based on the number of times each branch 7094 was taken. When the program compiled with `-fprofile-arcs' exits 7095 it saves arc execution counts to a file called `SOURCENAME.gcda' 7096 for each source file. The information in this data file is very 7097 dependent on the structure of the generated code, so you must use 7098 the same source code and the same optimization options for both 7099 compilations. 7100 7101 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 7102 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 7103 optimization. Currently, they are only used in one place: in 7104 `reorg.c', instead of guessing which path a branch is mostly to 7105 take, the `REG_BR_PROB' values are used to exactly determine which 7106 path is taken more often. 7107 7108`-fprofile-values' 7109 If combined with `-fprofile-arcs', it adds code so that some data 7110 about values of expressions in the program is gathered. 7111 7112 With `-fbranch-probabilities', it reads back the data gathered 7113 from profiling values of expressions and adds `REG_VALUE_PROFILE' 7114 notes to instructions for their later usage in optimizations. 7115 7116 Enabled with `-fprofile-generate' and `-fprofile-use'. 7117 7118`-fvpt' 7119 If combined with `-fprofile-arcs', it instructs the compiler to add 7120 a code to gather information about values of expressions. 7121 7122 With `-fbranch-probabilities', it reads back the data gathered and 7123 actually performs the optimizations based on them. Currently the 7124 optimizations include specialization of division operation using 7125 the knowledge about the value of the denominator. 7126 7127`-frename-registers' 7128 Attempt to avoid false dependencies in scheduled code by making use 7129 of registers left over after register allocation. This 7130 optimization will most benefit processors with lots of registers. 7131 Depending on the debug information format adopted by the target, 7132 however, it can make debugging impossible, since variables will no 7133 longer stay in a "home register". 7134 7135 Enabled by default with `-funroll-loops' and `-fpeel-loops'. 7136 7137`-ftracer' 7138 Perform tail duplication to enlarge superblock size. This 7139 transformation simplifies the control flow of the function 7140 allowing other optimizations to do better job. 7141 7142 Enabled with `-fprofile-use'. 7143 7144`-funroll-loops' 7145 Unroll loops whose number of iterations can be determined at 7146 compile time or upon entry to the loop. `-funroll-loops' implies 7147 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 7148 also turns on complete loop peeling (i.e. complete removal of 7149 loops with small constant number of iterations). This option 7150 makes code larger, and may or may not make it run faster. 7151 7152 Enabled with `-fprofile-use'. 7153 7154`-funroll-all-loops' 7155 Unroll all loops, even if their number of iterations is uncertain 7156 when the loop is entered. This usually makes programs run more 7157 slowly. `-funroll-all-loops' implies the same options as 7158 `-funroll-loops'. 7159 7160`-fpeel-loops' 7161 Peels the loops for that there is enough information that they do 7162 not roll much (from profile feedback). It also turns on complete 7163 loop peeling (i.e. complete removal of loops with small constant 7164 number of iterations). 7165 7166 Enabled with `-fprofile-use'. 7167 7168`-fmove-loop-invariants' 7169 Enables the loop invariant motion pass in the RTL loop optimizer. 7170 Enabled at level `-O1' 7171 7172`-funswitch-loops' 7173 Move branches with loop invariant conditions out of the loop, with 7174 duplicates of the loop on both branches (modified according to 7175 result of the condition). 7176 7177`-ffunction-sections' 7178`-fdata-sections' 7179 Place each function or data item into its own section in the output 7180 file if the target supports arbitrary sections. The name of the 7181 function or the name of the data item determines the section's name 7182 in the output file. 7183 7184 Use these options on systems where the linker can perform 7185 optimizations to improve locality of reference in the instruction 7186 space. Most systems using the ELF object format and SPARC 7187 processors running Solaris 2 have linkers with such optimizations. 7188 AIX may have these optimizations in the future. 7189 7190 Only use these options when there are significant benefits from 7191 doing so. When you specify these options, the assembler and 7192 linker will create larger object and executable files and will 7193 also be slower. You will not be able to use `gprof' on all 7194 systems if you specify this option and you may have problems with 7195 debugging if you specify both this option and `-g'. 7196 7197`-fbranch-target-load-optimize' 7198 Perform branch target register load optimization before prologue / 7199 epilogue threading. The use of target registers can typically be 7200 exposed only during reload, thus hoisting loads out of loops and 7201 doing inter-block scheduling needs a separate optimization pass. 7202 7203`-fbranch-target-load-optimize2' 7204 Perform branch target register load optimization after prologue / 7205 epilogue threading. 7206 7207`-fbtr-bb-exclusive' 7208 When performing branch target register load optimization, don't 7209 reuse branch target registers in within any basic block. 7210 7211`-fstack-protector' 7212 Emit extra code to check for buffer overflows, such as stack 7213 smashing attacks. This is done by adding a guard variable to 7214 functions with vulnerable objects. This includes functions that 7215 call alloca, and functions with buffers larger than 8 bytes. The 7216 guards are initialized when a function is entered and then checked 7217 when the function exits. If a guard check fails, an error message 7218 is printed and the program exits. 7219 7220`-fstack-protector-all' 7221 Like `-fstack-protector' except that all functions are protected. 7222 7223`-fsection-anchors' 7224 Try to reduce the number of symbolic address calculations by using 7225 shared "anchor" symbols to address nearby objects. This 7226 transformation can help to reduce the number of GOT entries and 7227 GOT accesses on some targets. 7228 7229 For example, the implementation of the following function `foo': 7230 7231 static int a, b, c; 7232 int foo (void) { return a + b + c; } 7233 7234 would usually calculate the addresses of all three variables, but 7235 if you compile it with `-fsection-anchors', it will access the 7236 variables from a common anchor point instead. The effect is 7237 similar to the following pseudocode (which isn't valid C): 7238 7239 int foo (void) 7240 { 7241 register int *xr = &x; 7242 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 7243 } 7244 7245 Not all targets support this option. 7246 7247`--param NAME=VALUE' 7248 In some places, GCC uses various constants to control the amount of 7249 optimization that is done. For example, GCC will not inline 7250 functions that contain more that a certain number of instructions. 7251 You can control some of these constants on the command-line using 7252 the `--param' option. 7253 7254 The names of specific parameters, and the meaning of the values, 7255 are tied to the internals of the compiler, and are subject to 7256 change without notice in future releases. 7257 7258 In each case, the VALUE is an integer. The allowable choices for 7259 NAME are given in the following table: 7260 7261 `struct-reorg-cold-struct-ratio' 7262 The threshold ratio (as a percentage) between a structure 7263 frequency and the frequency of the hottest structure in the 7264 program. This parameter is used by struct-reorg optimization 7265 enabled by `-fipa-struct-reorg'. We say that if the ratio of 7266 a structure frequency, calculated by profiling, to the 7267 hottest structure frequency in the program is less than this 7268 parameter, then structure reorganization is not applied to 7269 this structure. The default is 10. 7270 7271 `predictable-branch-outcome' 7272 When branch is predicted to be taken with probability lower 7273 than this threshold (in percent), then it is considered well 7274 predictable. The default is 10. 7275 7276 `max-crossjump-edges' 7277 The maximum number of incoming edges to consider for 7278 crossjumping. The algorithm used by `-fcrossjumping' is 7279 O(N^2) in the number of edges incoming to each block. 7280 Increasing values mean more aggressive optimization, making 7281 the compile time increase with probably small improvement in 7282 executable size. 7283 7284 `min-crossjump-insns' 7285 The minimum number of instructions which must be matched at 7286 the end of two blocks before crossjumping will be performed 7287 on them. This value is ignored in the case where all 7288 instructions in the block being crossjumped from are matched. 7289 The default value is 5. 7290 7291 `max-grow-copy-bb-insns' 7292 The maximum code size expansion factor when copying basic 7293 blocks instead of jumping. The expansion is relative to a 7294 jump instruction. The default value is 8. 7295 7296 `max-goto-duplication-insns' 7297 The maximum number of instructions to duplicate to a block 7298 that jumps to a computed goto. To avoid O(N^2) behavior in a 7299 number of passes, GCC factors computed gotos early in the 7300 compilation process, and unfactors them as late as possible. 7301 Only computed jumps at the end of a basic blocks with no more 7302 than max-goto-duplication-insns are unfactored. The default 7303 value is 8. 7304 7305 `max-delay-slot-insn-search' 7306 The maximum number of instructions to consider when looking 7307 for an instruction to fill a delay slot. If more than this 7308 arbitrary number of instructions is searched, the time 7309 savings from filling the delay slot will be minimal so stop 7310 searching. Increasing values mean more aggressive 7311 optimization, making the compile time increase with probably 7312 small improvement in executable run time. 7313 7314 `max-delay-slot-live-search' 7315 When trying to fill delay slots, the maximum number of 7316 instructions to consider when searching for a block with 7317 valid live register information. Increasing this arbitrarily 7318 chosen value means more aggressive optimization, increasing 7319 the compile time. This parameter should be removed when the 7320 delay slot code is rewritten to maintain the control-flow 7321 graph. 7322 7323 `max-gcse-memory' 7324 The approximate maximum amount of memory that will be 7325 allocated in order to perform the global common subexpression 7326 elimination optimization. If more memory than specified is 7327 required, the optimization will not be done. 7328 7329 `max-pending-list-length' 7330 The maximum number of pending dependencies scheduling will 7331 allow before flushing the current state and starting over. 7332 Large functions with few branches or calls can create 7333 excessively large lists which needlessly consume memory and 7334 resources. 7335 7336 `max-inline-insns-single' 7337 Several parameters control the tree inliner used in gcc. 7338 This number sets the maximum number of instructions (counted 7339 in GCC's internal representation) in a single function that 7340 the tree inliner will consider for inlining. This only 7341 affects functions declared inline and methods implemented in 7342 a class declaration (C++). The default value is 300. 7343 7344 `max-inline-insns-auto' 7345 When you use `-finline-functions' (included in `-O3'), a lot 7346 of functions that would otherwise not be considered for 7347 inlining by the compiler will be investigated. To those 7348 functions, a different (more restrictive) limit compared to 7349 functions declared inline can be applied. The default value 7350 is 50. 7351 7352 `large-function-insns' 7353 The limit specifying really large functions. For functions 7354 larger than this limit after inlining, inlining is 7355 constrained by `--param large-function-growth'. This 7356 parameter is useful primarily to avoid extreme compilation 7357 time caused by non-linear algorithms used by the backend. 7358 The default value is 2700. 7359 7360 `large-function-growth' 7361 Specifies maximal growth of large function caused by inlining 7362 in percents. The default value is 100 which limits large 7363 function growth to 2.0 times the original size. 7364 7365 `large-unit-insns' 7366 The limit specifying large translation unit. Growth caused 7367 by inlining of units larger than this limit is limited by 7368 `--param inline-unit-growth'. For small units this might be 7369 too tight (consider unit consisting of function A that is 7370 inline and B that just calls A three time. If B is small 7371 relative to A, the growth of unit is 300\% and yet such 7372 inlining is very sane. For very large units consisting of 7373 small inlineable functions however the overall unit growth 7374 limit is needed to avoid exponential explosion of code size. 7375 Thus for smaller units, the size is increased to `--param 7376 large-unit-insns' before applying `--param 7377 inline-unit-growth'. The default is 10000 7378 7379 `inline-unit-growth' 7380 Specifies maximal overall growth of the compilation unit 7381 caused by inlining. The default value is 30 which limits 7382 unit growth to 1.3 times the original size. 7383 7384 `ipcp-unit-growth' 7385 Specifies maximal overall growth of the compilation unit 7386 caused by interprocedural constant propagation. The default 7387 value is 10 which limits unit growth to 1.1 times the 7388 original size. 7389 7390 `large-stack-frame' 7391 The limit specifying large stack frames. While inlining the 7392 algorithm is trying to not grow past this limit too much. 7393 Default value is 256 bytes. 7394 7395 `large-stack-frame-growth' 7396 Specifies maximal growth of large stack frames caused by 7397 inlining in percents. The default value is 1000 which limits 7398 large stack frame growth to 11 times the original size. 7399 7400 `max-inline-insns-recursive' 7401 `max-inline-insns-recursive-auto' 7402 Specifies maximum number of instructions out-of-line copy of 7403 self recursive inline function can grow into by performing 7404 recursive inlining. 7405 7406 For functions declared inline `--param 7407 max-inline-insns-recursive' is taken into account. For 7408 function not declared inline, recursive inlining happens only 7409 when `-finline-functions' (included in `-O3') is enabled and 7410 `--param max-inline-insns-recursive-auto' is used. The 7411 default value is 450. 7412 7413 `max-inline-recursive-depth' 7414 `max-inline-recursive-depth-auto' 7415 Specifies maximum recursion depth used by the recursive 7416 inlining. 7417 7418 For functions declared inline `--param 7419 max-inline-recursive-depth' is taken into account. For 7420 function not declared inline, recursive inlining happens only 7421 when `-finline-functions' (included in `-O3') is enabled and 7422 `--param max-inline-recursive-depth-auto' is used. The 7423 default value is 8. 7424 7425 `min-inline-recursive-probability' 7426 Recursive inlining is profitable only for function having 7427 deep recursion in average and can hurt for function having 7428 little recursion depth by increasing the prologue size or 7429 complexity of function body to other optimizers. 7430 7431 When profile feedback is available (see `-fprofile-generate') 7432 the actual recursion depth can be guessed from probability 7433 that function will recurse via given call expression. This 7434 parameter limits inlining only to call expression whose 7435 probability exceeds given threshold (in percents). The 7436 default value is 10. 7437 7438 `early-inlining-insns' 7439 Specify growth that early inliner can make. In effect it 7440 increases amount of inlining for code having large 7441 abstraction penalty. The default value is 8. 7442 7443 `max-early-inliner-iterations' 7444 `max-early-inliner-iterations' 7445 Limit of iterations of early inliner. This basically bounds 7446 number of nested indirect calls early inliner can resolve. 7447 Deeper chains are still handled by late inlining. 7448 7449 `min-vect-loop-bound' 7450 The minimum number of iterations under which a loop will not 7451 get vectorized when `-ftree-vectorize' is used. The number 7452 of iterations after vectorization needs to be greater than 7453 the value specified by this option to allow vectorization. 7454 The default value is 0. 7455 7456 `max-unrolled-insns' 7457 The maximum number of instructions that a loop should have if 7458 that loop is unrolled, and if the loop is unrolled, it 7459 determines how many times the loop code is unrolled. 7460 7461 `max-average-unrolled-insns' 7462 The maximum number of instructions biased by probabilities of 7463 their execution that a loop should have if that loop is 7464 unrolled, and if the loop is unrolled, it determines how many 7465 times the loop code is unrolled. 7466 7467 `max-unroll-times' 7468 The maximum number of unrollings of a single loop. 7469 7470 `max-peeled-insns' 7471 The maximum number of instructions that a loop should have if 7472 that loop is peeled, and if the loop is peeled, it determines 7473 how many times the loop code is peeled. 7474 7475 `max-peel-times' 7476 The maximum number of peelings of a single loop. 7477 7478 `max-completely-peeled-insns' 7479 The maximum number of insns of a completely peeled loop. 7480 7481 `max-completely-peel-times' 7482 The maximum number of iterations of a loop to be suitable for 7483 complete peeling. 7484 7485 `max-completely-peel-loop-nest-depth' 7486 The maximum depth of a loop nest suitable for complete 7487 peeling. 7488 7489 `max-unswitch-insns' 7490 The maximum number of insns of an unswitched loop. 7491 7492 `max-unswitch-level' 7493 The maximum number of branches unswitched in a single loop. 7494 7495 `lim-expensive' 7496 The minimum cost of an expensive expression in the loop 7497 invariant motion. 7498 7499 `iv-consider-all-candidates-bound' 7500 Bound on number of candidates for induction variables below 7501 that all candidates are considered for each use in induction 7502 variable optimizations. Only the most relevant candidates 7503 are considered if there are more candidates, to avoid 7504 quadratic time complexity. 7505 7506 `iv-max-considered-uses' 7507 The induction variable optimizations give up on loops that 7508 contain more induction variable uses. 7509 7510 `iv-always-prune-cand-set-bound' 7511 If number of candidates in the set is smaller than this value, 7512 we always try to remove unnecessary ivs from the set during 7513 its optimization when a new iv is added to the set. 7514 7515 `scev-max-expr-size' 7516 Bound on size of expressions used in the scalar evolutions 7517 analyzer. Large expressions slow the analyzer. 7518 7519 `omega-max-vars' 7520 The maximum number of variables in an Omega constraint system. 7521 The default value is 128. 7522 7523 `omega-max-geqs' 7524 The maximum number of inequalities in an Omega constraint 7525 system. The default value is 256. 7526 7527 `omega-max-eqs' 7528 The maximum number of equalities in an Omega constraint 7529 system. The default value is 128. 7530 7531 `omega-max-wild-cards' 7532 The maximum number of wildcard variables that the Omega 7533 solver will be able to insert. The default value is 18. 7534 7535 `omega-hash-table-size' 7536 The size of the hash table in the Omega solver. The default 7537 value is 550. 7538 7539 `omega-max-keys' 7540 The maximal number of keys used by the Omega solver. The 7541 default value is 500. 7542 7543 `omega-eliminate-redundant-constraints' 7544 When set to 1, use expensive methods to eliminate all 7545 redundant constraints. The default value is 0. 7546 7547 `vect-max-version-for-alignment-checks' 7548 The maximum number of runtime checks that can be performed 7549 when doing loop versioning for alignment in the vectorizer. 7550 See option ftree-vect-loop-version for more information. 7551 7552 `vect-max-version-for-alias-checks' 7553 The maximum number of runtime checks that can be performed 7554 when doing loop versioning for alias in the vectorizer. See 7555 option ftree-vect-loop-version for more information. 7556 7557 `max-iterations-to-track' 7558 The maximum number of iterations of a loop the brute force 7559 algorithm for analysis of # of iterations of the loop tries 7560 to evaluate. 7561 7562 `hot-bb-count-fraction' 7563 Select fraction of the maximal count of repetitions of basic 7564 block in program given basic block needs to have to be 7565 considered hot. 7566 7567 `hot-bb-frequency-fraction' 7568 Select fraction of the maximal frequency of executions of 7569 basic block in function given basic block needs to have to be 7570 considered hot 7571 7572 `max-predicted-iterations' 7573 The maximum number of loop iterations we predict statically. 7574 This is useful in cases where function contain single loop 7575 with known bound and other loop with unknown. We predict the 7576 known number of iterations correctly, while the unknown 7577 number of iterations average to roughly 10. This means that 7578 the loop without bounds would appear artificially cold 7579 relative to the other one. 7580 7581 `align-threshold' 7582 Select fraction of the maximal frequency of executions of 7583 basic block in function given basic block will get aligned. 7584 7585 `align-loop-iterations' 7586 A loop expected to iterate at lest the selected number of 7587 iterations will get aligned. 7588 7589 `tracer-dynamic-coverage' 7590 `tracer-dynamic-coverage-feedback' 7591 This value is used to limit superblock formation once the 7592 given percentage of executed instructions is covered. This 7593 limits unnecessary code size expansion. 7594 7595 The `tracer-dynamic-coverage-feedback' is used only when 7596 profile feedback is available. The real profiles (as opposed 7597 to statically estimated ones) are much less balanced allowing 7598 the threshold to be larger value. 7599 7600 `tracer-max-code-growth' 7601 Stop tail duplication once code growth has reached given 7602 percentage. This is rather hokey argument, as most of the 7603 duplicates will be eliminated later in cross jumping, so it 7604 may be set to much higher values than is the desired code 7605 growth. 7606 7607 `tracer-min-branch-ratio' 7608 Stop reverse growth when the reverse probability of best edge 7609 is less than this threshold (in percent). 7610 7611 `tracer-min-branch-ratio' 7612 `tracer-min-branch-ratio-feedback' 7613 Stop forward growth if the best edge do have probability 7614 lower than this threshold. 7615 7616 Similarly to `tracer-dynamic-coverage' two values are 7617 present, one for compilation for profile feedback and one for 7618 compilation without. The value for compilation with profile 7619 feedback needs to be more conservative (higher) in order to 7620 make tracer effective. 7621 7622 `max-cse-path-length' 7623 Maximum number of basic blocks on path that cse considers. 7624 The default is 10. 7625 7626 `max-cse-insns' 7627 The maximum instructions CSE process before flushing. The 7628 default is 1000. 7629 7630 `ggc-min-expand' 7631 GCC uses a garbage collector to manage its own memory 7632 allocation. This parameter specifies the minimum percentage 7633 by which the garbage collector's heap should be allowed to 7634 expand between collections. Tuning this may improve 7635 compilation speed; it has no effect on code generation. 7636 7637 The default is 30% + 70% * (RAM/1GB) with an upper bound of 7638 100% when RAM >= 1GB. If `getrlimit' is available, the 7639 notion of "RAM" is the smallest of actual RAM and 7640 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 7641 calculate RAM on a particular platform, the lower bound of 7642 30% is used. Setting this parameter and `ggc-min-heapsize' 7643 to zero causes a full collection to occur at every 7644 opportunity. This is extremely slow, but can be useful for 7645 debugging. 7646 7647 `ggc-min-heapsize' 7648 Minimum size of the garbage collector's heap before it begins 7649 bothering to collect garbage. The first collection occurs 7650 after the heap expands by `ggc-min-expand'% beyond 7651 `ggc-min-heapsize'. Again, tuning this may improve 7652 compilation speed, and has no effect on code generation. 7653 7654 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 7655 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 7656 exceeded, but with a lower bound of 4096 (four megabytes) and 7657 an upper bound of 131072 (128 megabytes). If GCC is not able 7658 to calculate RAM on a particular platform, the lower bound is 7659 used. Setting this parameter very large effectively disables 7660 garbage collection. Setting this parameter and 7661 `ggc-min-expand' to zero causes a full collection to occur at 7662 every opportunity. 7663 7664 `max-reload-search-insns' 7665 The maximum number of instruction reload should look backward 7666 for equivalent register. Increasing values mean more 7667 aggressive optimization, making the compile time increase 7668 with probably slightly better performance. The default value 7669 is 100. 7670 7671 `max-cselib-memory-locations' 7672 The maximum number of memory locations cselib should take 7673 into account. Increasing values mean more aggressive 7674 optimization, making the compile time increase with probably 7675 slightly better performance. The default value is 500. 7676 7677 `reorder-blocks-duplicate' 7678 `reorder-blocks-duplicate-feedback' 7679 Used by basic block reordering pass to decide whether to use 7680 unconditional branch or duplicate the code on its 7681 destination. Code is duplicated when its estimated size is 7682 smaller than this value multiplied by the estimated size of 7683 unconditional jump in the hot spots of the program. 7684 7685 The `reorder-block-duplicate-feedback' is used only when 7686 profile feedback is available and may be set to higher values 7687 than `reorder-block-duplicate' since information about the 7688 hot spots is more accurate. 7689 7690 `max-sched-ready-insns' 7691 The maximum number of instructions ready to be issued the 7692 scheduler should consider at any given time during the first 7693 scheduling pass. Increasing values mean more thorough 7694 searches, making the compilation time increase with probably 7695 little benefit. The default value is 100. 7696 7697 `max-sched-region-blocks' 7698 The maximum number of blocks in a region to be considered for 7699 interblock scheduling. The default value is 10. 7700 7701 `max-pipeline-region-blocks' 7702 The maximum number of blocks in a region to be considered for 7703 pipelining in the selective scheduler. The default value is 7704 15. 7705 7706 `max-sched-region-insns' 7707 The maximum number of insns in a region to be considered for 7708 interblock scheduling. The default value is 100. 7709 7710 `max-pipeline-region-insns' 7711 The maximum number of insns in a region to be considered for 7712 pipelining in the selective scheduler. The default value is 7713 200. 7714 7715 `min-spec-prob' 7716 The minimum probability (in percents) of reaching a source 7717 block for interblock speculative scheduling. The default 7718 value is 40. 7719 7720 `max-sched-extend-regions-iters' 7721 The maximum number of iterations through CFG to extend 7722 regions. 0 - disable region extension, N - do at most N 7723 iterations. The default value is 0. 7724 7725 `max-sched-insn-conflict-delay' 7726 The maximum conflict delay for an insn to be considered for 7727 speculative motion. The default value is 3. 7728 7729 `sched-spec-prob-cutoff' 7730 The minimal probability of speculation success (in percents), 7731 so that speculative insn will be scheduled. The default 7732 value is 40. 7733 7734 `sched-mem-true-dep-cost' 7735 Minimal distance (in CPU cycles) between store and load 7736 targeting same memory locations. The default value is 1. 7737 7738 `selsched-max-lookahead' 7739 The maximum size of the lookahead window of selective 7740 scheduling. It is a depth of search for available 7741 instructions. The default value is 50. 7742 7743 `selsched-max-sched-times' 7744 The maximum number of times that an instruction will be 7745 scheduled during selective scheduling. This is the limit on 7746 the number of iterations through which the instruction may be 7747 pipelined. The default value is 2. 7748 7749 `selsched-max-insns-to-rename' 7750 The maximum number of best instructions in the ready list 7751 that are considered for renaming in the selective scheduler. 7752 The default value is 2. 7753 7754 `max-last-value-rtl' 7755 The maximum size measured as number of RTLs that can be 7756 recorded in an expression in combiner for a pseudo register 7757 as last known value of that register. The default is 10000. 7758 7759 `integer-share-limit' 7760 Small integer constants can use a shared data structure, 7761 reducing the compiler's memory usage and increasing its 7762 speed. This sets the maximum value of a shared integer 7763 constant. The default value is 256. 7764 7765 `min-virtual-mappings' 7766 Specifies the minimum number of virtual mappings in the 7767 incremental SSA updater that should be registered to trigger 7768 the virtual mappings heuristic defined by 7769 virtual-mappings-ratio. The default value is 100. 7770 7771 `virtual-mappings-ratio' 7772 If the number of virtual mappings is virtual-mappings-ratio 7773 bigger than the number of virtual symbols to be updated, then 7774 the incremental SSA updater switches to a full update for 7775 those symbols. The default ratio is 3. 7776 7777 `ssp-buffer-size' 7778 The minimum size of buffers (i.e. arrays) that will receive 7779 stack smashing protection when `-fstack-protection' is used. 7780 7781 `max-jump-thread-duplication-stmts' 7782 Maximum number of statements allowed in a block that needs to 7783 be duplicated when threading jumps. 7784 7785 `max-fields-for-field-sensitive' 7786 Maximum number of fields in a structure we will treat in a 7787 field sensitive manner during pointer analysis. The default 7788 is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3. 7789 7790 `prefetch-latency' 7791 Estimate on average number of instructions that are executed 7792 before prefetch finishes. The distance we prefetch ahead is 7793 proportional to this constant. Increasing this number may 7794 also lead to less streams being prefetched (see 7795 `simultaneous-prefetches'). 7796 7797 `simultaneous-prefetches' 7798 Maximum number of prefetches that can run at the same time. 7799 7800 `l1-cache-line-size' 7801 The size of cache line in L1 cache, in bytes. 7802 7803 `l1-cache-size' 7804 The size of L1 cache, in kilobytes. 7805 7806 `l2-cache-size' 7807 The size of L2 cache, in kilobytes. 7808 7809 `min-insn-to-prefetch-ratio' 7810 The minimum ratio between the number of instructions and the 7811 number of prefetches to enable prefetching in a loop with an 7812 unknown trip count. 7813 7814 `prefetch-min-insn-to-mem-ratio' 7815 The minimum ratio between the number of instructions and the 7816 number of memory references to enable prefetching in a loop. 7817 7818 `use-canonical-types' 7819 Whether the compiler should use the "canonical" type system. 7820 By default, this should always be 1, which uses a more 7821 efficient internal mechanism for comparing types in C++ and 7822 Objective-C++. However, if bugs in the canonical type system 7823 are causing compilation failures, set this value to 0 to 7824 disable canonical types. 7825 7826 `switch-conversion-max-branch-ratio' 7827 Switch initialization conversion will refuse to create arrays 7828 that are bigger than `switch-conversion-max-branch-ratio' 7829 times the number of branches in the switch. 7830 7831 `max-partial-antic-length' 7832 Maximum length of the partial antic set computed during the 7833 tree partial redundancy elimination optimization 7834 (`-ftree-pre') when optimizing at `-O3' and above. For some 7835 sorts of source code the enhanced partial redundancy 7836 elimination optimization can run away, consuming all of the 7837 memory available on the host machine. This parameter sets a 7838 limit on the length of the sets that are computed, which 7839 prevents the runaway behavior. Setting a value of 0 for this 7840 parameter will allow an unlimited set length. 7841 7842 `sccvn-max-scc-size' 7843 Maximum size of a strongly connected component (SCC) during 7844 SCCVN processing. If this limit is hit, SCCVN processing for 7845 the whole function will not be done and optimizations 7846 depending on it will be disabled. The default maximum SCC 7847 size is 10000. 7848 7849 `ira-max-loops-num' 7850 IRA uses a regional register allocation by default. If a 7851 function contains loops more than number given by the 7852 parameter, only at most given number of the most frequently 7853 executed loops will form regions for the regional register 7854 allocation. The default value of the parameter is 100. 7855 7856 `ira-max-conflict-table-size' 7857 Although IRA uses a sophisticated algorithm of compression 7858 conflict table, the table can be still big for huge 7859 functions. If the conflict table for a function could be 7860 more than size in MB given by the parameter, the conflict 7861 table is not built and faster, simpler, and lower quality 7862 register allocation algorithm will be used. The algorithm do 7863 not use pseudo-register conflicts. The default value of the 7864 parameter is 2000. 7865 7866 `ira-loop-reserved-regs' 7867 IRA can be used to evaluate more accurate register pressure 7868 in loops for decision to move loop invariants (see `-O3'). 7869 The number of available registers reserved for some other 7870 purposes is described by this parameter. The default value 7871 of the parameter is 2 which is minimal number of registers 7872 needed for execution of typical instruction. This value is 7873 the best found from numerous experiments. 7874 7875 `loop-invariant-max-bbs-in-loop' 7876 Loop invariant motion can be very expensive, both in compile 7877 time and in amount of needed compile time memory, with very 7878 large loops. Loops with more basic blocks than this 7879 parameter won't have loop invariant motion optimization 7880 performed on them. The default value of the parameter is 7881 1000 for -O1 and 10000 for -O2 and above. 7882 7883 `max-vartrack-size' 7884 Sets a maximum number of hash table slots to use during 7885 variable tracking dataflow analysis of any function. If this 7886 limit is exceeded with variable tracking at assignments 7887 enabled, analysis for that function is retried without it, 7888 after removing all debug insns from the function. If the 7889 limit is exceeded even without debug insns, var tracking 7890 analysis is completely disabled for the function. Setting 7891 the parameter to zero makes it unlimited. 7892 7893 `min-nondebug-insn-uid' 7894 Use uids starting at this parameter for nondebug insns. The 7895 range below the parameter is reserved exclusively for debug 7896 insns created by `-fvar-tracking-assignments', but debug 7897 insns may get (non-overlapping) uids above it if the reserved 7898 range is exhausted. 7899 7900 `ipa-sra-ptr-growth-factor' 7901 IPA-SRA will replace a pointer to an aggregate with one or 7902 more new parameters only when their cumulative size is less 7903 or equal to `ipa-sra-ptr-growth-factor' times the size of the 7904 original pointer parameter. 7905 7906 `graphite-max-nb-scop-params' 7907 To avoid exponential effects in the Graphite loop transforms, 7908 the number of parameters in a Static Control Part (SCoP) is 7909 bounded. The default value is 10 parameters. A variable 7910 whose value is unknown at compile time and defined outside a 7911 SCoP is a parameter of the SCoP. 7912 7913 `graphite-max-bbs-per-function' 7914 To avoid exponential effects in the detection of SCoPs, the 7915 size of the functions analyzed by Graphite is bounded. The 7916 default value is 100 basic blocks. 7917 7918 `loop-block-tile-size' 7919 Loop blocking or strip mining transforms, enabled with 7920 `-floop-block' or `-floop-strip-mine', strip mine each loop 7921 in the loop nest by a given number of iterations. The strip 7922 length can be changed using the `loop-block-tile-size' 7923 parameter. The default value is 51 iterations. 7924 7925 7926 7927File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 7928 79293.11 Options Controlling the Preprocessor 7930========================================= 7931 7932These options control the C preprocessor, which is run on each C source 7933file before actual compilation. 7934 7935 If you use the `-E' option, nothing is done except preprocessing. 7936Some of these options make sense only together with `-E' because they 7937cause the preprocessor output to be unsuitable for actual compilation. 7938 7939`-Wp,OPTION' 7940 You can use `-Wp,OPTION' to bypass the compiler driver and pass 7941 OPTION directly through to the preprocessor. If OPTION contains 7942 commas, it is split into multiple options at the commas. However, 7943 many options are modified, translated or interpreted by the 7944 compiler driver before being passed to the preprocessor, and `-Wp' 7945 forcibly bypasses this phase. The preprocessor's direct interface 7946 is undocumented and subject to change, so whenever possible you 7947 should avoid using `-Wp' and let the driver handle the options 7948 instead. 7949 7950`-Xpreprocessor OPTION' 7951 Pass OPTION as an option to the preprocessor. You can use this to 7952 supply system-specific preprocessor options which GCC does not 7953 know how to recognize. 7954 7955 If you want to pass an option that takes an argument, you must use 7956 `-Xpreprocessor' twice, once for the option and once for the 7957 argument. 7958 7959`-D NAME' 7960 Predefine NAME as a macro, with definition `1'. 7961 7962`-D NAME=DEFINITION' 7963 The contents of DEFINITION are tokenized and processed as if they 7964 appeared during translation phase three in a `#define' directive. 7965 In particular, the definition will be truncated by embedded 7966 newline characters. 7967 7968 If you are invoking the preprocessor from a shell or shell-like 7969 program you may need to use the shell's quoting syntax to protect 7970 characters such as spaces that have a meaning in the shell syntax. 7971 7972 If you wish to define a function-like macro on the command line, 7973 write its argument list with surrounding parentheses before the 7974 equals sign (if any). Parentheses are meaningful to most shells, 7975 so you will need to quote the option. With `sh' and `csh', 7976 `-D'NAME(ARGS...)=DEFINITION'' works. 7977 7978 `-D' and `-U' options are processed in the order they are given on 7979 the command line. All `-imacros FILE' and `-include FILE' options 7980 are processed after all `-D' and `-U' options. 7981 7982`-U NAME' 7983 Cancel any previous definition of NAME, either built in or 7984 provided with a `-D' option. 7985 7986`-undef' 7987 Do not predefine any system-specific or GCC-specific macros. The 7988 standard predefined macros remain defined. 7989 7990`-I DIR' 7991 Add the directory DIR to the list of directories to be searched 7992 for header files. Directories named by `-I' are searched before 7993 the standard system include directories. If the directory DIR is 7994 a standard system include directory, the option is ignored to 7995 ensure that the default search order for system directories and 7996 the special treatment of system headers are not defeated . If DIR 7997 begins with `=', then the `=' will be replaced by the sysroot 7998 prefix; see `--sysroot' and `-isysroot'. 7999 8000`-o FILE' 8001 Write output to FILE. This is the same as specifying FILE as the 8002 second non-option argument to `cpp'. `gcc' has a different 8003 interpretation of a second non-option argument, so you must use 8004 `-o' to specify the output file. 8005 8006`-Wall' 8007 Turns on all optional warnings which are desirable for normal code. 8008 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 8009 warning about integer promotion causing a change of sign in `#if' 8010 expressions. Note that many of the preprocessor's warnings are on 8011 by default and have no options to control them. 8012 8013`-Wcomment' 8014`-Wcomments' 8015 Warn whenever a comment-start sequence `/*' appears in a `/*' 8016 comment, or whenever a backslash-newline appears in a `//' comment. 8017 (Both forms have the same effect.) 8018 8019`-Wtrigraphs' 8020 Most trigraphs in comments cannot affect the meaning of the 8021 program. However, a trigraph that would form an escaped newline 8022 (`??/' at the end of a line) can, by changing where the comment 8023 begins or ends. Therefore, only trigraphs that would form escaped 8024 newlines produce warnings inside a comment. 8025 8026 This option is implied by `-Wall'. If `-Wall' is not given, this 8027 option is still enabled unless trigraphs are enabled. To get 8028 trigraph conversion without warnings, but get the other `-Wall' 8029 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 8030 8031`-Wtraditional' 8032 Warn about certain constructs that behave differently in 8033 traditional and ISO C. Also warn about ISO C constructs that have 8034 no traditional C equivalent, and problematic constructs which 8035 should be avoided. 8036 8037`-Wundef' 8038 Warn whenever an identifier which is not a macro is encountered in 8039 an `#if' directive, outside of `defined'. Such identifiers are 8040 replaced with zero. 8041 8042`-Wunused-macros' 8043 Warn about macros defined in the main file that are unused. A 8044 macro is "used" if it is expanded or tested for existence at least 8045 once. The preprocessor will also warn if the macro has not been 8046 used at the time it is redefined or undefined. 8047 8048 Built-in macros, macros defined on the command line, and macros 8049 defined in include files are not warned about. 8050 8051 _Note:_ If a macro is actually used, but only used in skipped 8052 conditional blocks, then CPP will report it as unused. To avoid 8053 the warning in such a case, you might improve the scope of the 8054 macro's definition by, for example, moving it into the first 8055 skipped block. Alternatively, you could provide a dummy use with 8056 something like: 8057 8058 #if defined the_macro_causing_the_warning 8059 #endif 8060 8061`-Wendif-labels' 8062 Warn whenever an `#else' or an `#endif' are followed by text. 8063 This usually happens in code of the form 8064 8065 #if FOO 8066 ... 8067 #else FOO 8068 ... 8069 #endif FOO 8070 8071 The second and third `FOO' should be in comments, but often are not 8072 in older programs. This warning is on by default. 8073 8074`-Werror' 8075 Make all warnings into hard errors. Source code which triggers 8076 warnings will be rejected. 8077 8078`-Wsystem-headers' 8079 Issue warnings for code in system headers. These are normally 8080 unhelpful in finding bugs in your own code, therefore suppressed. 8081 If you are responsible for the system library, you may want to see 8082 them. 8083 8084`-w' 8085 Suppress all warnings, including those which GNU CPP issues by 8086 default. 8087 8088`-pedantic' 8089 Issue all the mandatory diagnostics listed in the C standard. 8090 Some of them are left out by default, since they trigger 8091 frequently on harmless code. 8092 8093`-pedantic-errors' 8094 Issue all the mandatory diagnostics, and make all mandatory 8095 diagnostics into errors. This includes mandatory diagnostics that 8096 GCC issues without `-pedantic' but treats as warnings. 8097 8098`-M' 8099 Instead of outputting the result of preprocessing, output a rule 8100 suitable for `make' describing the dependencies of the main source 8101 file. The preprocessor outputs one `make' rule containing the 8102 object file name for that source file, a colon, and the names of 8103 all the included files, including those coming from `-include' or 8104 `-imacros' command line options. 8105 8106 Unless specified explicitly (with `-MT' or `-MQ'), the object file 8107 name consists of the name of the source file with any suffix 8108 replaced with object file suffix and with any leading directory 8109 parts removed. If there are many included files then the rule is 8110 split into several lines using `\'-newline. The rule has no 8111 commands. 8112 8113 This option does not suppress the preprocessor's debug output, 8114 such as `-dM'. To avoid mixing such debug output with the 8115 dependency rules you should explicitly specify the dependency 8116 output file with `-MF', or use an environment variable like 8117 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 8118 output will still be sent to the regular output stream as normal. 8119 8120 Passing `-M' to the driver implies `-E', and suppresses warnings 8121 with an implicit `-w'. 8122 8123`-MM' 8124 Like `-M' but do not mention header files that are found in system 8125 header directories, nor header files that are included, directly 8126 or indirectly, from such a header. 8127 8128 This implies that the choice of angle brackets or double quotes in 8129 an `#include' directive does not in itself determine whether that 8130 header will appear in `-MM' dependency output. This is a slight 8131 change in semantics from GCC versions 3.0 and earlier. 8132 8133`-MF FILE' 8134 When used with `-M' or `-MM', specifies a file to write the 8135 dependencies to. If no `-MF' switch is given the preprocessor 8136 sends the rules to the same place it would have sent preprocessed 8137 output. 8138 8139 When used with the driver options `-MD' or `-MMD', `-MF' overrides 8140 the default dependency output file. 8141 8142`-MG' 8143 In conjunction with an option such as `-M' requesting dependency 8144 generation, `-MG' assumes missing header files are generated files 8145 and adds them to the dependency list without raising an error. 8146 The dependency filename is taken directly from the `#include' 8147 directive without prepending any path. `-MG' also suppresses 8148 preprocessed output, as a missing header file renders this useless. 8149 8150 This feature is used in automatic updating of makefiles. 8151 8152`-MP' 8153 This option instructs CPP to add a phony target for each dependency 8154 other than the main file, causing each to depend on nothing. These 8155 dummy rules work around errors `make' gives if you remove header 8156 files without updating the `Makefile' to match. 8157 8158 This is typical output: 8159 8160 test.o: test.c test.h 8161 8162 test.h: 8163 8164`-MT TARGET' 8165 Change the target of the rule emitted by dependency generation. By 8166 default CPP takes the name of the main input file, deletes any 8167 directory components and any file suffix such as `.c', and appends 8168 the platform's usual object suffix. The result is the target. 8169 8170 An `-MT' option will set the target to be exactly the string you 8171 specify. If you want multiple targets, you can specify them as a 8172 single argument to `-MT', or use multiple `-MT' options. 8173 8174 For example, `-MT '$(objpfx)foo.o'' might give 8175 8176 $(objpfx)foo.o: foo.c 8177 8178`-MQ TARGET' 8179 Same as `-MT', but it quotes any characters which are special to 8180 Make. `-MQ '$(objpfx)foo.o'' gives 8181 8182 $$(objpfx)foo.o: foo.c 8183 8184 The default target is automatically quoted, as if it were given 8185 with `-MQ'. 8186 8187`-MD' 8188 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 8189 implied. The driver determines FILE based on whether an `-o' 8190 option is given. If it is, the driver uses its argument but with 8191 a suffix of `.d', otherwise it takes the name of the input file, 8192 removes any directory components and suffix, and applies a `.d' 8193 suffix. 8194 8195 If `-MD' is used in conjunction with `-E', any `-o' switch is 8196 understood to specify the dependency output file (*note -MF: 8197 dashMF.), but if used without `-E', each `-o' is understood to 8198 specify a target object file. 8199 8200 Since `-E' is not implied, `-MD' can be used to generate a 8201 dependency output file as a side-effect of the compilation process. 8202 8203`-MMD' 8204 Like `-MD' except mention only user header files, not system 8205 header files. 8206 8207`-fpch-deps' 8208 When using precompiled headers (*note Precompiled Headers::), this 8209 flag will cause the dependency-output flags to also list the files 8210 from the precompiled header's dependencies. If not specified only 8211 the precompiled header would be listed and not the files that were 8212 used to create it because those files are not consulted when a 8213 precompiled header is used. 8214 8215`-fpch-preprocess' 8216 This option allows use of a precompiled header (*note Precompiled 8217 Headers::) together with `-E'. It inserts a special `#pragma', 8218 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 8219 the place where the precompiled header was found, and its 8220 filename. When `-fpreprocessed' is in use, GCC recognizes this 8221 `#pragma' and loads the PCH. 8222 8223 This option is off by default, because the resulting preprocessed 8224 output is only really suitable as input to GCC. It is switched on 8225 by `-save-temps'. 8226 8227 You should not write this `#pragma' in your own code, but it is 8228 safe to edit the filename if the PCH file is available in a 8229 different location. The filename may be absolute or it may be 8230 relative to GCC's current directory. 8231 8232`-x c' 8233`-x c++' 8234`-x objective-c' 8235`-x assembler-with-cpp' 8236 Specify the source language: C, C++, Objective-C, or assembly. 8237 This has nothing to do with standards conformance or extensions; 8238 it merely selects which base syntax to expect. If you give none 8239 of these options, cpp will deduce the language from the extension 8240 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 8241 extensions for C++ and assembly are also recognized. If cpp does 8242 not recognize the extension, it will treat the file as C; this is 8243 the most generic mode. 8244 8245 _Note:_ Previous versions of cpp accepted a `-lang' option which 8246 selected both the language and the standards conformance level. 8247 This option has been removed, because it conflicts with the `-l' 8248 option. 8249 8250`-std=STANDARD' 8251`-ansi' 8252 Specify the standard to which the code should conform. Currently 8253 CPP knows about C and C++ standards; others may be added in the 8254 future. 8255 8256 STANDARD may be one of: 8257 `c90' 8258 `c89' 8259 `iso9899:1990' 8260 The ISO C standard from 1990. `c90' is the customary 8261 shorthand for this version of the standard. 8262 8263 The `-ansi' option is equivalent to `-std=c90'. 8264 8265 `iso9899:199409' 8266 The 1990 C standard, as amended in 1994. 8267 8268 `iso9899:1999' 8269 `c99' 8270 `iso9899:199x' 8271 `c9x' 8272 The revised ISO C standard, published in December 1999. 8273 Before publication, this was known as C9X. 8274 8275 `gnu90' 8276 `gnu89' 8277 The 1990 C standard plus GNU extensions. This is the default. 8278 8279 `gnu99' 8280 `gnu9x' 8281 The 1999 C standard plus GNU extensions. 8282 8283 `c++98' 8284 The 1998 ISO C++ standard plus amendments. 8285 8286 `gnu++98' 8287 The same as `-std=c++98' plus GNU extensions. This is the 8288 default for C++ code. 8289 8290`-I-' 8291 Split the include path. Any directories specified with `-I' 8292 options before `-I-' are searched only for headers requested with 8293 `#include "FILE"'; they are not searched for `#include <FILE>'. 8294 If additional directories are specified with `-I' options after 8295 the `-I-', those directories are searched for all `#include' 8296 directives. 8297 8298 In addition, `-I-' inhibits the use of the directory of the current 8299 file directory as the first search directory for `#include "FILE"'. 8300 This option has been deprecated. 8301 8302`-nostdinc' 8303 Do not search the standard system directories for header files. 8304 Only the directories you have specified with `-I' options (and the 8305 directory of the current file, if appropriate) are searched. 8306 8307`-nostdinc++' 8308 Do not search for header files in the C++-specific standard 8309 directories, but do still search the other standard directories. 8310 (This option is used when building the C++ library.) 8311 8312`-include FILE' 8313 Process FILE as if `#include "file"' appeared as the first line of 8314 the primary source file. However, the first directory searched 8315 for FILE is the preprocessor's working directory _instead of_ the 8316 directory containing the main source file. If not found there, it 8317 is searched for in the remainder of the `#include "..."' search 8318 chain as normal. 8319 8320 If multiple `-include' options are given, the files are included 8321 in the order they appear on the command line. 8322 8323`-imacros FILE' 8324 Exactly like `-include', except that any output produced by 8325 scanning FILE is thrown away. Macros it defines remain defined. 8326 This allows you to acquire all the macros from a header without 8327 also processing its declarations. 8328 8329 All files specified by `-imacros' are processed before all files 8330 specified by `-include'. 8331 8332`-idirafter DIR' 8333 Search DIR for header files, but do it _after_ all directories 8334 specified with `-I' and the standard system directories have been 8335 exhausted. DIR is treated as a system include directory. If DIR 8336 begins with `=', then the `=' will be replaced by the sysroot 8337 prefix; see `--sysroot' and `-isysroot'. 8338 8339`-iprefix PREFIX' 8340 Specify PREFIX as the prefix for subsequent `-iwithprefix' 8341 options. If the prefix represents a directory, you should include 8342 the final `/'. 8343 8344`-iwithprefix DIR' 8345`-iwithprefixbefore DIR' 8346 Append DIR to the prefix specified previously with `-iprefix', and 8347 add the resulting directory to the include search path. 8348 `-iwithprefixbefore' puts it in the same place `-I' would; 8349 `-iwithprefix' puts it where `-idirafter' would. 8350 8351`-isysroot DIR' 8352 This option is like the `--sysroot' option, but applies only to 8353 header files. See the `--sysroot' option for more information. 8354 8355`-imultilib DIR' 8356 Use DIR as a subdirectory of the directory containing 8357 target-specific C++ headers. 8358 8359`-isystem DIR' 8360 Search DIR for header files, after all directories specified by 8361 `-I' but before the standard system directories. Mark it as a 8362 system directory, so that it gets the same special treatment as is 8363 applied to the standard system directories. If DIR begins with 8364 `=', then the `=' will be replaced by the sysroot prefix; see 8365 `--sysroot' and `-isysroot'. 8366 8367`-iquote DIR' 8368 Search DIR only for header files requested with `#include "FILE"'; 8369 they are not searched for `#include <FILE>', before all 8370 directories specified by `-I' and before the standard system 8371 directories. If DIR begins with `=', then the `=' will be replaced 8372 by the sysroot prefix; see `--sysroot' and `-isysroot'. 8373 8374`-fdirectives-only' 8375 When preprocessing, handle directives, but do not expand macros. 8376 8377 The option's behavior depends on the `-E' and `-fpreprocessed' 8378 options. 8379 8380 With `-E', preprocessing is limited to the handling of directives 8381 such as `#define', `#ifdef', and `#error'. Other preprocessor 8382 operations, such as macro expansion and trigraph conversion are 8383 not performed. In addition, the `-dD' option is implicitly 8384 enabled. 8385 8386 With `-fpreprocessed', predefinition of command line and most 8387 builtin macros is disabled. Macros such as `__LINE__', which are 8388 contextually dependent, are handled normally. This enables 8389 compilation of files previously preprocessed with `-E 8390 -fdirectives-only'. 8391 8392 With both `-E' and `-fpreprocessed', the rules for 8393 `-fpreprocessed' take precedence. This enables full preprocessing 8394 of files previously preprocessed with `-E -fdirectives-only'. 8395 8396`-fdollars-in-identifiers' 8397 Accept `$' in identifiers. 8398 8399`-fextended-identifiers' 8400 Accept universal character names in identifiers. This option is 8401 experimental; in a future version of GCC, it will be enabled by 8402 default for C99 and C++. 8403 8404`-fpreprocessed' 8405 Indicate to the preprocessor that the input file has already been 8406 preprocessed. This suppresses things like macro expansion, 8407 trigraph conversion, escaped newline splicing, and processing of 8408 most directives. The preprocessor still recognizes and removes 8409 comments, so that you can pass a file preprocessed with `-C' to 8410 the compiler without problems. In this mode the integrated 8411 preprocessor is little more than a tokenizer for the front ends. 8412 8413 `-fpreprocessed' is implicit if the input file has one of the 8414 extensions `.i', `.ii' or `.mi'. These are the extensions that 8415 GCC uses for preprocessed files created by `-save-temps'. 8416 8417`-ftabstop=WIDTH' 8418 Set the distance between tab stops. This helps the preprocessor 8419 report correct column numbers in warnings or errors, even if tabs 8420 appear on the line. If the value is less than 1 or greater than 8421 100, the option is ignored. The default is 8. 8422 8423`-fexec-charset=CHARSET' 8424 Set the execution character set, used for string and character 8425 constants. The default is UTF-8. CHARSET can be any encoding 8426 supported by the system's `iconv' library routine. 8427 8428`-fwide-exec-charset=CHARSET' 8429 Set the wide execution character set, used for wide string and 8430 character constants. The default is UTF-32 or UTF-16, whichever 8431 corresponds to the width of `wchar_t'. As with `-fexec-charset', 8432 CHARSET can be any encoding supported by the system's `iconv' 8433 library routine; however, you will have problems with encodings 8434 that do not fit exactly in `wchar_t'. 8435 8436`-finput-charset=CHARSET' 8437 Set the input character set, used for translation from the 8438 character set of the input file to the source character set used 8439 by GCC. If the locale does not specify, or GCC cannot get this 8440 information from the locale, the default is UTF-8. This can be 8441 overridden by either the locale or this command line option. 8442 Currently the command line option takes precedence if there's a 8443 conflict. CHARSET can be any encoding supported by the system's 8444 `iconv' library routine. 8445 8446`-fworking-directory' 8447 Enable generation of linemarkers in the preprocessor output that 8448 will let the compiler know the current working directory at the 8449 time of preprocessing. When this option is enabled, the 8450 preprocessor will emit, after the initial linemarker, a second 8451 linemarker with the current working directory followed by two 8452 slashes. GCC will use this directory, when it's present in the 8453 preprocessed input, as the directory emitted as the current 8454 working directory in some debugging information formats. This 8455 option is implicitly enabled if debugging information is enabled, 8456 but this can be inhibited with the negated form 8457 `-fno-working-directory'. If the `-P' flag is present in the 8458 command line, this option has no effect, since no `#line' 8459 directives are emitted whatsoever. 8460 8461`-fno-show-column' 8462 Do not print column numbers in diagnostics. This may be necessary 8463 if diagnostics are being scanned by a program that does not 8464 understand the column numbers, such as `dejagnu'. 8465 8466`-A PREDICATE=ANSWER' 8467 Make an assertion with the predicate PREDICATE and answer ANSWER. 8468 This form is preferred to the older form `-A PREDICATE(ANSWER)', 8469 which is still supported, because it does not use shell special 8470 characters. 8471 8472`-A -PREDICATE=ANSWER' 8473 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 8474 8475`-dCHARS' 8476 CHARS is a sequence of one or more of the following characters, 8477 and must not be preceded by a space. Other characters are 8478 interpreted by the compiler proper, or reserved for future 8479 versions of GCC, and so are silently ignored. If you specify 8480 characters whose behavior conflicts, the result is undefined. 8481 8482 `M' 8483 Instead of the normal output, generate a list of `#define' 8484 directives for all the macros defined during the execution of 8485 the preprocessor, including predefined macros. This gives 8486 you a way of finding out what is predefined in your version 8487 of the preprocessor. Assuming you have no file `foo.h', the 8488 command 8489 8490 touch foo.h; cpp -dM foo.h 8491 8492 will show all the predefined macros. 8493 8494 If you use `-dM' without the `-E' option, `-dM' is 8495 interpreted as a synonym for `-fdump-rtl-mach'. *Note 8496 Debugging Options: (gcc)Debugging Options. 8497 8498 `D' 8499 Like `M' except in two respects: it does _not_ include the 8500 predefined macros, and it outputs _both_ the `#define' 8501 directives and the result of preprocessing. Both kinds of 8502 output go to the standard output file. 8503 8504 `N' 8505 Like `D', but emit only the macro names, not their expansions. 8506 8507 `I' 8508 Output `#include' directives in addition to the result of 8509 preprocessing. 8510 8511 `U' 8512 Like `D' except that only macros that are expanded, or whose 8513 definedness is tested in preprocessor directives, are output; 8514 the output is delayed until the use or test of the macro; and 8515 `#undef' directives are also output for macros tested but 8516 undefined at the time. 8517 8518`-P' 8519 Inhibit generation of linemarkers in the output from the 8520 preprocessor. This might be useful when running the preprocessor 8521 on something that is not C code, and will be sent to a program 8522 which might be confused by the linemarkers. 8523 8524`-C' 8525 Do not discard comments. All comments are passed through to the 8526 output file, except for comments in processed directives, which 8527 are deleted along with the directive. 8528 8529 You should be prepared for side effects when using `-C'; it causes 8530 the preprocessor to treat comments as tokens in their own right. 8531 For example, comments appearing at the start of what would be a 8532 directive line have the effect of turning that line into an 8533 ordinary source line, since the first token on the line is no 8534 longer a `#'. 8535 8536`-CC' 8537 Do not discard comments, including during macro expansion. This is 8538 like `-C', except that comments contained within macros are also 8539 passed through to the output file where the macro is expanded. 8540 8541 In addition to the side-effects of the `-C' option, the `-CC' 8542 option causes all C++-style comments inside a macro to be 8543 converted to C-style comments. This is to prevent later use of 8544 that macro from inadvertently commenting out the remainder of the 8545 source line. 8546 8547 The `-CC' option is generally used to support lint comments. 8548 8549`-traditional-cpp' 8550 Try to imitate the behavior of old-fashioned C preprocessors, as 8551 opposed to ISO C preprocessors. 8552 8553`-trigraphs' 8554 Process trigraph sequences. These are three-character sequences, 8555 all starting with `??', that are defined by ISO C to stand for 8556 single characters. For example, `??/' stands for `\', so `'??/n'' 8557 is a character constant for a newline. By default, GCC ignores 8558 trigraphs, but in standard-conforming modes it converts them. See 8559 the `-std' and `-ansi' options. 8560 8561 The nine trigraphs and their replacements are 8562 8563 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 8564 Replacement: [ ] { } # \ ^ | ~ 8565 8566`-remap' 8567 Enable special code to work around file systems which only permit 8568 very short file names, such as MS-DOS. 8569 8570`--help' 8571`--target-help' 8572 Print text describing all the command line options instead of 8573 preprocessing anything. 8574 8575`-v' 8576 Verbose mode. Print out GNU CPP's version number at the beginning 8577 of execution, and report the final form of the include path. 8578 8579`-H' 8580 Print the name of each header file used, in addition to other 8581 normal activities. Each name is indented to show how deep in the 8582 `#include' stack it is. Precompiled header files are also 8583 printed, even if they are found to be invalid; an invalid 8584 precompiled header file is printed with `...x' and a valid one 8585 with `...!' . 8586 8587`-version' 8588`--version' 8589 Print out GNU CPP's version number. With one dash, proceed to 8590 preprocess as normal. With two dashes, exit immediately. 8591 8592 8593File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 8594 85953.12 Passing Options to the Assembler 8596===================================== 8597 8598You can pass options to the assembler. 8599 8600`-Wa,OPTION' 8601 Pass OPTION as an option to the assembler. If OPTION contains 8602 commas, it is split into multiple options at the commas. 8603 8604`-Xassembler OPTION' 8605 Pass OPTION as an option to the assembler. You can use this to 8606 supply system-specific assembler options which GCC does not know 8607 how to recognize. 8608 8609 If you want to pass an option that takes an argument, you must use 8610 `-Xassembler' twice, once for the option and once for the argument. 8611 8612 8613 8614File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 8615 86163.13 Options for Linking 8617======================== 8618 8619These options come into play when the compiler links object files into 8620an executable output file. They are meaningless if the compiler is not 8621doing a link step. 8622 8623`OBJECT-FILE-NAME' 8624 A file name that does not end in a special recognized suffix is 8625 considered to name an object file or library. (Object files are 8626 distinguished from libraries by the linker according to the file 8627 contents.) If linking is done, these object files are used as 8628 input to the linker. 8629 8630`-c' 8631`-S' 8632`-E' 8633 If any of these options is used, then the linker is not run, and 8634 object file names should not be used as arguments. *Note Overall 8635 Options::. 8636 8637`-lLIBRARY' 8638`-l LIBRARY' 8639 Search the library named LIBRARY when linking. (The second 8640 alternative with the library as a separate argument is only for 8641 POSIX compliance and is not recommended.) 8642 8643 It makes a difference where in the command you write this option; 8644 the linker searches and processes libraries and object files in 8645 the order they are specified. Thus, `foo.o -lz bar.o' searches 8646 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 8647 refers to functions in `z', those functions may not be loaded. 8648 8649 The linker searches a standard list of directories for the library, 8650 which is actually a file named `libLIBRARY.a'. The linker then 8651 uses this file as if it had been specified precisely by name. 8652 8653 The directories searched include several standard system 8654 directories plus any that you specify with `-L'. 8655 8656 Normally the files found this way are library files--archive files 8657 whose members are object files. The linker handles an archive 8658 file by scanning through it for members which define symbols that 8659 have so far been referenced but not defined. But if the file that 8660 is found is an ordinary object file, it is linked in the usual 8661 fashion. The only difference between using an `-l' option and 8662 specifying a file name is that `-l' surrounds LIBRARY with `lib' 8663 and `.a' and searches several directories. 8664 8665`-lobjc' 8666 You need this special case of the `-l' option in order to link an 8667 Objective-C or Objective-C++ program. 8668 8669`-nostartfiles' 8670 Do not use the standard system startup files when linking. The 8671 standard system libraries are used normally, unless `-nostdlib' or 8672 `-nodefaultlibs' is used. 8673 8674`-nodefaultlibs' 8675 Do not use the standard system libraries when linking. Only the 8676 libraries you specify will be passed to the linker, options 8677 specifying linkage of the system libraries, such as 8678 `-static-libgcc' or `-shared-libgcc', will be ignored. The 8679 standard startup files are used normally, unless `-nostartfiles' 8680 is used. The compiler may generate calls to `memcmp', `memset', 8681 `memcpy' and `memmove'. These entries are usually resolved by 8682 entries in libc. These entry points should be supplied through 8683 some other mechanism when this option is specified. 8684 8685`-nostdlib' 8686 Do not use the standard system startup files or libraries when 8687 linking. No startup files and only the libraries you specify will 8688 be passed to the linker, options specifying linkage of the system 8689 libraries, such as `-static-libgcc' or `-shared-libgcc', will be 8690 ignored. The compiler may generate calls to `memcmp', `memset', 8691 `memcpy' and `memmove'. These entries are usually resolved by 8692 entries in libc. These entry points should be supplied through 8693 some other mechanism when this option is specified. 8694 8695 One of the standard libraries bypassed by `-nostdlib' and 8696 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 8697 that GCC uses to overcome shortcomings of particular machines, or 8698 special needs for some languages. (*Note Interfacing to GCC 8699 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 8700 most cases, you need `libgcc.a' even when you want to avoid other 8701 standard libraries. In other words, when you specify `-nostdlib' 8702 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 8703 This ensures that you have no unresolved references to internal GCC 8704 library subroutines. (For example, `__main', used to ensure C++ 8705 constructors will be called; *note `collect2': (gccint)Collect2.) 8706 8707`-pie' 8708 Produce a position independent executable on targets which support 8709 it. For predictable results, you must also specify the same set 8710 of options that were used to generate code (`-fpie', `-fPIE', or 8711 model suboptions) when you specify this option. 8712 8713`-rdynamic' 8714 Pass the flag `-export-dynamic' to the ELF linker, on targets that 8715 support it. This instructs the linker to add all symbols, not only 8716 used ones, to the dynamic symbol table. This option is needed for 8717 some uses of `dlopen' or to allow obtaining backtraces from within 8718 a program. 8719 8720`-s' 8721 Remove all symbol table and relocation information from the 8722 executable. 8723 8724`-static' 8725 On systems that support dynamic linking, this prevents linking 8726 with the shared libraries. On other systems, this option has no 8727 effect. 8728 8729`-shared' 8730 Produce a shared object which can then be linked with other 8731 objects to form an executable. Not all systems support this 8732 option. For predictable results, you must also specify the same 8733 set of options that were used to generate code (`-fpic', `-fPIC', 8734 or model suboptions) when you specify this option.(1) 8735 8736`-shared-libgcc' 8737`-static-libgcc' 8738 On systems that provide `libgcc' as a shared library, these options 8739 force the use of either the shared or static version respectively. 8740 If no shared version of `libgcc' was built when the compiler was 8741 configured, these options have no effect. 8742 8743 There are several situations in which an application should use the 8744 shared `libgcc' instead of the static version. The most common of 8745 these is when the application wishes to throw and catch exceptions 8746 across different shared libraries. In that case, each of the 8747 libraries as well as the application itself should use the shared 8748 `libgcc'. 8749 8750 Therefore, the G++ and GCJ drivers automatically add 8751 `-shared-libgcc' whenever you build a shared library or a main 8752 executable, because C++ and Java programs typically use 8753 exceptions, so this is the right thing to do. 8754 8755 If, instead, you use the GCC driver to create shared libraries, 8756 you may find that they will not always be linked with the shared 8757 `libgcc'. If GCC finds, at its configuration time, that you have 8758 a non-GNU linker or a GNU linker that does not support option 8759 `--eh-frame-hdr', it will link the shared version of `libgcc' into 8760 shared libraries by default. Otherwise, it will take advantage of 8761 the linker and optimize away the linking with the shared version 8762 of `libgcc', linking with the static version of libgcc by default. 8763 This allows exceptions to propagate through such shared libraries, 8764 without incurring relocation costs at library load time. 8765 8766 However, if a library or main executable is supposed to throw or 8767 catch exceptions, you must link it using the G++ or GCJ driver, as 8768 appropriate for the languages used in the program, or using the 8769 option `-shared-libgcc', such that it is linked with the shared 8770 `libgcc'. 8771 8772`-static-libstdc++' 8773 When the `g++' program is used to link a C++ program, it will 8774 normally automatically link against `libstdc++'. If `libstdc++' 8775 is available as a shared library, and the `-static' option is not 8776 used, then this will link against the shared version of 8777 `libstdc++'. That is normally fine. However, it is sometimes 8778 useful to freeze the version of `libstdc++' used by the program 8779 without going all the way to a fully static link. The 8780 `-static-libstdc++' option directs the `g++' driver to link 8781 `libstdc++' statically, without necessarily linking other 8782 libraries statically. 8783 8784`-symbolic' 8785 Bind references to global symbols when building a shared object. 8786 Warn about any unresolved references (unless overridden by the 8787 link editor option `-Xlinker -z -Xlinker defs'). Only a few 8788 systems support this option. 8789 8790`-T SCRIPT' 8791 Use SCRIPT as the linker script. This option is supported by most 8792 systems using the GNU linker. On some targets, such as bare-board 8793 targets without an operating system, the `-T' option may be 8794 required when linking to avoid references to undefined symbols. 8795 8796`-Xlinker OPTION' 8797 Pass OPTION as an option to the linker. You can use this to 8798 supply system-specific linker options which GCC does not know how 8799 to recognize. 8800 8801 If you want to pass an option that takes a separate argument, you 8802 must use `-Xlinker' twice, once for the option and once for the 8803 argument. For example, to pass `-assert definitions', you must 8804 write `-Xlinker -assert -Xlinker definitions'. It does not work 8805 to write `-Xlinker "-assert definitions"', because this passes the 8806 entire string as a single argument, which is not what the linker 8807 expects. 8808 8809 When using the GNU linker, it is usually more convenient to pass 8810 arguments to linker options using the `OPTION=VALUE' syntax than 8811 as separate arguments. For example, you can specify `-Xlinker 8812 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 8813 Other linkers may not support this syntax for command-line options. 8814 8815`-Wl,OPTION' 8816 Pass OPTION as an option to the linker. If OPTION contains 8817 commas, it is split into multiple options at the commas. You can 8818 use this syntax to pass an argument to the option. For example, 8819 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 8820 When using the GNU linker, you can also get the same effect with 8821 `-Wl,-Map=output.map'. 8822 8823`-u SYMBOL' 8824 Pretend the symbol SYMBOL is undefined, to force linking of 8825 library modules to define it. You can use `-u' multiple times with 8826 different symbols to force loading of additional library modules. 8827 8828 ---------- Footnotes ---------- 8829 8830 (1) On some systems, `gcc -shared' needs to build supplementary stub 8831code for constructors to work. On multi-libbed systems, `gcc -shared' 8832must select the correct support libraries to link against. Failing to 8833supply the correct flags may lead to subtle defects. Supplying them in 8834cases where they are not necessary is innocuous. 8835 8836 8837File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 8838 88393.14 Options for Directory Search 8840================================= 8841 8842These options specify directories to search for header files, for 8843libraries and for parts of the compiler: 8844 8845`-IDIR' 8846 Add the directory DIR to the head of the list of directories to be 8847 searched for header files. This can be used to override a system 8848 header file, substituting your own version, since these 8849 directories are searched before the system header file 8850 directories. However, you should not use this option to add 8851 directories that contain vendor-supplied system header files (use 8852 `-isystem' for that). If you use more than one `-I' option, the 8853 directories are scanned in left-to-right order; the standard 8854 system directories come after. 8855 8856 If a standard system include directory, or a directory specified 8857 with `-isystem', is also specified with `-I', the `-I' option will 8858 be ignored. The directory will still be searched but as a system 8859 directory at its normal position in the system include chain. 8860 This is to ensure that GCC's procedure to fix buggy system headers 8861 and the ordering for the include_next directive are not 8862 inadvertently changed. If you really need to change the search 8863 order for system directories, use the `-nostdinc' and/or 8864 `-isystem' options. 8865 8866`-iquoteDIR' 8867 Add the directory DIR to the head of the list of directories to be 8868 searched for header files only for the case of `#include "FILE"'; 8869 they are not searched for `#include <FILE>', otherwise just like 8870 `-I'. 8871 8872`-LDIR' 8873 Add directory DIR to the list of directories to be searched for 8874 `-l'. 8875 8876`-BPREFIX' 8877 This option specifies where to find the executables, libraries, 8878 include files, and data files of the compiler itself. 8879 8880 The compiler driver program runs one or more of the subprograms 8881 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 8882 program it tries to run, both with and without `MACHINE/VERSION/' 8883 (*note Target Options::). 8884 8885 For each subprogram to be run, the compiler driver first tries the 8886 `-B' prefix, if any. If that name is not found, or if `-B' was 8887 not specified, the driver tries two standard prefixes, which are 8888 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 8889 results in a file name that is found, the unmodified program name 8890 is searched for using the directories specified in your `PATH' 8891 environment variable. 8892 8893 The compiler will check to see if the path provided by the `-B' 8894 refers to a directory, and if necessary it will add a directory 8895 separator character at the end of the path. 8896 8897 `-B' prefixes that effectively specify directory names also apply 8898 to libraries in the linker, because the compiler translates these 8899 options into `-L' options for the linker. They also apply to 8900 includes files in the preprocessor, because the compiler 8901 translates these options into `-isystem' options for the 8902 preprocessor. In this case, the compiler appends `include' to the 8903 prefix. 8904 8905 The run-time support file `libgcc.a' can also be searched for using 8906 the `-B' prefix, if needed. If it is not found there, the two 8907 standard prefixes above are tried, and that is all. The file is 8908 left out of the link if it is not found by those means. 8909 8910 Another way to specify a prefix much like the `-B' prefix is to use 8911 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 8912 Variables::. 8913 8914 As a special kludge, if the path provided by `-B' is 8915 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 8916 will be replaced by `[dir/]include'. This is to help with 8917 boot-strapping the compiler. 8918 8919`-specs=FILE' 8920 Process FILE after the compiler reads in the standard `specs' 8921 file, in order to override the defaults that the `gcc' driver 8922 program uses when determining what switches to pass to `cc1', 8923 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 8924 specified on the command line, and they are processed in order, 8925 from left to right. 8926 8927`--sysroot=DIR' 8928 Use DIR as the logical root directory for headers and libraries. 8929 For example, if the compiler would normally search for headers in 8930 `/usr/include' and libraries in `/usr/lib', it will instead search 8931 `DIR/usr/include' and `DIR/usr/lib'. 8932 8933 If you use both this option and the `-isysroot' option, then the 8934 `--sysroot' option will apply to libraries, but the `-isysroot' 8935 option will apply to header files. 8936 8937 The GNU linker (beginning with version 2.16) has the necessary 8938 support for this option. If your linker does not support this 8939 option, the header file aspect of `--sysroot' will still work, but 8940 the library aspect will not. 8941 8942`-I-' 8943 This option has been deprecated. Please use `-iquote' instead for 8944 `-I' directories before the `-I-' and remove the `-I-'. Any 8945 directories you specify with `-I' options before the `-I-' option 8946 are searched only for the case of `#include "FILE"'; they are not 8947 searched for `#include <FILE>'. 8948 8949 If additional directories are specified with `-I' options after 8950 the `-I-', these directories are searched for all `#include' 8951 directives. (Ordinarily _all_ `-I' directories are used this way.) 8952 8953 In addition, the `-I-' option inhibits the use of the current 8954 directory (where the current input file came from) as the first 8955 search directory for `#include "FILE"'. There is no way to 8956 override this effect of `-I-'. With `-I.' you can specify 8957 searching the directory which was current when the compiler was 8958 invoked. That is not exactly the same as what the preprocessor 8959 does by default, but it is often satisfactory. 8960 8961 `-I-' does not inhibit the use of the standard system directories 8962 for header files. Thus, `-I-' and `-nostdinc' are independent. 8963 8964 8965File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 8966 89673.15 Specifying subprocesses and the switches to pass to them 8968============================================================= 8969 8970`gcc' is a driver program. It performs its job by invoking a sequence 8971of other programs to do the work of compiling, assembling and linking. 8972GCC interprets its command-line parameters and uses these to deduce 8973which programs it should invoke, and which command-line options it 8974ought to place on their command lines. This behavior is controlled by 8975"spec strings". In most cases there is one spec string for each 8976program that GCC can invoke, but a few programs have multiple spec 8977strings to control their behavior. The spec strings built into GCC can 8978be overridden by using the `-specs=' command-line switch to specify a 8979spec file. 8980 8981 "Spec files" are plaintext files that are used to construct spec 8982strings. They consist of a sequence of directives separated by blank 8983lines. The type of directive is determined by the first non-whitespace 8984character on the line and it can be one of the following: 8985 8986`%COMMAND' 8987 Issues a COMMAND to the spec file processor. The commands that can 8988 appear here are: 8989 8990 `%include <FILE>' 8991 Search for FILE and insert its text at the current point in 8992 the specs file. 8993 8994 `%include_noerr <FILE>' 8995 Just like `%include', but do not generate an error message if 8996 the include file cannot be found. 8997 8998 `%rename OLD_NAME NEW_NAME' 8999 Rename the spec string OLD_NAME to NEW_NAME. 9000 9001 9002`*[SPEC_NAME]:' 9003 This tells the compiler to create, override or delete the named 9004 spec string. All lines after this directive up to the next 9005 directive or blank line are considered to be the text for the spec 9006 string. If this results in an empty string then the spec will be 9007 deleted. (Or, if the spec did not exist, then nothing will 9008 happened.) Otherwise, if the spec does not currently exist a new 9009 spec will be created. If the spec does exist then its contents 9010 will be overridden by the text of this directive, unless the first 9011 character of that text is the `+' character, in which case the 9012 text will be appended to the spec. 9013 9014`[SUFFIX]:' 9015 Creates a new `[SUFFIX] spec' pair. All lines after this directive 9016 and up to the next directive or blank line are considered to make 9017 up the spec string for the indicated suffix. When the compiler 9018 encounters an input file with the named suffix, it will processes 9019 the spec string in order to work out how to compile that file. 9020 For example: 9021 9022 .ZZ: 9023 z-compile -input %i 9024 9025 This says that any input file whose name ends in `.ZZ' should be 9026 passed to the program `z-compile', which should be invoked with the 9027 command-line switch `-input' and with the result of performing the 9028 `%i' substitution. (See below.) 9029 9030 As an alternative to providing a spec string, the text that 9031 follows a suffix directive can be one of the following: 9032 9033 `@LANGUAGE' 9034 This says that the suffix is an alias for a known LANGUAGE. 9035 This is similar to using the `-x' command-line switch to GCC 9036 to specify a language explicitly. For example: 9037 9038 .ZZ: 9039 @c++ 9040 9041 Says that .ZZ files are, in fact, C++ source files. 9042 9043 `#NAME' 9044 This causes an error messages saying: 9045 9046 NAME compiler not installed on this system. 9047 9048 GCC already has an extensive list of suffixes built into it. This 9049 directive will add an entry to the end of the list of suffixes, but 9050 since the list is searched from the end backwards, it is 9051 effectively possible to override earlier entries using this 9052 technique. 9053 9054 9055 GCC has the following spec strings built into it. Spec files can 9056override these strings or create their own. Note that individual 9057targets can also add their own spec strings to this list. 9058 9059 asm Options to pass to the assembler 9060 asm_final Options to pass to the assembler post-processor 9061 cpp Options to pass to the C preprocessor 9062 cc1 Options to pass to the C compiler 9063 cc1plus Options to pass to the C++ compiler 9064 endfile Object files to include at the end of the link 9065 link Options to pass to the linker 9066 lib Libraries to include on the command line to the linker 9067 libgcc Decides which GCC support library to pass to the linker 9068 linker Sets the name of the linker 9069 predefines Defines to be passed to the C preprocessor 9070 signed_char Defines to pass to CPP to say whether `char' is signed 9071 by default 9072 startfile Object files to include at the start of the link 9073 9074 Here is a small example of a spec file: 9075 9076 %rename lib old_lib 9077 9078 *lib: 9079 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 9080 9081 This example renames the spec called `lib' to `old_lib' and then 9082overrides the previous definition of `lib' with a new one. The new 9083definition adds in some extra command-line options before including the 9084text of the old definition. 9085 9086 "Spec strings" are a list of command-line options to be passed to their 9087corresponding program. In addition, the spec strings can contain 9088`%'-prefixed sequences to substitute variable text or to conditionally 9089insert text into the command line. Using these constructs it is 9090possible to generate quite complex command lines. 9091 9092 Here is a table of all defined `%'-sequences for spec strings. Note 9093that spaces are not generated automatically around the results of 9094expanding these sequences. Therefore you can concatenate them together 9095or combine them with constant text in a single argument. 9096 9097`%%' 9098 Substitute one `%' into the program name or argument. 9099 9100`%i' 9101 Substitute the name of the input file being processed. 9102 9103`%b' 9104 Substitute the basename of the input file being processed. This 9105 is the substring up to (and not including) the last period and not 9106 including the directory. 9107 9108`%B' 9109 This is the same as `%b', but include the file suffix (text after 9110 the last period). 9111 9112`%d' 9113 Marks the argument containing or following the `%d' as a temporary 9114 file name, so that that file will be deleted if GCC exits 9115 successfully. Unlike `%g', this contributes no text to the 9116 argument. 9117 9118`%gSUFFIX' 9119 Substitute a file name that has suffix SUFFIX and is chosen once 9120 per compilation, and mark the argument in the same way as `%d'. 9121 To reduce exposure to denial-of-service attacks, the file name is 9122 now chosen in a way that is hard to predict even when previously 9123 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 9124 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 9125 matches the regexp `[.A-Za-z]*' or the special string `%O', which 9126 is treated exactly as if `%O' had been preprocessed. Previously, 9127 `%g' was simply substituted with a file name chosen once per 9128 compilation, without regard to any appended suffix (which was 9129 therefore treated just like ordinary text), making such attacks 9130 more likely to succeed. 9131 9132`%uSUFFIX' 9133 Like `%g', but generates a new temporary file name even if 9134 `%uSUFFIX' was already seen. 9135 9136`%USUFFIX' 9137 Substitutes the last file name generated with `%uSUFFIX', 9138 generating a new one if there is no such last file name. In the 9139 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 9140 they don't share the same suffix _space_, so `%g.s ... %U.s ... 9141 %g.s ... %U.s' would involve the generation of two distinct file 9142 names, one for each `%g.s' and another for each `%U.s'. 9143 Previously, `%U' was simply substituted with a file name chosen 9144 for the previous `%u', without regard to any appended suffix. 9145 9146`%jSUFFIX' 9147 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 9148 writable, and if save-temps is off; otherwise, substitute the name 9149 of a temporary file, just like `%u'. This temporary file is not 9150 meant for communication between processes, but rather as a junk 9151 disposal mechanism. 9152 9153`%|SUFFIX' 9154`%mSUFFIX' 9155 Like `%g', except if `-pipe' is in effect. In that case `%|' 9156 substitutes a single dash and `%m' substitutes nothing at all. 9157 These are the two most common ways to instruct a program that it 9158 should read from standard input or write to standard output. If 9159 you need something more elaborate you can use an `%{pipe:`X'}' 9160 construct: see for example `f/lang-specs.h'. 9161 9162`%.SUFFIX' 9163 Substitutes .SUFFIX for the suffixes of a matched switch's args 9164 when it is subsequently output with `%*'. SUFFIX is terminated by 9165 the next space or %. 9166 9167`%w' 9168 Marks the argument containing or following the `%w' as the 9169 designated output file of this compilation. This puts the argument 9170 into the sequence of arguments that `%o' will substitute later. 9171 9172`%o' 9173 Substitutes the names of all the output files, with spaces 9174 automatically placed around them. You should write spaces around 9175 the `%o' as well or the results are undefined. `%o' is for use in 9176 the specs for running the linker. Input files whose names have no 9177 recognized suffix are not compiled at all, but they are included 9178 among the output files, so they will be linked. 9179 9180`%O' 9181 Substitutes the suffix for object files. Note that this is 9182 handled specially when it immediately follows `%g, %u, or %U', 9183 because of the need for those to form complete file names. The 9184 handling is such that `%O' is treated exactly as if it had already 9185 been substituted, except that `%g, %u, and %U' do not currently 9186 support additional SUFFIX characters following `%O' as they would 9187 following, for example, `.o'. 9188 9189`%p' 9190 Substitutes the standard macro predefinitions for the current 9191 target machine. Use this when running `cpp'. 9192 9193`%P' 9194 Like `%p', but puts `__' before and after the name of each 9195 predefined macro, except for macros that start with `__' or with 9196 `_L', where L is an uppercase letter. This is for ISO C. 9197 9198`%I' 9199 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 9200 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 9201 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 9202 necessary. 9203 9204`%s' 9205 Current argument is the name of a library or startup file of some 9206 sort. Search for that file in a standard list of directories and 9207 substitute the full name found. The current working directory is 9208 included in the list of directories scanned. 9209 9210`%T' 9211 Current argument is the name of a linker script. Search for that 9212 file in the current list of directories to scan for libraries. If 9213 the file is located insert a `--script' option into the command 9214 line followed by the full path name found. If the file is not 9215 found then generate an error message. Note: the current working 9216 directory is not searched. 9217 9218`%eSTR' 9219 Print STR as an error message. STR is terminated by a newline. 9220 Use this when inconsistent options are detected. 9221 9222`%(NAME)' 9223 Substitute the contents of spec string NAME at this point. 9224 9225`%[NAME]' 9226 Like `%(...)' but put `__' around `-D' arguments. 9227 9228`%x{OPTION}' 9229 Accumulate an option for `%X'. 9230 9231`%X' 9232 Output the accumulated linker options specified by `-Wl' or a `%x' 9233 spec string. 9234 9235`%Y' 9236 Output the accumulated assembler options specified by `-Wa'. 9237 9238`%Z' 9239 Output the accumulated preprocessor options specified by `-Wp'. 9240 9241`%a' 9242 Process the `asm' spec. This is used to compute the switches to 9243 be passed to the assembler. 9244 9245`%A' 9246 Process the `asm_final' spec. This is a spec string for passing 9247 switches to an assembler post-processor, if such a program is 9248 needed. 9249 9250`%l' 9251 Process the `link' spec. This is the spec for computing the 9252 command line passed to the linker. Typically it will make use of 9253 the `%L %G %S %D and %E' sequences. 9254 9255`%D' 9256 Dump out a `-L' option for each directory that GCC believes might 9257 contain startup files. If the target supports multilibs then the 9258 current multilib directory will be prepended to each of these 9259 paths. 9260 9261`%L' 9262 Process the `lib' spec. This is a spec string for deciding which 9263 libraries should be included on the command line to the linker. 9264 9265`%G' 9266 Process the `libgcc' spec. This is a spec string for deciding 9267 which GCC support library should be included on the command line 9268 to the linker. 9269 9270`%S' 9271 Process the `startfile' spec. This is a spec for deciding which 9272 object files should be the first ones passed to the linker. 9273 Typically this might be a file named `crt0.o'. 9274 9275`%E' 9276 Process the `endfile' spec. This is a spec string that specifies 9277 the last object files that will be passed to the linker. 9278 9279`%C' 9280 Process the `cpp' spec. This is used to construct the arguments 9281 to be passed to the C preprocessor. 9282 9283`%1' 9284 Process the `cc1' spec. This is used to construct the options to 9285 be passed to the actual C compiler (`cc1'). 9286 9287`%2' 9288 Process the `cc1plus' spec. This is used to construct the options 9289 to be passed to the actual C++ compiler (`cc1plus'). 9290 9291`%*' 9292 Substitute the variable part of a matched option. See below. 9293 Note that each comma in the substituted string is replaced by a 9294 single space. 9295 9296`%<`S'' 9297 Remove all occurrences of `-S' from the command line. Note--this 9298 command is position dependent. `%' commands in the spec string 9299 before this one will see `-S', `%' commands in the spec string 9300 after this one will not. 9301 9302`%:FUNCTION(ARGS)' 9303 Call the named function FUNCTION, passing it ARGS. ARGS is first 9304 processed as a nested spec string, then split into an argument 9305 vector in the usual fashion. The function returns a string which 9306 is processed as if it had appeared literally as part of the 9307 current spec. 9308 9309 The following built-in spec functions are provided: 9310 9311 ``getenv'' 9312 The `getenv' spec function takes two arguments: an environment 9313 variable name and a string. If the environment variable is 9314 not defined, a fatal error is issued. Otherwise, the return 9315 value is the value of the environment variable concatenated 9316 with the string. For example, if `TOPDIR' is defined as 9317 `/path/to/top', then: 9318 9319 %:getenv(TOPDIR /include) 9320 9321 expands to `/path/to/top/include'. 9322 9323 ``if-exists'' 9324 The `if-exists' spec function takes one argument, an absolute 9325 pathname to a file. If the file exists, `if-exists' returns 9326 the pathname. Here is a small example of its usage: 9327 9328 *startfile: 9329 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 9330 9331 ``if-exists-else'' 9332 The `if-exists-else' spec function is similar to the 9333 `if-exists' spec function, except that it takes two 9334 arguments. The first argument is an absolute pathname to a 9335 file. If the file exists, `if-exists-else' returns the 9336 pathname. If it does not exist, it returns the second 9337 argument. This way, `if-exists-else' can be used to select 9338 one file or another, based on the existence of the first. 9339 Here is a small example of its usage: 9340 9341 *startfile: 9342 crt0%O%s %:if-exists(crti%O%s) \ 9343 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 9344 9345 ``replace-outfile'' 9346 The `replace-outfile' spec function takes two arguments. It 9347 looks for the first argument in the outfiles array and 9348 replaces it with the second argument. Here is a small 9349 example of its usage: 9350 9351 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 9352 9353 ``print-asm-header'' 9354 The `print-asm-header' function takes no arguments and simply 9355 prints a banner like: 9356 9357 Assembler options 9358 ================= 9359 9360 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 9361 9362 It is used to separate compiler options from assembler options 9363 in the `--target-help' output. 9364 9365`%{`S'}' 9366 Substitutes the `-S' switch, if that switch was given to GCC. If 9367 that switch was not specified, this substitutes nothing. Note that 9368 the leading dash is omitted when specifying this option, and it is 9369 automatically inserted if the substitution is performed. Thus the 9370 spec string `%{foo}' would match the command-line option `-foo' 9371 and would output the command line option `-foo'. 9372 9373`%W{`S'}' 9374 Like %{`S'} but mark last argument supplied within as a file to be 9375 deleted on failure. 9376 9377`%{`S'*}' 9378 Substitutes all the switches specified to GCC whose names start 9379 with `-S', but which also take an argument. This is used for 9380 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 9381 being one switch whose names starts with `o'. %{o*} would 9382 substitute this text, including the space. Thus two arguments 9383 would be generated. 9384 9385`%{`S'*&`T'*}' 9386 Like %{`S'*}, but preserve order of `S' and `T' options (the order 9387 of `S' and `T' in the spec is not significant). There can be any 9388 number of ampersand-separated variables; for each the wild card is 9389 optional. Useful for CPP as `%{D*&U*&A*}'. 9390 9391`%{`S':`X'}' 9392 Substitutes `X', if the `-S' switch was given to GCC. 9393 9394`%{!`S':`X'}' 9395 Substitutes `X', if the `-S' switch was _not_ given to GCC. 9396 9397`%{`S'*:`X'}' 9398 Substitutes `X' if one or more switches whose names start with 9399 `-S' are specified to GCC. Normally `X' is substituted only once, 9400 no matter how many such switches appeared. However, if `%*' 9401 appears somewhere in `X', then `X' will be substituted once for 9402 each matching switch, with the `%*' replaced by the part of that 9403 switch that matched the `*'. 9404 9405`%{.`S':`X'}' 9406 Substitutes `X', if processing a file with suffix `S'. 9407 9408`%{!.`S':`X'}' 9409 Substitutes `X', if _not_ processing a file with suffix `S'. 9410 9411`%{,`S':`X'}' 9412 Substitutes `X', if processing a file for language `S'. 9413 9414`%{!,`S':`X'}' 9415 Substitutes `X', if not processing a file for language `S'. 9416 9417`%{`S'|`P':`X'}' 9418 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 9419 be combined with `!', `.', `,', and `*' sequences as well, 9420 although they have a stronger binding than the `|'. If `%*' 9421 appears in `X', all of the alternatives must be starred, and only 9422 the first matching alternative is substituted. 9423 9424 For example, a spec string like this: 9425 9426 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 9427 9428 will output the following command-line options from the following 9429 input command-line options: 9430 9431 fred.c -foo -baz 9432 jim.d -bar -boggle 9433 -d fred.c -foo -baz -boggle 9434 -d jim.d -bar -baz -boggle 9435 9436`%{S:X; T:Y; :D}' 9437 If `S' was given to GCC, substitutes `X'; else if `T' was given to 9438 GCC, substitutes `Y'; else substitutes `D'. There can be as many 9439 clauses as you need. This may be combined with `.', `,', `!', 9440 `|', and `*' as needed. 9441 9442 9443 The conditional text `X' in a %{`S':`X'} or similar construct may 9444contain other nested `%' constructs or spaces, or even newlines. They 9445are processed as usual, as described above. Trailing white space in 9446`X' is ignored. White space may also appear anywhere on the left side 9447of the colon in these constructs, except between `.' or `*' and the 9448corresponding word. 9449 9450 The `-O', `-f', `-m', and `-W' switches are handled specifically in 9451these constructs. If another value of `-O' or the negated form of a 9452`-f', `-m', or `-W' switch is found later in the command line, the 9453earlier switch value is ignored, except with {`S'*} where `S' is just 9454one letter, which passes all matching options. 9455 9456 The character `|' at the beginning of the predicate text is used to 9457indicate that a command should be piped to the following command, but 9458only if `-pipe' is specified. 9459 9460 It is built into GCC which switches take arguments and which do not. 9461(You might think it would be useful to generalize this to allow each 9462compiler's spec to say which switches take arguments. But this cannot 9463be done in a consistent fashion. GCC cannot even decide which input 9464files have been specified without knowing which switches take arguments, 9465and it must know which input files to compile in order to tell which 9466compilers to run). 9467 9468 GCC also knows implicitly that arguments starting in `-l' are to be 9469treated as compiler output files, and passed to the linker in their 9470proper position among the other output files. 9471 9472 9473File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 9474 94753.16 Specifying Target Machine and Compiler Version 9476=================================================== 9477 9478The usual way to run GCC is to run the executable called `gcc', or 9479`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 9480run a version other than the one that was installed last. Sometimes 9481this is inconvenient, so GCC provides options that will switch to 9482another cross-compiler or version. 9483 9484`-b MACHINE' 9485 The argument MACHINE specifies the target machine for compilation. 9486 9487 The value to use for MACHINE is the same as was specified as the 9488 machine type when configuring GCC as a cross-compiler. For 9489 example, if a cross-compiler was configured with `configure 9490 arm-elf', meaning to compile for an arm processor with elf 9491 binaries, then you would specify `-b arm-elf' to run that cross 9492 compiler. Because there are other options beginning with `-b', the 9493 configuration must contain a hyphen, or `-b' alone should be one 9494 argument followed by the configuration in the next argument. 9495 9496`-V VERSION' 9497 The argument VERSION specifies which version of GCC to run. This 9498 is useful when multiple versions are installed. For example, 9499 VERSION might be `4.0', meaning to run GCC version 4.0. 9500 9501 The `-V' and `-b' options work by running the 9502`<machine>-gcc-<version>' executable, so there's no real reason to use 9503them if you can just run that directly. 9504 9505 9506File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 9507 95083.17 Hardware Models and Configurations 9509======================================= 9510 9511Earlier we discussed the standard option `-b' which chooses among 9512different installed compilers for completely different target machines, 9513such as VAX vs. 68000 vs. 80386. 9514 9515 In addition, each of these target machine types can have its own 9516special options, starting with `-m', to choose among various hardware 9517models or configurations--for example, 68010 vs 68020, floating 9518coprocessor or none. A single installed version of the compiler can 9519compile for any model or configuration, according to the options 9520specified. 9521 9522 Some configurations of the compiler also support additional special 9523options, usually for compatibility with other compilers on the same 9524platform. 9525 9526* Menu: 9527 9528* ARC Options:: 9529* ARM Options:: 9530* AVR Options:: 9531* Blackfin Options:: 9532* CRIS Options:: 9533* CRX Options:: 9534* Darwin Options:: 9535* DEC Alpha Options:: 9536* DEC Alpha/VMS Options:: 9537* FR30 Options:: 9538* FRV Options:: 9539* GNU/Linux Options:: 9540* H8/300 Options:: 9541* HPPA Options:: 9542* i386 and x86-64 Options:: 9543* i386 and x86-64 Windows Options:: 9544* IA-64 Options:: 9545* IA-64/VMS Options:: 9546* LM32 Options:: 9547* M32C Options:: 9548* M32R/D Options:: 9549* M680x0 Options:: 9550* M68hc1x Options:: 9551* MCore Options:: 9552* MeP Options:: 9553* MIPS Options:: 9554* MMIX Options:: 9555* MN10300 Options:: 9556* PDP-11 Options:: 9557* picoChip Options:: 9558* PowerPC Options:: 9559* RS/6000 and PowerPC Options:: 9560* RX Options:: 9561* S/390 and zSeries Options:: 9562* Score Options:: 9563* SH Options:: 9564* SPARC Options:: 9565* SPU Options:: 9566* System V Options:: 9567* V850 Options:: 9568* VAX Options:: 9569* VxWorks Options:: 9570* x86-64 Options:: 9571* Xstormy16 Options:: 9572* Xtensa Options:: 9573* zSeries Options:: 9574 9575 9576File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 9577 95783.17.1 ARC Options 9579------------------ 9580 9581These options are defined for ARC implementations: 9582 9583`-EL' 9584 Compile code for little endian mode. This is the default. 9585 9586`-EB' 9587 Compile code for big endian mode. 9588 9589`-mmangle-cpu' 9590 Prepend the name of the CPU to all public symbol names. In 9591 multiple-processor systems, there are many ARC variants with 9592 different instruction and register set characteristics. This flag 9593 prevents code compiled for one CPU to be linked with code compiled 9594 for another. No facility exists for handling variants that are 9595 "almost identical". This is an all or nothing option. 9596 9597`-mcpu=CPU' 9598 Compile code for ARC variant CPU. Which variants are supported 9599 depend on the configuration. All variants support `-mcpu=base', 9600 this is the default. 9601 9602`-mtext=TEXT-SECTION' 9603`-mdata=DATA-SECTION' 9604`-mrodata=READONLY-DATA-SECTION' 9605 Put functions, data, and readonly data in TEXT-SECTION, 9606 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 9607 This can be overridden with the `section' attribute. *Note 9608 Variable Attributes::. 9609 9610`-mfix-cortex-m3-ldrd' 9611 Some Cortex-M3 cores can cause data corruption when `ldrd' 9612 instructions with overlapping destination and base registers are 9613 used. This option avoids generating these instructions. This 9614 option is enabled by default when `-mcpu=cortex-m3' is specified. 9615 9616 9617 9618File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 9619 96203.17.2 ARM Options 9621------------------ 9622 9623These `-m' options are defined for Advanced RISC Machines (ARM) 9624architectures: 9625 9626`-mabi=NAME' 9627 Generate code for the specified ABI. Permissible values are: 9628 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 9629 9630`-mapcs-frame' 9631 Generate a stack frame that is compliant with the ARM Procedure 9632 Call Standard for all functions, even if this is not strictly 9633 necessary for correct execution of the code. Specifying 9634 `-fomit-frame-pointer' with this option will cause the stack 9635 frames not to be generated for leaf functions. The default is 9636 `-mno-apcs-frame'. 9637 9638`-mapcs' 9639 This is a synonym for `-mapcs-frame'. 9640 9641`-mthumb-interwork' 9642 Generate code which supports calling between the ARM and Thumb 9643 instruction sets. Without this option the two instruction sets 9644 cannot be reliably used inside one program. The default is 9645 `-mno-thumb-interwork', since slightly larger code is generated 9646 when `-mthumb-interwork' is specified. 9647 9648`-mno-sched-prolog' 9649 Prevent the reordering of instructions in the function prolog, or 9650 the merging of those instruction with the instructions in the 9651 function's body. This means that all functions will start with a 9652 recognizable set of instructions (or in fact one of a choice from 9653 a small set of different function prologues), and this information 9654 can be used to locate the start if functions inside an executable 9655 piece of code. The default is `-msched-prolog'. 9656 9657`-mfloat-abi=NAME' 9658 Specifies which floating-point ABI to use. Permissible values 9659 are: `soft', `softfp' and `hard'. 9660 9661 Specifying `soft' causes GCC to generate output containing library 9662 calls for floating-point operations. `softfp' allows the 9663 generation of code using hardware floating-point instructions, but 9664 still uses the soft-float calling conventions. `hard' allows 9665 generation of floating-point instructions and uses FPU-specific 9666 calling conventions. 9667 9668 The default depends on the specific target configuration. Note 9669 that the hard-float and soft-float ABIs are not link-compatible; 9670 you must compile your entire program with the same ABI, and link 9671 with a compatible set of libraries. 9672 9673`-mhard-float' 9674 Equivalent to `-mfloat-abi=hard'. 9675 9676`-msoft-float' 9677 Equivalent to `-mfloat-abi=soft'. 9678 9679`-mlittle-endian' 9680 Generate code for a processor running in little-endian mode. This 9681 is the default for all standard configurations. 9682 9683`-mbig-endian' 9684 Generate code for a processor running in big-endian mode; the 9685 default is to compile code for a little-endian processor. 9686 9687`-mwords-little-endian' 9688 This option only applies when generating code for big-endian 9689 processors. Generate code for a little-endian word order but a 9690 big-endian byte order. That is, a byte order of the form 9691 `32107654'. Note: this option should only be used if you require 9692 compatibility with code for big-endian ARM processors generated by 9693 versions of the compiler prior to 2.8. 9694 9695`-mcpu=NAME' 9696 This specifies the name of the target ARM processor. GCC uses 9697 this name to determine what kind of instructions it can emit when 9698 generating assembly code. Permissible names are: `arm2', `arm250', 9699 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 9700 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 9701 `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', 9702 `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', 9703 `arm740t', `strongarm', `strongarm110', `strongarm1100', 9704 `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', 9705 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 9706 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 9707 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 9708 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 9709 `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5', 9710 `cortex-a8', `cortex-a9', `cortex-r4', `cortex-r4f', `cortex-m3', 9711 `cortex-m1', `cortex-m0', `xscale', `iwmmxt', `iwmmxt2', `ep9312'. 9712 9713`-mtune=NAME' 9714 This option is very similar to the `-mcpu=' option, except that 9715 instead of specifying the actual target processor type, and hence 9716 restricting which instructions can be used, it specifies that GCC 9717 should tune the performance of the code as if the target were of 9718 the type specified in this option, but still choosing the 9719 instructions that it will generate based on the CPU specified by a 9720 `-mcpu=' option. For some ARM implementations better performance 9721 can be obtained by using this option. 9722 9723`-march=NAME' 9724 This specifies the name of the target ARM architecture. GCC uses 9725 this name to determine what kind of instructions it can emit when 9726 generating assembly code. This option can be used in conjunction 9727 with or instead of the `-mcpu=' option. Permissible names are: 9728 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 9729 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 9730 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 9731 `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'. 9732 9733`-mfpu=NAME' 9734`-mfpe=NUMBER' 9735`-mfp=NUMBER' 9736 This specifies what floating point hardware (or hardware 9737 emulation) is available on the target. Permissible names are: 9738 `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-fp16', 9739 `vfpv3-d16', `vfpv3-d16-fp16', `vfpv3xd', `vfpv3xd-fp16', `neon', 9740 `neon-fp16', `vfpv4', `vfpv4-d16', `fpv4-sp-d16' and `neon-vfpv4'. 9741 `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, for 9742 compatibility with older versions of GCC. 9743 9744 If `-msoft-float' is specified this specifies the format of 9745 floating point values. 9746 9747`-mfp16-format=NAME' 9748 Specify the format of the `__fp16' half-precision floating-point 9749 type. Permissible names are `none', `ieee', and `alternative'; 9750 the default is `none', in which case the `__fp16' type is not 9751 defined. *Note Half-Precision::, for more information. 9752 9753`-mstructure-size-boundary=N' 9754 The size of all structures and unions will be rounded up to a 9755 multiple of the number of bits set by this option. Permissible 9756 values are 8, 32 and 64. The default value varies for different 9757 toolchains. For the COFF targeted toolchain the default value is 9758 8. A value of 64 is only allowed if the underlying ABI supports 9759 it. 9760 9761 Specifying the larger number can produce faster, more efficient 9762 code, but can also increase the size of the program. Different 9763 values are potentially incompatible. Code compiled with one value 9764 cannot necessarily expect to work with code or libraries compiled 9765 with another value, if they exchange information using structures 9766 or unions. 9767 9768`-mabort-on-noreturn' 9769 Generate a call to the function `abort' at the end of a `noreturn' 9770 function. It will be executed if the function tries to return. 9771 9772`-mlong-calls' 9773`-mno-long-calls' 9774 Tells the compiler to perform function calls by first loading the 9775 address of the function into a register and then performing a 9776 subroutine call on this register. This switch is needed if the 9777 target function will lie outside of the 64 megabyte addressing 9778 range of the offset based version of subroutine call instruction. 9779 9780 Even if this switch is enabled, not all function calls will be 9781 turned into long calls. The heuristic is that static functions, 9782 functions which have the `short-call' attribute, functions that 9783 are inside the scope of a `#pragma no_long_calls' directive and 9784 functions whose definitions have already been compiled within the 9785 current compilation unit, will not be turned into long calls. The 9786 exception to this rule is that weak function definitions, 9787 functions with the `long-call' attribute or the `section' 9788 attribute, and functions that are within the scope of a `#pragma 9789 long_calls' directive, will always be turned into long calls. 9790 9791 This feature is not enabled by default. Specifying 9792 `-mno-long-calls' will restore the default behavior, as will 9793 placing the function calls within the scope of a `#pragma 9794 long_calls_off' directive. Note these switches have no effect on 9795 how the compiler generates code to handle function calls via 9796 function pointers. 9797 9798`-msingle-pic-base' 9799 Treat the register used for PIC addressing as read-only, rather 9800 than loading it in the prologue for each function. The run-time 9801 system is responsible for initializing this register with an 9802 appropriate value before execution begins. 9803 9804`-mpic-register=REG' 9805 Specify the register to be used for PIC addressing. The default 9806 is R10 unless stack-checking is enabled, when R9 is used. 9807 9808`-mcirrus-fix-invalid-insns' 9809 Insert NOPs into the instruction stream to in order to work around 9810 problems with invalid Maverick instruction combinations. This 9811 option is only valid if the `-mcpu=ep9312' option has been used to 9812 enable generation of instructions for the Cirrus Maverick floating 9813 point co-processor. This option is not enabled by default, since 9814 the problem is only present in older Maverick implementations. 9815 The default can be re-enabled by use of the 9816 `-mno-cirrus-fix-invalid-insns' switch. 9817 9818`-mpoke-function-name' 9819 Write the name of each function into the text section, directly 9820 preceding the function prologue. The generated code is similar to 9821 this: 9822 9823 t0 9824 .ascii "arm_poke_function_name", 0 9825 .align 9826 t1 9827 .word 0xff000000 + (t1 - t0) 9828 arm_poke_function_name 9829 mov ip, sp 9830 stmfd sp!, {fp, ip, lr, pc} 9831 sub fp, ip, #4 9832 9833 When performing a stack backtrace, code can inspect the value of 9834 `pc' stored at `fp + 0'. If the trace function then looks at 9835 location `pc - 12' and the top 8 bits are set, then we know that 9836 there is a function name embedded immediately preceding this 9837 location and has length `((pc[-3]) & 0xff000000)'. 9838 9839`-mthumb' 9840 Generate code for the Thumb instruction set. The default is to 9841 use the 32-bit ARM instruction set. This option automatically 9842 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 9843 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 9844 This option is not passed to the assembler. If you want to force 9845 assembler files to be interpreted as Thumb code, either add a 9846 `.thumb' directive to the source or pass the `-mthumb' option 9847 directly to the assembler by prefixing it with `-Wa'. 9848 9849`-mtpcs-frame' 9850 Generate a stack frame that is compliant with the Thumb Procedure 9851 Call Standard for all non-leaf functions. (A leaf function is one 9852 that does not call any other functions.) The default is 9853 `-mno-tpcs-frame'. 9854 9855`-mtpcs-leaf-frame' 9856 Generate a stack frame that is compliant with the Thumb Procedure 9857 Call Standard for all leaf functions. (A leaf function is one 9858 that does not call any other functions.) The default is 9859 `-mno-apcs-leaf-frame'. 9860 9861`-mcallee-super-interworking' 9862 Gives all externally visible functions in the file being compiled 9863 an ARM instruction set header which switches to Thumb mode before 9864 executing the rest of the function. This allows these functions 9865 to be called from non-interworking code. This option is not valid 9866 in AAPCS configurations because interworking is enabled by default. 9867 9868`-mcaller-super-interworking' 9869 Allows calls via function pointers (including virtual functions) to 9870 execute correctly regardless of whether the target code has been 9871 compiled for interworking or not. There is a small overhead in 9872 the cost of executing a function pointer if this option is 9873 enabled. This option is not valid in AAPCS configurations because 9874 interworking is enabled by default. 9875 9876`-mtp=NAME' 9877 Specify the access model for the thread local storage pointer. 9878 The valid models are `soft', which generates calls to 9879 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 9880 `cp15' directly (supported in the arm6k architecture), and `auto', 9881 which uses the best available method for the selected processor. 9882 The default setting is `auto'. 9883 9884`-mword-relocations' 9885 Only generate absolute relocations on word sized values (i.e. 9886 R_ARM_ABS32). This is enabled by default on targets (uClinux, 9887 SymbianOS) where the runtime loader imposes this restriction, and 9888 when `-fpic' or `-fPIC' is specified. 9889 9890 9891 9892File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 9893 98943.17.3 AVR Options 9895------------------ 9896 9897These options are defined for AVR implementations: 9898 9899`-mmcu=MCU' 9900 Specify ATMEL AVR instruction set or MCU type. 9901 9902 Instruction set avr1 is for the minimal AVR core, not supported by 9903 the C compiler, only for assembler programs (MCU types: at90s1200, 9904 attiny10, attiny11, attiny12, attiny15, attiny28). 9905 9906 Instruction set avr2 (default) is for the classic AVR core with up 9907 to 8K program memory space (MCU types: at90s2313, at90s2323, 9908 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 9909 at90s8515, at90c8534, at90s8535). 9910 9911 Instruction set avr3 is for the classic AVR core with up to 128K 9912 program memory space (MCU types: atmega103, atmega603, at43usb320, 9913 at76c711). 9914 9915 Instruction set avr4 is for the enhanced AVR core with up to 8K 9916 program memory space (MCU types: atmega8, atmega83, atmega85). 9917 9918 Instruction set avr5 is for the enhanced AVR core with up to 128K 9919 program memory space (MCU types: atmega16, atmega161, atmega163, 9920 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 9921 9922`-mno-interrupts' 9923 Generated code is not compatible with hardware interrupts. Code 9924 size will be smaller. 9925 9926`-mcall-prologues' 9927 Functions prologues/epilogues expanded as call to appropriate 9928 subroutines. Code size will be smaller. 9929 9930`-mtiny-stack' 9931 Change only the low 8 bits of the stack pointer. 9932 9933`-mint8' 9934 Assume int to be 8 bit integer. This affects the sizes of all 9935 types: A char will be 1 byte, an int will be 1 byte, a long will 9936 be 2 bytes and long long will be 4 bytes. Please note that this 9937 option does not comply to the C standards, but it will provide you 9938 with smaller code size. 9939 9940 9941File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 9942 99433.17.4 Blackfin Options 9944----------------------- 9945 9946`-mcpu=CPU[-SIREVISION]' 9947 Specifies the name of the target Blackfin processor. Currently, 9948 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 9949 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 9950 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 9951 `bf544', `bf547', `bf548', `bf549', `bf542m', `bf544m', `bf547m', 9952 `bf548m', `bf549m', `bf561'. The optional SIREVISION specifies 9953 the silicon revision of the target Blackfin processor. Any 9954 workarounds available for the targeted silicon revision will be 9955 enabled. If SIREVISION is `none', no workarounds are enabled. If 9956 SIREVISION is `any', all workarounds for the targeted processor 9957 will be enabled. The `__SILICON_REVISION__' macro is defined to 9958 two hexadecimal digits representing the major and minor numbers in 9959 the silicon revision. If SIREVISION is `none', the 9960 `__SILICON_REVISION__' is not defined. If SIREVISION is `any', the 9961 `__SILICON_REVISION__' is defined to be `0xffff'. If this 9962 optional SIREVISION is not used, GCC assumes the latest known 9963 silicon revision of the targeted Blackfin processor. 9964 9965 Support for `bf561' is incomplete. For `bf561', Only the 9966 processor macro is defined. Without this option, `bf532' is used 9967 as the processor by default. The corresponding predefined 9968 processor macros for CPU is to be defined. And for `bfin-elf' 9969 toolchain, this causes the hardware BSP provided by libgloss to be 9970 linked in if `-msim' is not given. 9971 9972`-msim' 9973 Specifies that the program will be run on the simulator. This 9974 causes the simulator BSP provided by libgloss to be linked in. 9975 This option has effect only for `bfin-elf' toolchain. Certain 9976 other options, such as `-mid-shared-library' and `-mfdpic', imply 9977 `-msim'. 9978 9979`-momit-leaf-frame-pointer' 9980 Don't keep the frame pointer in a register for leaf functions. 9981 This avoids the instructions to save, set up and restore frame 9982 pointers and makes an extra register available in leaf functions. 9983 The option `-fomit-frame-pointer' removes the frame pointer for 9984 all functions which might make debugging harder. 9985 9986`-mspecld-anomaly' 9987 When enabled, the compiler will ensure that the generated code 9988 does not contain speculative loads after jump instructions. If 9989 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 9990 9991`-mno-specld-anomaly' 9992 Don't generate extra code to prevent speculative loads from 9993 occurring. 9994 9995`-mcsync-anomaly' 9996 When enabled, the compiler will ensure that the generated code 9997 does not contain CSYNC or SSYNC instructions too soon after 9998 conditional branches. If this option is used, 9999 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 10000 10001`-mno-csync-anomaly' 10002 Don't generate extra code to prevent CSYNC or SSYNC instructions 10003 from occurring too soon after a conditional branch. 10004 10005`-mlow-64k' 10006 When enabled, the compiler is free to take advantage of the 10007 knowledge that the entire program fits into the low 64k of memory. 10008 10009`-mno-low-64k' 10010 Assume that the program is arbitrarily large. This is the default. 10011 10012`-mstack-check-l1' 10013 Do stack checking using information placed into L1 scratchpad 10014 memory by the uClinux kernel. 10015 10016`-mid-shared-library' 10017 Generate code that supports shared libraries via the library ID 10018 method. This allows for execute in place and shared libraries in 10019 an environment without virtual memory management. This option 10020 implies `-fPIC'. With a `bfin-elf' target, this option implies 10021 `-msim'. 10022 10023`-mno-id-shared-library' 10024 Generate code that doesn't assume ID based shared libraries are 10025 being used. This is the default. 10026 10027`-mleaf-id-shared-library' 10028 Generate code that supports shared libraries via the library ID 10029 method, but assumes that this library or executable won't link 10030 against any other ID shared libraries. That allows the compiler 10031 to use faster code for jumps and calls. 10032 10033`-mno-leaf-id-shared-library' 10034 Do not assume that the code being compiled won't link against any 10035 ID shared libraries. Slower code will be generated for jump and 10036 call insns. 10037 10038`-mshared-library-id=n' 10039 Specified the identification number of the ID based shared library 10040 being compiled. Specifying a value of 0 will generate more 10041 compact code, specifying other values will force the allocation of 10042 that number to the current library but is no more space or time 10043 efficient than omitting this option. 10044 10045`-msep-data' 10046 Generate code that allows the data segment to be located in a 10047 different area of memory from the text segment. This allows for 10048 execute in place in an environment without virtual memory 10049 management by eliminating relocations against the text section. 10050 10051`-mno-sep-data' 10052 Generate code that assumes that the data segment follows the text 10053 segment. This is the default. 10054 10055`-mlong-calls' 10056`-mno-long-calls' 10057 Tells the compiler to perform function calls by first loading the 10058 address of the function into a register and then performing a 10059 subroutine call on this register. This switch is needed if the 10060 target function will lie outside of the 24 bit addressing range of 10061 the offset based version of subroutine call instruction. 10062 10063 This feature is not enabled by default. Specifying 10064 `-mno-long-calls' will restore the default behavior. Note these 10065 switches have no effect on how the compiler generates code to 10066 handle function calls via function pointers. 10067 10068`-mfast-fp' 10069 Link with the fast floating-point library. This library relaxes 10070 some of the IEEE floating-point standard's rules for checking 10071 inputs against Not-a-Number (NAN), in the interest of performance. 10072 10073`-minline-plt' 10074 Enable inlining of PLT entries in function calls to functions that 10075 are not known to bind locally. It has no effect without `-mfdpic'. 10076 10077`-mmulticore' 10078 Build standalone application for multicore Blackfin processor. 10079 Proper start files and link scripts will be used to support 10080 multicore. This option defines `__BFIN_MULTICORE'. It can only be 10081 used with `-mcpu=bf561[-SIREVISION]'. It can be used with 10082 `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or 10083 `-mcoreb', single application/dual core programming model is used. 10084 In this model, the main function of Core B should be named as 10085 coreb_main. If it's used with `-mcorea' or `-mcoreb', one 10086 application per core programming model is used. If this option is 10087 not used, single core application programming model is used. 10088 10089`-mcorea' 10090 Build standalone application for Core A of BF561 when using one 10091 application per core programming model. Proper start files and 10092 link scripts will be used to support Core A. This option defines 10093 `__BFIN_COREA'. It must be used with `-mmulticore'. 10094 10095`-mcoreb' 10096 Build standalone application for Core B of BF561 when using one 10097 application per core programming model. Proper start files and 10098 link scripts will be used to support Core B. This option defines 10099 `__BFIN_COREB'. When this option is used, coreb_main should be 10100 used instead of main. It must be used with `-mmulticore'. 10101 10102`-msdram' 10103 Build standalone application for SDRAM. Proper start files and 10104 link scripts will be used to put the application into SDRAM. 10105 Loader should initialize SDRAM before loading the application into 10106 SDRAM. This option defines `__BFIN_SDRAM'. 10107 10108`-micplb' 10109 Assume that ICPLBs are enabled at runtime. This has an effect on 10110 certain anomaly workarounds. For Linux targets, the default is to 10111 assume ICPLBs are enabled; for standalone applications the default 10112 is off. 10113 10114 10115File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 10116 101173.17.5 CRIS Options 10118------------------- 10119 10120These options are defined specifically for the CRIS ports. 10121 10122`-march=ARCHITECTURE-TYPE' 10123`-mcpu=ARCHITECTURE-TYPE' 10124 Generate code for the specified architecture. The choices for 10125 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 10126 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 10127 cris-axis-linux-gnu, where the default is `v10'. 10128 10129`-mtune=ARCHITECTURE-TYPE' 10130 Tune to ARCHITECTURE-TYPE everything applicable about the generated 10131 code, except for the ABI and the set of available instructions. 10132 The choices for ARCHITECTURE-TYPE are the same as for 10133 `-march=ARCHITECTURE-TYPE'. 10134 10135`-mmax-stack-frame=N' 10136 Warn when the stack frame of a function exceeds N bytes. 10137 10138`-metrax4' 10139`-metrax100' 10140 The options `-metrax4' and `-metrax100' are synonyms for 10141 `-march=v3' and `-march=v8' respectively. 10142 10143`-mmul-bug-workaround' 10144`-mno-mul-bug-workaround' 10145 Work around a bug in the `muls' and `mulu' instructions for CPU 10146 models where it applies. This option is active by default. 10147 10148`-mpdebug' 10149 Enable CRIS-specific verbose debug-related information in the 10150 assembly code. This option also has the effect to turn off the 10151 `#NO_APP' formatted-code indicator to the assembler at the 10152 beginning of the assembly file. 10153 10154`-mcc-init' 10155 Do not use condition-code results from previous instruction; 10156 always emit compare and test instructions before use of condition 10157 codes. 10158 10159`-mno-side-effects' 10160 Do not emit instructions with side-effects in addressing modes 10161 other than post-increment. 10162 10163`-mstack-align' 10164`-mno-stack-align' 10165`-mdata-align' 10166`-mno-data-align' 10167`-mconst-align' 10168`-mno-const-align' 10169 These options (no-options) arranges (eliminate arrangements) for 10170 the stack-frame, individual data and constants to be aligned for 10171 the maximum single data access size for the chosen CPU model. The 10172 default is to arrange for 32-bit alignment. ABI details such as 10173 structure layout are not affected by these options. 10174 10175`-m32-bit' 10176`-m16-bit' 10177`-m8-bit' 10178 Similar to the stack- data- and const-align options above, these 10179 options arrange for stack-frame, writable data and constants to 10180 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 10181 alignment. 10182 10183`-mno-prologue-epilogue' 10184`-mprologue-epilogue' 10185 With `-mno-prologue-epilogue', the normal function prologue and 10186 epilogue that sets up the stack-frame are omitted and no return 10187 instructions or return sequences are generated in the code. Use 10188 this option only together with visual inspection of the compiled 10189 code: no warnings or errors are generated when call-saved 10190 registers must be saved, or storage for local variable needs to be 10191 allocated. 10192 10193`-mno-gotplt' 10194`-mgotplt' 10195 With `-fpic' and `-fPIC', don't generate (do generate) instruction 10196 sequences that load addresses for functions from the PLT part of 10197 the GOT rather than (traditional on other architectures) calls to 10198 the PLT. The default is `-mgotplt'. 10199 10200`-melf' 10201 Legacy no-op option only recognized with the cris-axis-elf and 10202 cris-axis-linux-gnu targets. 10203 10204`-mlinux' 10205 Legacy no-op option only recognized with the cris-axis-linux-gnu 10206 target. 10207 10208`-sim' 10209 This option, recognized for the cris-axis-elf arranges to link 10210 with input-output functions from a simulator library. Code, 10211 initialized data and zero-initialized data are allocated 10212 consecutively. 10213 10214`-sim2' 10215 Like `-sim', but pass linker options to locate initialized data at 10216 0x40000000 and zero-initialized data at 0x80000000. 10217 10218 10219File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 10220 102213.17.6 CRX Options 10222------------------ 10223 10224These options are defined specifically for the CRX ports. 10225 10226`-mmac' 10227 Enable the use of multiply-accumulate instructions. Disabled by 10228 default. 10229 10230`-mpush-args' 10231 Push instructions will be used to pass outgoing arguments when 10232 functions are called. Enabled by default. 10233 10234 10235File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 10236 102373.17.7 Darwin Options 10238--------------------- 10239 10240These options are defined for all architectures running the Darwin 10241operating system. 10242 10243 FSF GCC on Darwin does not create "fat" object files; it will create 10244an object file for the single architecture that it was built to target. 10245Apple's GCC on Darwin does create "fat" files if multiple `-arch' 10246options are used; it does so by running the compiler or linker multiple 10247times and joining the results together with `lipo'. 10248 10249 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 10250is determined by the flags that specify the ISA that GCC is targetting, 10251like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 10252used to override this. 10253 10254 The Darwin tools vary in their behavior when presented with an ISA 10255mismatch. The assembler, `as', will only permit instructions to be 10256used that are valid for the subtype of the file it is generating, so 10257you cannot put 64-bit instructions in a `ppc750' object file. The 10258linker for shared libraries, `/usr/bin/libtool', will fail and print an 10259error if asked to create a shared library with a less restrictive 10260subtype than its input files (for instance, trying to put a `ppc970' 10261object file in a `ppc7400' library). The linker for executables, `ld', 10262will quietly give the executable the most restrictive subtype of any of 10263its input files. 10264 10265`-FDIR' 10266 Add the framework directory DIR to the head of the list of 10267 directories to be searched for header files. These directories are 10268 interleaved with those specified by `-I' options and are scanned 10269 in a left-to-right order. 10270 10271 A framework directory is a directory with frameworks in it. A 10272 framework is a directory with a `"Headers"' and/or 10273 `"PrivateHeaders"' directory contained directly in it that ends in 10274 `".framework"'. The name of a framework is the name of this 10275 directory excluding the `".framework"'. Headers associated with 10276 the framework are found in one of those two directories, with 10277 `"Headers"' being searched first. A subframework is a framework 10278 directory that is in a framework's `"Frameworks"' directory. 10279 Includes of subframework headers can only appear in a header of a 10280 framework that contains the subframework, or in a sibling 10281 subframework header. Two subframeworks are siblings if they occur 10282 in the same framework. A subframework should not have the same 10283 name as a framework, a warning will be issued if this is violated. 10284 Currently a subframework cannot have subframeworks, in the future, 10285 the mechanism may be extended to support this. The standard 10286 frameworks can be found in `"/System/Library/Frameworks"' and 10287 `"/Library/Frameworks"'. An example include looks like `#include 10288 <Framework/header.h>', where `Framework' denotes the name of the 10289 framework and header.h is found in the `"PrivateHeaders"' or 10290 `"Headers"' directory. 10291 10292`-iframeworkDIR' 10293 Like `-F' except the directory is a treated as a system directory. 10294 The main difference between this `-iframework' and `-F' is that 10295 with `-iframework' the compiler does not warn about constructs 10296 contained within header files found via DIR. This option is valid 10297 only for the C family of languages. 10298 10299`-gused' 10300 Emit debugging information for symbols that are used. For STABS 10301 debugging format, this enables `-feliminate-unused-debug-symbols'. 10302 This is by default ON. 10303 10304`-gfull' 10305 Emit debugging information for all symbols and types. 10306 10307`-mmacosx-version-min=VERSION' 10308 The earliest version of MacOS X that this executable will run on 10309 is VERSION. Typical values of VERSION include `10.1', `10.2', and 10310 `10.3.9'. 10311 10312 If the compiler was built to use the system's headers by default, 10313 then the default for this option is the system version on which the 10314 compiler is running, otherwise the default is to make choices which 10315 are compatible with as many systems and code bases as possible. 10316 10317`-mkernel' 10318 Enable kernel development mode. The `-mkernel' option sets 10319 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 10320 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 10321 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 10322 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 10323 targets. 10324 10325`-mone-byte-bool' 10326 Override the defaults for `bool' so that `sizeof(bool)==1'. By 10327 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 10328 and `1' when compiling for Darwin/x86, so this option has no 10329 effect on x86. 10330 10331 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 10332 code that is not binary compatible with code generated without 10333 that switch. Using this switch may require recompiling all other 10334 modules in a program, including system libraries. Use this switch 10335 to conform to a non-default data model. 10336 10337`-mfix-and-continue' 10338`-ffix-and-continue' 10339`-findirect-data' 10340 Generate code suitable for fast turn around development. Needed to 10341 enable gdb to dynamically load `.o' files into already running 10342 programs. `-findirect-data' and `-ffix-and-continue' are provided 10343 for backwards compatibility. 10344 10345`-all_load' 10346 Loads all members of static archive libraries. See man ld(1) for 10347 more information. 10348 10349`-arch_errors_fatal' 10350 Cause the errors having to do with files that have the wrong 10351 architecture to be fatal. 10352 10353`-bind_at_load' 10354 Causes the output file to be marked such that the dynamic linker 10355 will bind all undefined references when the file is loaded or 10356 launched. 10357 10358`-bundle' 10359 Produce a Mach-o bundle format file. See man ld(1) for more 10360 information. 10361 10362`-bundle_loader EXECUTABLE' 10363 This option specifies the EXECUTABLE that will be loading the build 10364 output file being linked. See man ld(1) for more information. 10365 10366`-dynamiclib' 10367 When passed this option, GCC will produce a dynamic library 10368 instead of an executable when linking, using the Darwin `libtool' 10369 command. 10370 10371`-force_cpusubtype_ALL' 10372 This causes GCC's output file to have the ALL subtype, instead of 10373 one controlled by the `-mcpu' or `-march' option. 10374 10375`-allowable_client CLIENT_NAME' 10376`-client_name' 10377`-compatibility_version' 10378`-current_version' 10379`-dead_strip' 10380`-dependency-file' 10381`-dylib_file' 10382`-dylinker_install_name' 10383`-dynamic' 10384`-exported_symbols_list' 10385`-filelist' 10386`-flat_namespace' 10387`-force_flat_namespace' 10388`-headerpad_max_install_names' 10389`-image_base' 10390`-init' 10391`-install_name' 10392`-keep_private_externs' 10393`-multi_module' 10394`-multiply_defined' 10395`-multiply_defined_unused' 10396`-noall_load' 10397`-no_dead_strip_inits_and_terms' 10398`-nofixprebinding' 10399`-nomultidefs' 10400`-noprebind' 10401`-noseglinkedit' 10402`-pagezero_size' 10403`-prebind' 10404`-prebind_all_twolevel_modules' 10405`-private_bundle' 10406`-read_only_relocs' 10407`-sectalign' 10408`-sectobjectsymbols' 10409`-whyload' 10410`-seg1addr' 10411`-sectcreate' 10412`-sectobjectsymbols' 10413`-sectorder' 10414`-segaddr' 10415`-segs_read_only_addr' 10416`-segs_read_write_addr' 10417`-seg_addr_table' 10418`-seg_addr_table_filename' 10419`-seglinkedit' 10420`-segprot' 10421`-segs_read_only_addr' 10422`-segs_read_write_addr' 10423`-single_module' 10424`-static' 10425`-sub_library' 10426`-sub_umbrella' 10427`-twolevel_namespace' 10428`-umbrella' 10429`-undefined' 10430`-unexported_symbols_list' 10431`-weak_reference_mismatches' 10432`-whatsloaded' 10433 These options are passed to the Darwin linker. The Darwin linker 10434 man page describes them in detail. 10435 10436 10437File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 10438 104393.17.8 DEC Alpha Options 10440------------------------ 10441 10442These `-m' options are defined for the DEC Alpha implementations: 10443 10444`-mno-soft-float' 10445`-msoft-float' 10446 Use (do not use) the hardware floating-point instructions for 10447 floating-point operations. When `-msoft-float' is specified, 10448 functions in `libgcc.a' will be used to perform floating-point 10449 operations. Unless they are replaced by routines that emulate the 10450 floating-point operations, or compiled in such a way as to call 10451 such emulations routines, these routines will issue floating-point 10452 operations. If you are compiling for an Alpha without 10453 floating-point operations, you must ensure that the library is 10454 built so as not to call them. 10455 10456 Note that Alpha implementations without floating-point operations 10457 are required to have floating-point registers. 10458 10459`-mfp-reg' 10460`-mno-fp-regs' 10461 Generate code that uses (does not use) the floating-point register 10462 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 10463 register set is not used, floating point operands are passed in 10464 integer registers as if they were integers and floating-point 10465 results are passed in `$0' instead of `$f0'. This is a 10466 non-standard calling sequence, so any function with a 10467 floating-point argument or return value called by code compiled 10468 with `-mno-fp-regs' must also be compiled with that option. 10469 10470 A typical use of this option is building a kernel that does not 10471 use, and hence need not save and restore, any floating-point 10472 registers. 10473 10474`-mieee' 10475 The Alpha architecture implements floating-point hardware 10476 optimized for maximum performance. It is mostly compliant with 10477 the IEEE floating point standard. However, for full compliance, 10478 software assistance is required. This option generates code fully 10479 IEEE compliant code _except_ that the INEXACT-FLAG is not 10480 maintained (see below). If this option is turned on, the 10481 preprocessor macro `_IEEE_FP' is defined during compilation. The 10482 resulting code is less efficient but is able to correctly support 10483 denormalized numbers and exceptional IEEE values such as 10484 not-a-number and plus/minus infinity. Other Alpha compilers call 10485 this option `-ieee_with_no_inexact'. 10486 10487`-mieee-with-inexact' 10488 This is like `-mieee' except the generated code also maintains the 10489 IEEE INEXACT-FLAG. Turning on this option causes the generated 10490 code to implement fully-compliant IEEE math. In addition to 10491 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 10492 On some Alpha implementations the resulting code may execute 10493 significantly slower than the code generated by default. Since 10494 there is very little code that depends on the INEXACT-FLAG, you 10495 should normally not specify this option. Other Alpha compilers 10496 call this option `-ieee_with_inexact'. 10497 10498`-mfp-trap-mode=TRAP-MODE' 10499 This option controls what floating-point related traps are enabled. 10500 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 10501 trap mode can be set to one of four values: 10502 10503 `n' 10504 This is the default (normal) setting. The only traps that 10505 are enabled are the ones that cannot be disabled in software 10506 (e.g., division by zero trap). 10507 10508 `u' 10509 In addition to the traps enabled by `n', underflow traps are 10510 enabled as well. 10511 10512 `su' 10513 Like `u', but the instructions are marked to be safe for 10514 software completion (see Alpha architecture manual for 10515 details). 10516 10517 `sui' 10518 Like `su', but inexact traps are enabled as well. 10519 10520`-mfp-rounding-mode=ROUNDING-MODE' 10521 Selects the IEEE rounding mode. Other Alpha compilers call this 10522 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 10523 10524 `n' 10525 Normal IEEE rounding mode. Floating point numbers are 10526 rounded towards the nearest machine number or towards the 10527 even machine number in case of a tie. 10528 10529 `m' 10530 Round towards minus infinity. 10531 10532 `c' 10533 Chopped rounding mode. Floating point numbers are rounded 10534 towards zero. 10535 10536 `d' 10537 Dynamic rounding mode. A field in the floating point control 10538 register (FPCR, see Alpha architecture reference manual) 10539 controls the rounding mode in effect. The C library 10540 initializes this register for rounding towards plus infinity. 10541 Thus, unless your program modifies the FPCR, `d' corresponds 10542 to round towards plus infinity. 10543 10544`-mtrap-precision=TRAP-PRECISION' 10545 In the Alpha architecture, floating point traps are imprecise. 10546 This means without software assistance it is impossible to recover 10547 from a floating trap and program execution normally needs to be 10548 terminated. GCC can generate code that can assist operating 10549 system trap handlers in determining the exact location that caused 10550 a floating point trap. Depending on the requirements of an 10551 application, different levels of precisions can be selected: 10552 10553 `p' 10554 Program precision. This option is the default and means a 10555 trap handler can only identify which program caused a 10556 floating point exception. 10557 10558 `f' 10559 Function precision. The trap handler can determine the 10560 function that caused a floating point exception. 10561 10562 `i' 10563 Instruction precision. The trap handler can determine the 10564 exact instruction that caused a floating point exception. 10565 10566 Other Alpha compilers provide the equivalent options called 10567 `-scope_safe' and `-resumption_safe'. 10568 10569`-mieee-conformant' 10570 This option marks the generated code as IEEE conformant. You must 10571 not use this option unless you also specify `-mtrap-precision=i' 10572 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 10573 effect is to emit the line `.eflag 48' in the function prologue of 10574 the generated assembly file. Under DEC Unix, this has the effect 10575 that IEEE-conformant math library routines will be linked in. 10576 10577`-mbuild-constants' 10578 Normally GCC examines a 32- or 64-bit integer constant to see if 10579 it can construct it from smaller constants in two or three 10580 instructions. If it cannot, it will output the constant as a 10581 literal and generate code to load it from the data segment at 10582 runtime. 10583 10584 Use this option to require GCC to construct _all_ integer constants 10585 using code, even if it takes more instructions (the maximum is 10586 six). 10587 10588 You would typically use this option to build a shared library 10589 dynamic loader. Itself a shared library, it must relocate itself 10590 in memory before it can find the variables and constants in its 10591 own data segment. 10592 10593`-malpha-as' 10594`-mgas' 10595 Select whether to generate code to be assembled by the 10596 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 10597 `-mgas'. 10598 10599`-mbwx' 10600`-mno-bwx' 10601`-mcix' 10602`-mno-cix' 10603`-mfix' 10604`-mno-fix' 10605`-mmax' 10606`-mno-max' 10607 Indicate whether GCC should generate code to use the optional BWX, 10608 CIX, FIX and MAX instruction sets. The default is to use the 10609 instruction sets supported by the CPU type specified via `-mcpu=' 10610 option or that of the CPU on which GCC was built if none was 10611 specified. 10612 10613`-mfloat-vax' 10614`-mfloat-ieee' 10615 Generate code that uses (does not use) VAX F and G floating point 10616 arithmetic instead of IEEE single and double precision. 10617 10618`-mexplicit-relocs' 10619`-mno-explicit-relocs' 10620 Older Alpha assemblers provided no way to generate symbol 10621 relocations except via assembler macros. Use of these macros does 10622 not allow optimal instruction scheduling. GNU binutils as of 10623 version 2.12 supports a new syntax that allows the compiler to 10624 explicitly mark which relocations should apply to which 10625 instructions. This option is mostly useful for debugging, as GCC 10626 detects the capabilities of the assembler when it is built and 10627 sets the default accordingly. 10628 10629`-msmall-data' 10630`-mlarge-data' 10631 When `-mexplicit-relocs' is in effect, static data is accessed via 10632 "gp-relative" relocations. When `-msmall-data' is used, objects 8 10633 bytes long or smaller are placed in a "small data area" (the 10634 `.sdata' and `.sbss' sections) and are accessed via 16-bit 10635 relocations off of the `$gp' register. This limits the size of 10636 the small data area to 64KB, but allows the variables to be 10637 directly accessed via a single instruction. 10638 10639 The default is `-mlarge-data'. With this option the data area is 10640 limited to just below 2GB. Programs that require more than 2GB of 10641 data must use `malloc' or `mmap' to allocate the data in the heap 10642 instead of in the program's data segment. 10643 10644 When generating code for shared libraries, `-fpic' implies 10645 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 10646 10647`-msmall-text' 10648`-mlarge-text' 10649 When `-msmall-text' is used, the compiler assumes that the code of 10650 the entire program (or shared library) fits in 4MB, and is thus 10651 reachable with a branch instruction. When `-msmall-data' is used, 10652 the compiler can assume that all local symbols share the same 10653 `$gp' value, and thus reduce the number of instructions required 10654 for a function call from 4 to 1. 10655 10656 The default is `-mlarge-text'. 10657 10658`-mcpu=CPU_TYPE' 10659 Set the instruction set and instruction scheduling parameters for 10660 machine type CPU_TYPE. You can specify either the `EV' style name 10661 or the corresponding chip number. GCC supports scheduling 10662 parameters for the EV4, EV5 and EV6 family of processors and will 10663 choose the default values for the instruction set from the 10664 processor you specify. If you do not specify a processor type, 10665 GCC will default to the processor on which the compiler was built. 10666 10667 Supported values for CPU_TYPE are 10668 10669 `ev4' 10670 `ev45' 10671 `21064' 10672 Schedules as an EV4 and has no instruction set extensions. 10673 10674 `ev5' 10675 `21164' 10676 Schedules as an EV5 and has no instruction set extensions. 10677 10678 `ev56' 10679 `21164a' 10680 Schedules as an EV5 and supports the BWX extension. 10681 10682 `pca56' 10683 `21164pc' 10684 `21164PC' 10685 Schedules as an EV5 and supports the BWX and MAX extensions. 10686 10687 `ev6' 10688 `21264' 10689 Schedules as an EV6 and supports the BWX, FIX, and MAX 10690 extensions. 10691 10692 `ev67' 10693 `21264a' 10694 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 10695 extensions. 10696 10697 Native Linux/GNU toolchains also support the value `native', which 10698 selects the best architecture option for the host processor. 10699 `-mcpu=native' has no effect if GCC does not recognize the 10700 processor. 10701 10702`-mtune=CPU_TYPE' 10703 Set only the instruction scheduling parameters for machine type 10704 CPU_TYPE. The instruction set is not changed. 10705 10706 Native Linux/GNU toolchains also support the value `native', which 10707 selects the best architecture option for the host processor. 10708 `-mtune=native' has no effect if GCC does not recognize the 10709 processor. 10710 10711`-mmemory-latency=TIME' 10712 Sets the latency the scheduler should assume for typical memory 10713 references as seen by the application. This number is highly 10714 dependent on the memory access patterns used by the application 10715 and the size of the external cache on the machine. 10716 10717 Valid options for TIME are 10718 10719 `NUMBER' 10720 A decimal number representing clock cycles. 10721 10722 `L1' 10723 `L2' 10724 `L3' 10725 `main' 10726 The compiler contains estimates of the number of clock cycles 10727 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 10728 (also called Dcache, Scache, and Bcache), as well as to main 10729 memory. Note that L3 is only valid for EV5. 10730 10731 10732 10733File: gcc.info, Node: DEC Alpha/VMS Options, Next: FR30 Options, Prev: DEC Alpha Options, Up: Submodel Options 10734 107353.17.9 DEC Alpha/VMS Options 10736---------------------------- 10737 10738These `-m' options are defined for the DEC Alpha/VMS implementations: 10739 10740`-mvms-return-codes' 10741 Return VMS condition codes from main. The default is to return 10742 POSIX style condition (e.g. error) codes. 10743 10744`-mdebug-main=PREFIX' 10745 Flag the first routine whose name starts with PREFIX as the main 10746 routine for the debugger. 10747 10748`-mmalloc64' 10749 Default to 64bit memory allocation routines. 10750 10751 10752File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 10753 107543.17.10 FR30 Options 10755-------------------- 10756 10757These options are defined specifically for the FR30 port. 10758 10759`-msmall-model' 10760 Use the small address space model. This can produce smaller code, 10761 but it does assume that all symbolic values and addresses will fit 10762 into a 20-bit range. 10763 10764`-mno-lsim' 10765 Assume that run-time support has been provided and so there is no 10766 need to include the simulator library (`libsim.a') on the linker 10767 command line. 10768 10769 10770 10771File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 10772 107733.17.11 FRV Options 10774------------------- 10775 10776`-mgpr-32' 10777 Only use the first 32 general purpose registers. 10778 10779`-mgpr-64' 10780 Use all 64 general purpose registers. 10781 10782`-mfpr-32' 10783 Use only the first 32 floating point registers. 10784 10785`-mfpr-64' 10786 Use all 64 floating point registers 10787 10788`-mhard-float' 10789 Use hardware instructions for floating point operations. 10790 10791`-msoft-float' 10792 Use library routines for floating point operations. 10793 10794`-malloc-cc' 10795 Dynamically allocate condition code registers. 10796 10797`-mfixed-cc' 10798 Do not try to dynamically allocate condition code registers, only 10799 use `icc0' and `fcc0'. 10800 10801`-mdword' 10802 Change ABI to use double word insns. 10803 10804`-mno-dword' 10805 Do not use double word instructions. 10806 10807`-mdouble' 10808 Use floating point double instructions. 10809 10810`-mno-double' 10811 Do not use floating point double instructions. 10812 10813`-mmedia' 10814 Use media instructions. 10815 10816`-mno-media' 10817 Do not use media instructions. 10818 10819`-mmuladd' 10820 Use multiply and add/subtract instructions. 10821 10822`-mno-muladd' 10823 Do not use multiply and add/subtract instructions. 10824 10825`-mfdpic' 10826 Select the FDPIC ABI, that uses function descriptors to represent 10827 pointers to functions. Without any PIC/PIE-related options, it 10828 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 10829 and small data are within a 12-bit range from the GOT base 10830 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 10831 bits. With a `bfin-elf' target, this option implies `-msim'. 10832 10833`-minline-plt' 10834 Enable inlining of PLT entries in function calls to functions that 10835 are not known to bind locally. It has no effect without `-mfdpic'. 10836 It's enabled by default if optimizing for speed and compiling for 10837 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 10838 optimization option such as `-O3' or above is present in the 10839 command line. 10840 10841`-mTLS' 10842 Assume a large TLS segment when generating thread-local code. 10843 10844`-mtls' 10845 Do not assume a large TLS segment when generating thread-local 10846 code. 10847 10848`-mgprel-ro' 10849 Enable the use of `GPREL' relocations in the FDPIC ABI for data 10850 that is known to be in read-only sections. It's enabled by 10851 default, except for `-fpic' or `-fpie': even though it may help 10852 make the global offset table smaller, it trades 1 instruction for 10853 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 10854 of which may be shared by multiple symbols, and it avoids the need 10855 for a GOT entry for the referenced symbol, so it's more likely to 10856 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 10857 10858`-multilib-library-pic' 10859 Link with the (library, not FD) pic libraries. It's implied by 10860 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 10861 `-mfdpic'. You should never have to use it explicitly. 10862 10863`-mlinked-fp' 10864 Follow the EABI requirement of always creating a frame pointer 10865 whenever a stack frame is allocated. This option is enabled by 10866 default and can be disabled with `-mno-linked-fp'. 10867 10868`-mlong-calls' 10869 Use indirect addressing to call functions outside the current 10870 compilation unit. This allows the functions to be placed anywhere 10871 within the 32-bit address space. 10872 10873`-malign-labels' 10874 Try to align labels to an 8-byte boundary by inserting nops into 10875 the previous packet. This option only has an effect when VLIW 10876 packing is enabled. It doesn't create new packets; it merely adds 10877 nops to existing ones. 10878 10879`-mlibrary-pic' 10880 Generate position-independent EABI code. 10881 10882`-macc-4' 10883 Use only the first four media accumulator registers. 10884 10885`-macc-8' 10886 Use all eight media accumulator registers. 10887 10888`-mpack' 10889 Pack VLIW instructions. 10890 10891`-mno-pack' 10892 Do not pack VLIW instructions. 10893 10894`-mno-eflags' 10895 Do not mark ABI switches in e_flags. 10896 10897`-mcond-move' 10898 Enable the use of conditional-move instructions (default). 10899 10900 This switch is mainly for debugging the compiler and will likely 10901 be removed in a future version. 10902 10903`-mno-cond-move' 10904 Disable the use of conditional-move instructions. 10905 10906 This switch is mainly for debugging the compiler and will likely 10907 be removed in a future version. 10908 10909`-mscc' 10910 Enable the use of conditional set instructions (default). 10911 10912 This switch is mainly for debugging the compiler and will likely 10913 be removed in a future version. 10914 10915`-mno-scc' 10916 Disable the use of conditional set instructions. 10917 10918 This switch is mainly for debugging the compiler and will likely 10919 be removed in a future version. 10920 10921`-mcond-exec' 10922 Enable the use of conditional execution (default). 10923 10924 This switch is mainly for debugging the compiler and will likely 10925 be removed in a future version. 10926 10927`-mno-cond-exec' 10928 Disable the use of conditional execution. 10929 10930 This switch is mainly for debugging the compiler and will likely 10931 be removed in a future version. 10932 10933`-mvliw-branch' 10934 Run a pass to pack branches into VLIW instructions (default). 10935 10936 This switch is mainly for debugging the compiler and will likely 10937 be removed in a future version. 10938 10939`-mno-vliw-branch' 10940 Do not run a pass to pack branches into VLIW instructions. 10941 10942 This switch is mainly for debugging the compiler and will likely 10943 be removed in a future version. 10944 10945`-mmulti-cond-exec' 10946 Enable optimization of `&&' and `||' in conditional execution 10947 (default). 10948 10949 This switch is mainly for debugging the compiler and will likely 10950 be removed in a future version. 10951 10952`-mno-multi-cond-exec' 10953 Disable optimization of `&&' and `||' in conditional execution. 10954 10955 This switch is mainly for debugging the compiler and will likely 10956 be removed in a future version. 10957 10958`-mnested-cond-exec' 10959 Enable nested conditional execution optimizations (default). 10960 10961 This switch is mainly for debugging the compiler and will likely 10962 be removed in a future version. 10963 10964`-mno-nested-cond-exec' 10965 Disable nested conditional execution optimizations. 10966 10967 This switch is mainly for debugging the compiler and will likely 10968 be removed in a future version. 10969 10970`-moptimize-membar' 10971 This switch removes redundant `membar' instructions from the 10972 compiler generated code. It is enabled by default. 10973 10974`-mno-optimize-membar' 10975 This switch disables the automatic removal of redundant `membar' 10976 instructions from the generated code. 10977 10978`-mtomcat-stats' 10979 Cause gas to print out tomcat statistics. 10980 10981`-mcpu=CPU' 10982 Select the processor type for which to generate code. Possible 10983 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 10984 `fr400', `fr300' and `simple'. 10985 10986 10987 10988File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 10989 109903.17.12 GNU/Linux Options 10991------------------------- 10992 10993These `-m' options are defined for GNU/Linux targets: 10994 10995`-mglibc' 10996 Use the GNU C library instead of uClibc. This is the default 10997 except on `*-*-linux-*uclibc*' targets. 10998 10999`-muclibc' 11000 Use uClibc instead of the GNU C library. This is the default on 11001 `*-*-linux-*uclibc*' targets. 11002 11003 11004File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 11005 110063.17.13 H8/300 Options 11007---------------------- 11008 11009These `-m' options are defined for the H8/300 implementations: 11010 11011`-mrelax' 11012 Shorten some address references at link time, when possible; uses 11013 the linker option `-relax'. *Note `ld' and the H8/300: 11014 (ld)H8/300, for a fuller description. 11015 11016`-mh' 11017 Generate code for the H8/300H. 11018 11019`-ms' 11020 Generate code for the H8S. 11021 11022`-mn' 11023 Generate code for the H8S and H8/300H in the normal mode. This 11024 switch must be used either with `-mh' or `-ms'. 11025 11026`-ms2600' 11027 Generate code for the H8S/2600. This switch must be used with 11028 `-ms'. 11029 11030`-mint32' 11031 Make `int' data 32 bits by default. 11032 11033`-malign-300' 11034 On the H8/300H and H8S, use the same alignment rules as for the 11035 H8/300. The default for the H8/300H and H8S is to align longs and 11036 floats on 4 byte boundaries. `-malign-300' causes them to be 11037 aligned on 2 byte boundaries. This option has no effect on the 11038 H8/300. 11039 11040 11041File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 11042 110433.17.14 HPPA Options 11044-------------------- 11045 11046These `-m' options are defined for the HPPA family of computers: 11047 11048`-march=ARCHITECTURE-TYPE' 11049 Generate code for the specified architecture. The choices for 11050 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 11051 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 11052 an HP-UX system to determine the proper architecture option for 11053 your machine. Code compiled for lower numbered architectures will 11054 run on higher numbered architectures, but not the other way around. 11055 11056`-mpa-risc-1-0' 11057`-mpa-risc-1-1' 11058`-mpa-risc-2-0' 11059 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 11060 respectively. 11061 11062`-mbig-switch' 11063 Generate code suitable for big switch tables. Use this option 11064 only if the assembler/linker complain about out of range branches 11065 within a switch table. 11066 11067`-mjump-in-delay' 11068 Fill delay slots of function calls with unconditional jump 11069 instructions by modifying the return pointer for the function call 11070 to be the target of the conditional jump. 11071 11072`-mdisable-fpregs' 11073 Prevent floating point registers from being used in any manner. 11074 This is necessary for compiling kernels which perform lazy context 11075 switching of floating point registers. If you use this option and 11076 attempt to perform floating point operations, the compiler will 11077 abort. 11078 11079`-mdisable-indexing' 11080 Prevent the compiler from using indexing address modes. This 11081 avoids some rather obscure problems when compiling MIG generated 11082 code under MACH. 11083 11084`-mno-space-regs' 11085 Generate code that assumes the target has no space registers. 11086 This allows GCC to generate faster indirect calls and use unscaled 11087 index address modes. 11088 11089 Such code is suitable for level 0 PA systems and kernels. 11090 11091`-mfast-indirect-calls' 11092 Generate code that assumes calls never cross space boundaries. 11093 This allows GCC to emit code which performs faster indirect calls. 11094 11095 This option will not work in the presence of shared libraries or 11096 nested functions. 11097 11098`-mfixed-range=REGISTER-RANGE' 11099 Generate code treating the given register range as fixed registers. 11100 A fixed register is one that the register allocator can not use. 11101 This is useful when compiling kernel code. A register range is 11102 specified as two registers separated by a dash. Multiple register 11103 ranges can be specified separated by a comma. 11104 11105`-mlong-load-store' 11106 Generate 3-instruction load and store sequences as sometimes 11107 required by the HP-UX 10 linker. This is equivalent to the `+k' 11108 option to the HP compilers. 11109 11110`-mportable-runtime' 11111 Use the portable calling conventions proposed by HP for ELF 11112 systems. 11113 11114`-mgas' 11115 Enable the use of assembler directives only GAS understands. 11116 11117`-mschedule=CPU-TYPE' 11118 Schedule code according to the constraints for the machine type 11119 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 11120 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 11121 HP-UX system to determine the proper scheduling option for your 11122 machine. The default scheduling is `8000'. 11123 11124`-mlinker-opt' 11125 Enable the optimization pass in the HP-UX linker. Note this makes 11126 symbolic debugging impossible. It also triggers a bug in the 11127 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 11128 messages when linking some programs. 11129 11130`-msoft-float' 11131 Generate output containing library calls for floating point. 11132 *Warning:* the requisite libraries are not available for all HPPA 11133 targets. Normally the facilities of the machine's usual C 11134 compiler are used, but this cannot be done directly in 11135 cross-compilation. You must make your own arrangements to provide 11136 suitable library functions for cross-compilation. 11137 11138 `-msoft-float' changes the calling convention in the output file; 11139 therefore, it is only useful if you compile _all_ of a program with 11140 this option. In particular, you need to compile `libgcc.a', the 11141 library that comes with GCC, with `-msoft-float' in order for this 11142 to work. 11143 11144`-msio' 11145 Generate the predefine, `_SIO', for server IO. The default is 11146 `-mwsio'. This generates the predefines, `__hp9000s700', 11147 `__hp9000s700__' and `_WSIO', for workstation IO. These options 11148 are available under HP-UX and HI-UX. 11149 11150`-mgnu-ld' 11151 Use GNU ld specific options. This passes `-shared' to ld when 11152 building a shared library. It is the default when GCC is 11153 configured, explicitly or implicitly, with the GNU linker. This 11154 option does not have any affect on which ld is called, it only 11155 changes what parameters are passed to that ld. The ld that is 11156 called is determined by the `--with-ld' configure option, GCC's 11157 program search path, and finally by the user's `PATH'. The linker 11158 used by GCC can be printed using `which `gcc 11159 -print-prog-name=ld`'. This option is only available on the 64 11160 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 11161 11162`-mhp-ld' 11163 Use HP ld specific options. This passes `-b' to ld when building 11164 a shared library and passes `+Accept TypeMismatch' to ld on all 11165 links. It is the default when GCC is configured, explicitly or 11166 implicitly, with the HP linker. This option does not have any 11167 affect on which ld is called, it only changes what parameters are 11168 passed to that ld. The ld that is called is determined by the 11169 `--with-ld' configure option, GCC's program search path, and 11170 finally by the user's `PATH'. The linker used by GCC can be 11171 printed using `which `gcc -print-prog-name=ld`'. This option is 11172 only available on the 64 bit HP-UX GCC, i.e. configured with 11173 `hppa*64*-*-hpux*'. 11174 11175`-mlong-calls' 11176 Generate code that uses long call sequences. This ensures that a 11177 call is always able to reach linker generated stubs. The default 11178 is to generate long calls only when the distance from the call 11179 site to the beginning of the function or translation unit, as the 11180 case may be, exceeds a predefined limit set by the branch type 11181 being used. The limits for normal calls are 7,600,000 and 240,000 11182 bytes, respectively for the PA 2.0 and PA 1.X architectures. 11183 Sibcalls are always limited at 240,000 bytes. 11184 11185 Distances are measured from the beginning of functions when using 11186 the `-ffunction-sections' option, or when using the `-mgas' and 11187 `-mno-portable-runtime' options together under HP-UX with the SOM 11188 linker. 11189 11190 It is normally not desirable to use this option as it will degrade 11191 performance. However, it may be useful in large applications, 11192 particularly when partial linking is used to build the application. 11193 11194 The types of long calls used depends on the capabilities of the 11195 assembler and linker, and the type of code being generated. The 11196 impact on systems that support long absolute calls, and long pic 11197 symbol-difference or pc-relative calls should be relatively small. 11198 However, an indirect call is used on 32-bit ELF systems in pic code 11199 and it is quite long. 11200 11201`-munix=UNIX-STD' 11202 Generate compiler predefines and select a startfile for the 11203 specified UNIX standard. The choices for UNIX-STD are `93', `95' 11204 and `98'. `93' is supported on all HP-UX versions. `95' is 11205 available on HP-UX 10.10 and later. `98' is available on HP-UX 11206 11.11 and later. The default values are `93' for HP-UX 10.00, 11207 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 11208 later. 11209 11210 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 11211 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 11212 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 11213 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 11214 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 11215 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 11216 11217 It is _important_ to note that this option changes the interfaces 11218 for various library routines. It also affects the operational 11219 behavior of the C library. Thus, _extreme_ care is needed in 11220 using this option. 11221 11222 Library code that is intended to operate with more than one UNIX 11223 standard must test, set and restore the variable 11224 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 11225 provide this capability. 11226 11227`-nolibdld' 11228 Suppress the generation of link options to search libdld.sl when 11229 the `-static' option is specified on HP-UX 10 and later. 11230 11231`-static' 11232 The HP-UX implementation of setlocale in libc has a dependency on 11233 libdld.sl. There isn't an archive version of libdld.sl. Thus, 11234 when the `-static' option is specified, special link options are 11235 needed to resolve this dependency. 11236 11237 On HP-UX 10 and later, the GCC driver adds the necessary options to 11238 link with libdld.sl when the `-static' option is specified. This 11239 causes the resulting binary to be dynamic. On the 64-bit port, 11240 the linkers generate dynamic binaries by default in any case. The 11241 `-nolibdld' option can be used to prevent the GCC driver from 11242 adding these link options. 11243 11244`-threads' 11245 Add support for multithreading with the "dce thread" library under 11246 HP-UX. This option sets flags for both the preprocessor and 11247 linker. 11248 11249 11250File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 11251 112523.17.15 Intel 386 and AMD x86-64 Options 11253---------------------------------------- 11254 11255These `-m' options are defined for the i386 and x86-64 family of 11256computers: 11257 11258`-mtune=CPU-TYPE' 11259 Tune to CPU-TYPE everything applicable about the generated code, 11260 except for the ABI and the set of available instructions. The 11261 choices for CPU-TYPE are: 11262 _generic_ 11263 Produce code optimized for the most common IA32/AMD64/EM64T 11264 processors. If you know the CPU on which your code will run, 11265 then you should use the corresponding `-mtune' option instead 11266 of `-mtune=generic'. But, if you do not know exactly what 11267 CPU users of your application will have, then you should use 11268 this option. 11269 11270 As new processors are deployed in the marketplace, the 11271 behavior of this option will change. Therefore, if you 11272 upgrade to a newer version of GCC, the code generated option 11273 will change to reflect the processors that were most common 11274 when that version of GCC was released. 11275 11276 There is no `-march=generic' option because `-march' 11277 indicates the instruction set the compiler can use, and there 11278 is no generic instruction set applicable to all processors. 11279 In contrast, `-mtune' indicates the processor (or, in this 11280 case, collection of processors) for which the code is 11281 optimized. 11282 11283 _native_ 11284 This selects the CPU to tune for at compilation time by 11285 determining the processor type of the compiling machine. 11286 Using `-mtune=native' will produce code optimized for the 11287 local machine under the constraints of the selected 11288 instruction set. Using `-march=native' will enable all 11289 instruction subsets supported by the local machine (hence the 11290 result might not run on different machines). 11291 11292 _i386_ 11293 Original Intel's i386 CPU. 11294 11295 _i486_ 11296 Intel's i486 CPU. (No scheduling is implemented for this 11297 chip.) 11298 11299 _i586, pentium_ 11300 Intel Pentium CPU with no MMX support. 11301 11302 _pentium-mmx_ 11303 Intel PentiumMMX CPU based on Pentium core with MMX 11304 instruction set support. 11305 11306 _pentiumpro_ 11307 Intel PentiumPro CPU. 11308 11309 _i686_ 11310 Same as `generic', but when used as `march' option, PentiumPro 11311 instruction set will be used, so the code will run on all 11312 i686 family chips. 11313 11314 _pentium2_ 11315 Intel Pentium2 CPU based on PentiumPro core with MMX 11316 instruction set support. 11317 11318 _pentium3, pentium3m_ 11319 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 11320 instruction set support. 11321 11322 _pentium-m_ 11323 Low power version of Intel Pentium3 CPU with MMX, SSE and 11324 SSE2 instruction set support. Used by Centrino notebooks. 11325 11326 _pentium4, pentium4m_ 11327 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 11328 support. 11329 11330 _prescott_ 11331 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 11332 and SSE3 instruction set support. 11333 11334 _nocona_ 11335 Improved version of Intel Pentium4 CPU with 64-bit 11336 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 11337 11338 _core2_ 11339 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11340 and SSSE3 instruction set support. 11341 11342 _atom_ 11343 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11344 and SSSE3 instruction set support. 11345 11346 _k6_ 11347 AMD K6 CPU with MMX instruction set support. 11348 11349 _k6-2, k6-3_ 11350 Improved versions of AMD K6 CPU with MMX and 3DNow! 11351 instruction set support. 11352 11353 _athlon, athlon-tbird_ 11354 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow! and SSE 11355 prefetch instructions support. 11356 11357 _athlon-4, athlon-xp, athlon-mp_ 11358 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow! and 11359 full SSE instruction set support. 11360 11361 _k8, opteron, athlon64, athlon-fx_ 11362 AMD K8 core based CPUs with x86-64 instruction set support. 11363 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! and 11364 64-bit instruction set extensions.) 11365 11366 _k8-sse3, opteron-sse3, athlon64-sse3_ 11367 Improved versions of k8, opteron and athlon64 with SSE3 11368 instruction set support. 11369 11370 _amdfam10, barcelona_ 11371 AMD Family 10h core based CPUs with x86-64 instruction set 11372 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 11373 3DNow!, enhanced 3DNow!, ABM and 64-bit instruction set 11374 extensions.) 11375 11376 _winchip-c6_ 11377 IDT Winchip C6 CPU, dealt in same way as i486 with additional 11378 MMX instruction set support. 11379 11380 _winchip2_ 11381 IDT Winchip2 CPU, dealt in same way as i486 with additional 11382 MMX and 3DNow! instruction set support. 11383 11384 _c3_ 11385 Via C3 CPU with MMX and 3DNow! instruction set support. (No 11386 scheduling is implemented for this chip.) 11387 11388 _c3-2_ 11389 Via C3-2 CPU with MMX and SSE instruction set support. (No 11390 scheduling is implemented for this chip.) 11391 11392 _geode_ 11393 Embedded AMD CPU with MMX and 3DNow! instruction set support. 11394 11395 While picking a specific CPU-TYPE will schedule things 11396 appropriately for that particular chip, the compiler will not 11397 generate any code that does not run on the i386 without the 11398 `-march=CPU-TYPE' option being used. 11399 11400`-march=CPU-TYPE' 11401 Generate instructions for the machine type CPU-TYPE. The choices 11402 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 11403 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 11404 11405`-mcpu=CPU-TYPE' 11406 A deprecated synonym for `-mtune'. 11407 11408`-mfpmath=UNIT' 11409 Generate floating point arithmetics for selected unit UNIT. The 11410 choices for UNIT are: 11411 11412 `387' 11413 Use the standard 387 floating point coprocessor present 11414 majority of chips and emulated otherwise. Code compiled with 11415 this option will run almost everywhere. The temporary 11416 results are computed in 80bit precision instead of precision 11417 specified by the type resulting in slightly different results 11418 compared to most of other chips. See `-ffloat-store' for 11419 more detailed description. 11420 11421 This is the default choice for i386 compiler. 11422 11423 `sse' 11424 Use scalar floating point instructions present in the SSE 11425 instruction set. This instruction set is supported by 11426 Pentium3 and newer chips, in the AMD line by Athlon-4, 11427 Athlon-xp and Athlon-mp chips. The earlier version of SSE 11428 instruction set supports only single precision arithmetics, 11429 thus the double and extended precision arithmetics is still 11430 done using 387. Later version, present only in Pentium4 and 11431 the future AMD x86-64 chips supports double precision 11432 arithmetics too. 11433 11434 For the i386 compiler, you need to use `-march=CPU-TYPE', 11435 `-msse' or `-msse2' switches to enable SSE extensions and 11436 make this option effective. For the x86-64 compiler, these 11437 extensions are enabled by default. 11438 11439 The resulting code should be considerably faster in the 11440 majority of cases and avoid the numerical instability 11441 problems of 387 code, but may break some existing code that 11442 expects temporaries to be 80bit. 11443 11444 This is the default choice for the x86-64 compiler. 11445 11446 `sse,387' 11447 `sse+387' 11448 `both' 11449 Attempt to utilize both instruction sets at once. This 11450 effectively double the amount of available registers and on 11451 chips with separate execution units for 387 and SSE the 11452 execution resources too. Use this option with care, as it is 11453 still experimental, because the GCC register allocator does 11454 not model separate functional units well resulting in 11455 instable performance. 11456 11457`-masm=DIALECT' 11458 Output asm instructions using selected DIALECT. Supported choices 11459 are `intel' or `att' (the default one). Darwin does not support 11460 `intel'. 11461 11462`-mieee-fp' 11463`-mno-ieee-fp' 11464 Control whether or not the compiler uses IEEE floating point 11465 comparisons. These handle correctly the case where the result of a 11466 comparison is unordered. 11467 11468`-msoft-float' 11469 Generate output containing library calls for floating point. 11470 *Warning:* the requisite libraries are not part of GCC. Normally 11471 the facilities of the machine's usual C compiler are used, but 11472 this can't be done directly in cross-compilation. You must make 11473 your own arrangements to provide suitable library functions for 11474 cross-compilation. 11475 11476 On machines where a function returns floating point results in the 11477 80387 register stack, some floating point opcodes may be emitted 11478 even if `-msoft-float' is used. 11479 11480`-mno-fp-ret-in-387' 11481 Do not use the FPU registers for return values of functions. 11482 11483 The usual calling convention has functions return values of types 11484 `float' and `double' in an FPU register, even if there is no FPU. 11485 The idea is that the operating system should emulate an FPU. 11486 11487 The option `-mno-fp-ret-in-387' causes such values to be returned 11488 in ordinary CPU registers instead. 11489 11490`-mno-fancy-math-387' 11491 Some 387 emulators do not support the `sin', `cos' and `sqrt' 11492 instructions for the 387. Specify this option to avoid generating 11493 those instructions. This option is the default on FreeBSD, 11494 OpenBSD and NetBSD. This option is overridden when `-march' 11495 indicates that the target CPU will always have an FPU and so the 11496 instruction will not need emulation. As of revision 2.6.1, these 11497 instructions are not generated unless you also use the 11498 `-funsafe-math-optimizations' switch. 11499 11500`-malign-double' 11501`-mno-align-double' 11502 Control whether GCC aligns `double', `long double', and `long 11503 long' variables on a two word boundary or a one word boundary. 11504 Aligning `double' variables on a two word boundary will produce 11505 code that runs somewhat faster on a `Pentium' at the expense of 11506 more memory. 11507 11508 On x86-64, `-malign-double' is enabled by default. 11509 11510 *Warning:* if you use the `-malign-double' switch, structures 11511 containing the above types will be aligned differently than the 11512 published application binary interface specifications for the 386 11513 and will not be binary compatible with structures in code compiled 11514 without that switch. 11515 11516`-m96bit-long-double' 11517`-m128bit-long-double' 11518 These switches control the size of `long double' type. The i386 11519 application binary interface specifies the size to be 96 bits, so 11520 `-m96bit-long-double' is the default in 32 bit mode. 11521 11522 Modern architectures (Pentium and newer) would prefer `long double' 11523 to be aligned to an 8 or 16 byte boundary. In arrays or structures 11524 conforming to the ABI, this would not be possible. So specifying a 11525 `-m128bit-long-double' will align `long double' to a 16 byte 11526 boundary by padding the `long double' with an additional 32 bit 11527 zero. 11528 11529 In the x86-64 compiler, `-m128bit-long-double' is the default 11530 choice as its ABI specifies that `long double' is to be aligned on 11531 16 byte boundary. 11532 11533 Notice that neither of these options enable any extra precision 11534 over the x87 standard of 80 bits for a `long double'. 11535 11536 *Warning:* if you override the default value for your target ABI, 11537 the structures and arrays containing `long double' variables will 11538 change their size as well as function calling convention for 11539 function taking `long double' will be modified. Hence they will 11540 not be binary compatible with arrays or structures in code 11541 compiled without that switch. 11542 11543`-mlarge-data-threshold=NUMBER' 11544 When `-mcmodel=medium' is specified, the data greater than 11545 THRESHOLD are placed in large data section. This value must be the 11546 same across all object linked into the binary and defaults to 11547 65535. 11548 11549`-mrtd' 11550 Use a different function-calling convention, in which functions 11551 that take a fixed number of arguments return with the `ret' NUM 11552 instruction, which pops their arguments while returning. This 11553 saves one instruction in the caller since there is no need to pop 11554 the arguments there. 11555 11556 You can specify that an individual function is called with this 11557 calling sequence with the function attribute `stdcall'. You can 11558 also override the `-mrtd' option by using the function attribute 11559 `cdecl'. *Note Function Attributes::. 11560 11561 *Warning:* this calling convention is incompatible with the one 11562 normally used on Unix, so you cannot use it if you need to call 11563 libraries compiled with the Unix compiler. 11564 11565 Also, you must provide function prototypes for all functions that 11566 take variable numbers of arguments (including `printf'); otherwise 11567 incorrect code will be generated for calls to those functions. 11568 11569 In addition, seriously incorrect code will result if you call a 11570 function with too many arguments. (Normally, extra arguments are 11571 harmlessly ignored.) 11572 11573`-mregparm=NUM' 11574 Control how many registers are used to pass integer arguments. By 11575 default, no registers are used to pass arguments, and at most 3 11576 registers can be used. You can control this behavior for a 11577 specific function by using the function attribute `regparm'. 11578 *Note Function Attributes::. 11579 11580 *Warning:* if you use this switch, and NUM is nonzero, then you 11581 must build all modules with the same value, including any 11582 libraries. This includes the system libraries and startup modules. 11583 11584`-msseregparm' 11585 Use SSE register passing conventions for float and double arguments 11586 and return values. You can control this behavior for a specific 11587 function by using the function attribute `sseregparm'. *Note 11588 Function Attributes::. 11589 11590 *Warning:* if you use this switch then you must build all modules 11591 with the same value, including any libraries. This includes the 11592 system libraries and startup modules. 11593 11594`-mpc32' 11595`-mpc64' 11596`-mpc80' 11597 Set 80387 floating-point precision to 32, 64 or 80 bits. When 11598 `-mpc32' is specified, the significands of results of 11599 floating-point operations are rounded to 24 bits (single 11600 precision); `-mpc64' rounds the significands of results of 11601 floating-point operations to 53 bits (double precision) and 11602 `-mpc80' rounds the significands of results of floating-point 11603 operations to 64 bits (extended double precision), which is the 11604 default. When this option is used, floating-point operations in 11605 higher precisions are not available to the programmer without 11606 setting the FPU control word explicitly. 11607 11608 Setting the rounding of floating-point operations to less than the 11609 default 80 bits can speed some programs by 2% or more. Note that 11610 some mathematical libraries assume that extended precision (80 11611 bit) floating-point operations are enabled by default; routines in 11612 such libraries could suffer significant loss of accuracy, 11613 typically through so-called "catastrophic cancellation", when this 11614 option is used to set the precision to less than extended 11615 precision. 11616 11617`-mstackrealign' 11618 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 11619 option will generate an alternate prologue and epilogue that 11620 realigns the runtime stack if necessary. This supports mixing 11621 legacy codes that keep a 4-byte aligned stack with modern codes 11622 that keep a 16-byte stack for SSE compatibility. See also the 11623 attribute `force_align_arg_pointer', applicable to individual 11624 functions. 11625 11626`-mpreferred-stack-boundary=NUM' 11627 Attempt to keep the stack boundary aligned to a 2 raised to NUM 11628 byte boundary. If `-mpreferred-stack-boundary' is not specified, 11629 the default is 4 (16 bytes or 128 bits). 11630 11631`-mincoming-stack-boundary=NUM' 11632 Assume the incoming stack is aligned to a 2 raised to NUM byte 11633 boundary. If `-mincoming-stack-boundary' is not specified, the 11634 one specified by `-mpreferred-stack-boundary' will be used. 11635 11636 On Pentium and PentiumPro, `double' and `long double' values 11637 should be aligned to an 8 byte boundary (see `-malign-double') or 11638 suffer significant run time performance penalties. On Pentium 11639 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 11640 work properly if it is not 16 byte aligned. 11641 11642 To ensure proper alignment of this values on the stack, the stack 11643 boundary must be as aligned as that required by any value stored 11644 on the stack. Further, every function must be generated such that 11645 it keeps the stack aligned. Thus calling a function compiled with 11646 a higher preferred stack boundary from a function compiled with a 11647 lower preferred stack boundary will most likely misalign the 11648 stack. It is recommended that libraries that use callbacks always 11649 use the default setting. 11650 11651 This extra alignment does consume extra stack space, and generally 11652 increases code size. Code that is sensitive to stack space usage, 11653 such as embedded systems and operating system kernels, may want to 11654 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 11655 11656`-mmmx' 11657`-mno-mmx' 11658`-msse' 11659`-mno-sse' 11660`-msse2' 11661`-mno-sse2' 11662`-msse3' 11663`-mno-sse3' 11664`-mssse3' 11665`-mno-ssse3' 11666`-msse4.1' 11667`-mno-sse4.1' 11668`-msse4.2' 11669`-mno-sse4.2' 11670`-msse4' 11671`-mno-sse4' 11672`-mavx' 11673`-mno-avx' 11674`-maes' 11675`-mno-aes' 11676`-mpclmul' 11677`-mno-pclmul' 11678`-msse4a' 11679`-mno-sse4a' 11680`-mfma4' 11681`-mno-fma4' 11682`-mxop' 11683`-mno-xop' 11684`-mlwp' 11685`-mno-lwp' 11686`-m3dnow' 11687`-mno-3dnow' 11688`-mpopcnt' 11689`-mno-popcnt' 11690`-mabm' 11691`-mno-abm' 11692 These switches enable or disable the use of instructions in the 11693 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, 11694 FMA4, XOP, LWP, ABM or 3DNow! extended instruction sets. These 11695 extensions are also available as built-in functions: see *note X86 11696 Built-in Functions::, for details of the functions enabled and 11697 disabled by these switches. 11698 11699 To have SSE/SSE2 instructions generated automatically from 11700 floating-point code (as opposed to 387 instructions), see 11701 `-mfpmath=sse'. 11702 11703 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 11704 generates new AVX instructions or AVX equivalence for all SSEx 11705 instructions when needed. 11706 11707 These options will enable GCC to use these extended instructions in 11708 generated code, even without `-mfpmath=sse'. Applications which 11709 perform runtime CPU detection must compile separate files for each 11710 supported architecture, using the appropriate flags. In 11711 particular, the file containing the CPU detection code should be 11712 compiled without these options. 11713 11714`-mfused-madd' 11715`-mno-fused-madd' 11716 Do (don't) generate code that uses the fused multiply/add or 11717 multiply/subtract instructions. The default is to use these 11718 instructions. 11719 11720`-mcld' 11721 This option instructs GCC to emit a `cld' instruction in the 11722 prologue of functions that use string instructions. String 11723 instructions depend on the DF flag to select between autoincrement 11724 or autodecrement mode. While the ABI specifies the DF flag to be 11725 cleared on function entry, some operating systems violate this 11726 specification by not clearing the DF flag in their exception 11727 dispatchers. The exception handler can be invoked with the DF flag 11728 set which leads to wrong direction mode, when string instructions 11729 are used. This option can be enabled by default on 32-bit x86 11730 targets by configuring GCC with the `--enable-cld' configure 11731 option. Generation of `cld' instructions can be suppressed with 11732 the `-mno-cld' compiler option in this case. 11733 11734`-mcx16' 11735 This option will enable GCC to use CMPXCHG16B instruction in 11736 generated code. CMPXCHG16B allows for atomic operations on 11737 128-bit double quadword (or oword) data types. This is useful for 11738 high resolution counters that could be updated by multiple 11739 processors (or cores). This instruction is generated as part of 11740 atomic built-in functions: see *note Atomic Builtins:: for details. 11741 11742`-msahf' 11743 This option will enable GCC to use SAHF instruction in generated 11744 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 11745 instructions supported by AMD64 until introduction of Pentium 4 G1 11746 step in December 2005. LAHF and SAHF are load and store 11747 instructions, respectively, for certain status flags. In 64-bit 11748 mode, SAHF instruction is used to optimize `fmod', `drem' or 11749 `remainder' built-in functions: see *note Other Builtins:: for 11750 details. 11751 11752`-mmovbe' 11753 This option will enable GCC to use movbe instruction to implement 11754 `__builtin_bswap32' and `__builtin_bswap64'. 11755 11756`-mcrc32' 11757 This option will enable built-in functions, 11758 `__builtin_ia32_crc32qi', `__builtin_ia32_crc32hi'. 11759 `__builtin_ia32_crc32si' and `__builtin_ia32_crc32di' to generate 11760 the crc32 machine instruction. 11761 11762`-mrecip' 11763 This option will enable GCC to use RCPSS and RSQRTSS instructions 11764 (and their vectorized variants RCPPS and RSQRTPS) with an 11765 additional Newton-Raphson step to increase precision instead of 11766 DIVSS and SQRTSS (and their vectorized variants) for single 11767 precision floating point arguments. These instructions are 11768 generated only when `-funsafe-math-optimizations' is enabled 11769 together with `-finite-math-only' and `-fno-trapping-math'. Note 11770 that while the throughput of the sequence is higher than the 11771 throughput of the non-reciprocal instruction, the precision of the 11772 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 11773 equals 0.99999994). 11774 11775 Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or 11776 RSQRTPS) already with `-ffast-math' (or the above option 11777 combination), and doesn't need `-mrecip'. 11778 11779`-mveclibabi=TYPE' 11780 Specifies the ABI type to use for vectorizing intrinsics using an 11781 external library. Supported types are `svml' for the Intel short 11782 vector math library and `acml' for the AMD math core library style 11783 of interfacing. GCC will currently emit calls to `vmldExp2', 11784 `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2', 11785 `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2', 11786 `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2', 11787 `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104', 11788 `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4', 11789 `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', 11790 `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' 11791 for corresponding function type when `-mveclibabi=svml' is used 11792 and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 11793 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 11794 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 11795 `__vrs4_powf' for corresponding function type when 11796 `-mveclibabi=acml' is used. Both `-ftree-vectorize' and 11797 `-funsafe-math-optimizations' have to be enabled. A SVML or ACML 11798 ABI compatible library will have to be specified at link time. 11799 11800`-mabi=NAME' 11801 Generate code for the specified calling convention. Permissible 11802 values are: `sysv' for the ABI used on GNU/Linux and other systems 11803 and `ms' for the Microsoft ABI. The default is to use the 11804 Microsoft ABI when targeting Windows. On all other systems, the 11805 default is the SYSV ABI. You can control this behavior for a 11806 specific function by using the function attribute 11807 `ms_abi'/`sysv_abi'. *Note Function Attributes::. 11808 11809`-mpush-args' 11810`-mno-push-args' 11811 Use PUSH operations to store outgoing parameters. This method is 11812 shorter and usually equally fast as method using SUB/MOV 11813 operations and is enabled by default. In some cases disabling it 11814 may improve performance because of improved scheduling and reduced 11815 dependencies. 11816 11817`-maccumulate-outgoing-args' 11818 If enabled, the maximum amount of space required for outgoing 11819 arguments will be computed in the function prologue. This is 11820 faster on most modern CPUs because of reduced dependencies, 11821 improved scheduling and reduced stack usage when preferred stack 11822 boundary is not equal to 2. The drawback is a notable increase in 11823 code size. This switch implies `-mno-push-args'. 11824 11825`-mthreads' 11826 Support thread-safe exception handling on `Mingw32'. Code that 11827 relies on thread-safe exception handling must compile and link all 11828 code with the `-mthreads' option. When compiling, `-mthreads' 11829 defines `-D_MT'; when linking, it links in a special thread helper 11830 library `-lmingwthrd' which cleans up per thread exception 11831 handling data. 11832 11833`-mno-align-stringops' 11834 Do not align destination of inlined string operations. This 11835 switch reduces code size and improves performance in case the 11836 destination is already aligned, but GCC doesn't know about it. 11837 11838`-minline-all-stringops' 11839 By default GCC inlines string operations only when destination is 11840 known to be aligned at least to 4 byte boundary. This enables 11841 more inlining, increase code size, but may improve performance of 11842 code that depends on fast memcpy, strlen and memset for short 11843 lengths. 11844 11845`-minline-stringops-dynamically' 11846 For string operation of unknown size, inline runtime checks so for 11847 small blocks inline code is used, while for large blocks library 11848 call is used. 11849 11850`-mstringop-strategy=ALG' 11851 Overwrite internal decision heuristic about particular algorithm 11852 to inline string operation with. The allowed values are 11853 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 11854 `rep' prefix of specified size, `byte_loop', `loop', 11855 `unrolled_loop' for expanding inline loop, `libcall' for always 11856 expanding library call. 11857 11858`-momit-leaf-frame-pointer' 11859 Don't keep the frame pointer in a register for leaf functions. 11860 This avoids the instructions to save, set up and restore frame 11861 pointers and makes an extra register available in leaf functions. 11862 The option `-fomit-frame-pointer' removes the frame pointer for 11863 all functions which might make debugging harder. 11864 11865`-mtls-direct-seg-refs' 11866`-mno-tls-direct-seg-refs' 11867 Controls whether TLS variables may be accessed with offsets from 11868 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 11869 whether the thread base pointer must be added. Whether or not this 11870 is legal depends on the operating system, and whether it maps the 11871 segment to cover the entire TLS area. 11872 11873 For systems that use GNU libc, the default is on. 11874 11875`-msse2avx' 11876`-mno-sse2avx' 11877 Specify that the assembler should encode SSE instructions with VEX 11878 prefix. The option `-mavx' turns this on by default. 11879 11880 These `-m' switches are supported in addition to the above on AMD 11881x86-64 processors in 64-bit environments. 11882 11883`-m32' 11884`-m64' 11885 Generate code for a 32-bit or 64-bit environment. The 32-bit 11886 environment sets int, long and pointer to 32 bits and generates 11887 code that runs on any i386 system. The 64-bit environment sets 11888 int to 32 bits and long and pointer to 64 bits and generates code 11889 for AMD's x86-64 architecture. For darwin only the -m64 option 11890 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 11891 11892`-mno-red-zone' 11893 Do not use a so called red zone for x86-64 code. The red zone is 11894 mandated by the x86-64 ABI, it is a 128-byte area beyond the 11895 location of the stack pointer that will not be modified by signal 11896 or interrupt handlers and therefore can be used for temporary data 11897 without adjusting the stack pointer. The flag `-mno-red-zone' 11898 disables this red zone. 11899 11900`-mcmodel=small' 11901 Generate code for the small code model: the program and its 11902 symbols must be linked in the lower 2 GB of the address space. 11903 Pointers are 64 bits. Programs can be statically or dynamically 11904 linked. This is the default code model. 11905 11906`-mcmodel=kernel' 11907 Generate code for the kernel code model. The kernel runs in the 11908 negative 2 GB of the address space. This model has to be used for 11909 Linux kernel code. 11910 11911`-mcmodel=medium' 11912 Generate code for the medium model: The program is linked in the 11913 lower 2 GB of the address space. Small symbols are also placed 11914 there. Symbols with sizes larger than `-mlarge-data-threshold' 11915 are put into large data or bss sections and can be located above 11916 2GB. Programs can be statically or dynamically linked. 11917 11918`-mcmodel=large' 11919 Generate code for the large model: This model makes no assumptions 11920 about addresses and sizes of sections. 11921 11922 11923File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 11924 119253.17.16 i386 and x86-64 Windows Options 11926--------------------------------------- 11927 11928These additional options are available for Windows targets: 11929 11930`-mconsole' 11931 This option is available for Cygwin and MinGW targets. It 11932 specifies that a console application is to be generated, by 11933 instructing the linker to set the PE header subsystem type 11934 required for console applications. This is the default behavior 11935 for Cygwin and MinGW targets. 11936 11937`-mcygwin' 11938 This option is available for Cygwin targets. It specifies that 11939 the Cygwin internal interface is to be used for predefined 11940 preprocessor macros, C runtime libraries and related linker paths 11941 and options. For Cygwin targets this is the default behavior. 11942 This option is deprecated and will be removed in a future release. 11943 11944`-mno-cygwin' 11945 This option is available for Cygwin targets. It specifies that 11946 the MinGW internal interface is to be used instead of Cygwin's, by 11947 setting MinGW-related predefined macros and linker paths and 11948 default library options. This option is deprecated and will be 11949 removed in a future release. 11950 11951`-mdll' 11952 This option is available for Cygwin and MinGW targets. It 11953 specifies that a DLL - a dynamic link library - is to be 11954 generated, enabling the selection of the required runtime startup 11955 object and entry point. 11956 11957`-mnop-fun-dllimport' 11958 This option is available for Cygwin and MinGW targets. It 11959 specifies that the dllimport attribute should be ignored. 11960 11961`-mthread' 11962 This option is available for MinGW targets. It specifies that 11963 MinGW-specific thread support is to be used. 11964 11965`-municode' 11966 This option is available for mingw-w64 targets. It specifies that 11967 the UNICODE macro is getting pre-defined and that the unicode 11968 capable runtime startup code is chosen. 11969 11970`-mwin32' 11971 This option is available for Cygwin and MinGW targets. It 11972 specifies that the typical Windows pre-defined macros are to be 11973 set in the pre-processor, but does not influence the choice of 11974 runtime library/startup code. 11975 11976`-mwindows' 11977 This option is available for Cygwin and MinGW targets. It 11978 specifies that a GUI application is to be generated by instructing 11979 the linker to set the PE header subsystem type appropriately. 11980 11981`-fno-set-stack-executable' 11982 This option is available for MinGW targets. It specifies that the 11983 executable flag for stack used by nested functions isn't set. This 11984 is necessary for binaries running in kernel mode of Windows, as 11985 there the user32 API, which is used to set executable privileges, 11986 isn't available. 11987 11988`-mpe-aligned-commons' 11989 This option is available for Cygwin and MinGW targets. It 11990 specifies that the GNU extension to the PE file format that 11991 permits the correct alignment of COMMON variables should be used 11992 when generating code. It will be enabled by default if GCC 11993 detects that the target assembler found during configuration 11994 supports the feature. 11995 11996 See also under *note i386 and x86-64 Options:: for standard options. 11997 11998 11999File: gcc.info, Node: IA-64 Options, Next: IA-64/VMS Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 12000 120013.17.17 IA-64 Options 12002--------------------- 12003 12004These are the `-m' options defined for the Intel IA-64 architecture. 12005 12006`-mbig-endian' 12007 Generate code for a big endian target. This is the default for 12008 HP-UX. 12009 12010`-mlittle-endian' 12011 Generate code for a little endian target. This is the default for 12012 AIX5 and GNU/Linux. 12013 12014`-mgnu-as' 12015`-mno-gnu-as' 12016 Generate (or don't) code for the GNU assembler. This is the 12017 default. 12018 12019`-mgnu-ld' 12020`-mno-gnu-ld' 12021 Generate (or don't) code for the GNU linker. This is the default. 12022 12023`-mno-pic' 12024 Generate code that does not use a global pointer register. The 12025 result is not position independent code, and violates the IA-64 12026 ABI. 12027 12028`-mvolatile-asm-stop' 12029`-mno-volatile-asm-stop' 12030 Generate (or don't) a stop bit immediately before and after 12031 volatile asm statements. 12032 12033`-mregister-names' 12034`-mno-register-names' 12035 Generate (or don't) `in', `loc', and `out' register names for the 12036 stacked registers. This may make assembler output more readable. 12037 12038`-mno-sdata' 12039`-msdata' 12040 Disable (or enable) optimizations that use the small data section. 12041 This may be useful for working around optimizer bugs. 12042 12043`-mconstant-gp' 12044 Generate code that uses a single constant global pointer value. 12045 This is useful when compiling kernel code. 12046 12047`-mauto-pic' 12048 Generate code that is self-relocatable. This implies 12049 `-mconstant-gp'. This is useful when compiling firmware code. 12050 12051`-minline-float-divide-min-latency' 12052 Generate code for inline divides of floating point values using 12053 the minimum latency algorithm. 12054 12055`-minline-float-divide-max-throughput' 12056 Generate code for inline divides of floating point values using 12057 the maximum throughput algorithm. 12058 12059`-mno-inline-float-divide' 12060 Do not generate inline code for divides of floating point values. 12061 12062`-minline-int-divide-min-latency' 12063 Generate code for inline divides of integer values using the 12064 minimum latency algorithm. 12065 12066`-minline-int-divide-max-throughput' 12067 Generate code for inline divides of integer values using the 12068 maximum throughput algorithm. 12069 12070`-mno-inline-int-divide' 12071 Do not generate inline code for divides of integer values. 12072 12073`-minline-sqrt-min-latency' 12074 Generate code for inline square roots using the minimum latency 12075 algorithm. 12076 12077`-minline-sqrt-max-throughput' 12078 Generate code for inline square roots using the maximum throughput 12079 algorithm. 12080 12081`-mno-inline-sqrt' 12082 Do not generate inline code for sqrt. 12083 12084`-mfused-madd' 12085`-mno-fused-madd' 12086 Do (don't) generate code that uses the fused multiply/add or 12087 multiply/subtract instructions. The default is to use these 12088 instructions. 12089 12090`-mno-dwarf2-asm' 12091`-mdwarf2-asm' 12092 Don't (or do) generate assembler code for the DWARF2 line number 12093 debugging info. This may be useful when not using the GNU 12094 assembler. 12095 12096`-mearly-stop-bits' 12097`-mno-early-stop-bits' 12098 Allow stop bits to be placed earlier than immediately preceding the 12099 instruction that triggered the stop bit. This can improve 12100 instruction scheduling, but does not always do so. 12101 12102`-mfixed-range=REGISTER-RANGE' 12103 Generate code treating the given register range as fixed registers. 12104 A fixed register is one that the register allocator can not use. 12105 This is useful when compiling kernel code. A register range is 12106 specified as two registers separated by a dash. Multiple register 12107 ranges can be specified separated by a comma. 12108 12109`-mtls-size=TLS-SIZE' 12110 Specify bit size of immediate TLS offsets. Valid values are 14, 12111 22, and 64. 12112 12113`-mtune=CPU-TYPE' 12114 Tune the instruction scheduling for a particular CPU, Valid values 12115 are itanium, itanium1, merced, itanium2, and mckinley. 12116 12117`-milp32' 12118`-mlp64' 12119 Generate code for a 32-bit or 64-bit environment. The 32-bit 12120 environment sets int, long and pointer to 32 bits. The 64-bit 12121 environment sets int to 32 bits and long and pointer to 64 bits. 12122 These are HP-UX specific flags. 12123 12124`-mno-sched-br-data-spec' 12125`-msched-br-data-spec' 12126 (Dis/En)able data speculative scheduling before reload. This will 12127 result in generation of the ld.a instructions and the 12128 corresponding check instructions (ld.c / chk.a). The default is 12129 'disable'. 12130 12131`-msched-ar-data-spec' 12132`-mno-sched-ar-data-spec' 12133 (En/Dis)able data speculative scheduling after reload. This will 12134 result in generation of the ld.a instructions and the 12135 corresponding check instructions (ld.c / chk.a). The default is 12136 'enable'. 12137 12138`-mno-sched-control-spec' 12139`-msched-control-spec' 12140 (Dis/En)able control speculative scheduling. This feature is 12141 available only during region scheduling (i.e. before reload). 12142 This will result in generation of the ld.s instructions and the 12143 corresponding check instructions chk.s . The default is 'disable'. 12144 12145`-msched-br-in-data-spec' 12146`-mno-sched-br-in-data-spec' 12147 (En/Dis)able speculative scheduling of the instructions that are 12148 dependent on the data speculative loads before reload. This is 12149 effective only with `-msched-br-data-spec' enabled. The default 12150 is 'enable'. 12151 12152`-msched-ar-in-data-spec' 12153`-mno-sched-ar-in-data-spec' 12154 (En/Dis)able speculative scheduling of the instructions that are 12155 dependent on the data speculative loads after reload. This is 12156 effective only with `-msched-ar-data-spec' enabled. The default 12157 is 'enable'. 12158 12159`-msched-in-control-spec' 12160`-mno-sched-in-control-spec' 12161 (En/Dis)able speculative scheduling of the instructions that are 12162 dependent on the control speculative loads. This is effective 12163 only with `-msched-control-spec' enabled. The default is 'enable'. 12164 12165`-mno-sched-prefer-non-data-spec-insns' 12166`-msched-prefer-non-data-spec-insns' 12167 If enabled, data speculative instructions will be chosen for 12168 schedule only if there are no other choices at the moment. This 12169 will make the use of the data speculation much more conservative. 12170 The default is 'disable'. 12171 12172`-mno-sched-prefer-non-control-spec-insns' 12173`-msched-prefer-non-control-spec-insns' 12174 If enabled, control speculative instructions will be chosen for 12175 schedule only if there are no other choices at the moment. This 12176 will make the use of the control speculation much more 12177 conservative. The default is 'disable'. 12178 12179`-mno-sched-count-spec-in-critical-path' 12180`-msched-count-spec-in-critical-path' 12181 If enabled, speculative dependencies will be considered during 12182 computation of the instructions priorities. This will make the 12183 use of the speculation a bit more conservative. The default is 12184 'disable'. 12185 12186`-msched-spec-ldc' 12187 Use a simple data speculation check. This option is on by default. 12188 12189`-msched-control-spec-ldc' 12190 Use a simple check for control speculation. This option is on by 12191 default. 12192 12193`-msched-stop-bits-after-every-cycle' 12194 Place a stop bit after every cycle when scheduling. This option 12195 is on by default. 12196 12197`-msched-fp-mem-deps-zero-cost' 12198 Assume that floating-point stores and loads are not likely to 12199 cause a conflict when placed into the same instruction group. 12200 This option is disabled by default. 12201 12202`-msel-sched-dont-check-control-spec' 12203 Generate checks for control speculation in selective scheduling. 12204 This flag is disabled by default. 12205 12206`-msched-max-memory-insns=MAX-INSNS' 12207 Limit on the number of memory insns per instruction group, giving 12208 lower priority to subsequent memory insns attempting to schedule 12209 in the same instruction group. Frequently useful to prevent cache 12210 bank conflicts. The default value is 1. 12211 12212`-msched-max-memory-insns-hard-limit' 12213 Disallow more than `msched-max-memory-insns' in instruction group. 12214 Otherwise, limit is `soft' meaning that we would prefer non-memory 12215 operations when limit is reached but may still schedule memory 12216 operations. 12217 12218 12219 12220File: gcc.info, Node: IA-64/VMS Options, Next: LM32 Options, Prev: IA-64 Options, Up: Submodel Options 12221 122223.17.18 IA-64/VMS Options 12223------------------------- 12224 12225These `-m' options are defined for the IA-64/VMS implementations: 12226 12227`-mvms-return-codes' 12228 Return VMS condition codes from main. The default is to return 12229 POSIX style condition (e.g. error) codes. 12230 12231`-mdebug-main=PREFIX' 12232 Flag the first routine whose name starts with PREFIX as the main 12233 routine for the debugger. 12234 12235`-mmalloc64' 12236 Default to 64bit memory allocation routines. 12237 12238 12239File: gcc.info, Node: LM32 Options, Next: M32C Options, Prev: IA-64/VMS Options, Up: Submodel Options 12240 122413.17.19 LM32 Options 12242-------------------- 12243 12244These `-m' options are defined for the Lattice Mico32 architecture: 12245 12246`-mbarrel-shift-enabled' 12247 Enable barrel-shift instructions. 12248 12249`-mdivide-enabled' 12250 Enable divide and modulus instructions. 12251 12252`-mmultiply-enabled' 12253 Enable multiply instructions. 12254 12255`-msign-extend-enabled' 12256 Enable sign extend instructions. 12257 12258`-muser-enabled' 12259 Enable user-defined instructions. 12260 12261 12262 12263File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: LM32 Options, Up: Submodel Options 12264 122653.17.20 M32C Options 12266-------------------- 12267 12268`-mcpu=NAME' 12269 Select the CPU for which code is generated. NAME may be one of 12270 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 12271 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 12272 series. 12273 12274`-msim' 12275 Specifies that the program will be run on the simulator. This 12276 causes an alternate runtime library to be linked in which 12277 supports, for example, file I/O. You must not use this option 12278 when generating programs that will run on real hardware; you must 12279 provide your own runtime library for whatever I/O functions are 12280 needed. 12281 12282`-memregs=NUMBER' 12283 Specifies the number of memory-based pseudo-registers GCC will use 12284 during code generation. These pseudo-registers will be used like 12285 real registers, so there is a tradeoff between GCC's ability to 12286 fit the code into available registers, and the performance penalty 12287 of using memory instead of registers. Note that all modules in a 12288 program must be compiled with the same value for this option. 12289 Because of that, you must not use this option with the default 12290 runtime libraries gcc builds. 12291 12292 12293 12294File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 12295 122963.17.21 M32R/D Options 12297---------------------- 12298 12299These `-m' options are defined for Renesas M32R/D architectures: 12300 12301`-m32r2' 12302 Generate code for the M32R/2. 12303 12304`-m32rx' 12305 Generate code for the M32R/X. 12306 12307`-m32r' 12308 Generate code for the M32R. This is the default. 12309 12310`-mmodel=small' 12311 Assume all objects live in the lower 16MB of memory (so that their 12312 addresses can be loaded with the `ld24' instruction), and assume 12313 all subroutines are reachable with the `bl' instruction. This is 12314 the default. 12315 12316 The addressability of a particular object can be set with the 12317 `model' attribute. 12318 12319`-mmodel=medium' 12320 Assume objects may be anywhere in the 32-bit address space (the 12321 compiler will generate `seth/add3' instructions to load their 12322 addresses), and assume all subroutines are reachable with the `bl' 12323 instruction. 12324 12325`-mmodel=large' 12326 Assume objects may be anywhere in the 32-bit address space (the 12327 compiler will generate `seth/add3' instructions to load their 12328 addresses), and assume subroutines may not be reachable with the 12329 `bl' instruction (the compiler will generate the much slower 12330 `seth/add3/jl' instruction sequence). 12331 12332`-msdata=none' 12333 Disable use of the small data area. Variables will be put into 12334 one of `.data', `bss', or `.rodata' (unless the `section' 12335 attribute has been specified). This is the default. 12336 12337 The small data area consists of sections `.sdata' and `.sbss'. 12338 Objects may be explicitly put in the small data area with the 12339 `section' attribute using one of these sections. 12340 12341`-msdata=sdata' 12342 Put small global and static data in the small data area, but do not 12343 generate special code to reference them. 12344 12345`-msdata=use' 12346 Put small global and static data in the small data area, and 12347 generate special instructions to reference them. 12348 12349`-G NUM' 12350 Put global and static objects less than or equal to NUM bytes into 12351 the small data or bss sections instead of the normal data or bss 12352 sections. The default value of NUM is 8. The `-msdata' option 12353 must be set to one of `sdata' or `use' for this option to have any 12354 effect. 12355 12356 All modules should be compiled with the same `-G NUM' value. 12357 Compiling with different values of NUM may or may not work; if it 12358 doesn't the linker will give an error message--incorrect code will 12359 not be generated. 12360 12361`-mdebug' 12362 Makes the M32R specific code in the compiler display some 12363 statistics that might help in debugging programs. 12364 12365`-malign-loops' 12366 Align all loops to a 32-byte boundary. 12367 12368`-mno-align-loops' 12369 Do not enforce a 32-byte alignment for loops. This is the default. 12370 12371`-missue-rate=NUMBER' 12372 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 12373 12374`-mbranch-cost=NUMBER' 12375 NUMBER can only be 1 or 2. If it is 1 then branches will be 12376 preferred over conditional code, if it is 2, then the opposite will 12377 apply. 12378 12379`-mflush-trap=NUMBER' 12380 Specifies the trap number to use to flush the cache. The default 12381 is 12. Valid numbers are between 0 and 15 inclusive. 12382 12383`-mno-flush-trap' 12384 Specifies that the cache cannot be flushed by using a trap. 12385 12386`-mflush-func=NAME' 12387 Specifies the name of the operating system function to call to 12388 flush the cache. The default is __flush_cache_, but a function 12389 call will only be used if a trap is not available. 12390 12391`-mno-flush-func' 12392 Indicates that there is no OS function for flushing the cache. 12393 12394 12395 12396File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 12397 123983.17.22 M680x0 Options 12399---------------------- 12400 12401These are the `-m' options defined for M680x0 and ColdFire processors. 12402The default settings depend on which architecture was selected when the 12403compiler was configured; the defaults for the most common choices are 12404given below. 12405 12406`-march=ARCH' 12407 Generate code for a specific M680x0 or ColdFire instruction set 12408 architecture. Permissible values of ARCH for M680x0 architectures 12409 are: `68000', `68010', `68020', `68030', `68040', `68060' and 12410 `cpu32'. ColdFire architectures are selected according to 12411 Freescale's ISA classification and the permissible values are: 12412 `isaa', `isaaplus', `isab' and `isac'. 12413 12414 gcc defines a macro `__mcfARCH__' whenever it is generating code 12415 for a ColdFire target. The ARCH in this macro is one of the 12416 `-march' arguments given above. 12417 12418 When used together, `-march' and `-mtune' select code that runs on 12419 a family of similar processors but that is optimized for a 12420 particular microarchitecture. 12421 12422`-mcpu=CPU' 12423 Generate code for a specific M680x0 or ColdFire processor. The 12424 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 12425 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 12426 given by the table below, which also classifies the CPUs into 12427 families: 12428 12429 *Family* *`-mcpu' arguments* 12430 `51' `51' `51ac' `51cn' `51em' `51qe' 12431 `5206' `5202' `5204' `5206' 12432 `5206e' `5206e' 12433 `5208' `5207' `5208' 12434 `5211a' `5210a' `5211a' 12435 `5213' `5211' `5212' `5213' 12436 `5216' `5214' `5216' 12437 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 12438 `5225' `5224' `5225' 12439 `52259' `52252' `52254' `52255' `52256' `52258' `52259' 12440 `5235' `5232' `5233' `5234' `5235' `523x' 12441 `5249' `5249' 12442 `5250' `5250' 12443 `5271' `5270' `5271' 12444 `5272' `5272' 12445 `5275' `5274' `5275' 12446 `5282' `5280' `5281' `5282' `528x' 12447 `53017' `53011' `53012' `53013' `53014' `53015' `53016' 12448 `53017' 12449 `5307' `5307' 12450 `5329' `5327' `5328' `5329' `532x' 12451 `5373' `5372' `5373' `537x' 12452 `5407' `5407' 12453 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 12454 `5480' `5481' `5482' `5483' `5484' `5485' 12455 12456 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 12457 CPU. Other combinations of `-mcpu' and `-march' are rejected. 12458 12459 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 12460 selected. It also defines `__mcf_family_FAMILY', where the value 12461 of FAMILY is given by the table above. 12462 12463`-mtune=TUNE' 12464 Tune the code for a particular microarchitecture, within the 12465 constraints set by `-march' and `-mcpu'. The M680x0 12466 microarchitectures are: `68000', `68010', `68020', `68030', 12467 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 12468 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 12469 12470 You can also use `-mtune=68020-40' for code that needs to run 12471 relatively well on 68020, 68030 and 68040 targets. 12472 `-mtune=68020-60' is similar but includes 68060 targets as well. 12473 These two options select the same tuning decisions as `-m68020-40' 12474 and `-m68020-60' respectively. 12475 12476 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 12477 680x0 architecture ARCH. It also defines `mcARCH' unless either 12478 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 12479 a range of architectures, as selected by `-mtune=68020-40' or 12480 `-mtune=68020-60', it defines the macros for every architecture in 12481 the range. 12482 12483 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 12484 microarchitecture UARCH, where UARCH is one of the arguments given 12485 above. 12486 12487`-m68000' 12488`-mc68000' 12489 Generate output for a 68000. This is the default when the 12490 compiler is configured for 68000-based systems. It is equivalent 12491 to `-march=68000'. 12492 12493 Use this option for microcontrollers with a 68000 or EC000 core, 12494 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 12495 12496`-m68010' 12497 Generate output for a 68010. This is the default when the 12498 compiler is configured for 68010-based systems. It is equivalent 12499 to `-march=68010'. 12500 12501`-m68020' 12502`-mc68020' 12503 Generate output for a 68020. This is the default when the 12504 compiler is configured for 68020-based systems. It is equivalent 12505 to `-march=68020'. 12506 12507`-m68030' 12508 Generate output for a 68030. This is the default when the 12509 compiler is configured for 68030-based systems. It is equivalent 12510 to `-march=68030'. 12511 12512`-m68040' 12513 Generate output for a 68040. This is the default when the 12514 compiler is configured for 68040-based systems. It is equivalent 12515 to `-march=68040'. 12516 12517 This option inhibits the use of 68881/68882 instructions that have 12518 to be emulated by software on the 68040. Use this option if your 12519 68040 does not have code to emulate those instructions. 12520 12521`-m68060' 12522 Generate output for a 68060. This is the default when the 12523 compiler is configured for 68060-based systems. It is equivalent 12524 to `-march=68060'. 12525 12526 This option inhibits the use of 68020 and 68881/68882 instructions 12527 that have to be emulated by software on the 68060. Use this 12528 option if your 68060 does not have code to emulate those 12529 instructions. 12530 12531`-mcpu32' 12532 Generate output for a CPU32. This is the default when the 12533 compiler is configured for CPU32-based systems. It is equivalent 12534 to `-march=cpu32'. 12535 12536 Use this option for microcontrollers with a CPU32 or CPU32+ core, 12537 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 12538 68341, 68349 and 68360. 12539 12540`-m5200' 12541 Generate output for a 520X ColdFire CPU. This is the default when 12542 the compiler is configured for 520X-based systems. It is 12543 equivalent to `-mcpu=5206', and is now deprecated in favor of that 12544 option. 12545 12546 Use this option for microcontroller with a 5200 core, including 12547 the MCF5202, MCF5203, MCF5204 and MCF5206. 12548 12549`-m5206e' 12550 Generate output for a 5206e ColdFire CPU. The option is now 12551 deprecated in favor of the equivalent `-mcpu=5206e'. 12552 12553`-m528x' 12554 Generate output for a member of the ColdFire 528X family. The 12555 option is now deprecated in favor of the equivalent `-mcpu=528x'. 12556 12557`-m5307' 12558 Generate output for a ColdFire 5307 CPU. The option is now 12559 deprecated in favor of the equivalent `-mcpu=5307'. 12560 12561`-m5407' 12562 Generate output for a ColdFire 5407 CPU. The option is now 12563 deprecated in favor of the equivalent `-mcpu=5407'. 12564 12565`-mcfv4e' 12566 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 12567 This includes use of hardware floating point instructions. The 12568 option is equivalent to `-mcpu=547x', and is now deprecated in 12569 favor of that option. 12570 12571`-m68020-40' 12572 Generate output for a 68040, without using any of the new 12573 instructions. This results in code which can run relatively 12574 efficiently on either a 68020/68881 or a 68030 or a 68040. The 12575 generated code does use the 68881 instructions that are emulated 12576 on the 68040. 12577 12578 The option is equivalent to `-march=68020' `-mtune=68020-40'. 12579 12580`-m68020-60' 12581 Generate output for a 68060, without using any of the new 12582 instructions. This results in code which can run relatively 12583 efficiently on either a 68020/68881 or a 68030 or a 68040. The 12584 generated code does use the 68881 instructions that are emulated 12585 on the 68060. 12586 12587 The option is equivalent to `-march=68020' `-mtune=68020-60'. 12588 12589`-mhard-float' 12590`-m68881' 12591 Generate floating-point instructions. This is the default for 12592 68020 and above, and for ColdFire devices that have an FPU. It 12593 defines the macro `__HAVE_68881__' on M680x0 targets and 12594 `__mcffpu__' on ColdFire targets. 12595 12596`-msoft-float' 12597 Do not generate floating-point instructions; use library calls 12598 instead. This is the default for 68000, 68010, and 68832 targets. 12599 It is also the default for ColdFire devices that have no FPU. 12600 12601`-mdiv' 12602`-mno-div' 12603 Generate (do not generate) ColdFire hardware divide and remainder 12604 instructions. If `-march' is used without `-mcpu', the default is 12605 "on" for ColdFire architectures and "off" for M680x0 12606 architectures. Otherwise, the default is taken from the target CPU 12607 (either the default CPU, or the one specified by `-mcpu'). For 12608 example, the default is "off" for `-mcpu=5206' and "on" for 12609 `-mcpu=5206e'. 12610 12611 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 12612 12613`-mshort' 12614 Consider type `int' to be 16 bits wide, like `short int'. 12615 Additionally, parameters passed on the stack are also aligned to a 12616 16-bit boundary even on targets whose API mandates promotion to 12617 32-bit. 12618 12619`-mno-short' 12620 Do not consider type `int' to be 16 bits wide. This is the 12621 default. 12622 12623`-mnobitfield' 12624`-mno-bitfield' 12625 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 12626 and `-m5200' options imply `-mnobitfield'. 12627 12628`-mbitfield' 12629 Do use the bit-field instructions. The `-m68020' option implies 12630 `-mbitfield'. This is the default if you use a configuration 12631 designed for a 68020. 12632 12633`-mrtd' 12634 Use a different function-calling convention, in which functions 12635 that take a fixed number of arguments return with the `rtd' 12636 instruction, which pops their arguments while returning. This 12637 saves one instruction in the caller since there is no need to pop 12638 the arguments there. 12639 12640 This calling convention is incompatible with the one normally used 12641 on Unix, so you cannot use it if you need to call libraries 12642 compiled with the Unix compiler. 12643 12644 Also, you must provide function prototypes for all functions that 12645 take variable numbers of arguments (including `printf'); otherwise 12646 incorrect code will be generated for calls to those functions. 12647 12648 In addition, seriously incorrect code will result if you call a 12649 function with too many arguments. (Normally, extra arguments are 12650 harmlessly ignored.) 12651 12652 The `rtd' instruction is supported by the 68010, 68020, 68030, 12653 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 12654 12655`-mno-rtd' 12656 Do not use the calling conventions selected by `-mrtd'. This is 12657 the default. 12658 12659`-malign-int' 12660`-mno-align-int' 12661 Control whether GCC aligns `int', `long', `long long', `float', 12662 `double', and `long double' variables on a 32-bit boundary 12663 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 12664 variables on 32-bit boundaries produces code that runs somewhat 12665 faster on processors with 32-bit busses at the expense of more 12666 memory. 12667 12668 *Warning:* if you use the `-malign-int' switch, GCC will align 12669 structures containing the above types differently than most 12670 published application binary interface specifications for the m68k. 12671 12672`-mpcrel' 12673 Use the pc-relative addressing mode of the 68000 directly, instead 12674 of using a global offset table. At present, this option implies 12675 `-fpic', allowing at most a 16-bit offset for pc-relative 12676 addressing. `-fPIC' is not presently supported with `-mpcrel', 12677 though this could be supported for 68020 and higher processors. 12678 12679`-mno-strict-align' 12680`-mstrict-align' 12681 Do not (do) assume that unaligned memory references will be 12682 handled by the system. 12683 12684`-msep-data' 12685 Generate code that allows the data segment to be located in a 12686 different area of memory from the text segment. This allows for 12687 execute in place in an environment without virtual memory 12688 management. This option implies `-fPIC'. 12689 12690`-mno-sep-data' 12691 Generate code that assumes that the data segment follows the text 12692 segment. This is the default. 12693 12694`-mid-shared-library' 12695 Generate code that supports shared libraries via the library ID 12696 method. This allows for execute in place and shared libraries in 12697 an environment without virtual memory management. This option 12698 implies `-fPIC'. 12699 12700`-mno-id-shared-library' 12701 Generate code that doesn't assume ID based shared libraries are 12702 being used. This is the default. 12703 12704`-mshared-library-id=n' 12705 Specified the identification number of the ID based shared library 12706 being compiled. Specifying a value of 0 will generate more 12707 compact code, specifying other values will force the allocation of 12708 that number to the current library but is no more space or time 12709 efficient than omitting this option. 12710 12711`-mxgot' 12712`-mno-xgot' 12713 When generating position-independent code for ColdFire, generate 12714 code that works if the GOT has more than 8192 entries. This code 12715 is larger and slower than code generated without this option. On 12716 M680x0 processors, this option is not needed; `-fPIC' suffices. 12717 12718 GCC normally uses a single instruction to load values from the GOT. 12719 While this is relatively efficient, it only works if the GOT is 12720 smaller than about 64k. Anything larger causes the linker to 12721 report an error such as: 12722 12723 relocation truncated to fit: R_68K_GOT16O foobar 12724 12725 If this happens, you should recompile your code with `-mxgot'. It 12726 should then work with very large GOTs. However, code generated 12727 with `-mxgot' is less efficient, since it takes 4 instructions to 12728 fetch the value of a global symbol. 12729 12730 Note that some linkers, including newer versions of the GNU linker, 12731 can create multiple GOTs and sort GOT entries. If you have such a 12732 linker, you should only need to use `-mxgot' when compiling a 12733 single object file that accesses more than 8192 GOT entries. Very 12734 few do. 12735 12736 These options have no effect unless GCC is generating 12737 position-independent code. 12738 12739 12740 12741File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 12742 127433.17.23 M68hc1x Options 12744----------------------- 12745 12746These are the `-m' options defined for the 68hc11 and 68hc12 12747microcontrollers. The default values for these options depends on 12748which style of microcontroller was selected when the compiler was 12749configured; the defaults for the most common choices are given below. 12750 12751`-m6811' 12752`-m68hc11' 12753 Generate output for a 68HC11. This is the default when the 12754 compiler is configured for 68HC11-based systems. 12755 12756`-m6812' 12757`-m68hc12' 12758 Generate output for a 68HC12. This is the default when the 12759 compiler is configured for 68HC12-based systems. 12760 12761`-m68S12' 12762`-m68hcs12' 12763 Generate output for a 68HCS12. 12764 12765`-mauto-incdec' 12766 Enable the use of 68HC12 pre and post auto-increment and 12767 auto-decrement addressing modes. 12768 12769`-minmax' 12770`-mnominmax' 12771 Enable the use of 68HC12 min and max instructions. 12772 12773`-mlong-calls' 12774`-mno-long-calls' 12775 Treat all calls as being far away (near). If calls are assumed to 12776 be far away, the compiler will use the `call' instruction to call 12777 a function and the `rtc' instruction for returning. 12778 12779`-mshort' 12780 Consider type `int' to be 16 bits wide, like `short int'. 12781 12782`-msoft-reg-count=COUNT' 12783 Specify the number of pseudo-soft registers which are used for the 12784 code generation. The maximum number is 32. Using more pseudo-soft 12785 register may or may not result in better code depending on the 12786 program. The default is 4 for 68HC11 and 2 for 68HC12. 12787 12788 12789 12790File: gcc.info, Node: MCore Options, Next: MeP Options, Prev: M68hc1x Options, Up: Submodel Options 12791 127923.17.24 MCore Options 12793--------------------- 12794 12795These are the `-m' options defined for the Motorola M*Core processors. 12796 12797`-mhardlit' 12798`-mno-hardlit' 12799 Inline constants into the code stream if it can be done in two 12800 instructions or less. 12801 12802`-mdiv' 12803`-mno-div' 12804 Use the divide instruction. (Enabled by default). 12805 12806`-mrelax-immediate' 12807`-mno-relax-immediate' 12808 Allow arbitrary sized immediates in bit operations. 12809 12810`-mwide-bitfields' 12811`-mno-wide-bitfields' 12812 Always treat bit-fields as int-sized. 12813 12814`-m4byte-functions' 12815`-mno-4byte-functions' 12816 Force all functions to be aligned to a four byte boundary. 12817 12818`-mcallgraph-data' 12819`-mno-callgraph-data' 12820 Emit callgraph information. 12821 12822`-mslow-bytes' 12823`-mno-slow-bytes' 12824 Prefer word access when reading byte quantities. 12825 12826`-mlittle-endian' 12827`-mbig-endian' 12828 Generate code for a little endian target. 12829 12830`-m210' 12831`-m340' 12832 Generate code for the 210 processor. 12833 12834`-mno-lsim' 12835 Assume that run-time support has been provided and so omit the 12836 simulator library (`libsim.a)' from the linker command line. 12837 12838`-mstack-increment=SIZE' 12839 Set the maximum amount for a single stack increment operation. 12840 Large values can increase the speed of programs which contain 12841 functions that need a large amount of stack space, but they can 12842 also trigger a segmentation fault if the stack is extended too 12843 much. The default value is 0x1000. 12844 12845 12846 12847File: gcc.info, Node: MeP Options, Next: MIPS Options, Prev: MCore Options, Up: Submodel Options 12848 128493.17.25 MeP Options 12850------------------- 12851 12852`-mabsdiff' 12853 Enables the `abs' instruction, which is the absolute difference 12854 between two registers. 12855 12856`-mall-opts' 12857 Enables all the optional instructions - average, multiply, divide, 12858 bit operations, leading zero, absolute difference, min/max, clip, 12859 and saturation. 12860 12861`-maverage' 12862 Enables the `ave' instruction, which computes the average of two 12863 registers. 12864 12865`-mbased=N' 12866 Variables of size N bytes or smaller will be placed in the 12867 `.based' section by default. Based variables use the `$tp' 12868 register as a base register, and there is a 128 byte limit to the 12869 `.based' section. 12870 12871`-mbitops' 12872 Enables the bit operation instructions - bit test (`btstm'), set 12873 (`bsetm'), clear (`bclrm'), invert (`bnotm'), and test-and-set 12874 (`tas'). 12875 12876`-mc=NAME' 12877 Selects which section constant data will be placed in. NAME may 12878 be `tiny', `near', or `far'. 12879 12880`-mclip' 12881 Enables the `clip' instruction. Note that `-mclip' is not useful 12882 unless you also provide `-mminmax'. 12883 12884`-mconfig=NAME' 12885 Selects one of the build-in core configurations. Each MeP chip has 12886 one or more modules in it; each module has a core CPU and a 12887 variety of coprocessors, optional instructions, and peripherals. 12888 The `MeP-Integrator' tool, not part of GCC, provides these 12889 configurations through this option; using this option is the same 12890 as using all the corresponding command line options. The default 12891 configuration is `default'. 12892 12893`-mcop' 12894 Enables the coprocessor instructions. By default, this is a 32-bit 12895 coprocessor. Note that the coprocessor is normally enabled via the 12896 `-mconfig=' option. 12897 12898`-mcop32' 12899 Enables the 32-bit coprocessor's instructions. 12900 12901`-mcop64' 12902 Enables the 64-bit coprocessor's instructions. 12903 12904`-mivc2' 12905 Enables IVC2 scheduling. IVC2 is a 64-bit VLIW coprocessor. 12906 12907`-mdc' 12908 Causes constant variables to be placed in the `.near' section. 12909 12910`-mdiv' 12911 Enables the `div' and `divu' instructions. 12912 12913`-meb' 12914 Generate big-endian code. 12915 12916`-mel' 12917 Generate little-endian code. 12918 12919`-mio-volatile' 12920 Tells the compiler that any variable marked with the `io' 12921 attribute is to be considered volatile. 12922 12923`-ml' 12924 Causes variables to be assigned to the `.far' section by default. 12925 12926`-mleadz' 12927 Enables the `leadz' (leading zero) instruction. 12928 12929`-mm' 12930 Causes variables to be assigned to the `.near' section by default. 12931 12932`-mminmax' 12933 Enables the `min' and `max' instructions. 12934 12935`-mmult' 12936 Enables the multiplication and multiply-accumulate instructions. 12937 12938`-mno-opts' 12939 Disables all the optional instructions enabled by `-mall-opts'. 12940 12941`-mrepeat' 12942 Enables the `repeat' and `erepeat' instructions, used for 12943 low-overhead looping. 12944 12945`-ms' 12946 Causes all variables to default to the `.tiny' section. Note that 12947 there is a 65536 byte limit to this section. Accesses to these 12948 variables use the `%gp' base register. 12949 12950`-msatur' 12951 Enables the saturation instructions. Note that the compiler does 12952 not currently generate these itself, but this option is included 12953 for compatibility with other tools, like `as'. 12954 12955`-msdram' 12956 Link the SDRAM-based runtime instead of the default ROM-based 12957 runtime. 12958 12959`-msim' 12960 Link the simulator runtime libraries. 12961 12962`-msimnovec' 12963 Link the simulator runtime libraries, excluding built-in support 12964 for reset and exception vectors and tables. 12965 12966`-mtf' 12967 Causes all functions to default to the `.far' section. Without 12968 this option, functions default to the `.near' section. 12969 12970`-mtiny=N' 12971 Variables that are N bytes or smaller will be allocated to the 12972 `.tiny' section. These variables use the `$gp' base register. 12973 The default for this option is 4, but note that there's a 65536 12974 byte limit to the `.tiny' section. 12975 12976 12977 12978File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MeP Options, Up: Submodel Options 12979 129803.17.26 MIPS Options 12981-------------------- 12982 12983`-EB' 12984 Generate big-endian code. 12985 12986`-EL' 12987 Generate little-endian code. This is the default for `mips*el-*-*' 12988 configurations. 12989 12990`-march=ARCH' 12991 Generate code that will run on ARCH, which can be the name of a 12992 generic MIPS ISA, or the name of a particular processor. The ISA 12993 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 12994 `mips32r2', `mips64' and `mips64r2'. The processor names are: 12995 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 12996 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 12997 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', 12998 `74kf2_1', `74kf1_1', `74kf3_2', `1004kc', `1004kf2_1', 12999 `1004kf1_1', `loongson2e', `loongson2f', `m4k', `octeon', `orion', 13000 `r2000', `r3000', `r3900', `r4000', `r4400', `r4600', `r4650', 13001 `r6000', `r8000', `rm7000', `rm9000', `r10000', `r12000', 13002 `r14000', `r16000', `sb1', `sr71000', `vr4100', `vr4111', 13003 `vr4120', `vr4130', `vr4300', `vr5000', `vr5400', `vr5500' and 13004 `xlr'. The special value `from-abi' selects the most compatible 13005 architecture for the selected ABI (that is, `mips1' for 32-bit 13006 ABIs and `mips3' for 64-bit ABIs). 13007 13008 Native Linux/GNU toolchains also support the value `native', which 13009 selects the best architecture option for the host processor. 13010 `-march=native' has no effect if GCC does not recognize the 13011 processor. 13012 13013 In processor names, a final `000' can be abbreviated as `k' (for 13014 example, `-march=r2k'). Prefixes are optional, and `vr' may be 13015 written `r'. 13016 13017 Names of the form `Nf2_1' refer to processors with FPUs clocked at 13018 half the rate of the core, names of the form `Nf1_1' refer to 13019 processors with FPUs clocked at the same rate as the core, and 13020 names of the form `Nf3_2' refer to processors with FPUs clocked a 13021 ratio of 3:2 with respect to the core. For compatibility reasons, 13022 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 13023 accepted as synonyms for `Nf1_1'. 13024 13025 GCC defines two macros based on the value of this option. The 13026 first is `_MIPS_ARCH', which gives the name of target 13027 architecture, as a string. The second has the form 13028 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 13029 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 13030 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 13031 13032 Note that the `_MIPS_ARCH' macro uses the processor names given 13033 above. In other words, it will have the full prefix and will not 13034 abbreviate `000' as `k'. In the case of `from-abi', the macro 13035 names the resolved architecture (either `"mips1"' or `"mips3"'). 13036 It names the default architecture when no `-march' option is given. 13037 13038`-mtune=ARCH' 13039 Optimize for ARCH. Among other things, this option controls the 13040 way instructions are scheduled, and the perceived cost of 13041 arithmetic operations. The list of ARCH values is the same as for 13042 `-march'. 13043 13044 When this option is not used, GCC will optimize for the processor 13045 specified by `-march'. By using `-march' and `-mtune' together, 13046 it is possible to generate code that will run on a family of 13047 processors, but optimize the code for one particular member of 13048 that family. 13049 13050 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 13051 which work in the same way as the `-march' ones described above. 13052 13053`-mips1' 13054 Equivalent to `-march=mips1'. 13055 13056`-mips2' 13057 Equivalent to `-march=mips2'. 13058 13059`-mips3' 13060 Equivalent to `-march=mips3'. 13061 13062`-mips4' 13063 Equivalent to `-march=mips4'. 13064 13065`-mips32' 13066 Equivalent to `-march=mips32'. 13067 13068`-mips32r2' 13069 Equivalent to `-march=mips32r2'. 13070 13071`-mips64' 13072 Equivalent to `-march=mips64'. 13073 13074`-mips64r2' 13075 Equivalent to `-march=mips64r2'. 13076 13077`-mips16' 13078`-mno-mips16' 13079 Generate (do not generate) MIPS16 code. If GCC is targetting a 13080 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 13081 13082 MIPS16 code generation can also be controlled on a per-function 13083 basis by means of `mips16' and `nomips16' attributes. *Note 13084 Function Attributes::, for more information. 13085 13086`-mflip-mips16' 13087 Generate MIPS16 code on alternating functions. This option is 13088 provided for regression testing of mixed MIPS16/non-MIPS16 code 13089 generation, and is not intended for ordinary use in compiling user 13090 code. 13091 13092`-minterlink-mips16' 13093`-mno-interlink-mips16' 13094 Require (do not require) that non-MIPS16 code be link-compatible 13095 with MIPS16 code. 13096 13097 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 13098 it must either use a call or an indirect jump. 13099 `-minterlink-mips16' therefore disables direct jumps unless GCC 13100 knows that the target of the jump is not MIPS16. 13101 13102`-mabi=32' 13103`-mabi=o64' 13104`-mabi=n32' 13105`-mabi=64' 13106`-mabi=eabi' 13107 Generate code for the given ABI. 13108 13109 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 13110 generates 64-bit code when you select a 64-bit architecture, but 13111 you can use `-mgp32' to get 32-bit code instead. 13112 13113 For information about the O64 ABI, see 13114 `http://gcc.gnu.org/projects/mipso64-abi.html'. 13115 13116 GCC supports a variant of the o32 ABI in which floating-point 13117 registers are 64 rather than 32 bits wide. You can select this 13118 combination with `-mabi=32' `-mfp64'. This ABI relies on the 13119 `mthc1' and `mfhc1' instructions and is therefore only supported 13120 for MIPS32R2 processors. 13121 13122 The register assignments for arguments and return values remain the 13123 same, but each scalar value is passed in a single 64-bit register 13124 rather than a pair of 32-bit registers. For example, scalar 13125 floating-point values are returned in `$f0' only, not a 13126 `$f0'/`$f1' pair. The set of call-saved registers also remains 13127 the same, but all 64 bits are saved. 13128 13129`-mabicalls' 13130`-mno-abicalls' 13131 Generate (do not generate) code that is suitable for SVR4-style 13132 dynamic objects. `-mabicalls' is the default for SVR4-based 13133 systems. 13134 13135`-mshared' 13136`-mno-shared' 13137 Generate (do not generate) code that is fully position-independent, 13138 and that can therefore be linked into shared libraries. This 13139 option only affects `-mabicalls'. 13140 13141 All `-mabicalls' code has traditionally been position-independent, 13142 regardless of options like `-fPIC' and `-fpic'. However, as an 13143 extension, the GNU toolchain allows executables to use absolute 13144 accesses for locally-binding symbols. It can also use shorter GP 13145 initialization sequences and generate direct calls to 13146 locally-defined functions. This mode is selected by `-mno-shared'. 13147 13148 `-mno-shared' depends on binutils 2.16 or higher and generates 13149 objects that can only be linked by the GNU linker. However, the 13150 option does not affect the ABI of the final executable; it only 13151 affects the ABI of relocatable objects. Using `-mno-shared' will 13152 generally make executables both smaller and quicker. 13153 13154 `-mshared' is the default. 13155 13156`-mplt' 13157`-mno-plt' 13158 Assume (do not assume) that the static and dynamic linkers support 13159 PLTs and copy relocations. This option only affects `-mno-shared 13160 -mabicalls'. For the n64 ABI, this option has no effect without 13161 `-msym32'. 13162 13163 You can make `-mplt' the default by configuring GCC with 13164 `--with-mips-plt'. The default is `-mno-plt' otherwise. 13165 13166`-mxgot' 13167`-mno-xgot' 13168 Lift (do not lift) the usual restrictions on the size of the global 13169 offset table. 13170 13171 GCC normally uses a single instruction to load values from the GOT. 13172 While this is relatively efficient, it will only work if the GOT 13173 is smaller than about 64k. Anything larger will cause the linker 13174 to report an error such as: 13175 13176 relocation truncated to fit: R_MIPS_GOT16 foobar 13177 13178 If this happens, you should recompile your code with `-mxgot'. It 13179 should then work with very large GOTs, although it will also be 13180 less efficient, since it will take three instructions to fetch the 13181 value of a global symbol. 13182 13183 Note that some linkers can create multiple GOTs. If you have such 13184 a linker, you should only need to use `-mxgot' when a single object 13185 file accesses more than 64k's worth of GOT entries. Very few do. 13186 13187 These options have no effect unless GCC is generating position 13188 independent code. 13189 13190`-mgp32' 13191 Assume that general-purpose registers are 32 bits wide. 13192 13193`-mgp64' 13194 Assume that general-purpose registers are 64 bits wide. 13195 13196`-mfp32' 13197 Assume that floating-point registers are 32 bits wide. 13198 13199`-mfp64' 13200 Assume that floating-point registers are 64 bits wide. 13201 13202`-mhard-float' 13203 Use floating-point coprocessor instructions. 13204 13205`-msoft-float' 13206 Do not use floating-point coprocessor instructions. Implement 13207 floating-point calculations using library calls instead. 13208 13209`-msingle-float' 13210 Assume that the floating-point coprocessor only supports 13211 single-precision operations. 13212 13213`-mdouble-float' 13214 Assume that the floating-point coprocessor supports 13215 double-precision operations. This is the default. 13216 13217`-mllsc' 13218`-mno-llsc' 13219 Use (do not use) `ll', `sc', and `sync' instructions to implement 13220 atomic memory built-in functions. When neither option is 13221 specified, GCC will use the instructions if the target architecture 13222 supports them. 13223 13224 `-mllsc' is useful if the runtime environment can emulate the 13225 instructions and `-mno-llsc' can be useful when compiling for 13226 nonstandard ISAs. You can make either option the default by 13227 configuring GCC with `--with-llsc' and `--without-llsc' 13228 respectively. `--with-llsc' is the default for some 13229 configurations; see the installation documentation for details. 13230 13231`-mdsp' 13232`-mno-dsp' 13233 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 13234 Built-in Functions::. This option defines the preprocessor macro 13235 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 13236 13237`-mdspr2' 13238`-mno-dspr2' 13239 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 13240 Built-in Functions::. This option defines the preprocessor macros 13241 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 13242 to 2. 13243 13244`-msmartmips' 13245`-mno-smartmips' 13246 Use (do not use) the MIPS SmartMIPS ASE. 13247 13248`-mpaired-single' 13249`-mno-paired-single' 13250 Use (do not use) paired-single floating-point instructions. *Note 13251 MIPS Paired-Single Support::. This option requires hardware 13252 floating-point support to be enabled. 13253 13254`-mdmx' 13255`-mno-mdmx' 13256 Use (do not use) MIPS Digital Media Extension instructions. This 13257 option can only be used when generating 64-bit code and requires 13258 hardware floating-point support to be enabled. 13259 13260`-mips3d' 13261`-mno-mips3d' 13262 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 13263 Functions::. The option `-mips3d' implies `-mpaired-single'. 13264 13265`-mmt' 13266`-mno-mt' 13267 Use (do not use) MT Multithreading instructions. 13268 13269`-mlong64' 13270 Force `long' types to be 64 bits wide. See `-mlong32' for an 13271 explanation of the default and the way that the pointer size is 13272 determined. 13273 13274`-mlong32' 13275 Force `long', `int', and pointer types to be 32 bits wide. 13276 13277 The default size of `int's, `long's and pointers depends on the 13278 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 13279 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 13280 `long's. Pointers are the same size as `long's, or the same size 13281 as integer registers, whichever is smaller. 13282 13283`-msym32' 13284`-mno-sym32' 13285 Assume (do not assume) that all symbols have 32-bit values, 13286 regardless of the selected ABI. This option is useful in 13287 combination with `-mabi=64' and `-mno-abicalls' because it allows 13288 GCC to generate shorter and faster references to symbolic 13289 addresses. 13290 13291`-G NUM' 13292 Put definitions of externally-visible data in a small data section 13293 if that data is no bigger than NUM bytes. GCC can then access the 13294 data more efficiently; see `-mgpopt' for details. 13295 13296 The default `-G' option depends on the configuration. 13297 13298`-mlocal-sdata' 13299`-mno-local-sdata' 13300 Extend (do not extend) the `-G' behavior to local data too, such 13301 as to static variables in C. `-mlocal-sdata' is the default for 13302 all configurations. 13303 13304 If the linker complains that an application is using too much 13305 small data, you might want to try rebuilding the less 13306 performance-critical parts with `-mno-local-sdata'. You might 13307 also want to build large libraries with `-mno-local-sdata', so 13308 that the libraries leave more room for the main program. 13309 13310`-mextern-sdata' 13311`-mno-extern-sdata' 13312 Assume (do not assume) that externally-defined data will be in a 13313 small data section if that data is within the `-G' limit. 13314 `-mextern-sdata' is the default for all configurations. 13315 13316 If you compile a module MOD with `-mextern-sdata' `-G NUM' 13317 `-mgpopt', and MOD references a variable VAR that is no bigger 13318 than NUM bytes, you must make sure that VAR is placed in a small 13319 data section. If VAR is defined by another module, you must 13320 either compile that module with a high-enough `-G' setting or 13321 attach a `section' attribute to VAR's definition. If VAR is 13322 common, you must link the application with a high-enough `-G' 13323 setting. 13324 13325 The easiest way of satisfying these restrictions is to compile and 13326 link every module with the same `-G' option. However, you may 13327 wish to build a library that supports several different small data 13328 limits. You can do this by compiling the library with the highest 13329 supported `-G' setting and additionally using `-mno-extern-sdata' 13330 to stop the library from making assumptions about 13331 externally-defined data. 13332 13333`-mgpopt' 13334`-mno-gpopt' 13335 Use (do not use) GP-relative accesses for symbols that are known 13336 to be in a small data section; see `-G', `-mlocal-sdata' and 13337 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 13338 13339 `-mno-gpopt' is useful for cases where the `$gp' register might 13340 not hold the value of `_gp'. For example, if the code is part of 13341 a library that might be used in a boot monitor, programs that call 13342 boot monitor routines will pass an unknown value in `$gp'. (In 13343 such situations, the boot monitor itself would usually be compiled 13344 with `-G0'.) 13345 13346 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 13347 13348`-membedded-data' 13349`-mno-embedded-data' 13350 Allocate variables to the read-only data section first if 13351 possible, then next in the small data section if possible, 13352 otherwise in data. This gives slightly slower code than the 13353 default, but reduces the amount of RAM required when executing, 13354 and thus may be preferred for some embedded systems. 13355 13356`-muninit-const-in-rodata' 13357`-mno-uninit-const-in-rodata' 13358 Put uninitialized `const' variables in the read-only data section. 13359 This option is only meaningful in conjunction with 13360 `-membedded-data'. 13361 13362`-mcode-readable=SETTING' 13363 Specify whether GCC may generate code that reads from executable 13364 sections. There are three possible settings: 13365 13366 `-mcode-readable=yes' 13367 Instructions may freely access executable sections. This is 13368 the default setting. 13369 13370 `-mcode-readable=pcrel' 13371 MIPS16 PC-relative load instructions can access executable 13372 sections, but other instructions must not do so. This option 13373 is useful on 4KSc and 4KSd processors when the code TLBs have 13374 the Read Inhibit bit set. It is also useful on processors 13375 that can be configured to have a dual instruction/data SRAM 13376 interface and that, like the M4K, automatically redirect 13377 PC-relative loads to the instruction RAM. 13378 13379 `-mcode-readable=no' 13380 Instructions must not access executable sections. This 13381 option can be useful on targets that are configured to have a 13382 dual instruction/data SRAM interface but that (unlike the 13383 M4K) do not automatically redirect PC-relative loads to the 13384 instruction RAM. 13385 13386`-msplit-addresses' 13387`-mno-split-addresses' 13388 Enable (disable) use of the `%hi()' and `%lo()' assembler 13389 relocation operators. This option has been superseded by 13390 `-mexplicit-relocs' but is retained for backwards compatibility. 13391 13392`-mexplicit-relocs' 13393`-mno-explicit-relocs' 13394 Use (do not use) assembler relocation operators when dealing with 13395 symbolic addresses. The alternative, selected by 13396 `-mno-explicit-relocs', is to use assembler macros instead. 13397 13398 `-mexplicit-relocs' is the default if GCC was configured to use an 13399 assembler that supports relocation operators. 13400 13401`-mcheck-zero-division' 13402`-mno-check-zero-division' 13403 Trap (do not trap) on integer division by zero. 13404 13405 The default is `-mcheck-zero-division'. 13406 13407`-mdivide-traps' 13408`-mdivide-breaks' 13409 MIPS systems check for division by zero by generating either a 13410 conditional trap or a break instruction. Using traps results in 13411 smaller code, but is only supported on MIPS II and later. Also, 13412 some versions of the Linux kernel have a bug that prevents trap 13413 from generating the proper signal (`SIGFPE'). Use 13414 `-mdivide-traps' to allow conditional traps on architectures that 13415 support them and `-mdivide-breaks' to force the use of breaks. 13416 13417 The default is usually `-mdivide-traps', but this can be 13418 overridden at configure time using `--with-divide=breaks'. 13419 Divide-by-zero checks can be completely disabled using 13420 `-mno-check-zero-division'. 13421 13422`-mmemcpy' 13423`-mno-memcpy' 13424 Force (do not force) the use of `memcpy()' for non-trivial block 13425 moves. The default is `-mno-memcpy', which allows GCC to inline 13426 most constant-sized copies. 13427 13428`-mlong-calls' 13429`-mno-long-calls' 13430 Disable (do not disable) use of the `jal' instruction. Calling 13431 functions using `jal' is more efficient but requires the caller 13432 and callee to be in the same 256 megabyte segment. 13433 13434 This option has no effect on abicalls code. The default is 13435 `-mno-long-calls'. 13436 13437`-mmad' 13438`-mno-mad' 13439 Enable (disable) use of the `mad', `madu' and `mul' instructions, 13440 as provided by the R4650 ISA. 13441 13442`-mfused-madd' 13443`-mno-fused-madd' 13444 Enable (disable) use of the floating point multiply-accumulate 13445 instructions, when they are available. The default is 13446 `-mfused-madd'. 13447 13448 When multiply-accumulate instructions are used, the intermediate 13449 product is calculated to infinite precision and is not subject to 13450 the FCSR Flush to Zero bit. This may be undesirable in some 13451 circumstances. 13452 13453`-nocpp' 13454 Tell the MIPS assembler to not run its preprocessor over user 13455 assembler files (with a `.s' suffix) when assembling them. 13456 13457`-mfix-r4000' 13458`-mno-fix-r4000' 13459 Work around certain R4000 CPU errata: 13460 - A double-word or a variable shift may give an incorrect 13461 result if executed immediately after starting an integer 13462 division. 13463 13464 - A double-word or a variable shift may give an incorrect 13465 result if executed while an integer multiplication is in 13466 progress. 13467 13468 - An integer division may give an incorrect result if started 13469 in a delay slot of a taken branch or a jump. 13470 13471`-mfix-r4400' 13472`-mno-fix-r4400' 13473 Work around certain R4400 CPU errata: 13474 - A double-word or a variable shift may give an incorrect 13475 result if executed immediately after starting an integer 13476 division. 13477 13478`-mfix-r10000' 13479`-mno-fix-r10000' 13480 Work around certain R10000 errata: 13481 - `ll'/`sc' sequences may not behave atomically on revisions 13482 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 13483 13484 This option can only be used if the target architecture supports 13485 branch-likely instructions. `-mfix-r10000' is the default when 13486 `-march=r10000' is used; `-mno-fix-r10000' is the default 13487 otherwise. 13488 13489`-mfix-vr4120' 13490`-mno-fix-vr4120' 13491 Work around certain VR4120 errata: 13492 - `dmultu' does not always produce the correct result. 13493 13494 - `div' and `ddiv' do not always produce the correct result if 13495 one of the operands is negative. 13496 The workarounds for the division errata rely on special functions 13497 in `libgcc.a'. At present, these functions are only provided by 13498 the `mips64vr*-elf' configurations. 13499 13500 Other VR4120 errata require a nop to be inserted between certain 13501 pairs of instructions. These errata are handled by the assembler, 13502 not by GCC itself. 13503 13504`-mfix-vr4130' 13505 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 13506 implemented by the assembler rather than by GCC, although GCC will 13507 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 13508 `dmacc' and `dmacchi' instructions are available instead. 13509 13510`-mfix-sb1' 13511`-mno-fix-sb1' 13512 Work around certain SB-1 CPU core errata. (This flag currently 13513 works around the SB-1 revision 2 "F1" and "F2" floating point 13514 errata.) 13515 13516`-mr10k-cache-barrier=SETTING' 13517 Specify whether GCC should insert cache barriers to avoid the 13518 side-effects of speculation on R10K processors. 13519 13520 In common with many processors, the R10K tries to predict the 13521 outcome of a conditional branch and speculatively executes 13522 instructions from the "taken" branch. It later aborts these 13523 instructions if the predicted outcome was wrong. However, on the 13524 R10K, even aborted instructions can have side effects. 13525 13526 This problem only affects kernel stores and, depending on the 13527 system, kernel loads. As an example, a speculatively-executed 13528 store may load the target memory into cache and mark the cache 13529 line as dirty, even if the store itself is later aborted. If a 13530 DMA operation writes to the same area of memory before the "dirty" 13531 line is flushed, the cached data will overwrite the DMA-ed data. 13532 See the R10K processor manual for a full description, including 13533 other potential problems. 13534 13535 One workaround is to insert cache barrier instructions before 13536 every memory access that might be speculatively executed and that 13537 might have side effects even if aborted. 13538 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 13539 this workaround. It assumes that aborted accesses to any byte in 13540 the following regions will not have side effects: 13541 13542 1. the memory occupied by the current function's stack frame; 13543 13544 2. the memory occupied by an incoming stack argument; 13545 13546 3. the memory occupied by an object with a link-time-constant 13547 address. 13548 13549 It is the kernel's responsibility to ensure that speculative 13550 accesses to these regions are indeed safe. 13551 13552 If the input program contains a function declaration such as: 13553 13554 void foo (void); 13555 13556 then the implementation of `foo' must allow `j foo' and `jal foo' 13557 to be executed speculatively. GCC honors this restriction for 13558 functions it compiles itself. It expects non-GCC functions (such 13559 as hand-written assembly code) to do the same. 13560 13561 The option has three forms: 13562 13563 `-mr10k-cache-barrier=load-store' 13564 Insert a cache barrier before a load or store that might be 13565 speculatively executed and that might have side effects even 13566 if aborted. 13567 13568 `-mr10k-cache-barrier=store' 13569 Insert a cache barrier before a store that might be 13570 speculatively executed and that might have side effects even 13571 if aborted. 13572 13573 `-mr10k-cache-barrier=none' 13574 Disable the insertion of cache barriers. This is the default 13575 setting. 13576 13577`-mflush-func=FUNC' 13578`-mno-flush-func' 13579 Specifies the function to call to flush the I and D caches, or to 13580 not call any such function. If called, the function must take the 13581 same arguments as the common `_flush_func()', that is, the address 13582 of the memory range for which the cache is being flushed, the size 13583 of the memory range, and the number 3 (to flush both caches). The 13584 default depends on the target GCC was configured for, but commonly 13585 is either `_flush_func' or `__cpu_flush'. 13586 13587`mbranch-cost=NUM' 13588 Set the cost of branches to roughly NUM "simple" instructions. 13589 This cost is only a heuristic and is not guaranteed to produce 13590 consistent results across releases. A zero cost redundantly 13591 selects the default, which is based on the `-mtune' setting. 13592 13593`-mbranch-likely' 13594`-mno-branch-likely' 13595 Enable or disable use of Branch Likely instructions, regardless of 13596 the default for the selected architecture. By default, Branch 13597 Likely instructions may be generated if they are supported by the 13598 selected architecture. An exception is for the MIPS32 and MIPS64 13599 architectures and processors which implement those architectures; 13600 for those, Branch Likely instructions will not be generated by 13601 default because the MIPS32 and MIPS64 architectures specifically 13602 deprecate their use. 13603 13604`-mfp-exceptions' 13605`-mno-fp-exceptions' 13606 Specifies whether FP exceptions are enabled. This affects how we 13607 schedule FP instructions for some processors. The default is that 13608 FP exceptions are enabled. 13609 13610 For instance, on the SB-1, if FP exceptions are disabled, and we 13611 are emitting 64-bit code, then we can use both FP pipes. 13612 Otherwise, we can only use one FP pipe. 13613 13614`-mvr4130-align' 13615`-mno-vr4130-align' 13616 The VR4130 pipeline is two-way superscalar, but can only issue two 13617 instructions together if the first one is 8-byte aligned. When 13618 this option is enabled, GCC will align pairs of instructions that 13619 it thinks should execute in parallel. 13620 13621 This option only has an effect when optimizing for the VR4130. It 13622 normally makes code faster, but at the expense of making it bigger. 13623 It is enabled by default at optimization level `-O3'. 13624 13625`-msynci' 13626`-mno-synci' 13627 Enable (disable) generation of `synci' instructions on 13628 architectures that support it. The `synci' instructions (if 13629 enabled) will be generated when `__builtin___clear_cache()' is 13630 compiled. 13631 13632 This option defaults to `-mno-synci', but the default can be 13633 overridden by configuring with `--with-synci'. 13634 13635 When compiling code for single processor systems, it is generally 13636 safe to use `synci'. However, on many multi-core (SMP) systems, it 13637 will not invalidate the instruction caches on all cores and may 13638 lead to undefined behavior. 13639 13640`-mrelax-pic-calls' 13641`-mno-relax-pic-calls' 13642 Try to turn PIC calls that are normally dispatched via register 13643 `$25' into direct calls. This is only possible if the linker can 13644 resolve the destination at link-time and if the destination is 13645 within range for a direct call. 13646 13647 `-mrelax-pic-calls' is the default if GCC was configured to use an 13648 assembler and a linker that supports the `.reloc' assembly 13649 directive and `-mexplicit-relocs' is in effect. With 13650 `-mno-explicit-relocs', this optimization can be performed by the 13651 assembler and the linker alone without help from the compiler. 13652 13653`-mmcount-ra-address' 13654`-mno-mcount-ra-address' 13655 Emit (do not emit) code that allows `_mcount' to modify the 13656 calling function's return address. When enabled, this option 13657 extends the usual `_mcount' interface with a new RA-ADDRESS 13658 parameter, which has type `intptr_t *' and is passed in register 13659 `$12'. `_mcount' can then modify the return address by doing both 13660 of the following: 13661 * Returning the new address in register `$31'. 13662 13663 * Storing the new address in `*RA-ADDRESS', if RA-ADDRESS is 13664 nonnull. 13665 13666 The default is `-mno-mcount-ra-address'. 13667 13668 13669 13670File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 13671 136723.17.27 MMIX Options 13673-------------------- 13674 13675These options are defined for the MMIX: 13676 13677`-mlibfuncs' 13678`-mno-libfuncs' 13679 Specify that intrinsic library functions are being compiled, 13680 passing all values in registers, no matter the size. 13681 13682`-mepsilon' 13683`-mno-epsilon' 13684 Generate floating-point comparison instructions that compare with 13685 respect to the `rE' epsilon register. 13686 13687`-mabi=mmixware' 13688`-mabi=gnu' 13689 Generate code that passes function parameters and return values 13690 that (in the called function) are seen as registers `$0' and up, 13691 as opposed to the GNU ABI which uses global registers `$231' and 13692 up. 13693 13694`-mzero-extend' 13695`-mno-zero-extend' 13696 When reading data from memory in sizes shorter than 64 bits, use 13697 (do not use) zero-extending load instructions by default, rather 13698 than sign-extending ones. 13699 13700`-mknuthdiv' 13701`-mno-knuthdiv' 13702 Make the result of a division yielding a remainder have the same 13703 sign as the divisor. With the default, `-mno-knuthdiv', the sign 13704 of the remainder follows the sign of the dividend. Both methods 13705 are arithmetically valid, the latter being almost exclusively used. 13706 13707`-mtoplevel-symbols' 13708`-mno-toplevel-symbols' 13709 Prepend (do not prepend) a `:' to all global symbols, so the 13710 assembly code can be used with the `PREFIX' assembly directive. 13711 13712`-melf' 13713 Generate an executable in the ELF format, rather than the default 13714 `mmo' format used by the `mmix' simulator. 13715 13716`-mbranch-predict' 13717`-mno-branch-predict' 13718 Use (do not use) the probable-branch instructions, when static 13719 branch prediction indicates a probable branch. 13720 13721`-mbase-addresses' 13722`-mno-base-addresses' 13723 Generate (do not generate) code that uses _base addresses_. Using 13724 a base address automatically generates a request (handled by the 13725 assembler and the linker) for a constant to be set up in a global 13726 register. The register is used for one or more base address 13727 requests within the range 0 to 255 from the value held in the 13728 register. The generally leads to short and fast code, but the 13729 number of different data items that can be addressed is limited. 13730 This means that a program that uses lots of static data may 13731 require `-mno-base-addresses'. 13732 13733`-msingle-exit' 13734`-mno-single-exit' 13735 Force (do not force) generated code to have a single exit point in 13736 each function. 13737 13738 13739File: gcc.info, Node: MN10300 Options, Next: PDP-11 Options, Prev: MMIX Options, Up: Submodel Options 13740 137413.17.28 MN10300 Options 13742----------------------- 13743 13744These `-m' options are defined for Matsushita MN10300 architectures: 13745 13746`-mmult-bug' 13747 Generate code to avoid bugs in the multiply instructions for the 13748 MN10300 processors. This is the default. 13749 13750`-mno-mult-bug' 13751 Do not generate code to avoid bugs in the multiply instructions 13752 for the MN10300 processors. 13753 13754`-mam33' 13755 Generate code which uses features specific to the AM33 processor. 13756 13757`-mno-am33' 13758 Do not generate code which uses features specific to the AM33 13759 processor. This is the default. 13760 13761`-mreturn-pointer-on-d0' 13762 When generating a function which returns a pointer, return the 13763 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 13764 only in a0, and attempts to call such functions without a prototype 13765 would result in errors. Note that this option is on by default; 13766 use `-mno-return-pointer-on-d0' to disable it. 13767 13768`-mno-crt0' 13769 Do not link in the C run-time initialization object file. 13770 13771`-mrelax' 13772 Indicate to the linker that it should perform a relaxation 13773 optimization pass to shorten branches, calls and absolute memory 13774 addresses. This option only has an effect when used on the 13775 command line for the final link step. 13776 13777 This option makes symbolic debugging impossible. 13778 13779 13780File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: MN10300 Options, Up: Submodel Options 13781 137823.17.29 PDP-11 Options 13783---------------------- 13784 13785These options are defined for the PDP-11: 13786 13787`-mfpu' 13788 Use hardware FPP floating point. This is the default. (FIS 13789 floating point on the PDP-11/40 is not supported.) 13790 13791`-msoft-float' 13792 Do not use hardware floating point. 13793 13794`-mac0' 13795 Return floating-point results in ac0 (fr0 in Unix assembler 13796 syntax). 13797 13798`-mno-ac0' 13799 Return floating-point results in memory. This is the default. 13800 13801`-m40' 13802 Generate code for a PDP-11/40. 13803 13804`-m45' 13805 Generate code for a PDP-11/45. This is the default. 13806 13807`-m10' 13808 Generate code for a PDP-11/10. 13809 13810`-mbcopy-builtin' 13811 Use inline `movmemhi' patterns for copying memory. This is the 13812 default. 13813 13814`-mbcopy' 13815 Do not use inline `movmemhi' patterns for copying memory. 13816 13817`-mint16' 13818`-mno-int32' 13819 Use 16-bit `int'. This is the default. 13820 13821`-mint32' 13822`-mno-int16' 13823 Use 32-bit `int'. 13824 13825`-mfloat64' 13826`-mno-float32' 13827 Use 64-bit `float'. This is the default. 13828 13829`-mfloat32' 13830`-mno-float64' 13831 Use 32-bit `float'. 13832 13833`-mabshi' 13834 Use `abshi2' pattern. This is the default. 13835 13836`-mno-abshi' 13837 Do not use `abshi2' pattern. 13838 13839`-mbranch-expensive' 13840 Pretend that branches are expensive. This is for experimenting 13841 with code generation only. 13842 13843`-mbranch-cheap' 13844 Do not pretend that branches are expensive. This is the default. 13845 13846`-msplit' 13847 Generate code for a system with split I&D. 13848 13849`-mno-split' 13850 Generate code for a system without split I&D. This is the default. 13851 13852`-munix-asm' 13853 Use Unix assembler syntax. This is the default when configured for 13854 `pdp11-*-bsd'. 13855 13856`-mdec-asm' 13857 Use DEC assembler syntax. This is the default when configured for 13858 any PDP-11 target other than `pdp11-*-bsd'. 13859 13860 13861File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 13862 138633.17.30 picoChip Options 13864------------------------ 13865 13866These `-m' options are defined for picoChip implementations: 13867 13868`-mae=AE_TYPE' 13869 Set the instruction set, register set, and instruction scheduling 13870 parameters for array element type AE_TYPE. Supported values for 13871 AE_TYPE are `ANY', `MUL', and `MAC'. 13872 13873 `-mae=ANY' selects a completely generic AE type. Code generated 13874 with this option will run on any of the other AE types. The code 13875 will not be as efficient as it would be if compiled for a specific 13876 AE type, and some types of operation (e.g., multiplication) will 13877 not work properly on all types of AE. 13878 13879 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 13880 for compiled code, and is the default. 13881 13882 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 13883 option may suffer from poor performance of byte (char) 13884 manipulation, since the DSP AE does not provide hardware support 13885 for byte load/stores. 13886 13887`-msymbol-as-address' 13888 Enable the compiler to directly use a symbol name as an address in 13889 a load/store instruction, without first loading it into a 13890 register. Typically, the use of this option will generate larger 13891 programs, which run faster than when the option isn't used. 13892 However, the results vary from program to program, so it is left 13893 as a user option, rather than being permanently enabled. 13894 13895`-mno-inefficient-warnings' 13896 Disables warnings about the generation of inefficient code. These 13897 warnings can be generated, for example, when compiling code which 13898 performs byte-level memory operations on the MAC AE type. The MAC 13899 AE has no hardware support for byte-level memory operations, so 13900 all byte load/stores must be synthesized from word load/store 13901 operations. This is inefficient and a warning will be generated 13902 indicating to the programmer that they should rewrite the code to 13903 avoid byte operations, or to target an AE type which has the 13904 necessary hardware support. This option enables the warning to be 13905 turned off. 13906 13907 13908 13909File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: picoChip Options, Up: Submodel Options 13910 139113.17.31 PowerPC Options 13912----------------------- 13913 13914These are listed under *Note RS/6000 and PowerPC Options::. 13915 13916 13917File: gcc.info, Node: RS/6000 and PowerPC Options, Next: RX Options, Prev: PowerPC Options, Up: Submodel Options 13918 139193.17.32 IBM RS/6000 and PowerPC Options 13920--------------------------------------- 13921 13922These `-m' options are defined for the IBM RS/6000 and PowerPC: 13923`-mpower' 13924`-mno-power' 13925`-mpower2' 13926`-mno-power2' 13927`-mpowerpc' 13928`-mno-powerpc' 13929`-mpowerpc-gpopt' 13930`-mno-powerpc-gpopt' 13931`-mpowerpc-gfxopt' 13932`-mno-powerpc-gfxopt' 13933`-mpowerpc64' 13934`-mno-powerpc64' 13935`-mmfcrf' 13936`-mno-mfcrf' 13937`-mpopcntb' 13938`-mno-popcntb' 13939`-mpopcntd' 13940`-mno-popcntd' 13941`-mfprnd' 13942`-mno-fprnd' 13943`-mcmpb' 13944`-mno-cmpb' 13945`-mmfpgpr' 13946`-mno-mfpgpr' 13947`-mhard-dfp' 13948`-mno-hard-dfp' 13949 GCC supports two related instruction set architectures for the 13950 RS/6000 and PowerPC. The "POWER" instruction set are those 13951 instructions supported by the `rios' chip set used in the original 13952 RS/6000 systems and the "PowerPC" instruction set is the 13953 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 13954 microprocessors, and the IBM 4xx, 6xx, and follow-on 13955 microprocessors. 13956 13957 Neither architecture is a subset of the other. However there is a 13958 large common subset of instructions supported by both. An MQ 13959 register is included in processors supporting the POWER 13960 architecture. 13961 13962 You use these options to specify which instructions are available 13963 on the processor you are using. The default value of these 13964 options is determined when configuring GCC. Specifying the 13965 `-mcpu=CPU_TYPE' overrides the specification of these options. We 13966 recommend you use the `-mcpu=CPU_TYPE' option rather than the 13967 options listed above. 13968 13969 The `-mpower' option allows GCC to generate instructions that are 13970 found only in the POWER architecture and to use the MQ register. 13971 Specifying `-mpower2' implies `-power' and also allows GCC to 13972 generate instructions that are present in the POWER2 architecture 13973 but not the original POWER architecture. 13974 13975 The `-mpowerpc' option allows GCC to generate instructions that 13976 are found only in the 32-bit subset of the PowerPC architecture. 13977 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 13978 GCC to use the optional PowerPC architecture instructions in the 13979 General Purpose group, including floating-point square root. 13980 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 13981 GCC to use the optional PowerPC architecture instructions in the 13982 Graphics group, including floating-point select. 13983 13984 The `-mmfcrf' option allows GCC to generate the move from 13985 condition register field instruction implemented on the POWER4 13986 processor and other processors that support the PowerPC V2.01 13987 architecture. The `-mpopcntb' option allows GCC to generate the 13988 popcount and double precision FP reciprocal estimate instruction 13989 implemented on the POWER5 processor and other processors that 13990 support the PowerPC V2.02 architecture. The `-mpopcntd' option 13991 allows GCC to generate the popcount instruction implemented on the 13992 POWER7 processor and other processors that support the PowerPC 13993 V2.06 architecture. The `-mfprnd' option allows GCC to generate 13994 the FP round to integer instructions implemented on the POWER5+ 13995 processor and other processors that support the PowerPC V2.03 13996 architecture. The `-mcmpb' option allows GCC to generate the 13997 compare bytes instruction implemented on the POWER6 processor and 13998 other processors that support the PowerPC V2.05 architecture. The 13999 `-mmfpgpr' option allows GCC to generate the FP move to/from 14000 general purpose register instructions implemented on the POWER6X 14001 processor and other processors that support the extended PowerPC 14002 V2.05 architecture. The `-mhard-dfp' option allows GCC to 14003 generate the decimal floating point instructions implemented on 14004 some POWER processors. 14005 14006 The `-mpowerpc64' option allows GCC to generate the additional 14007 64-bit instructions that are found in the full PowerPC64 14008 architecture and to treat GPRs as 64-bit, doubleword quantities. 14009 GCC defaults to `-mno-powerpc64'. 14010 14011 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 14012 only the instructions in the common subset of both architectures 14013 plus some special AIX common-mode calls, and will not use the MQ 14014 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 14015 to use any instruction from either architecture and to allow use 14016 of the MQ register; specify this for the Motorola MPC601. 14017 14018`-mnew-mnemonics' 14019`-mold-mnemonics' 14020 Select which mnemonics to use in the generated assembler code. 14021 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 14022 for the PowerPC architecture. With `-mold-mnemonics' it uses the 14023 assembler mnemonics defined for the POWER architecture. 14024 Instructions defined in only one architecture have only one 14025 mnemonic; GCC uses that mnemonic irrespective of which of these 14026 options is specified. 14027 14028 GCC defaults to the mnemonics appropriate for the architecture in 14029 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 14030 these option. Unless you are building a cross-compiler, you 14031 should normally not specify either `-mnew-mnemonics' or 14032 `-mold-mnemonics', but should instead accept the default. 14033 14034`-mcpu=CPU_TYPE' 14035 Set architecture type, register usage, choice of mnemonics, and 14036 instruction scheduling parameters for machine type CPU_TYPE. 14037 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 14038 `440', `440fp', `464', `464fp', `476', `476fp', `505', `601', 14039 `602', `603', `603e', `604', `604e', `620', `630', `740', `7400', 14040 `7450', `750', `801', `821', `823', `860', `970', `8540', `a2', 14041 `e300c2', `e300c3', `e500mc', `e500mc64', `ec603e', `G3', `G4', 14042 `G5', `power', `power2', `power3', `power4', `power5', `power5+', 14043 `power6', `power6x', `power7', `common', `powerpc', `powerpc64', 14044 `rios', `rios1', `rios2', `rsc', and `rs64'. 14045 14046 `-mcpu=common' selects a completely generic processor. Code 14047 generated under this option will run on any POWER or PowerPC 14048 processor. GCC will use only the instructions in the common 14049 subset of both architectures, and will not use the MQ register. 14050 GCC assumes a generic processor model for scheduling purposes. 14051 14052 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 14053 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 14054 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 14055 types, with an appropriate, generic processor model assumed for 14056 scheduling purposes. 14057 14058 The other options specify a specific processor. Code generated 14059 under those options will run best on that processor, and may not 14060 run at all on others. 14061 14062 The `-mcpu' options automatically enable or disable the following 14063 options: 14064 14065 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 14066 -mnew-mnemonics -mpopcntb -mpopcntd -mpower -mpower2 -mpowerpc64 14067 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 14068 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx 14069 14070 The particular options set for any particular CPU will vary between 14071 compiler versions, depending on what setting seems to produce 14072 optimal code for that CPU; it doesn't necessarily reflect the 14073 actual hardware's capabilities. If you wish to set an individual 14074 option to a particular value, you may specify it after the `-mcpu' 14075 option, like `-mcpu=970 -mno-altivec'. 14076 14077 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 14078 or disabled by the `-mcpu' option at present because AIX does not 14079 have full support for these options. You may still enable or 14080 disable them individually if you're sure it'll work in your 14081 environment. 14082 14083`-mtune=CPU_TYPE' 14084 Set the instruction scheduling parameters for machine type 14085 CPU_TYPE, but do not set the architecture type, register usage, or 14086 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 14087 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 14088 specified, the code generated will use the architecture, 14089 registers, and mnemonics set by `-mcpu', but the scheduling 14090 parameters set by `-mtune'. 14091 14092`-mswdiv' 14093`-mno-swdiv' 14094 Generate code to compute division as reciprocal estimate and 14095 iterative refinement, creating opportunities for increased 14096 throughput. This feature requires: optional PowerPC Graphics 14097 instruction set for single precision and FRE instruction for 14098 double precision, assuming divides cannot generate user-visible 14099 traps, and the domain values not include Infinities, denormals or 14100 zero denominator. 14101 14102`-maltivec' 14103`-mno-altivec' 14104 Generate code that uses (does not use) AltiVec instructions, and 14105 also enable the use of built-in functions that allow more direct 14106 access to the AltiVec instruction set. You may also need to set 14107 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 14108 enhancements. 14109 14110`-mvrsave' 14111`-mno-vrsave' 14112 Generate VRSAVE instructions when generating AltiVec code. 14113 14114`-mgen-cell-microcode' 14115 Generate Cell microcode instructions 14116 14117`-mwarn-cell-microcode' 14118 Warning when a Cell microcode instruction is going to emitted. An 14119 example of a Cell microcode instruction is a variable shift. 14120 14121`-msecure-plt' 14122 Generate code that allows ld and ld.so to build executables and 14123 shared libraries with non-exec .plt and .got sections. This is a 14124 PowerPC 32-bit SYSV ABI option. 14125 14126`-mbss-plt' 14127 Generate code that uses a BSS .plt section that ld.so fills in, and 14128 requires .plt and .got sections that are both writable and 14129 executable. This is a PowerPC 32-bit SYSV ABI option. 14130 14131`-misel' 14132`-mno-isel' 14133 This switch enables or disables the generation of ISEL 14134 instructions. 14135 14136`-misel=YES/NO' 14137 This switch has been deprecated. Use `-misel' and `-mno-isel' 14138 instead. 14139 14140`-mspe' 14141`-mno-spe' 14142 This switch enables or disables the generation of SPE simd 14143 instructions. 14144 14145`-mpaired' 14146`-mno-paired' 14147 This switch enables or disables the generation of PAIRED simd 14148 instructions. 14149 14150`-mspe=YES/NO' 14151 This option has been deprecated. Use `-mspe' and `-mno-spe' 14152 instead. 14153 14154`-mvsx' 14155`-mno-vsx' 14156 Generate code that uses (does not use) vector/scalar (VSX) 14157 instructions, and also enable the use of built-in functions that 14158 allow more direct access to the VSX instruction set. 14159 14160`-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 14161`-mfloat-gprs' 14162 This switch enables or disables the generation of floating point 14163 operations on the general purpose registers for architectures that 14164 support it. 14165 14166 The argument YES or SINGLE enables the use of single-precision 14167 floating point operations. 14168 14169 The argument DOUBLE enables the use of single and double-precision 14170 floating point operations. 14171 14172 The argument NO disables floating point operations on the general 14173 purpose registers. 14174 14175 This option is currently only available on the MPC854x. 14176 14177`-m32' 14178`-m64' 14179 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 14180 targets (including GNU/Linux). The 32-bit environment sets int, 14181 long and pointer to 32 bits and generates code that runs on any 14182 PowerPC variant. The 64-bit environment sets int to 32 bits and 14183 long and pointer to 64 bits, and generates code for PowerPC64, as 14184 for `-mpowerpc64'. 14185 14186`-mfull-toc' 14187`-mno-fp-in-toc' 14188`-mno-sum-in-toc' 14189`-mminimal-toc' 14190 Modify generation of the TOC (Table Of Contents), which is created 14191 for every executable file. The `-mfull-toc' option is selected by 14192 default. In that case, GCC will allocate at least one TOC entry 14193 for each unique non-automatic variable reference in your program. 14194 GCC will also place floating-point constants in the TOC. However, 14195 only 16,384 entries are available in the TOC. 14196 14197 If you receive a linker error message that saying you have 14198 overflowed the available TOC space, you can reduce the amount of 14199 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 14200 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 14201 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 14202 code to calculate the sum of an address and a constant at run-time 14203 instead of putting that sum into the TOC. You may specify one or 14204 both of these options. Each causes GCC to produce very slightly 14205 slower and larger code at the expense of conserving TOC space. 14206 14207 If you still run out of space in the TOC even when you specify 14208 both of these options, specify `-mminimal-toc' instead. This 14209 option causes GCC to make only one TOC entry for every file. When 14210 you specify this option, GCC will produce code that is slower and 14211 larger but which uses extremely little TOC space. You may wish to 14212 use this option only on files that contain less frequently 14213 executed code. 14214 14215`-maix64' 14216`-maix32' 14217 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 14218 64-bit `long' type, and the infrastructure needed to support them. 14219 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 14220 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 14221 GCC defaults to `-maix32'. 14222 14223`-mxl-compat' 14224`-mno-xl-compat' 14225 Produce code that conforms more closely to IBM XL compiler 14226 semantics when using AIX-compatible ABI. Pass floating-point 14227 arguments to prototyped functions beyond the register save area 14228 (RSA) on the stack in addition to argument FPRs. Do not assume 14229 that most significant double in 128-bit long double value is 14230 properly rounded when comparing values and converting to double. 14231 Use XL symbol names for long double support routines. 14232 14233 The AIX calling convention was extended but not initially 14234 documented to handle an obscure K&R C case of calling a function 14235 that takes the address of its arguments with fewer arguments than 14236 declared. IBM XL compilers access floating point arguments which 14237 do not fit in the RSA from the stack when a subroutine is compiled 14238 without optimization. Because always storing floating-point 14239 arguments on the stack is inefficient and rarely needed, this 14240 option is not enabled by default and only is necessary when 14241 calling subroutines compiled by IBM XL compilers without 14242 optimization. 14243 14244`-mpe' 14245 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 14246 application written to use message passing with special startup 14247 code to enable the application to run. The system must have PE 14248 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 14249 `specs' file must be overridden with the `-specs=' option to 14250 specify the appropriate directory location. The Parallel 14251 Environment does not support threads, so the `-mpe' option and the 14252 `-pthread' option are incompatible. 14253 14254`-malign-natural' 14255`-malign-power' 14256 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 14257 `-malign-natural' overrides the ABI-defined alignment of larger 14258 types, such as floating-point doubles, on their natural size-based 14259 boundary. The option `-malign-power' instructs GCC to follow the 14260 ABI-specified alignment rules. GCC defaults to the standard 14261 alignment defined in the ABI. 14262 14263 On 64-bit Darwin, natural alignment is the default, and 14264 `-malign-power' is not supported. 14265 14266`-msoft-float' 14267`-mhard-float' 14268 Generate code that does not use (uses) the floating-point register 14269 set. Software floating point emulation is provided if you use the 14270 `-msoft-float' option, and pass the option to GCC when linking. 14271 14272`-msingle-float' 14273`-mdouble-float' 14274 Generate code for single or double-precision floating point 14275 operations. `-mdouble-float' implies `-msingle-float'. 14276 14277`-msimple-fpu' 14278 Do not generate sqrt and div instructions for hardware floating 14279 point unit. 14280 14281`-mfpu' 14282 Specify type of floating point unit. Valid values are SP_LITE 14283 (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent 14284 to -mdouble-float -msimple-fpu), SP_FULL (equivalent to 14285 -msingle-float), and DP_FULL (equivalent to -mdouble-float). 14286 14287`-mxilinx-fpu' 14288 Perform optimizations for floating point unit on Xilinx PPC 14289 405/440. 14290 14291`-mmultiple' 14292`-mno-multiple' 14293 Generate code that uses (does not use) the load multiple word 14294 instructions and the store multiple word instructions. These 14295 instructions are generated by default on POWER systems, and not 14296 generated on PowerPC systems. Do not use `-mmultiple' on little 14297 endian PowerPC systems, since those instructions do not work when 14298 the processor is in little endian mode. The exceptions are PPC740 14299 and PPC750 which permit the instructions usage in little endian 14300 mode. 14301 14302`-mstring' 14303`-mno-string' 14304 Generate code that uses (does not use) the load string instructions 14305 and the store string word instructions to save multiple registers 14306 and do small block moves. These instructions are generated by 14307 default on POWER systems, and not generated on PowerPC systems. 14308 Do not use `-mstring' on little endian PowerPC systems, since those 14309 instructions do not work when the processor is in little endian 14310 mode. The exceptions are PPC740 and PPC750 which permit the 14311 instructions usage in little endian mode. 14312 14313`-mupdate' 14314`-mno-update' 14315 Generate code that uses (does not use) the load or store 14316 instructions that update the base register to the address of the 14317 calculated memory location. These instructions are generated by 14318 default. If you use `-mno-update', there is a small window 14319 between the time that the stack pointer is updated and the address 14320 of the previous frame is stored, which means code that walks the 14321 stack frame across interrupts or signals may get corrupted data. 14322 14323`-mavoid-indexed-addresses' 14324`-mno-avoid-indexed-addresses' 14325 Generate code that tries to avoid (not avoid) the use of indexed 14326 load or store instructions. These instructions can incur a 14327 performance penalty on Power6 processors in certain situations, 14328 such as when stepping through large arrays that cross a 16M 14329 boundary. This option is enabled by default when targetting 14330 Power6 and disabled otherwise. 14331 14332`-mfused-madd' 14333`-mno-fused-madd' 14334 Generate code that uses (does not use) the floating point multiply 14335 and accumulate instructions. These instructions are generated by 14336 default if hardware floating is used. 14337 14338`-mmulhw' 14339`-mno-mulhw' 14340 Generate code that uses (does not use) the half-word multiply and 14341 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 14342 processors. These instructions are generated by default when 14343 targetting those processors. 14344 14345`-mdlmzb' 14346`-mno-dlmzb' 14347 Generate code that uses (does not use) the string-search `dlmzb' 14348 instruction on the IBM 405, 440, 464 and 476 processors. This 14349 instruction is generated by default when targetting those 14350 processors. 14351 14352`-mno-bit-align' 14353`-mbit-align' 14354 On System V.4 and embedded PowerPC systems do not (do) force 14355 structures and unions that contain bit-fields to be aligned to the 14356 base type of the bit-field. 14357 14358 For example, by default a structure containing nothing but 8 14359 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 14360 boundary and have a size of 4 bytes. By using `-mno-bit-align', 14361 the structure would be aligned to a 1 byte boundary and be one 14362 byte in size. 14363 14364`-mno-strict-align' 14365`-mstrict-align' 14366 On System V.4 and embedded PowerPC systems do not (do) assume that 14367 unaligned memory references will be handled by the system. 14368 14369`-mrelocatable' 14370`-mno-relocatable' 14371 On embedded PowerPC systems generate code that allows (does not 14372 allow) the program to be relocated to a different address at 14373 runtime. If you use `-mrelocatable' on any module, all objects 14374 linked together must be compiled with `-mrelocatable' or 14375 `-mrelocatable-lib'. 14376 14377`-mrelocatable-lib' 14378`-mno-relocatable-lib' 14379 On embedded PowerPC systems generate code that allows (does not 14380 allow) the program to be relocated to a different address at 14381 runtime. Modules compiled with `-mrelocatable-lib' can be linked 14382 with either modules compiled without `-mrelocatable' and 14383 `-mrelocatable-lib' or with modules compiled with the 14384 `-mrelocatable' options. 14385 14386`-mno-toc' 14387`-mtoc' 14388 On System V.4 and embedded PowerPC systems do not (do) assume that 14389 register 2 contains a pointer to a global area pointing to the 14390 addresses used in the program. 14391 14392`-mlittle' 14393`-mlittle-endian' 14394 On System V.4 and embedded PowerPC systems compile code for the 14395 processor in little endian mode. The `-mlittle-endian' option is 14396 the same as `-mlittle'. 14397 14398`-mbig' 14399`-mbig-endian' 14400 On System V.4 and embedded PowerPC systems compile code for the 14401 processor in big endian mode. The `-mbig-endian' option is the 14402 same as `-mbig'. 14403 14404`-mdynamic-no-pic' 14405 On Darwin and Mac OS X systems, compile code so that it is not 14406 relocatable, but that its external references are relocatable. The 14407 resulting code is suitable for applications, but not shared 14408 libraries. 14409 14410`-mprioritize-restricted-insns=PRIORITY' 14411 This option controls the priority that is assigned to 14412 dispatch-slot restricted instructions during the second scheduling 14413 pass. The argument PRIORITY takes the value 0/1/2 to assign 14414 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 14415 instructions. 14416 14417`-msched-costly-dep=DEPENDENCE_TYPE' 14418 This option controls which dependences are considered costly by 14419 the target during instruction scheduling. The argument 14420 DEPENDENCE_TYPE takes one of the following values: NO: no 14421 dependence is costly, ALL: all dependences are costly, 14422 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 14423 STORE_TO_LOAD: any dependence from store to load is costly, 14424 NUMBER: any dependence which latency >= NUMBER is costly. 14425 14426`-minsert-sched-nops=SCHEME' 14427 This option controls which nop insertion scheme will be used during 14428 the second scheduling pass. The argument SCHEME takes one of the 14429 following values: NO: Don't insert nops. PAD: Pad with nops any 14430 dispatch group which has vacant issue slots, according to the 14431 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 14432 dependent insns into separate groups. Insert exactly as many nops 14433 as needed to force an insn to a new group, according to the 14434 estimated processor grouping. NUMBER: Insert nops to force costly 14435 dependent insns into separate groups. Insert NUMBER nops to force 14436 an insn to a new group. 14437 14438`-mcall-sysv' 14439 On System V.4 and embedded PowerPC systems compile code using 14440 calling conventions that adheres to the March 1995 draft of the 14441 System V Application Binary Interface, PowerPC processor 14442 supplement. This is the default unless you configured GCC using 14443 `powerpc-*-eabiaix'. 14444 14445`-mcall-sysv-eabi' 14446`-mcall-eabi' 14447 Specify both `-mcall-sysv' and `-meabi' options. 14448 14449`-mcall-sysv-noeabi' 14450 Specify both `-mcall-sysv' and `-mno-eabi' options. 14451 14452`-mcall-aixdesc' 14453 On System V.4 and embedded PowerPC systems compile code for the AIX 14454 operating system. 14455 14456`-mcall-linux' 14457 On System V.4 and embedded PowerPC systems compile code for the 14458 Linux-based GNU system. 14459 14460`-mcall-gnu' 14461 On System V.4 and embedded PowerPC systems compile code for the 14462 Hurd-based GNU system. 14463 14464`-mcall-freebsd' 14465 On System V.4 and embedded PowerPC systems compile code for the 14466 FreeBSD operating system. 14467 14468`-mcall-netbsd' 14469 On System V.4 and embedded PowerPC systems compile code for the 14470 NetBSD operating system. 14471 14472`-mcall-openbsd' 14473 On System V.4 and embedded PowerPC systems compile code for the 14474 OpenBSD operating system. 14475 14476`-maix-struct-return' 14477 Return all structures in memory (as specified by the AIX ABI). 14478 14479`-msvr4-struct-return' 14480 Return structures smaller than 8 bytes in registers (as specified 14481 by the SVR4 ABI). 14482 14483`-mabi=ABI-TYPE' 14484 Extend the current ABI with a particular extension, or remove such 14485 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 14486 IBMLONGDOUBLE, IEEELONGDOUBLE. 14487 14488`-mabi=spe' 14489 Extend the current ABI with SPE ABI extensions. This does not 14490 change the default ABI, instead it adds the SPE ABI extensions to 14491 the current ABI. 14492 14493`-mabi=no-spe' 14494 Disable Booke SPE ABI extensions for the current ABI. 14495 14496`-mabi=ibmlongdouble' 14497 Change the current ABI to use IBM extended precision long double. 14498 This is a PowerPC 32-bit SYSV ABI option. 14499 14500`-mabi=ieeelongdouble' 14501 Change the current ABI to use IEEE extended precision long double. 14502 This is a PowerPC 32-bit Linux ABI option. 14503 14504`-mprototype' 14505`-mno-prototype' 14506 On System V.4 and embedded PowerPC systems assume that all calls to 14507 variable argument functions are properly prototyped. Otherwise, 14508 the compiler must insert an instruction before every non 14509 prototyped call to set or clear bit 6 of the condition code 14510 register (CR) to indicate whether floating point values were 14511 passed in the floating point registers in case the function takes 14512 a variable arguments. With `-mprototype', only calls to 14513 prototyped variable argument functions will set or clear the bit. 14514 14515`-msim' 14516 On embedded PowerPC systems, assume that the startup module is 14517 called `sim-crt0.o' and that the standard C libraries are 14518 `libsim.a' and `libc.a'. This is the default for 14519 `powerpc-*-eabisim' configurations. 14520 14521`-mmvme' 14522 On embedded PowerPC systems, assume that the startup module is 14523 called `crt0.o' and the standard C libraries are `libmvme.a' and 14524 `libc.a'. 14525 14526`-mads' 14527 On embedded PowerPC systems, assume that the startup module is 14528 called `crt0.o' and the standard C libraries are `libads.a' and 14529 `libc.a'. 14530 14531`-myellowknife' 14532 On embedded PowerPC systems, assume that the startup module is 14533 called `crt0.o' and the standard C libraries are `libyk.a' and 14534 `libc.a'. 14535 14536`-mvxworks' 14537 On System V.4 and embedded PowerPC systems, specify that you are 14538 compiling for a VxWorks system. 14539 14540`-memb' 14541 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 14542 header to indicate that `eabi' extended relocations are used. 14543 14544`-meabi' 14545`-mno-eabi' 14546 On System V.4 and embedded PowerPC systems do (do not) adhere to 14547 the Embedded Applications Binary Interface (eabi) which is a set of 14548 modifications to the System V.4 specifications. Selecting `-meabi' 14549 means that the stack is aligned to an 8 byte boundary, a function 14550 `__eabi' is called to from `main' to set up the eabi environment, 14551 and the `-msdata' option can use both `r2' and `r13' to point to 14552 two separate small data areas. Selecting `-mno-eabi' means that 14553 the stack is aligned to a 16 byte boundary, do not call an 14554 initialization function from `main', and the `-msdata' option will 14555 only use `r13' to point to a single small data area. The `-meabi' 14556 option is on by default if you configured GCC using one of the 14557 `powerpc*-*-eabi*' options. 14558 14559`-msdata=eabi' 14560 On System V.4 and embedded PowerPC systems, put small initialized 14561 `const' global and static data in the `.sdata2' section, which is 14562 pointed to by register `r2'. Put small initialized non-`const' 14563 global and static data in the `.sdata' section, which is pointed 14564 to by register `r13'. Put small uninitialized global and static 14565 data in the `.sbss' section, which is adjacent to the `.sdata' 14566 section. The `-msdata=eabi' option is incompatible with the 14567 `-mrelocatable' option. The `-msdata=eabi' option also sets the 14568 `-memb' option. 14569 14570`-msdata=sysv' 14571 On System V.4 and embedded PowerPC systems, put small global and 14572 static data in the `.sdata' section, which is pointed to by 14573 register `r13'. Put small uninitialized global and static data in 14574 the `.sbss' section, which is adjacent to the `.sdata' section. 14575 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 14576 option. 14577 14578`-msdata=default' 14579`-msdata' 14580 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 14581 compile code the same as `-msdata=eabi', otherwise compile code the 14582 same as `-msdata=sysv'. 14583 14584`-msdata=data' 14585 On System V.4 and embedded PowerPC systems, put small global data 14586 in the `.sdata' section. Put small uninitialized global data in 14587 the `.sbss' section. Do not use register `r13' to address small 14588 data however. This is the default behavior unless other `-msdata' 14589 options are used. 14590 14591`-msdata=none' 14592`-mno-sdata' 14593 On embedded PowerPC systems, put all initialized global and static 14594 data in the `.data' section, and all uninitialized data in the 14595 `.bss' section. 14596 14597`-G NUM' 14598 On embedded PowerPC systems, put global and static items less than 14599 or equal to NUM bytes into the small data or bss sections instead 14600 of the normal data or bss section. By default, NUM is 8. The `-G 14601 NUM' switch is also passed to the linker. All modules should be 14602 compiled with the same `-G NUM' value. 14603 14604`-mregnames' 14605`-mno-regnames' 14606 On System V.4 and embedded PowerPC systems do (do not) emit 14607 register names in the assembly language output using symbolic 14608 forms. 14609 14610`-mlongcall' 14611`-mno-longcall' 14612 By default assume that all calls are far away so that a longer more 14613 expensive calling sequence is required. This is required for calls 14614 further than 32 megabytes (33,554,432 bytes) from the current 14615 location. A short call will be generated if the compiler knows 14616 the call cannot be that far away. This setting can be overridden 14617 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 14618 14619 Some linkers are capable of detecting out-of-range calls and 14620 generating glue code on the fly. On these systems, long calls are 14621 unnecessary and generate slower code. As of this writing, the AIX 14622 linker can do this, as can the GNU linker for PowerPC/64. It is 14623 planned to add this feature to the GNU linker for 32-bit PowerPC 14624 systems as well. 14625 14626 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 14627 callee, L42", plus a "branch island" (glue code). The two target 14628 addresses represent the callee and the "branch island". The 14629 Darwin/PPC linker will prefer the first address and generate a "bl 14630 callee" if the PPC "bl" instruction will reach the callee directly; 14631 otherwise, the linker will generate "bl L42" to call the "branch 14632 island". The "branch island" is appended to the body of the 14633 calling function; it computes the full 32-bit address of the callee 14634 and jumps to it. 14635 14636 On Mach-O (Darwin) systems, this option directs the compiler emit 14637 to the glue for every direct call, and the Darwin linker decides 14638 whether to use or discard it. 14639 14640 In the future, we may cause GCC to ignore all longcall 14641 specifications when the linker is known to generate glue. 14642 14643`-mtls-markers' 14644`-mno-tls-markers' 14645 Mark (do not mark) calls to `__tls_get_addr' with a relocation 14646 specifying the function argument. The relocation allows ld to 14647 reliably associate function call with argument setup instructions 14648 for TLS optimization, which in turn allows gcc to better schedule 14649 the sequence. 14650 14651`-pthread' 14652 Adds support for multithreading with the "pthreads" library. This 14653 option sets flags for both the preprocessor and linker. 14654 14655 14656 14657File: gcc.info, Node: RX Options, Next: S/390 and zSeries Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 14658 146593.17.33 RX Options 14660------------------ 14661 14662These command line options are defined for RX targets: 14663 14664`-m64bit-doubles' 14665`-m32bit-doubles' 14666 Make the `double' data type be 64-bits (`-m64bit-doubles') or 14667 32-bits (`-m32bit-doubles') in size. The default is 14668 `-m32bit-doubles'. _Note_ RX floating point hardware only works 14669 on 32-bit values, which is why the default is `-m32bit-doubles'. 14670 14671`-fpu' 14672`-nofpu' 14673 Enables (`-fpu') or disables (`-nofpu') the use of RX floating 14674 point hardware. The default is enabled for the RX600 series and 14675 disabled for the RX200 series. 14676 14677 Floating point instructions will only be generated for 32-bit 14678 floating point values however, so if the `-m64bit-doubles' option 14679 is in use then the FPU hardware will not be used for doubles. 14680 14681 _Note_ If the `-fpu' option is enabled then 14682 `-funsafe-math-optimizations' is also enabled automatically. This 14683 is because the RX FPU instructions are themselves unsafe. 14684 14685`-mcpu=NAME' 14686`-patch=NAME' 14687 Selects the type of RX CPU to be targeted. Currently three types 14688 are supported, the generic RX600 and RX200 series hardware and the 14689 specific RX610 CPU. The default is RX600. 14690 14691 The only difference between RX600 and RX610 is that the RX610 does 14692 not support the `MVTIPL' instruction. 14693 14694 The RX200 series does not have a hardware floating point unit and 14695 so `-nofpu' is enabled by default when this type is selected. 14696 14697`-mbig-endian-data' 14698`-mlittle-endian-data' 14699 Store data (but not code) in the big-endian format. The default is 14700 `-mlittle-endian-data', ie to store data in the little endian 14701 format. 14702 14703`-msmall-data-limit=N' 14704 Specifies the maximum size in bytes of global and static variables 14705 which can be placed into the small data area. Using the small data 14706 area can lead to smaller and faster code, but the size of area is 14707 limited and it is up to the programmer to ensure that the area does 14708 not overflow. Also when the small data area is used one of the 14709 RX's registers (`r13') is reserved for use pointing to this area, 14710 so it is no longer available for use by the compiler. This could 14711 result in slower and/or larger code if variables which once could 14712 have been held in `r13' are now pushed onto the stack. 14713 14714 Note, common variables (variables which have not been initialised) 14715 and constants are not placed into the small data area as they are 14716 assigned to other sections in the output executable. 14717 14718 The default value is zero, which disables this feature. Note, this 14719 feature is not enabled by default with higher optimization levels 14720 (`-O2' etc) because of the potentially detrimental effects of 14721 reserving register `r13'. It is up to the programmer to 14722 experiment and discover whether this feature is of benefit to their 14723 program. 14724 14725`-msim' 14726`-mno-sim' 14727 Use the simulator runtime. The default is to use the libgloss 14728 board specific runtime. 14729 14730`-mas100-syntax' 14731`-mno-as100-syntax' 14732 When generating assembler output use a syntax that is compatible 14733 with Renesas's AS100 assembler. This syntax can also be handled 14734 by the GAS assembler but it has some restrictions so generating it 14735 is not the default option. 14736 14737`-mmax-constant-size=N' 14738 Specifies the maximum size, in bytes, of a constant that can be 14739 used as an operand in a RX instruction. Although the RX 14740 instruction set does allow constants of up to 4 bytes in length to 14741 be used in instructions, a longer value equates to a longer 14742 instruction. Thus in some circumstances it can be beneficial to 14743 restrict the size of constants that are used in instructions. 14744 Constants that are too big are instead placed into a constant pool 14745 and referenced via register indirection. 14746 14747 The value N can be between 0 and 4. A value of 0 (the default) or 14748 4 means that constants of any size are allowed. 14749 14750`-mrelax' 14751 Enable linker relaxation. Linker relaxation is a process whereby 14752 the linker will attempt to reduce the size of a program by finding 14753 shorter versions of various instructions. Disabled by default. 14754 14755`-mint-register=N' 14756 Specify the number of registers to reserve for fast interrupt 14757 handler functions. The value N can be between 0 and 4. A value 14758 of 1 means that register `r13' will be reserved for the exclusive 14759 use of fast interrupt handlers. A value of 2 reserves `r13' and 14760 `r12'. A value of 3 reserves `r13', `r12' and `r11', and a value 14761 of 4 reserves `r13' through `r10'. A value of 0, the default, 14762 does not reserve any registers. 14763 14764`-msave-acc-in-interrupts' 14765 Specifies that interrupt handler functions should preserve the 14766 accumulator register. This is only necessary if normal code might 14767 use the accumulator register, for example because it performs 14768 64-bit multiplications. The default is to ignore the accumulator 14769 as this makes the interrupt handlers faster. 14770 14771 14772 _Note:_ The generic GCC command line `-ffixed-REG' has special 14773significance to the RX port when used with the `interrupt' function 14774attribute. This attribute indicates a function intended to process 14775fast interrupts. GCC will will ensure that it only uses the registers 14776`r10', `r11', `r12' and/or `r13' and only provided that the normal use 14777of the corresponding registers have been restricted via the 14778`-ffixed-REG' or `-mint-register' command line options. 14779 14780 14781File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RX Options, Up: Submodel Options 14782 147833.17.34 S/390 and zSeries Options 14784--------------------------------- 14785 14786These are the `-m' options defined for the S/390 and zSeries 14787architecture. 14788 14789`-mhard-float' 14790`-msoft-float' 14791 Use (do not use) the hardware floating-point instructions and 14792 registers for floating-point operations. When `-msoft-float' is 14793 specified, functions in `libgcc.a' will be used to perform 14794 floating-point operations. When `-mhard-float' is specified, the 14795 compiler generates IEEE floating-point instructions. This is the 14796 default. 14797 14798`-mhard-dfp' 14799`-mno-hard-dfp' 14800 Use (do not use) the hardware decimal-floating-point instructions 14801 for decimal-floating-point operations. When `-mno-hard-dfp' is 14802 specified, functions in `libgcc.a' will be used to perform 14803 decimal-floating-point operations. When `-mhard-dfp' is 14804 specified, the compiler generates decimal-floating-point hardware 14805 instructions. This is the default for `-march=z9-ec' or higher. 14806 14807`-mlong-double-64' 14808`-mlong-double-128' 14809 These switches control the size of `long double' type. A size of 14810 64bit makes the `long double' type equivalent to the `double' 14811 type. This is the default. 14812 14813`-mbackchain' 14814`-mno-backchain' 14815 Store (do not store) the address of the caller's frame as 14816 backchain pointer into the callee's stack frame. A backchain may 14817 be needed to allow debugging using tools that do not understand 14818 DWARF-2 call frame information. When `-mno-packed-stack' is in 14819 effect, the backchain pointer is stored at the bottom of the stack 14820 frame; when `-mpacked-stack' is in effect, the backchain is placed 14821 into the topmost word of the 96/160 byte register save area. 14822 14823 In general, code compiled with `-mbackchain' is call-compatible 14824 with code compiled with `-mmo-backchain'; however, use of the 14825 backchain for debugging purposes usually requires that the whole 14826 binary is built with `-mbackchain'. Note that the combination of 14827 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 14828 supported. In order to build a linux kernel use `-msoft-float'. 14829 14830 The default is to not maintain the backchain. 14831 14832`-mpacked-stack' 14833`-mno-packed-stack' 14834 Use (do not use) the packed stack layout. When 14835 `-mno-packed-stack' is specified, the compiler uses the all fields 14836 of the 96/160 byte register save area only for their default 14837 purpose; unused fields still take up stack space. When 14838 `-mpacked-stack' is specified, register save slots are densely 14839 packed at the top of the register save area; unused space is 14840 reused for other purposes, allowing for more efficient use of the 14841 available stack space. However, when `-mbackchain' is also in 14842 effect, the topmost word of the save area is always used to store 14843 the backchain, and the return address register is always saved two 14844 words below the backchain. 14845 14846 As long as the stack frame backchain is not used, code generated 14847 with `-mpacked-stack' is call-compatible with code generated with 14848 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 14849 for S/390 or zSeries generated code that uses the stack frame 14850 backchain at run time, not just for debugging purposes. Such code 14851 is not call-compatible with code compiled with `-mpacked-stack'. 14852 Also, note that the combination of `-mbackchain', `-mpacked-stack' 14853 and `-mhard-float' is not supported. In order to build a linux 14854 kernel use `-msoft-float'. 14855 14856 The default is to not use the packed stack layout. 14857 14858`-msmall-exec' 14859`-mno-small-exec' 14860 Generate (or do not generate) code using the `bras' instruction to 14861 do subroutine calls. This only works reliably if the total 14862 executable size does not exceed 64k. The default is to use the 14863 `basr' instruction instead, which does not have this limitation. 14864 14865`-m64' 14866`-m31' 14867 When `-m31' is specified, generate code compliant to the GNU/Linux 14868 for S/390 ABI. When `-m64' is specified, generate code compliant 14869 to the GNU/Linux for zSeries ABI. This allows GCC in particular 14870 to generate 64-bit instructions. For the `s390' targets, the 14871 default is `-m31', while the `s390x' targets default to `-m64'. 14872 14873`-mzarch' 14874`-mesa' 14875 When `-mzarch' is specified, generate code using the instructions 14876 available on z/Architecture. When `-mesa' is specified, generate 14877 code using the instructions available on ESA/390. Note that 14878 `-mesa' is not possible with `-m64'. When generating code 14879 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 14880 When generating code compliant to the GNU/Linux for zSeries ABI, 14881 the default is `-mzarch'. 14882 14883`-mmvcle' 14884`-mno-mvcle' 14885 Generate (or do not generate) code using the `mvcle' instruction 14886 to perform block moves. When `-mno-mvcle' is specified, use a 14887 `mvc' loop instead. This is the default unless optimizing for 14888 size. 14889 14890`-mdebug' 14891`-mno-debug' 14892 Print (or do not print) additional debug information when 14893 compiling. The default is to not print debug information. 14894 14895`-march=CPU-TYPE' 14896 Generate code that will run on CPU-TYPE, which is the name of a 14897 system representing a certain processor type. Possible values for 14898 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 14899 `z10'. When generating code using the instructions available on 14900 z/Architecture, the default is `-march=z900'. Otherwise, the 14901 default is `-march=g5'. 14902 14903`-mtune=CPU-TYPE' 14904 Tune to CPU-TYPE everything applicable about the generated code, 14905 except for the ABI and the set of available instructions. The 14906 list of CPU-TYPE values is the same as for `-march'. The default 14907 is the value used for `-march'. 14908 14909`-mtpf-trace' 14910`-mno-tpf-trace' 14911 Generate code that adds (does not add) in TPF OS specific branches 14912 to trace routines in the operating system. This option is off by 14913 default, even when compiling for the TPF OS. 14914 14915`-mfused-madd' 14916`-mno-fused-madd' 14917 Generate code that uses (does not use) the floating point multiply 14918 and accumulate instructions. These instructions are generated by 14919 default if hardware floating point is used. 14920 14921`-mwarn-framesize=FRAMESIZE' 14922 Emit a warning if the current function exceeds the given frame 14923 size. Because this is a compile time check it doesn't need to be 14924 a real problem when the program runs. It is intended to identify 14925 functions which most probably cause a stack overflow. It is 14926 useful to be used in an environment with limited stack size e.g. 14927 the linux kernel. 14928 14929`-mwarn-dynamicstack' 14930 Emit a warning if the function calls alloca or uses dynamically 14931 sized arrays. This is generally a bad idea with a limited stack 14932 size. 14933 14934`-mstack-guard=STACK-GUARD' 14935`-mstack-size=STACK-SIZE' 14936 If these options are provided the s390 back end emits additional 14937 instructions in the function prologue which trigger a trap if the 14938 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 14939 that the stack on s390 grows downward). If the STACK-GUARD option 14940 is omitted the smallest power of 2 larger than the frame size of 14941 the compiled function is chosen. These options are intended to be 14942 used to help debugging stack overflow problems. The additionally 14943 emitted code causes only little overhead and hence can also be 14944 used in production like systems without greater performance 14945 degradation. The given values have to be exact powers of 2 and 14946 STACK-SIZE has to be greater than STACK-GUARD without exceeding 14947 64k. In order to be efficient the extra code makes the assumption 14948 that the stack starts at an address aligned to the value given by 14949 STACK-SIZE. The STACK-GUARD option can only be used in 14950 conjunction with STACK-SIZE. 14951 14952 14953File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 14954 149553.17.35 Score Options 14956--------------------- 14957 14958These options are defined for Score implementations: 14959 14960`-meb' 14961 Compile code for big endian mode. This is the default. 14962 14963`-mel' 14964 Compile code for little endian mode. 14965 14966`-mnhwloop' 14967 Disable generate bcnz instruction. 14968 14969`-muls' 14970 Enable generate unaligned load and store instruction. 14971 14972`-mmac' 14973 Enable the use of multiply-accumulate instructions. Disabled by 14974 default. 14975 14976`-mscore5' 14977 Specify the SCORE5 as the target architecture. 14978 14979`-mscore5u' 14980 Specify the SCORE5U of the target architecture. 14981 14982`-mscore7' 14983 Specify the SCORE7 as the target architecture. This is the default. 14984 14985`-mscore7d' 14986 Specify the SCORE7D as the target architecture. 14987 14988 14989File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 14990 149913.17.36 SH Options 14992------------------ 14993 14994These `-m' options are defined for the SH implementations: 14995 14996`-m1' 14997 Generate code for the SH1. 14998 14999`-m2' 15000 Generate code for the SH2. 15001 15002`-m2e' 15003 Generate code for the SH2e. 15004 15005`-m2a-nofpu' 15006 Generate code for the SH2a without FPU, or for a SH2a-FPU in such 15007 a way that the floating-point unit is not used. 15008 15009`-m2a-single-only' 15010 Generate code for the SH2a-FPU, in such a way that no 15011 double-precision floating point operations are used. 15012 15013`-m2a-single' 15014 Generate code for the SH2a-FPU assuming the floating-point unit is 15015 in single-precision mode by default. 15016 15017`-m2a' 15018 Generate code for the SH2a-FPU assuming the floating-point unit is 15019 in double-precision mode by default. 15020 15021`-m3' 15022 Generate code for the SH3. 15023 15024`-m3e' 15025 Generate code for the SH3e. 15026 15027`-m4-nofpu' 15028 Generate code for the SH4 without a floating-point unit. 15029 15030`-m4-single-only' 15031 Generate code for the SH4 with a floating-point unit that only 15032 supports single-precision arithmetic. 15033 15034`-m4-single' 15035 Generate code for the SH4 assuming the floating-point unit is in 15036 single-precision mode by default. 15037 15038`-m4' 15039 Generate code for the SH4. 15040 15041`-m4a-nofpu' 15042 Generate code for the SH4al-dsp, or for a SH4a in such a way that 15043 the floating-point unit is not used. 15044 15045`-m4a-single-only' 15046 Generate code for the SH4a, in such a way that no double-precision 15047 floating point operations are used. 15048 15049`-m4a-single' 15050 Generate code for the SH4a assuming the floating-point unit is in 15051 single-precision mode by default. 15052 15053`-m4a' 15054 Generate code for the SH4a. 15055 15056`-m4al' 15057 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 15058 the assembler. GCC doesn't generate any DSP instructions at the 15059 moment. 15060 15061`-mb' 15062 Compile code for the processor in big endian mode. 15063 15064`-ml' 15065 Compile code for the processor in little endian mode. 15066 15067`-mdalign' 15068 Align doubles at 64-bit boundaries. Note that this changes the 15069 calling conventions, and thus some functions from the standard C 15070 library will not work unless you recompile it first with 15071 `-mdalign'. 15072 15073`-mrelax' 15074 Shorten some address references at link time, when possible; uses 15075 the linker option `-relax'. 15076 15077`-mbigtable' 15078 Use 32-bit offsets in `switch' tables. The default is to use 15079 16-bit offsets. 15080 15081`-mbitops' 15082 Enable the use of bit manipulation instructions on SH2A. 15083 15084`-mfmovd' 15085 Enable the use of the instruction `fmovd'. Check `-mdalign' for 15086 alignment constraints. 15087 15088`-mhitachi' 15089 Comply with the calling conventions defined by Renesas. 15090 15091`-mrenesas' 15092 Comply with the calling conventions defined by Renesas. 15093 15094`-mno-renesas' 15095 Comply with the calling conventions defined for GCC before the 15096 Renesas conventions were available. This option is the default 15097 for all targets of the SH toolchain except for `sh-symbianelf'. 15098 15099`-mnomacsave' 15100 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 15101 given. 15102 15103`-mieee' 15104 Increase IEEE-compliance of floating-point code. At the moment, 15105 this is equivalent to `-fno-finite-math-only'. When generating 16 15106 bit SH opcodes, getting IEEE-conforming results for comparisons of 15107 NANs / infinities incurs extra overhead in every floating point 15108 comparison, therefore the default is set to `-ffinite-math-only'. 15109 15110`-minline-ic_invalidate' 15111 Inline code to invalidate instruction cache entries after setting 15112 up nested function trampolines. This option has no effect if 15113 -musermode is in effect and the selected code generation option 15114 (e.g. -m4) does not allow the use of the icbi instruction. If the 15115 selected code generation option does not allow the use of the icbi 15116 instruction, and -musermode is not in effect, the inlined code will 15117 manipulate the instruction cache address array directly with an 15118 associative write. This not only requires privileged mode, but it 15119 will also fail if the cache line had been mapped via the TLB and 15120 has become unmapped. 15121 15122`-misize' 15123 Dump instruction size and location in the assembly code. 15124 15125`-mpadstruct' 15126 This option is deprecated. It pads structures to multiple of 4 15127 bytes, which is incompatible with the SH ABI. 15128 15129`-mspace' 15130 Optimize for space instead of speed. Implied by `-Os'. 15131 15132`-mprefergot' 15133 When generating position-independent code, emit function calls 15134 using the Global Offset Table instead of the Procedure Linkage 15135 Table. 15136 15137`-musermode' 15138 Don't generate privileged mode only code; implies 15139 -mno-inline-ic_invalidate if the inlined code would not work in 15140 user mode. This is the default when the target is `sh-*-linux*'. 15141 15142`-multcost=NUMBER' 15143 Set the cost to assume for a multiply insn. 15144 15145`-mdiv=STRATEGY' 15146 Set the division strategy to use for SHmedia code. STRATEGY must 15147 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 15148 inv:call, inv:call2, inv:fp . "fp" performs the operation in 15149 floating point. This has a very high latency, but needs only a 15150 few instructions, so it might be a good choice if your code has 15151 enough easily exploitable ILP to allow the compiler to schedule 15152 the floating point instructions together with other instructions. 15153 Division by zero causes a floating point exception. "inv" uses 15154 integer operations to calculate the inverse of the divisor, and 15155 then multiplies the dividend with the inverse. This strategy 15156 allows cse and hoisting of the inverse calculation. Division by 15157 zero calculates an unspecified result, but does not trap. 15158 "inv:minlat" is a variant of "inv" where if no cse / hoisting 15159 opportunities have been found, or if the entire operation has been 15160 hoisted to the same place, the last stages of the inverse 15161 calculation are intertwined with the final multiply to reduce the 15162 overall latency, at the expense of using a few more instructions, 15163 and thus offering fewer scheduling opportunities with other code. 15164 "call" calls a library function that usually implements the 15165 inv:minlat strategy. This gives high code density for 15166 m5-*media-nofpu compilations. "call2" uses a different entry 15167 point of the same library function, where it assumes that a 15168 pointer to a lookup table has already been set up, which exposes 15169 the pointer load to cse / code hoisting optimizations. 15170 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 15171 for initial code generation, but if the code stays unoptimized, 15172 revert to the "call", "call2", or "fp" strategies, respectively. 15173 Note that the potentially-trapping side effect of division by zero 15174 is carried by a separate instruction, so it is possible that all 15175 the integer instructions are hoisted out, but the marker for the 15176 side effect stays where it is. A recombination to fp operations 15177 or a call is not possible in that case. "inv20u" and "inv20l" are 15178 variants of the "inv:minlat" strategy. In the case that the 15179 inverse calculation was nor separated from the multiply, they speed 15180 up division where the dividend fits into 20 bits (plus sign where 15181 applicable), by inserting a test to skip a number of operations in 15182 this case; this test slows down the case of larger dividends. 15183 inv20u assumes the case of a such a small dividend to be unlikely, 15184 and inv20l assumes it to be likely. 15185 15186`-mdivsi3_libfunc=NAME' 15187 Set the name of the library function used for 32 bit signed 15188 division to NAME. This only affect the name used in the call and 15189 inv:call division strategies, and the compiler will still expect 15190 the same sets of input/output/clobbered registers as if this 15191 option was not present. 15192 15193`-mfixed-range=REGISTER-RANGE' 15194 Generate code treating the given register range as fixed registers. 15195 A fixed register is one that the register allocator can not use. 15196 This is useful when compiling kernel code. A register range is 15197 specified as two registers separated by a dash. Multiple register 15198 ranges can be specified separated by a comma. 15199 15200`-madjust-unroll' 15201 Throttle unrolling to avoid thrashing target registers. This 15202 option only has an effect if the gcc code base supports the 15203 TARGET_ADJUST_UNROLL_MAX target hook. 15204 15205`-mindexed-addressing' 15206 Enable the use of the indexed addressing mode for 15207 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 15208 implement 32 bit wrap-around semantics for the indexed addressing 15209 mode. The architecture allows the implementation of processors 15210 with 64 bit MMU, which the OS could use to get 32 bit addressing, 15211 but since no current hardware implementation supports this or any 15212 other way to make the indexed addressing mode safe to use in the 15213 32 bit ABI, the default is -mno-indexed-addressing. 15214 15215`-mgettrcost=NUMBER' 15216 Set the cost assumed for the gettr instruction to NUMBER. The 15217 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 15218 15219`-mpt-fixed' 15220 Assume pt* instructions won't trap. This will generally generate 15221 better scheduled code, but is unsafe on current hardware. The 15222 current architecture definition says that ptabs and ptrel trap 15223 when the target anded with 3 is 3. This has the unintentional 15224 effect of making it unsafe to schedule ptabs / ptrel before a 15225 branch, or hoist it out of a loop. For example, 15226 __do_global_ctors, a part of libgcc that runs constructors at 15227 program startup, calls functions in a list which is delimited by 15228 -1. With the -mpt-fixed option, the ptabs will be done before 15229 testing against -1. That means that all the constructors will be 15230 run a bit quicker, but when the loop comes to the end of the list, 15231 the program crashes because ptabs loads -1 into a target register. 15232 Since this option is unsafe for any hardware implementing the 15233 current architecture specification, the default is -mno-pt-fixed. 15234 Unless the user specifies a specific cost with `-mgettrcost', 15235 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 15236 allocation using target registers for storing ordinary integers. 15237 15238`-minvalid-symbols' 15239 Assume symbols might be invalid. Ordinary function symbols 15240 generated by the compiler will always be valid to load with 15241 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 15242 linker tricks it is possible to generate symbols that will cause 15243 ptabs / ptrel to trap. This option is only meaningful when 15244 `-mno-pt-fixed' is in effect. It will then prevent 15245 cross-basic-block cse, hoisting and most scheduling of symbol 15246 loads. The default is `-mno-invalid-symbols'. 15247 15248 15249File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: SH Options, Up: Submodel Options 15250 152513.17.37 SPARC Options 15252--------------------- 15253 15254These `-m' options are supported on the SPARC: 15255 15256`-mno-app-regs' 15257`-mapp-regs' 15258 Specify `-mapp-regs' to generate output using the global registers 15259 2 through 4, which the SPARC SVR4 ABI reserves for applications. 15260 This is the default. 15261 15262 To be fully SVR4 ABI compliant at the cost of some performance 15263 loss, specify `-mno-app-regs'. You should compile libraries and 15264 system software with this option. 15265 15266`-mfpu' 15267`-mhard-float' 15268 Generate output containing floating point instructions. This is 15269 the default. 15270 15271`-mno-fpu' 15272`-msoft-float' 15273 Generate output containing library calls for floating point. 15274 *Warning:* the requisite libraries are not available for all SPARC 15275 targets. Normally the facilities of the machine's usual C 15276 compiler are used, but this cannot be done directly in 15277 cross-compilation. You must make your own arrangements to provide 15278 suitable library functions for cross-compilation. The embedded 15279 targets `sparc-*-aout' and `sparclite-*-*' do provide software 15280 floating point support. 15281 15282 `-msoft-float' changes the calling convention in the output file; 15283 therefore, it is only useful if you compile _all_ of a program with 15284 this option. In particular, you need to compile `libgcc.a', the 15285 library that comes with GCC, with `-msoft-float' in order for this 15286 to work. 15287 15288`-mhard-quad-float' 15289 Generate output containing quad-word (long double) floating point 15290 instructions. 15291 15292`-msoft-quad-float' 15293 Generate output containing library calls for quad-word (long 15294 double) floating point instructions. The functions called are 15295 those specified in the SPARC ABI. This is the default. 15296 15297 As of this writing, there are no SPARC implementations that have 15298 hardware support for the quad-word floating point instructions. 15299 They all invoke a trap handler for one of these instructions, and 15300 then the trap handler emulates the effect of the instruction. 15301 Because of the trap handler overhead, this is much slower than 15302 calling the ABI library routines. Thus the `-msoft-quad-float' 15303 option is the default. 15304 15305`-mno-unaligned-doubles' 15306`-munaligned-doubles' 15307 Assume that doubles have 8 byte alignment. This is the default. 15308 15309 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 15310 alignment only if they are contained in another type, or if they 15311 have an absolute address. Otherwise, it assumes they have 4 byte 15312 alignment. Specifying this option avoids some rare compatibility 15313 problems with code generated by other compilers. It is not the 15314 default because it results in a performance loss, especially for 15315 floating point code. 15316 15317`-mno-faster-structs' 15318`-mfaster-structs' 15319 With `-mfaster-structs', the compiler assumes that structures 15320 should have 8 byte alignment. This enables the use of pairs of 15321 `ldd' and `std' instructions for copies in structure assignment, 15322 in place of twice as many `ld' and `st' pairs. However, the use 15323 of this changed alignment directly violates the SPARC ABI. Thus, 15324 it's intended only for use on targets where the developer 15325 acknowledges that their resulting code will not be directly in 15326 line with the rules of the ABI. 15327 15328`-mimpure-text' 15329 `-mimpure-text', used in addition to `-shared', tells the compiler 15330 to not pass `-z text' to the linker when linking a shared object. 15331 Using this option, you can link position-dependent code into a 15332 shared object. 15333 15334 `-mimpure-text' suppresses the "relocations remain against 15335 allocatable but non-writable sections" linker error message. 15336 However, the necessary relocations will trigger copy-on-write, and 15337 the shared object is not actually shared across processes. 15338 Instead of using `-mimpure-text', you should compile all source 15339 code with `-fpic' or `-fPIC'. 15340 15341 This option is only available on SunOS and Solaris. 15342 15343`-mcpu=CPU_TYPE' 15344 Set the instruction set, register set, and instruction scheduling 15345 parameters for machine type CPU_TYPE. Supported values for 15346 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 15347 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 15348 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 15349 `niagara2'. 15350 15351 Default instruction scheduling parameters are used for values that 15352 select an architecture and not an implementation. These are `v7', 15353 `v8', `sparclite', `sparclet', `v9'. 15354 15355 Here is a list of each supported architecture and their supported 15356 implementations. 15357 15358 v7: cypress 15359 v8: supersparc, hypersparc 15360 sparclite: f930, f934, sparclite86x 15361 sparclet: tsc701 15362 v9: ultrasparc, ultrasparc3, niagara, niagara2 15363 15364 By default (unless configured otherwise), GCC generates code for 15365 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 15366 the compiler additionally optimizes it for the Cypress CY7C602 15367 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 15368 also appropriate for the older SPARCStation 1, 2, IPX etc. 15369 15370 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 15371 architecture. The only difference from V7 code is that the 15372 compiler emits the integer multiply and integer divide 15373 instructions which exist in SPARC-V8 but not in SPARC-V7. With 15374 `-mcpu=supersparc', the compiler additionally optimizes it for the 15375 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 15376 series. 15377 15378 With `-mcpu=sparclite', GCC generates code for the SPARClite 15379 variant of the SPARC architecture. This adds the integer 15380 multiply, integer divide step and scan (`ffs') instructions which 15381 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 15382 compiler additionally optimizes it for the Fujitsu MB86930 chip, 15383 which is the original SPARClite, with no FPU. With `-mcpu=f934', 15384 the compiler additionally optimizes it for the Fujitsu MB86934 15385 chip, which is the more recent SPARClite with FPU. 15386 15387 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 15388 of the SPARC architecture. This adds the integer multiply, 15389 multiply/accumulate, integer divide step and scan (`ffs') 15390 instructions which exist in SPARClet but not in SPARC-V7. With 15391 `-mcpu=tsc701', the compiler additionally optimizes it for the 15392 TEMIC SPARClet chip. 15393 15394 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 15395 architecture. This adds 64-bit integer and floating-point move 15396 instructions, 3 additional floating-point condition code registers 15397 and conditional move instructions. With `-mcpu=ultrasparc', the 15398 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 15399 chips. With `-mcpu=ultrasparc3', the compiler additionally 15400 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 15401 chips. With `-mcpu=niagara', the compiler additionally optimizes 15402 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 15403 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 15404 15405`-mtune=CPU_TYPE' 15406 Set the instruction scheduling parameters for machine type 15407 CPU_TYPE, but do not set the instruction set or register set that 15408 the option `-mcpu=CPU_TYPE' would. 15409 15410 The same values for `-mcpu=CPU_TYPE' can be used for 15411 `-mtune=CPU_TYPE', but the only useful values are those that 15412 select a particular CPU implementation. Those are `cypress', 15413 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 15414 `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'. 15415 15416`-mv8plus' 15417`-mno-v8plus' 15418 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 15419 difference from the V8 ABI is that the global and out registers are 15420 considered 64-bit wide. This is enabled by default on Solaris in 15421 32-bit mode for all SPARC-V9 processors. 15422 15423`-mvis' 15424`-mno-vis' 15425 With `-mvis', GCC generates code that takes advantage of the 15426 UltraSPARC Visual Instruction Set extensions. The default is 15427 `-mno-vis'. 15428 15429 These `-m' options are supported in addition to the above on SPARC-V9 15430processors in 64-bit environments: 15431 15432`-mlittle-endian' 15433 Generate code for a processor running in little-endian mode. It 15434 is only available for a few configurations and most notably not on 15435 Solaris and Linux. 15436 15437`-m32' 15438`-m64' 15439 Generate code for a 32-bit or 64-bit environment. The 32-bit 15440 environment sets int, long and pointer to 32 bits. The 64-bit 15441 environment sets int to 32 bits and long and pointer to 64 bits. 15442 15443`-mcmodel=medlow' 15444 Generate code for the Medium/Low code model: 64-bit addresses, 15445 programs must be linked in the low 32 bits of memory. Programs 15446 can be statically or dynamically linked. 15447 15448`-mcmodel=medmid' 15449 Generate code for the Medium/Middle code model: 64-bit addresses, 15450 programs must be linked in the low 44 bits of memory, the text and 15451 data segments must be less than 2GB in size and the data segment 15452 must be located within 2GB of the text segment. 15453 15454`-mcmodel=medany' 15455 Generate code for the Medium/Anywhere code model: 64-bit 15456 addresses, programs may be linked anywhere in memory, the text and 15457 data segments must be less than 2GB in size and the data segment 15458 must be located within 2GB of the text segment. 15459 15460`-mcmodel=embmedany' 15461 Generate code for the Medium/Anywhere code model for embedded 15462 systems: 64-bit addresses, the text and data segments must be less 15463 than 2GB in size, both starting anywhere in memory (determined at 15464 link time). The global register %g4 points to the base of the 15465 data segment. Programs are statically linked and PIC is not 15466 supported. 15467 15468`-mstack-bias' 15469`-mno-stack-bias' 15470 With `-mstack-bias', GCC assumes that the stack pointer, and frame 15471 pointer if present, are offset by -2047 which must be added back 15472 when making stack frame references. This is the default in 64-bit 15473 mode. Otherwise, assume no such offset is present. 15474 15475 These switches are supported in addition to the above on Solaris: 15476 15477`-threads' 15478 Add support for multithreading using the Solaris threads library. 15479 This option sets flags for both the preprocessor and linker. This 15480 option does not affect the thread safety of object code produced 15481 by the compiler or that of libraries supplied with it. 15482 15483`-pthreads' 15484 Add support for multithreading using the POSIX threads library. 15485 This option sets flags for both the preprocessor and linker. This 15486 option does not affect the thread safety of object code produced 15487 by the compiler or that of libraries supplied with it. 15488 15489`-pthread' 15490 This is a synonym for `-pthreads'. 15491 15492 15493File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 15494 154953.17.38 SPU Options 15496------------------- 15497 15498These `-m' options are supported on the SPU: 15499 15500`-mwarn-reloc' 15501`-merror-reloc' 15502 The loader for SPU does not handle dynamic relocations. By 15503 default, GCC will give an error when it generates code that 15504 requires a dynamic relocation. `-mno-error-reloc' disables the 15505 error, `-mwarn-reloc' will generate a warning instead. 15506 15507`-msafe-dma' 15508`-munsafe-dma' 15509 Instructions which initiate or test completion of DMA must not be 15510 reordered with respect to loads and stores of the memory which is 15511 being accessed. Users typically address this problem using the 15512 volatile keyword, but that can lead to inefficient code in places 15513 where the memory is known to not change. Rather than mark the 15514 memory as volatile we treat the DMA instructions as potentially 15515 effecting all memory. With `-munsafe-dma' users must use the 15516 volatile keyword to protect memory accesses. 15517 15518`-mbranch-hints' 15519 By default, GCC will generate a branch hint instruction to avoid 15520 pipeline stalls for always taken or probably taken branches. A 15521 hint will not be generated closer than 8 instructions away from 15522 its branch. There is little reason to disable them, except for 15523 debugging purposes, or to make an object a little bit smaller. 15524 15525`-msmall-mem' 15526`-mlarge-mem' 15527 By default, GCC generates code assuming that addresses are never 15528 larger than 18 bits. With `-mlarge-mem' code is generated that 15529 assumes a full 32 bit address. 15530 15531`-mstdmain' 15532 By default, GCC links against startup code that assumes the 15533 SPU-style main function interface (which has an unconventional 15534 parameter list). With `-mstdmain', GCC will link your program 15535 against startup code that assumes a C99-style interface to `main', 15536 including a local copy of `argv' strings. 15537 15538`-mfixed-range=REGISTER-RANGE' 15539 Generate code treating the given register range as fixed registers. 15540 A fixed register is one that the register allocator can not use. 15541 This is useful when compiling kernel code. A register range is 15542 specified as two registers separated by a dash. Multiple register 15543 ranges can be specified separated by a comma. 15544 15545`-mea32' 15546`-mea64' 15547 Compile code assuming that pointers to the PPU address space 15548 accessed via the `__ea' named address space qualifier are either 15549 32 or 64 bits wide. The default is 32 bits. As this is an ABI 15550 changing option, all object code in an executable must be compiled 15551 with the same setting. 15552 15553`-maddress-space-conversion' 15554`-mno-address-space-conversion' 15555 Allow/disallow treating the `__ea' address space as superset of 15556 the generic address space. This enables explicit type casts 15557 between `__ea' and generic pointer as well as implicit conversions 15558 of generic pointers to `__ea' pointers. The default is to allow 15559 address space pointer conversions. 15560 15561`-mcache-size=CACHE-SIZE' 15562 This option controls the version of libgcc that the compiler links 15563 to an executable and selects a software-managed cache for 15564 accessing variables in the `__ea' address space with a particular 15565 cache size. Possible options for CACHE-SIZE are `8', `16', `32', 15566 `64' and `128'. The default cache size is 64KB. 15567 15568`-matomic-updates' 15569`-mno-atomic-updates' 15570 This option controls the version of libgcc that the compiler links 15571 to an executable and selects whether atomic updates to the 15572 software-managed cache of PPU-side variables are used. If you use 15573 atomic updates, changes to a PPU variable from SPU code using the 15574 `__ea' named address space qualifier will not interfere with 15575 changes to other PPU variables residing in the same cache line 15576 from PPU code. If you do not use atomic updates, such 15577 interference may occur; however, writing back cache lines will be 15578 more efficient. The default behavior is to use atomic updates. 15579 15580`-mdual-nops' 15581`-mdual-nops=N' 15582 By default, GCC will insert nops to increase dual issue when it 15583 expects it to increase performance. N can be a value from 0 to 15584 10. A smaller N will insert fewer nops. 10 is the default, 0 is 15585 the same as `-mno-dual-nops'. Disabled with `-Os'. 15586 15587`-mhint-max-nops=N' 15588 Maximum number of nops to insert for a branch hint. A branch hint 15589 must be at least 8 instructions away from the branch it is 15590 effecting. GCC will insert up to N nops to enforce this, 15591 otherwise it will not generate the branch hint. 15592 15593`-mhint-max-distance=N' 15594 The encoding of the branch hint instruction limits the hint to be 15595 within 256 instructions of the branch it is effecting. By 15596 default, GCC makes sure it is within 125. 15597 15598`-msafe-hints' 15599 Work around a hardware bug which causes the SPU to stall 15600 indefinitely. By default, GCC will insert the `hbrp' instruction 15601 to make sure this stall won't happen. 15602 15603 15604 15605File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 15606 156073.17.39 Options for System V 15608---------------------------- 15609 15610These additional options are available on System V Release 4 for 15611compatibility with other compilers on those systems: 15612 15613`-G' 15614 Create a shared object. It is recommended that `-symbolic' or 15615 `-shared' be used instead. 15616 15617`-Qy' 15618 Identify the versions of each tool used by the compiler, in a 15619 `.ident' assembler directive in the output. 15620 15621`-Qn' 15622 Refrain from adding `.ident' directives to the output file (this is 15623 the default). 15624 15625`-YP,DIRS' 15626 Search the directories DIRS, and no others, for libraries 15627 specified with `-l'. 15628 15629`-Ym,DIR' 15630 Look in the directory DIR to find the M4 preprocessor. The 15631 assembler uses this option. 15632 15633 15634File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 15635 156363.17.40 V850 Options 15637-------------------- 15638 15639These `-m' options are defined for V850 implementations: 15640 15641`-mlong-calls' 15642`-mno-long-calls' 15643 Treat all calls as being far away (near). If calls are assumed to 15644 be far away, the compiler will always load the functions address 15645 up into a register, and call indirect through the pointer. 15646 15647`-mno-ep' 15648`-mep' 15649 Do not optimize (do optimize) basic blocks that use the same index 15650 pointer 4 or more times to copy pointer into the `ep' register, and 15651 use the shorter `sld' and `sst' instructions. The `-mep' option 15652 is on by default if you optimize. 15653 15654`-mno-prolog-function' 15655`-mprolog-function' 15656 Do not use (do use) external functions to save and restore 15657 registers at the prologue and epilogue of a function. The 15658 external functions are slower, but use less code space if more 15659 than one function saves the same number of registers. The 15660 `-mprolog-function' option is on by default if you optimize. 15661 15662`-mspace' 15663 Try to make the code as small as possible. At present, this just 15664 turns on the `-mep' and `-mprolog-function' options. 15665 15666`-mtda=N' 15667 Put static or global variables whose size is N bytes or less into 15668 the tiny data area that register `ep' points to. The tiny data 15669 area can hold up to 256 bytes in total (128 bytes for byte 15670 references). 15671 15672`-msda=N' 15673 Put static or global variables whose size is N bytes or less into 15674 the small data area that register `gp' points to. The small data 15675 area can hold up to 64 kilobytes. 15676 15677`-mzda=N' 15678 Put static or global variables whose size is N bytes or less into 15679 the first 32 kilobytes of memory. 15680 15681`-mv850' 15682 Specify that the target processor is the V850. 15683 15684`-mbig-switch' 15685 Generate code suitable for big switch tables. Use this option 15686 only if the assembler/linker complain about out of range branches 15687 within a switch table. 15688 15689`-mapp-regs' 15690 This option will cause r2 and r5 to be used in the code generated 15691 by the compiler. This setting is the default. 15692 15693`-mno-app-regs' 15694 This option will cause r2 and r5 to be treated as fixed registers. 15695 15696`-mv850e1' 15697 Specify that the target processor is the V850E1. The preprocessor 15698 constants `__v850e1__' and `__v850e__' will be defined if this 15699 option is used. 15700 15701`-mv850e' 15702 Specify that the target processor is the V850E. The preprocessor 15703 constant `__v850e__' will be defined if this option is used. 15704 15705 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 15706 a default target processor will be chosen and the relevant 15707 `__v850*__' preprocessor constant will be defined. 15708 15709 The preprocessor constants `__v850' and `__v851__' are always 15710 defined, regardless of which processor variant is the target. 15711 15712`-mdisable-callt' 15713 This option will suppress generation of the CALLT instruction for 15714 the v850e and v850e1 flavors of the v850 architecture. The 15715 default is `-mno-disable-callt' which allows the CALLT instruction 15716 to be used. 15717 15718 15719 15720File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 15721 157223.17.41 VAX Options 15723------------------- 15724 15725These `-m' options are defined for the VAX: 15726 15727`-munix' 15728 Do not output certain jump instructions (`aobleq' and so on) that 15729 the Unix assembler for the VAX cannot handle across long ranges. 15730 15731`-mgnu' 15732 Do output those jump instructions, on the assumption that you will 15733 assemble with the GNU assembler. 15734 15735`-mg' 15736 Output code for g-format floating point numbers instead of 15737 d-format. 15738 15739 15740File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 15741 157423.17.42 VxWorks Options 15743----------------------- 15744 15745The options in this section are defined for all VxWorks targets. 15746Options specific to the target hardware are listed with the other 15747options for that target. 15748 15749`-mrtp' 15750 GCC can generate code for both VxWorks kernels and real time 15751 processes (RTPs). This option switches from the former to the 15752 latter. It also defines the preprocessor macro `__RTP__'. 15753 15754`-non-static' 15755 Link an RTP executable against shared libraries rather than static 15756 libraries. The options `-static' and `-shared' can also be used 15757 for RTPs (*note Link Options::); `-static' is the default. 15758 15759`-Bstatic' 15760`-Bdynamic' 15761 These options are passed down to the linker. They are defined for 15762 compatibility with Diab. 15763 15764`-Xbind-lazy' 15765 Enable lazy binding of function calls. This option is equivalent 15766 to `-Wl,-z,now' and is defined for compatibility with Diab. 15767 15768`-Xbind-now' 15769 Disable lazy binding of function calls. This option is the 15770 default and is defined for compatibility with Diab. 15771 15772 15773File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 15774 157753.17.43 x86-64 Options 15776---------------------- 15777 15778These are listed under *Note i386 and x86-64 Options::. 15779 15780 15781File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 15782 157833.17.44 Xstormy16 Options 15784------------------------- 15785 15786These options are defined for Xstormy16: 15787 15788`-msim' 15789 Choose startup files and linker script suitable for the simulator. 15790 15791 15792File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 15793 157943.17.45 Xtensa Options 15795---------------------- 15796 15797These options are supported for Xtensa targets: 15798 15799`-mconst16' 15800`-mno-const16' 15801 Enable or disable use of `CONST16' instructions for loading 15802 constant values. The `CONST16' instruction is currently not a 15803 standard option from Tensilica. When enabled, `CONST16' 15804 instructions are always used in place of the standard `L32R' 15805 instructions. The use of `CONST16' is enabled by default only if 15806 the `L32R' instruction is not available. 15807 15808`-mfused-madd' 15809`-mno-fused-madd' 15810 Enable or disable use of fused multiply/add and multiply/subtract 15811 instructions in the floating-point option. This has no effect if 15812 the floating-point option is not also enabled. Disabling fused 15813 multiply/add and multiply/subtract instructions forces the 15814 compiler to use separate instructions for the multiply and 15815 add/subtract operations. This may be desirable in some cases 15816 where strict IEEE 754-compliant results are required: the fused 15817 multiply add/subtract instructions do not round the intermediate 15818 result, thereby producing results with _more_ bits of precision 15819 than specified by the IEEE standard. Disabling fused multiply 15820 add/subtract instructions also ensures that the program output is 15821 not sensitive to the compiler's ability to combine multiply and 15822 add/subtract operations. 15823 15824`-mserialize-volatile' 15825`-mno-serialize-volatile' 15826 When this option is enabled, GCC inserts `MEMW' instructions before 15827 `volatile' memory references to guarantee sequential consistency. 15828 The default is `-mserialize-volatile'. Use 15829 `-mno-serialize-volatile' to omit the `MEMW' instructions. 15830 15831`-mtext-section-literals' 15832`-mno-text-section-literals' 15833 Control the treatment of literal pools. The default is 15834 `-mno-text-section-literals', which places literals in a separate 15835 section in the output file. This allows the literal pool to be 15836 placed in a data RAM/ROM, and it also allows the linker to combine 15837 literal pools from separate object files to remove redundant 15838 literals and improve code size. With `-mtext-section-literals', 15839 the literals are interspersed in the text section in order to keep 15840 them as close as possible to their references. This may be 15841 necessary for large assembly files. 15842 15843`-mtarget-align' 15844`-mno-target-align' 15845 When this option is enabled, GCC instructs the assembler to 15846 automatically align instructions to reduce branch penalties at the 15847 expense of some code density. The assembler attempts to widen 15848 density instructions to align branch targets and the instructions 15849 following call instructions. If there are not enough preceding 15850 safe density instructions to align a target, no widening will be 15851 performed. The default is `-mtarget-align'. These options do not 15852 affect the treatment of auto-aligned instructions like `LOOP', 15853 which the assembler will always align, either by widening density 15854 instructions or by inserting no-op instructions. 15855 15856`-mlongcalls' 15857`-mno-longcalls' 15858 When this option is enabled, GCC instructs the assembler to 15859 translate direct calls to indirect calls unless it can determine 15860 that the target of a direct call is in the range allowed by the 15861 call instruction. This translation typically occurs for calls to 15862 functions in other source files. Specifically, the assembler 15863 translates a direct `CALL' instruction into an `L32R' followed by 15864 a `CALLX' instruction. The default is `-mno-longcalls'. This 15865 option should be used in programs where the call target can 15866 potentially be out of range. This option is implemented in the 15867 assembler, not the compiler, so the assembly code generated by GCC 15868 will still show direct call instructions--look at the disassembled 15869 object code to see the actual instructions. Note that the 15870 assembler will use an indirect call for every cross-file call, not 15871 just those that really will be out of range. 15872 15873 15874File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 15875 158763.17.46 zSeries Options 15877----------------------- 15878 15879These are listed under *Note S/390 and zSeries Options::. 15880 15881 15882File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 15883 158843.18 Options for Code Generation Conventions 15885============================================ 15886 15887These machine-independent options control the interface conventions 15888used in code generation. 15889 15890 Most of them have both positive and negative forms; the negative form 15891of `-ffoo' would be `-fno-foo'. In the table below, only one of the 15892forms is listed--the one which is not the default. You can figure out 15893the other form by either removing `no-' or adding it. 15894 15895`-fbounds-check' 15896 For front-ends that support it, generate additional code to check 15897 that indices used to access arrays are within the declared range. 15898 This is currently only supported by the Java and Fortran 15899 front-ends, where this option defaults to true and false 15900 respectively. 15901 15902`-ftrapv' 15903 This option generates traps for signed overflow on addition, 15904 subtraction, multiplication operations. 15905 15906`-fwrapv' 15907 This option instructs the compiler to assume that signed arithmetic 15908 overflow of addition, subtraction and multiplication wraps around 15909 using twos-complement representation. This flag enables some 15910 optimizations and disables others. This option is enabled by 15911 default for the Java front-end, as required by the Java language 15912 specification. 15913 15914`-fexceptions' 15915 Enable exception handling. Generates extra code needed to 15916 propagate exceptions. For some targets, this implies GCC will 15917 generate frame unwind information for all functions, which can 15918 produce significant data size overhead, although it does not 15919 affect execution. If you do not specify this option, GCC will 15920 enable it by default for languages like C++ which normally require 15921 exception handling, and disable it for languages like C that do 15922 not normally require it. However, you may need to enable this 15923 option when compiling C code that needs to interoperate properly 15924 with exception handlers written in C++. You may also wish to 15925 disable this option if you are compiling older C++ programs that 15926 don't use exception handling. 15927 15928`-fnon-call-exceptions' 15929 Generate code that allows trapping instructions to throw 15930 exceptions. Note that this requires platform-specific runtime 15931 support that does not exist everywhere. Moreover, it only allows 15932 _trapping_ instructions to throw exceptions, i.e. memory 15933 references or floating point instructions. It does not allow 15934 exceptions to be thrown from arbitrary signal handlers such as 15935 `SIGALRM'. 15936 15937`-funwind-tables' 15938 Similar to `-fexceptions', except that it will just generate any 15939 needed static data, but will not affect the generated code in any 15940 other way. You will normally not enable this option; instead, a 15941 language processor that needs this handling would enable it on 15942 your behalf. 15943 15944`-fasynchronous-unwind-tables' 15945 Generate unwind table in dwarf2 format, if supported by target 15946 machine. The table is exact at each instruction boundary, so it 15947 can be used for stack unwinding from asynchronous events (such as 15948 debugger or garbage collector). 15949 15950`-fpcc-struct-return' 15951 Return "short" `struct' and `union' values in memory like longer 15952 ones, rather than in registers. This convention is less 15953 efficient, but it has the advantage of allowing intercallability 15954 between GCC-compiled files and files compiled with other 15955 compilers, particularly the Portable C Compiler (pcc). 15956 15957 The precise convention for returning structures in memory depends 15958 on the target configuration macros. 15959 15960 Short structures and unions are those whose size and alignment 15961 match that of some integer type. 15962 15963 *Warning:* code compiled with the `-fpcc-struct-return' switch is 15964 not binary compatible with code compiled with the 15965 `-freg-struct-return' switch. Use it to conform to a non-default 15966 application binary interface. 15967 15968`-freg-struct-return' 15969 Return `struct' and `union' values in registers when possible. 15970 This is more efficient for small structures than 15971 `-fpcc-struct-return'. 15972 15973 If you specify neither `-fpcc-struct-return' nor 15974 `-freg-struct-return', GCC defaults to whichever convention is 15975 standard for the target. If there is no standard convention, GCC 15976 defaults to `-fpcc-struct-return', except on targets where GCC is 15977 the principal compiler. In those cases, we can choose the 15978 standard, and we chose the more efficient register return 15979 alternative. 15980 15981 *Warning:* code compiled with the `-freg-struct-return' switch is 15982 not binary compatible with code compiled with the 15983 `-fpcc-struct-return' switch. Use it to conform to a non-default 15984 application binary interface. 15985 15986`-fshort-enums' 15987 Allocate to an `enum' type only as many bytes as it needs for the 15988 declared range of possible values. Specifically, the `enum' type 15989 will be equivalent to the smallest integer type which has enough 15990 room. 15991 15992 *Warning:* the `-fshort-enums' switch causes GCC to generate code 15993 that is not binary compatible with code generated without that 15994 switch. Use it to conform to a non-default application binary 15995 interface. 15996 15997`-fshort-double' 15998 Use the same size for `double' as for `float'. 15999 16000 *Warning:* the `-fshort-double' switch causes GCC to generate code 16001 that is not binary compatible with code generated without that 16002 switch. Use it to conform to a non-default application binary 16003 interface. 16004 16005`-fshort-wchar' 16006 Override the underlying type for `wchar_t' to be `short unsigned 16007 int' instead of the default for the target. This option is useful 16008 for building programs to run under WINE. 16009 16010 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 16011 that is not binary compatible with code generated without that 16012 switch. Use it to conform to a non-default application binary 16013 interface. 16014 16015`-fno-common' 16016 In C code, controls the placement of uninitialized global 16017 variables. Unix C compilers have traditionally permitted multiple 16018 definitions of such variables in different compilation units by 16019 placing the variables in a common block. This is the behavior 16020 specified by `-fcommon', and is the default for GCC on most 16021 targets. On the other hand, this behavior is not required by ISO 16022 C, and on some targets may carry a speed or code size penalty on 16023 variable references. The `-fno-common' option specifies that the 16024 compiler should place uninitialized global variables in the data 16025 section of the object file, rather than generating them as common 16026 blocks. This has the effect that if the same variable is declared 16027 (without `extern') in two different compilations, you will get a 16028 multiple-definition error when you link them. In this case, you 16029 must compile with `-fcommon' instead. Compiling with 16030 `-fno-common' is useful on targets for which it provides better 16031 performance, or if you wish to verify that the program will work 16032 on other systems which always treat uninitialized variable 16033 declarations this way. 16034 16035`-fno-ident' 16036 Ignore the `#ident' directive. 16037 16038`-finhibit-size-directive' 16039 Don't output a `.size' assembler directive, or anything else that 16040 would cause trouble if the function is split in the middle, and the 16041 two halves are placed at locations far apart in memory. This 16042 option is used when compiling `crtstuff.c'; you should not need to 16043 use it for anything else. 16044 16045`-fverbose-asm' 16046 Put extra commentary information in the generated assembly code to 16047 make it more readable. This option is generally only of use to 16048 those who actually need to read the generated assembly code 16049 (perhaps while debugging the compiler itself). 16050 16051 `-fno-verbose-asm', the default, causes the extra information to 16052 be omitted and is useful when comparing two assembler files. 16053 16054`-frecord-gcc-switches' 16055 This switch causes the command line that was used to invoke the 16056 compiler to be recorded into the object file that is being created. 16057 This switch is only implemented on some targets and the exact 16058 format of the recording is target and binary file format 16059 dependent, but it usually takes the form of a section containing 16060 ASCII text. This switch is related to the `-fverbose-asm' switch, 16061 but that switch only records information in the assembler output 16062 file as comments, so it never reaches the object file. 16063 16064`-fpic' 16065 Generate position-independent code (PIC) suitable for use in a 16066 shared library, if supported for the target machine. Such code 16067 accesses all constant addresses through a global offset table 16068 (GOT). The dynamic loader resolves the GOT entries when the 16069 program starts (the dynamic loader is not part of GCC; it is part 16070 of the operating system). If the GOT size for the linked 16071 executable exceeds a machine-specific maximum size, you get an 16072 error message from the linker indicating that `-fpic' does not 16073 work; in that case, recompile with `-fPIC' instead. (These 16074 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 16075 386 has no such limit.) 16076 16077 Position-independent code requires special support, and therefore 16078 works only on certain machines. For the 386, GCC supports PIC for 16079 System V but not for the Sun 386i. Code generated for the IBM 16080 RS/6000 is always position-independent. 16081 16082 When this flag is set, the macros `__pic__' and `__PIC__' are 16083 defined to 1. 16084 16085`-fPIC' 16086 If supported for the target machine, emit position-independent 16087 code, suitable for dynamic linking and avoiding any limit on the 16088 size of the global offset table. This option makes a difference 16089 on the m68k, PowerPC and SPARC. 16090 16091 Position-independent code requires special support, and therefore 16092 works only on certain machines. 16093 16094 When this flag is set, the macros `__pic__' and `__PIC__' are 16095 defined to 2. 16096 16097`-fpie' 16098`-fPIE' 16099 These options are similar to `-fpic' and `-fPIC', but generated 16100 position independent code can be only linked into executables. 16101 Usually these options are used when `-pie' GCC option will be used 16102 during linking. 16103 16104 `-fpie' and `-fPIE' both define the macros `__pie__' and 16105 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 16106 `-fPIE'. 16107 16108`-fno-jump-tables' 16109 Do not use jump tables for switch statements even where it would be 16110 more efficient than other code generation strategies. This option 16111 is of use in conjunction with `-fpic' or `-fPIC' for building code 16112 which forms part of a dynamic linker and cannot reference the 16113 address of a jump table. On some targets, jump tables do not 16114 require a GOT and this option is not needed. 16115 16116`-ffixed-REG' 16117 Treat the register named REG as a fixed register; generated code 16118 should never refer to it (except perhaps as a stack pointer, frame 16119 pointer or in some other fixed role). 16120 16121 REG must be the name of a register. The register names accepted 16122 are machine-specific and are defined in the `REGISTER_NAMES' macro 16123 in the machine description macro file. 16124 16125 This flag does not have a negative form, because it specifies a 16126 three-way choice. 16127 16128`-fcall-used-REG' 16129 Treat the register named REG as an allocable register that is 16130 clobbered by function calls. It may be allocated for temporaries 16131 or variables that do not live across a call. Functions compiled 16132 this way will not save and restore the register REG. 16133 16134 It is an error to used this flag with the frame pointer or stack 16135 pointer. Use of this flag for other registers that have fixed 16136 pervasive roles in the machine's execution model will produce 16137 disastrous results. 16138 16139 This flag does not have a negative form, because it specifies a 16140 three-way choice. 16141 16142`-fcall-saved-REG' 16143 Treat the register named REG as an allocable register saved by 16144 functions. It may be allocated even for temporaries or variables 16145 that live across a call. Functions compiled this way will save 16146 and restore the register REG if they use it. 16147 16148 It is an error to used this flag with the frame pointer or stack 16149 pointer. Use of this flag for other registers that have fixed 16150 pervasive roles in the machine's execution model will produce 16151 disastrous results. 16152 16153 A different sort of disaster will result from the use of this flag 16154 for a register in which function values may be returned. 16155 16156 This flag does not have a negative form, because it specifies a 16157 three-way choice. 16158 16159`-fpack-struct[=N]' 16160 Without a value specified, pack all structure members together 16161 without holes. When a value is specified (which must be a small 16162 power of two), pack structure members according to this value, 16163 representing the maximum alignment (that is, objects with default 16164 alignment requirements larger than this will be output potentially 16165 unaligned at the next fitting location. 16166 16167 *Warning:* the `-fpack-struct' switch causes GCC to generate code 16168 that is not binary compatible with code generated without that 16169 switch. Additionally, it makes the code suboptimal. Use it to 16170 conform to a non-default application binary interface. 16171 16172`-finstrument-functions' 16173 Generate instrumentation calls for entry and exit to functions. 16174 Just after function entry and just before function exit, the 16175 following profiling functions will be called with the address of 16176 the current function and its call site. (On some platforms, 16177 `__builtin_return_address' does not work beyond the current 16178 function, so the call site information may not be available to the 16179 profiling functions otherwise.) 16180 16181 void __cyg_profile_func_enter (void *this_fn, 16182 void *call_site); 16183 void __cyg_profile_func_exit (void *this_fn, 16184 void *call_site); 16185 16186 The first argument is the address of the start of the current 16187 function, which may be looked up exactly in the symbol table. 16188 16189 This instrumentation is also done for functions expanded inline in 16190 other functions. The profiling calls will indicate where, 16191 conceptually, the inline function is entered and exited. This 16192 means that addressable versions of such functions must be 16193 available. If all your uses of a function are expanded inline, 16194 this may mean an additional expansion of code size. If you use 16195 `extern inline' in your C code, an addressable version of such 16196 functions must be provided. (This is normally the case anyways, 16197 but if you get lucky and the optimizer always expands the 16198 functions inline, you might have gotten away without providing 16199 static copies.) 16200 16201 A function may be given the attribute `no_instrument_function', in 16202 which case this instrumentation will not be done. This can be 16203 used, for example, for the profiling functions listed above, 16204 high-priority interrupt routines, and any functions from which the 16205 profiling functions cannot safely be called (perhaps signal 16206 handlers, if the profiling routines generate output or allocate 16207 memory). 16208 16209`-finstrument-functions-exclude-file-list=FILE,FILE,...' 16210 Set the list of functions that are excluded from instrumentation 16211 (see the description of `-finstrument-functions'). If the file 16212 that contains a function definition matches with one of FILE, then 16213 that function is not instrumented. The match is done on 16214 substrings: if the FILE parameter is a substring of the file name, 16215 it is considered to be a match. 16216 16217 For example, 16218 `-finstrument-functions-exclude-file-list=/bits/stl,include/sys' 16219 will exclude any inline function defined in files whose pathnames 16220 contain `/bits/stl' or `include/sys'. 16221 16222 If, for some reason, you want to include letter `','' in one of 16223 SYM, write `'\,''. For example, 16224 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 16225 single quote surrounding the option). 16226 16227`-finstrument-functions-exclude-function-list=SYM,SYM,...' 16228 This is similar to `-finstrument-functions-exclude-file-list', but 16229 this option sets the list of function names to be excluded from 16230 instrumentation. The function name to be matched is its 16231 user-visible name, such as `vector<int> blah(const vector<int> 16232 &)', not the internal mangled name (e.g., 16233 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 16234 the SYM parameter is a substring of the function name, it is 16235 considered to be a match. For C99 and C++ extended identifiers, 16236 the function name must be given in UTF-8, not using universal 16237 character names. 16238 16239`-fstack-check' 16240 Generate code to verify that you do not go beyond the boundary of 16241 the stack. You should specify this flag if you are running in an 16242 environment with multiple threads, but only rarely need to specify 16243 it in a single-threaded environment since stack overflow is 16244 automatically detected on nearly all systems if there is only one 16245 stack. 16246 16247 Note that this switch does not actually cause checking to be done; 16248 the operating system or the language runtime must do that. The 16249 switch causes generation of code to ensure that they see the stack 16250 being extended. 16251 16252 You can additionally specify a string parameter: `no' means no 16253 checking, `generic' means force the use of old-style checking, 16254 `specific' means use the best checking method and is equivalent to 16255 bare `-fstack-check'. 16256 16257 Old-style checking is a generic mechanism that requires no specific 16258 target support in the compiler but comes with the following 16259 drawbacks: 16260 16261 1. Modified allocation strategy for large objects: they will 16262 always be allocated dynamically if their size exceeds a fixed 16263 threshold. 16264 16265 2. Fixed limit on the size of the static frame of functions: 16266 when it is topped by a particular function, stack checking is 16267 not reliable and a warning is issued by the compiler. 16268 16269 3. Inefficiency: because of both the modified allocation 16270 strategy and the generic implementation, the performances of 16271 the code are hampered. 16272 16273 Note that old-style stack checking is also the fallback method for 16274 `specific' if no target support has been added in the compiler. 16275 16276`-fstack-limit-register=REG' 16277`-fstack-limit-symbol=SYM' 16278`-fno-stack-limit' 16279 Generate code to ensure that the stack does not grow beyond a 16280 certain value, either the value of a register or the address of a 16281 symbol. If the stack would grow beyond the value, a signal is 16282 raised. For most targets, the signal is raised before the stack 16283 overruns the boundary, so it is possible to catch the signal 16284 without taking special precautions. 16285 16286 For instance, if the stack starts at absolute address `0x80000000' 16287 and grows downwards, you can use the flags 16288 `-fstack-limit-symbol=__stack_limit' and 16289 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 16290 of 128KB. Note that this may only work with the GNU linker. 16291 16292`-fargument-alias' 16293`-fargument-noalias' 16294`-fargument-noalias-global' 16295`-fargument-noalias-anything' 16296 Specify the possible relationships among parameters and between 16297 parameters and global data. 16298 16299 `-fargument-alias' specifies that arguments (parameters) may alias 16300 each other and may alias global storage. 16301 `-fargument-noalias' specifies that arguments do not alias each 16302 other, but may alias global storage. 16303 `-fargument-noalias-global' specifies that arguments do not alias 16304 each other and do not alias global storage. 16305 `-fargument-noalias-anything' specifies that arguments do not 16306 alias any other storage. 16307 16308 Each language will automatically use whatever option is required by 16309 the language standard. You should not need to use these options 16310 yourself. 16311 16312`-fleading-underscore' 16313 This option and its counterpart, `-fno-leading-underscore', 16314 forcibly change the way C symbols are represented in the object 16315 file. One use is to help link with legacy assembly code. 16316 16317 *Warning:* the `-fleading-underscore' switch causes GCC to 16318 generate code that is not binary compatible with code generated 16319 without that switch. Use it to conform to a non-default 16320 application binary interface. Not all targets provide complete 16321 support for this switch. 16322 16323`-ftls-model=MODEL' 16324 Alter the thread-local storage model to be used (*note 16325 Thread-Local::). The MODEL argument should be one of 16326 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 16327 16328 The default without `-fpic' is `initial-exec'; with `-fpic' the 16329 default is `global-dynamic'. 16330 16331`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 16332 Set the default ELF image symbol visibility to the specified 16333 option--all symbols will be marked with this unless overridden 16334 within the code. Using this feature can very substantially 16335 improve linking and load times of shared object libraries, produce 16336 more optimized code, provide near-perfect API export and prevent 16337 symbol clashes. It is *strongly* recommended that you use this in 16338 any shared objects you distribute. 16339 16340 Despite the nomenclature, `default' always means public ie; 16341 available to be linked against from outside the shared object. 16342 `protected' and `internal' are pretty useless in real-world usage 16343 so the only other commonly used option will be `hidden'. The 16344 default if `-fvisibility' isn't specified is `default', i.e., make 16345 every symbol public--this causes the same behavior as previous 16346 versions of GCC. 16347 16348 A good explanation of the benefits offered by ensuring ELF symbols 16349 have the correct visibility is given by "How To Write Shared 16350 Libraries" by Ulrich Drepper (which can be found at 16351 `http://people.redhat.com/~drepper/')--however a superior solution 16352 made possible by this option to marking things hidden when the 16353 default is public is to make the default hidden and mark things 16354 public. This is the norm with DLL's on Windows and with 16355 `-fvisibility=hidden' and `__attribute__ 16356 ((visibility("default")))' instead of `__declspec(dllexport)' you 16357 get almost identical semantics with identical syntax. This is a 16358 great boon to those working with cross-platform projects. 16359 16360 For those adding visibility support to existing code, you may find 16361 `#pragma GCC visibility' of use. This works by you enclosing the 16362 declarations you wish to set visibility for with (for example) 16363 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 16364 pop'. Bear in mind that symbol visibility should be viewed *as 16365 part of the API interface contract* and thus all new code should 16366 always specify visibility when it is not the default ie; 16367 declarations only for use within the local DSO should *always* be 16368 marked explicitly as hidden as so to avoid PLT indirection 16369 overheads--making this abundantly clear also aids readability and 16370 self-documentation of the code. Note that due to ISO C++ 16371 specification requirements, operator new and operator delete must 16372 always be of default visibility. 16373 16374 Be aware that headers from outside your project, in particular 16375 system headers and headers from any other library you use, may not 16376 be expecting to be compiled with visibility other than the 16377 default. You may need to explicitly say `#pragma GCC visibility 16378 push(default)' before including any such headers. 16379 16380 `extern' declarations are not affected by `-fvisibility', so a lot 16381 of code can be recompiled with `-fvisibility=hidden' with no 16382 modifications. However, this means that calls to `extern' 16383 functions with no explicit visibility will use the PLT, so it is 16384 more effective to use `__attribute ((visibility))' and/or `#pragma 16385 GCC visibility' to tell the compiler which `extern' declarations 16386 should be treated as hidden. 16387 16388 Note that `-fvisibility' does affect C++ vague linkage entities. 16389 This means that, for instance, an exception class that will be 16390 thrown between DSOs must be explicitly marked with default 16391 visibility so that the `type_info' nodes will be unified between 16392 the DSOs. 16393 16394 An overview of these techniques, their benefits and how to use them 16395 is at `http://gcc.gnu.org/wiki/Visibility'. 16396 16397 16398 16399File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 16400 164013.19 Environment Variables Affecting GCC 16402======================================== 16403 16404This section describes several environment variables that affect how GCC 16405operates. Some of them work by specifying directories or prefixes to 16406use when searching for various kinds of files. Some are used to 16407specify other aspects of the compilation environment. 16408 16409 Note that you can also specify places to search using options such as 16410`-B', `-I' and `-L' (*note Directory Options::). These take precedence 16411over places specified using environment variables, which in turn take 16412precedence over those specified by the configuration of GCC. *Note 16413Controlling the Compilation Driver `gcc': (gccint)Driver. 16414 16415`LANG' 16416`LC_CTYPE' 16417`LC_MESSAGES' 16418`LC_ALL' 16419 These environment variables control the way that GCC uses 16420 localization information that allow GCC to work with different 16421 national conventions. GCC inspects the locale categories 16422 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 16423 These locale categories can be set to any value supported by your 16424 installation. A typical value is `en_GB.UTF-8' for English in the 16425 United Kingdom encoded in UTF-8. 16426 16427 The `LC_CTYPE' environment variable specifies character 16428 classification. GCC uses it to determine the character boundaries 16429 in a string; this is needed for some multibyte encodings that 16430 contain quote and escape characters that would otherwise be 16431 interpreted as a string end or escape. 16432 16433 The `LC_MESSAGES' environment variable specifies the language to 16434 use in diagnostic messages. 16435 16436 If the `LC_ALL' environment variable is set, it overrides the value 16437 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 16438 `LC_MESSAGES' default to the value of the `LANG' environment 16439 variable. If none of these variables are set, GCC defaults to 16440 traditional C English behavior. 16441 16442`TMPDIR' 16443 If `TMPDIR' is set, it specifies the directory to use for temporary 16444 files. GCC uses temporary files to hold the output of one stage of 16445 compilation which is to be used as input to the next stage: for 16446 example, the output of the preprocessor, which is the input to the 16447 compiler proper. 16448 16449`GCC_EXEC_PREFIX' 16450 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 16451 names of the subprograms executed by the compiler. No slash is 16452 added when this prefix is combined with the name of a subprogram, 16453 but you can specify a prefix that ends with a slash if you wish. 16454 16455 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 16456 appropriate prefix to use based on the pathname it was invoked 16457 with. 16458 16459 If GCC cannot find the subprogram using the specified prefix, it 16460 tries looking in the usual places for the subprogram. 16461 16462 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 16463 PREFIX is the prefix to the installed compiler. In many cases 16464 PREFIX is the value of `prefix' when you ran the `configure' 16465 script. 16466 16467 Other prefixes specified with `-B' take precedence over this 16468 prefix. 16469 16470 This prefix is also used for finding files such as `crt0.o' that 16471 are used for linking. 16472 16473 In addition, the prefix is used in an unusual way in finding the 16474 directories to search for header files. For each of the standard 16475 directories whose name normally begins with `/usr/local/lib/gcc' 16476 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 16477 replacing that beginning with the specified prefix to produce an 16478 alternate directory name. Thus, with `-Bfoo/', GCC will search 16479 `foo/bar' where it would normally search `/usr/local/lib/bar'. 16480 These alternate directories are searched first; the standard 16481 directories come next. If a standard directory begins with the 16482 configured PREFIX then the value of PREFIX is replaced by 16483 `GCC_EXEC_PREFIX' when looking for header files. 16484 16485`COMPILER_PATH' 16486 The value of `COMPILER_PATH' is a colon-separated list of 16487 directories, much like `PATH'. GCC tries the directories thus 16488 specified when searching for subprograms, if it can't find the 16489 subprograms using `GCC_EXEC_PREFIX'. 16490 16491`LIBRARY_PATH' 16492 The value of `LIBRARY_PATH' is a colon-separated list of 16493 directories, much like `PATH'. When configured as a native 16494 compiler, GCC tries the directories thus specified when searching 16495 for special linker files, if it can't find them using 16496 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 16497 when searching for ordinary libraries for the `-l' option (but 16498 directories specified with `-L' come first). 16499 16500`LANG' 16501 This variable is used to pass locale information to the compiler. 16502 One way in which this information is used is to determine the 16503 character set to be used when character literals, string literals 16504 and comments are parsed in C and C++. When the compiler is 16505 configured to allow multibyte characters, the following values for 16506 `LANG' are recognized: 16507 16508 `C-JIS' 16509 Recognize JIS characters. 16510 16511 `C-SJIS' 16512 Recognize SJIS characters. 16513 16514 `C-EUCJP' 16515 Recognize EUCJP characters. 16516 16517 If `LANG' is not defined, or if it has some other value, then the 16518 compiler will use mblen and mbtowc as defined by the default 16519 locale to recognize and translate multibyte characters. 16520 16521Some additional environments variables affect the behavior of the 16522preprocessor. 16523 16524`CPATH' 16525`C_INCLUDE_PATH' 16526`CPLUS_INCLUDE_PATH' 16527`OBJC_INCLUDE_PATH' 16528 Each variable's value is a list of directories separated by a 16529 special character, much like `PATH', in which to look for header 16530 files. The special character, `PATH_SEPARATOR', is 16531 target-dependent and determined at GCC build time. For Microsoft 16532 Windows-based targets it is a semicolon, and for almost all other 16533 targets it is a colon. 16534 16535 `CPATH' specifies a list of directories to be searched as if 16536 specified with `-I', but after any paths given with `-I' options 16537 on the command line. This environment variable is used regardless 16538 of which language is being preprocessed. 16539 16540 The remaining environment variables apply only when preprocessing 16541 the particular language indicated. Each specifies a list of 16542 directories to be searched as if specified with `-isystem', but 16543 after any paths given with `-isystem' options on the command line. 16544 16545 In all these variables, an empty element instructs the compiler to 16546 search its current working directory. Empty elements can appear 16547 at the beginning or end of a path. For instance, if the value of 16548 `CPATH' is `:/special/include', that has the same effect as 16549 `-I. -I/special/include'. 16550 16551`DEPENDENCIES_OUTPUT' 16552 If this variable is set, its value specifies how to output 16553 dependencies for Make based on the non-system header files 16554 processed by the compiler. System header files are ignored in the 16555 dependency output. 16556 16557 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 16558 which case the Make rules are written to that file, guessing the 16559 target name from the source file name. Or the value can have the 16560 form `FILE TARGET', in which case the rules are written to file 16561 FILE using TARGET as the target name. 16562 16563 In other words, this environment variable is equivalent to 16564 combining the options `-MM' and `-MF' (*note Preprocessor 16565 Options::), with an optional `-MT' switch too. 16566 16567`SUNPRO_DEPENDENCIES' 16568 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 16569 except that system header files are not ignored, so it implies 16570 `-M' rather than `-MM'. However, the dependence on the main input 16571 file is omitted. *Note Preprocessor Options::. 16572 16573 16574File: gcc.info, Node: Precompiled Headers, Prev: Environment Variables, Up: Invoking GCC 16575 165763.20 Using Precompiled Headers 16577============================== 16578 16579Often large projects have many header files that are included in every 16580source file. The time the compiler takes to process these header files 16581over and over again can account for nearly all of the time required to 16582build the project. To make builds faster, GCC allows users to 16583`precompile' a header file; then, if builds can use the precompiled 16584header file they will be much faster. 16585 16586 To create a precompiled header file, simply compile it as you would any 16587other file, if necessary using the `-x' option to make the driver treat 16588it as a C or C++ header file. You will probably want to use a tool 16589like `make' to keep the precompiled header up-to-date when the headers 16590it contains change. 16591 16592 A precompiled header file will be searched for when `#include' is seen 16593in the compilation. As it searches for the included file (*note Search 16594Path: (cpp)Search Path.) the compiler looks for a precompiled header in 16595each directory just before it looks for the include file in that 16596directory. The name searched for is the name specified in the 16597`#include' with `.gch' appended. If the precompiled header file can't 16598be used, it is ignored. 16599 16600 For instance, if you have `#include "all.h"', and you have `all.h.gch' 16601in the same directory as `all.h', then the precompiled header file will 16602be used if possible, and the original header will be used otherwise. 16603 16604 Alternatively, you might decide to put the precompiled header file in a 16605directory and use `-I' to ensure that directory is searched before (or 16606instead of) the directory containing the original header. Then, if you 16607want to check that the precompiled header file is always used, you can 16608put a file of the same name as the original header in this directory 16609containing an `#error' command. 16610 16611 This also works with `-include'. So yet another way to use 16612precompiled headers, good for projects not designed with precompiled 16613header files in mind, is to simply take most of the header files used by 16614a project, include them from another header file, precompile that header 16615file, and `-include' the precompiled header. If the header files have 16616guards against multiple inclusion, they will be skipped because they've 16617already been included (in the precompiled header). 16618 16619 If you need to precompile the same header file for different 16620languages, targets, or compiler options, you can instead make a 16621_directory_ named like `all.h.gch', and put each precompiled header in 16622the directory, perhaps using `-o'. It doesn't matter what you call the 16623files in the directory, every precompiled header in the directory will 16624be considered. The first precompiled header encountered in the 16625directory that is valid for this compilation will be used; they're 16626searched in no particular order. 16627 16628 There are many other possibilities, limited only by your imagination, 16629good sense, and the constraints of your build system. 16630 16631 A precompiled header file can be used only when these conditions apply: 16632 16633 * Only one precompiled header can be used in a particular 16634 compilation. 16635 16636 * A precompiled header can't be used once the first C token is seen. 16637 You can have preprocessor directives before a precompiled header; 16638 you can even include a precompiled header from inside another 16639 header, so long as there are no C tokens before the `#include'. 16640 16641 * The precompiled header file must be produced for the same language 16642 as the current compilation. You can't use a C precompiled header 16643 for a C++ compilation. 16644 16645 * The precompiled header file must have been produced by the same 16646 compiler binary as the current compilation is using. 16647 16648 * Any macros defined before the precompiled header is included must 16649 either be defined in the same way as when the precompiled header 16650 was generated, or must not affect the precompiled header, which 16651 usually means that they don't appear in the precompiled header at 16652 all. 16653 16654 The `-D' option is one way to define a macro before a precompiled 16655 header is included; using a `#define' can also do it. There are 16656 also some options that define macros implicitly, like `-O' and 16657 `-Wdeprecated'; the same rule applies to macros defined this way. 16658 16659 * If debugging information is output when using the precompiled 16660 header, using `-g' or similar, the same kind of debugging 16661 information must have been output when building the precompiled 16662 header. However, a precompiled header built using `-g' can be 16663 used in a compilation when no debugging information is being 16664 output. 16665 16666 * The same `-m' options must generally be used when building and 16667 using the precompiled header. *Note Submodel Options::, for any 16668 cases where this rule is relaxed. 16669 16670 * Each of the following options must be the same when building and 16671 using the precompiled header: 16672 16673 -fexceptions 16674 16675 * Some other command-line options starting with `-f', `-p', or `-O' 16676 must be defined in the same way as when the precompiled header was 16677 generated. At present, it's not clear which options are safe to 16678 change and which are not; the safest choice is to use exactly the 16679 same options when generating and using the precompiled header. 16680 The following are known to be safe: 16681 16682 -fmessage-length= -fpreprocessed -fsched-interblock 16683 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 16684 -fsched-verbose=<number> -fschedule-insns -fvisibility= 16685 -pedantic-errors 16686 16687 16688 For all of these except the last, the compiler will automatically 16689ignore the precompiled header if the conditions aren't met. If you 16690find an option combination that doesn't work and doesn't cause the 16691precompiled header to be ignored, please consider filing a bug report, 16692see *note Bugs::. 16693 16694 If you do use differing options when generating and using the 16695precompiled header, the actual behavior will be a mixture of the 16696behavior for the options. For instance, if you use `-g' to generate 16697the precompiled header but not when using it, you may or may not get 16698debugging information for routines in the precompiled header. 16699 16700 16701File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 16702 167034 C Implementation-defined behavior 16704*********************************** 16705 16706A conforming implementation of ISO C is required to document its choice 16707of behavior in each of the areas that are designated "implementation 16708defined". The following lists all such areas, along with the section 16709numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 16710Some areas are only implementation-defined in one version of the 16711standard. 16712 16713 Some choices depend on the externally determined ABI for the platform 16714(including standard character encodings) which GCC follows; these are 16715listed as "determined by ABI" below. *Note Binary Compatibility: 16716Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 16717are documented in the preprocessor manual. *Note 16718Implementation-defined behavior: (cpp)Implementation-defined behavior. 16719Some choices are made by the library and operating system (or other 16720environment when compiling for a freestanding environment); refer to 16721their documentation for details. 16722 16723* Menu: 16724 16725* Translation implementation:: 16726* Environment implementation:: 16727* Identifiers implementation:: 16728* Characters implementation:: 16729* Integers implementation:: 16730* Floating point implementation:: 16731* Arrays and pointers implementation:: 16732* Hints implementation:: 16733* Structures unions enumerations and bit-fields implementation:: 16734* Qualifiers implementation:: 16735* Declarators implementation:: 16736* Statements implementation:: 16737* Preprocessing directives implementation:: 16738* Library functions implementation:: 16739* Architecture implementation:: 16740* Locale-specific behavior implementation:: 16741 16742 16743File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 16744 167454.1 Translation 16746=============== 16747 16748 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 16749 5.1.1.3).' 16750 16751 Diagnostics consist of all the output sent to stderr by GCC. 16752 16753 * `Whether each nonempty sequence of white-space characters other 16754 than new-line is retained or replaced by one space character in 16755 translation phase 3 (C90 and C99 5.1.1.2).' 16756 16757 *Note Implementation-defined behavior: (cpp)Implementation-defined 16758 behavior. 16759 16760 16761 16762File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 16763 167644.2 Environment 16765=============== 16766 16767The behavior of most of these points are dependent on the implementation 16768of the C library, and are not defined by GCC itself. 16769 16770 * `The mapping between physical source file multibyte characters and 16771 the source character set in translation phase 1 (C90 and C99 16772 5.1.1.2).' 16773 16774 *Note Implementation-defined behavior: (cpp)Implementation-defined 16775 behavior. 16776 16777 16778 16779File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 16780 167814.3 Identifiers 16782=============== 16783 16784 * `Which additional multibyte characters may appear in identifiers 16785 and their correspondence to universal character names (C99 6.4.2).' 16786 16787 *Note Implementation-defined behavior: (cpp)Implementation-defined 16788 behavior. 16789 16790 * `The number of significant initial characters in an identifier 16791 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 16792 16793 For internal names, all characters are significant. For external 16794 names, the number of significant characters are defined by the 16795 linker; for almost all targets, all characters are significant. 16796 16797 * `Whether case distinctions are significant in an identifier with 16798 external linkage (C90 6.1.2).' 16799 16800 This is a property of the linker. C99 requires that case 16801 distinctions are always significant in identifiers with external 16802 linkage and systems without this property are not supported by GCC. 16803 16804 16805 16806File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 16807 168084.4 Characters 16809============== 16810 16811 * `The number of bits in a byte (C90 3.4, C99 3.6).' 16812 16813 Determined by ABI. 16814 16815 * `The values of the members of the execution character set (C90 and 16816 C99 5.2.1).' 16817 16818 Determined by ABI. 16819 16820 * `The unique value of the member of the execution character set 16821 produced for each of the standard alphabetic escape sequences (C90 16822 and C99 5.2.2).' 16823 16824 Determined by ABI. 16825 16826 * `The value of a `char' object into which has been stored any 16827 character other than a member of the basic execution character set 16828 (C90 6.1.2.5, C99 6.2.5).' 16829 16830 Determined by ABI. 16831 16832 * `Which of `signed char' or `unsigned char' has the same range, 16833 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 16834 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 16835 16836 Determined by ABI. The options `-funsigned-char' and 16837 `-fsigned-char' change the default. *Note Options Controlling C 16838 Dialect: C Dialect Options. 16839 16840 * `The mapping of members of the source character set (in character 16841 constants and string literals) to members of the execution 16842 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 16843 16844 Determined by ABI. 16845 16846 * `The value of an integer character constant containing more than 16847 one character or containing a character or escape sequence that 16848 does not map to a single-byte execution character (C90 6.1.3.4, 16849 C99 6.4.4.4).' 16850 16851 *Note Implementation-defined behavior: (cpp)Implementation-defined 16852 behavior. 16853 16854 * `The value of a wide character constant containing more than one 16855 multibyte character, or containing a multibyte character or escape 16856 sequence not represented in the extended execution character set 16857 (C90 6.1.3.4, C99 6.4.4.4).' 16858 16859 *Note Implementation-defined behavior: (cpp)Implementation-defined 16860 behavior. 16861 16862 * `The current locale used to convert a wide character constant 16863 consisting of a single multibyte character that maps to a member 16864 of the extended execution character set into a corresponding wide 16865 character code (C90 6.1.3.4, C99 6.4.4.4).' 16866 16867 *Note Implementation-defined behavior: (cpp)Implementation-defined 16868 behavior. 16869 16870 * `The current locale used to convert a wide string literal into 16871 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 16872 16873 *Note Implementation-defined behavior: (cpp)Implementation-defined 16874 behavior. 16875 16876 * `The value of a string literal containing a multibyte character or 16877 escape sequence not represented in the execution character set 16878 (C90 6.1.4, C99 6.4.5).' 16879 16880 *Note Implementation-defined behavior: (cpp)Implementation-defined 16881 behavior. 16882 16883 16884File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 16885 168864.5 Integers 16887============ 16888 16889 * `Any extended integer types that exist in the implementation (C99 16890 6.2.5).' 16891 16892 GCC does not support any extended integer types. 16893 16894 * `Whether signed integer types are represented using sign and 16895 magnitude, two's complement, or one's complement, and whether the 16896 extraordinary value is a trap representation or an ordinary value 16897 (C99 6.2.6.2).' 16898 16899 GCC supports only two's complement integer types, and all bit 16900 patterns are ordinary values. 16901 16902 * `The rank of any extended integer type relative to another extended 16903 integer type with the same precision (C99 6.3.1.1).' 16904 16905 GCC does not support any extended integer types. 16906 16907 * `The result of, or the signal raised by, converting an integer to a 16908 signed integer type when the value cannot be represented in an 16909 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 16910 16911 For conversion to a type of width N, the value is reduced modulo 16912 2^N to be within range of the type; no signal is raised. 16913 16914 * `The results of some bitwise operations on signed integers (C90 16915 6.3, C99 6.5).' 16916 16917 Bitwise operators act on the representation of the value including 16918 both the sign and value bits, where the sign bit is considered 16919 immediately above the highest-value value bit. Signed `>>' acts 16920 on negative numbers by sign extension. 16921 16922 GCC does not use the latitude given in C99 only to treat certain 16923 aspects of signed `<<' as undefined, but this is subject to change. 16924 16925 * `The sign of the remainder on integer division (C90 6.3.5).' 16926 16927 GCC always follows the C99 requirement that the result of division 16928 is truncated towards zero. 16929 16930 16931 16932File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 16933 169344.6 Floating point 16935================== 16936 16937 * `The accuracy of the floating-point operations and of the library 16938 functions in `<math.h>' and `<complex.h>' that return 16939 floating-point results (C90 and C99 5.2.4.2.2).' 16940 16941 The accuracy is unknown. 16942 16943 * `The rounding behaviors characterized by non-standard values of 16944 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 16945 16946 GCC does not use such values. 16947 16948 * `The evaluation methods characterized by non-standard negative 16949 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 16950 16951 GCC does not use such values. 16952 16953 * `The direction of rounding when an integer is converted to a 16954 floating-point number that cannot exactly represent the original 16955 value (C90 6.2.1.3, C99 6.3.1.4).' 16956 16957 C99 Annex F is followed. 16958 16959 * `The direction of rounding when a floating-point number is 16960 converted to a narrower floating-point number (C90 6.2.1.4, C99 16961 6.3.1.5).' 16962 16963 C99 Annex F is followed. 16964 16965 * `How the nearest representable value or the larger or smaller 16966 representable value immediately adjacent to the nearest 16967 representable value is chosen for certain floating constants (C90 16968 6.1.3.1, C99 6.4.4.2).' 16969 16970 C99 Annex F is followed. 16971 16972 * `Whether and how floating expressions are contracted when not 16973 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 16974 16975 Expressions are currently only contracted if 16976 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 16977 subject to change. 16978 16979 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 16980 16981 This pragma is not implemented, but the default is to "off" unless 16982 `-frounding-math' is used in which case it is "on". 16983 16984 * `Additional floating-point exceptions, rounding modes, 16985 environments, and classifications, and their macro names (C99 7.6, 16986 C99 7.12).' 16987 16988 This is dependent on the implementation of the C library, and is 16989 not defined by GCC itself. 16990 16991 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 16992 16993 This pragma is not implemented. Expressions are currently only 16994 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 16995 used. This is subject to change. 16996 16997 * `Whether the "inexact" floating-point exception can be raised when 16998 the rounded result actually does equal the mathematical result in 16999 an IEC 60559 conformant implementation (C99 F.9).' 17000 17001 This is dependent on the implementation of the C library, and is 17002 not defined by GCC itself. 17003 17004 * `Whether the "underflow" (and "inexact") floating-point exception 17005 can be raised when a result is tiny but not inexact in an IEC 17006 60559 conformant implementation (C99 F.9).' 17007 17008 This is dependent on the implementation of the C library, and is 17009 not defined by GCC itself. 17010 17011 17012 17013File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 17014 170154.7 Arrays and pointers 17016======================= 17017 17018 * `The result of converting a pointer to an integer or vice versa 17019 (C90 6.3.4, C99 6.3.2.3).' 17020 17021 A cast from pointer to integer discards most-significant bits if 17022 the pointer representation is larger than the integer type, 17023 sign-extends(1) if the pointer representation is smaller than the 17024 integer type, otherwise the bits are unchanged. 17025 17026 A cast from integer to pointer discards most-significant bits if 17027 the pointer representation is smaller than the integer type, 17028 extends according to the signedness of the integer type if the 17029 pointer representation is larger than the integer type, otherwise 17030 the bits are unchanged. 17031 17032 When casting from pointer to integer and back again, the resulting 17033 pointer must reference the same object as the original pointer, 17034 otherwise the behavior is undefined. That is, one may not use 17035 integer arithmetic to avoid the undefined behavior of pointer 17036 arithmetic as proscribed in C99 6.5.6/8. 17037 17038 * `The size of the result of subtracting two pointers to elements of 17039 the same array (C90 6.3.6, C99 6.5.6).' 17040 17041 The value is as specified in the standard and the type is 17042 determined by the ABI. 17043 17044 17045 ---------- Footnotes ---------- 17046 17047 (1) Future versions of GCC may zero-extend, or use a target-defined 17048`ptr_extend' pattern. Do not rely on sign extension. 17049 17050 17051File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 17052 170534.8 Hints 17054========= 17055 17056 * `The extent to which suggestions made by using the `register' 17057 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 17058 17059 The `register' specifier affects code generation only in these 17060 ways: 17061 17062 * When used as part of the register variable extension, see 17063 *note Explicit Reg Vars::. 17064 17065 * When `-O0' is in use, the compiler allocates distinct stack 17066 memory for all variables that do not have the `register' 17067 storage-class specifier; if `register' is specified, the 17068 variable may have a shorter lifespan than the code would 17069 indicate and may never be placed in memory. 17070 17071 * On some rare x86 targets, `setjmp' doesn't save the registers 17072 in all circumstances. In those cases, GCC doesn't allocate 17073 any variables in registers unless they are marked `register'. 17074 17075 17076 * `The extent to which suggestions made by using the inline function 17077 specifier are effective (C99 6.7.4).' 17078 17079 GCC will not inline any functions if the `-fno-inline' option is 17080 used or if `-O0' is used. Otherwise, GCC may still be unable to 17081 inline a function for many reasons; the `-Winline' option may be 17082 used to determine if a function has not been inlined and why not. 17083 17084 17085 17086File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 17087 170884.9 Structures, unions, enumerations, and bit-fields 17089==================================================== 17090 17091 * `A member of a union object is accessed using a member of a 17092 different type (C90 6.3.2.3).' 17093 17094 The relevant bytes of the representation of the object are treated 17095 as an object of the type used for the access. *Note 17096 Type-punning::. This may be a trap representation. 17097 17098 * `Whether a "plain" `int' bit-field is treated as a `signed int' 17099 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 17100 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 17101 17102 By default it is treated as `signed int' but this may be changed 17103 by the `-funsigned-bitfields' option. 17104 17105 * `Allowable bit-field types other than `_Bool', `signed int', and 17106 `unsigned int' (C99 6.7.2.1).' 17107 17108 No other types are permitted in strictly conforming mode. 17109 17110 * `Whether a bit-field can straddle a storage-unit boundary (C90 17111 6.5.2.1, C99 6.7.2.1).' 17112 17113 Determined by ABI. 17114 17115 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 17116 C99 6.7.2.1).' 17117 17118 Determined by ABI. 17119 17120 * `The alignment of non-bit-field members of structures (C90 17121 6.5.2.1, C99 6.7.2.1).' 17122 17123 Determined by ABI. 17124 17125 * `The integer type compatible with each enumerated type (C90 17126 6.5.2.2, C99 6.7.2.2).' 17127 17128 Normally, the type is `unsigned int' if there are no negative 17129 values in the enumeration, otherwise `int'. If `-fshort-enums' is 17130 specified, then if there are negative values it is the first of 17131 `signed char', `short' and `int' that can represent all the 17132 values, otherwise it is the first of `unsigned char', `unsigned 17133 short' and `unsigned int' that can represent all the values. 17134 17135 On some targets, `-fshort-enums' is the default; this is 17136 determined by the ABI. 17137 17138 17139 17140File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 17141 171424.10 Qualifiers 17143=============== 17144 17145 * `What constitutes an access to an object that has 17146 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 17147 17148 Such an object is normally accessed by pointers and used for 17149 accessing hardware. In most expressions, it is intuitively 17150 obvious what is a read and what is a write. For example 17151 17152 volatile int *dst = SOMEVALUE; 17153 volatile int *src = SOMEOTHERVALUE; 17154 *dst = *src; 17155 17156 will cause a read of the volatile object pointed to by SRC and 17157 store the value into the volatile object pointed to by DST. There 17158 is no guarantee that these reads and writes are atomic, especially 17159 for objects larger than `int'. 17160 17161 However, if the volatile storage is not being modified, and the 17162 value of the volatile storage is not used, then the situation is 17163 less obvious. For example 17164 17165 volatile int *src = SOMEVALUE; 17166 *src; 17167 17168 According to the C standard, such an expression is an rvalue whose 17169 type is the unqualified version of its original type, i.e. `int'. 17170 Whether GCC interprets this as a read of the volatile object being 17171 pointed to or only as a request to evaluate the expression for its 17172 side-effects depends on this type. 17173 17174 If it is a scalar type, or on most targets an aggregate type whose 17175 only member object is of a scalar type, or a union type whose 17176 member objects are of scalar types, the expression is interpreted 17177 by GCC as a read of the volatile object; in the other cases, the 17178 expression is only evaluated for its side-effects. 17179 17180 17181 17182File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 17183 171844.11 Declarators 17185================ 17186 17187 * `The maximum number of declarators that may modify an arithmetic, 17188 structure or union type (C90 6.5.4).' 17189 17190 GCC is only limited by available memory. 17191 17192 17193 17194File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 17195 171964.12 Statements 17197=============== 17198 17199 * `The maximum number of `case' values in a `switch' statement (C90 17200 6.6.4.2).' 17201 17202 GCC is only limited by available memory. 17203 17204 17205 17206File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 17207 172084.13 Preprocessing directives 17209============================= 17210 17211*Note Implementation-defined behavior: (cpp)Implementation-defined 17212behavior, for details of these aspects of implementation-defined 17213behavior. 17214 17215 * `How sequences in both forms of header names are mapped to headers 17216 or external source file names (C90 6.1.7, C99 6.4.7).' 17217 17218 * `Whether the value of a character constant in a constant expression 17219 that controls conditional inclusion matches the value of the same 17220 character constant in the execution character set (C90 6.8.1, C99 17221 6.10.1).' 17222 17223 * `Whether the value of a single-character character constant in a 17224 constant expression that controls conditional inclusion may have a 17225 negative value (C90 6.8.1, C99 6.10.1).' 17226 17227 * `The places that are searched for an included `<>' delimited 17228 header, and how the places are specified or the header is 17229 identified (C90 6.8.2, C99 6.10.2).' 17230 17231 * `How the named source file is searched for in an included `""' 17232 delimited header (C90 6.8.2, C99 6.10.2).' 17233 17234 * `The method by which preprocessing tokens (possibly resulting from 17235 macro expansion) in a `#include' directive are combined into a 17236 header name (C90 6.8.2, C99 6.10.2).' 17237 17238 * `The nesting limit for `#include' processing (C90 6.8.2, C99 17239 6.10.2).' 17240 17241 * `Whether the `#' operator inserts a `\' character before the `\' 17242 character that begins a universal character name in a character 17243 constant or string literal (C99 6.10.3.2).' 17244 17245 * `The behavior on each recognized non-`STDC #pragma' directive (C90 17246 6.8.6, C99 6.10.6).' 17247 17248 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 17249 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 17250 details of target-specific pragmas. 17251 17252 * `The definitions for `__DATE__' and `__TIME__' when respectively, 17253 the date and time of translation are not available (C90 6.8.8, C99 17254 6.10.8).' 17255 17256 17257 17258File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 17259 172604.14 Library functions 17261====================== 17262 17263The behavior of most of these points are dependent on the implementation 17264of the C library, and are not defined by GCC itself. 17265 17266 * `The null pointer constant to which the macro `NULL' expands (C90 17267 7.1.6, C99 7.17).' 17268 17269 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 17270 provide the other headers which define `NULL' and some library 17271 implementations may use other definitions in those headers. 17272 17273 17274 17275File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 17276 172774.15 Architecture 17278================= 17279 17280 * `The values or expressions assigned to the macros specified in the 17281 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 17282 5.2.4.2, C99 7.18.2, C99 7.18.3).' 17283 17284 Determined by ABI. 17285 17286 * `The number, order, and encoding of bytes in any object (when not 17287 explicitly specified in this International Standard) (C99 17288 6.2.6.1).' 17289 17290 Determined by ABI. 17291 17292 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 17293 C99 6.5.3.4).' 17294 17295 Determined by ABI. 17296 17297 17298 17299File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 17300 173014.16 Locale-specific behavior 17302============================= 17303 17304The behavior of these points are dependent on the implementation of the 17305C library, and are not defined by GCC itself. 17306 17307 17308File: gcc.info, Node: C++ Implementation, Next: C++ Extensions, Prev: C Extensions, Up: Top 17309 173105 C++ Implementation-defined behavior 17311************************************* 17312 17313A conforming implementation of ISO C++ is required to document its 17314choice of behavior in each of the areas that are designated 17315"implementation defined". The following lists all such areas, along 17316with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC 1731714822:2003 standards. Some areas are only implementation-defined in 17318one version of the standard. 17319 17320 Some choices depend on the externally determined ABI for the platform 17321(including standard character encodings) which GCC follows; these are 17322listed as "determined by ABI" below. *Note Binary Compatibility: 17323Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 17324are documented in the preprocessor manual. *Note 17325Implementation-defined behavior: (cpp)Implementation-defined behavior. 17326Some choices are documented in the corresponding document for the C 17327language. *Note C Implementation::. Some choices are made by the 17328library and operating system (or other environment when compiling for a 17329freestanding environment); refer to their documentation for details. 17330 17331* Menu: 17332 17333* Conditionally-supported behavior:: 17334 17335 17336File: gcc.info, Node: Conditionally-supported behavior, Up: C++ Implementation 17337 173385.1 Conditionally-supported behavior 17339==================================== 17340 17341`Each implementation shall include documentation that identifies all 17342conditionally-supported constructs that it does not support (C++0x 173431.4).' 17344 17345 * `Whether an argument of class type with a non-trivial copy 17346 constructor or destructor can be passed to ... (C++0x 5.2.2).' 17347 17348 Such argument passing is not supported. 17349 17350 17351 17352File: gcc.info, Node: C Extensions, Next: C++ Implementation, Prev: C Implementation, Up: Top 17353 173546 Extensions to the C Language Family 17355************************************* 17356 17357GNU C provides several language features not found in ISO standard C. 17358(The `-pedantic' option directs GCC to print a warning message if any 17359of these features is used.) To test for the availability of these 17360features in conditional compilation, check for a predefined macro 17361`__GNUC__', which is always defined under GCC. 17362 17363 These extensions are available in C and Objective-C. Most of them are 17364also available in C++. *Note Extensions to the C++ Language: C++ 17365Extensions, for extensions that apply _only_ to C++. 17366 17367 Some features that are in ISO C99 but not C90 or C++ are also, as 17368extensions, accepted by GCC in C90 mode and in C++. 17369 17370* Menu: 17371 17372* Statement Exprs:: Putting statements and declarations inside expressions. 17373* Local Labels:: Labels local to a block. 17374* Labels as Values:: Getting pointers to labels, and computed gotos. 17375* Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 17376* Constructing Calls:: Dispatching a call to another function. 17377* Typeof:: `typeof': referring to the type of an expression. 17378* Conditionals:: Omitting the middle operand of a `?:' expression. 17379* Long Long:: Double-word integers---`long long int'. 17380* Complex:: Data types for complex numbers. 17381* Floating Types:: Additional Floating Types. 17382* Half-Precision:: Half-Precision Floating Point. 17383* Decimal Float:: Decimal Floating Types. 17384* Hex Floats:: Hexadecimal floating-point constants. 17385* Fixed-Point:: Fixed-Point Types. 17386* Named Address Spaces::Named address spaces. 17387* Zero Length:: Zero-length arrays. 17388* Variable Length:: Arrays whose length is computed at run time. 17389* Empty Structures:: Structures with no members. 17390* Variadic Macros:: Macros with a variable number of arguments. 17391* Escaped Newlines:: Slightly looser rules for escaped newlines. 17392* Subscripting:: Any array can be subscripted, even if not an lvalue. 17393* Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 17394* Initializers:: Non-constant initializers. 17395* Compound Literals:: Compound literals give structures, unions 17396 or arrays as values. 17397* Designated Inits:: Labeling elements of initializers. 17398* Cast to Union:: Casting to union type from any member of the union. 17399* Case Ranges:: `case 1 ... 9' and such. 17400* Mixed Declarations:: Mixing declarations and code. 17401* Function Attributes:: Declaring that functions have no side effects, 17402 or that they can never return. 17403* Attribute Syntax:: Formal syntax for attributes. 17404* Function Prototypes:: Prototype declarations and old-style definitions. 17405* C++ Comments:: C++ comments are recognized. 17406* Dollar Signs:: Dollar sign is allowed in identifiers. 17407* Character Escapes:: `\e' stands for the character <ESC>. 17408* Variable Attributes:: Specifying attributes of variables. 17409* Type Attributes:: Specifying attributes of types. 17410* Alignment:: Inquiring about the alignment of a type or variable. 17411* Inline:: Defining inline functions (as fast as macros). 17412* Extended Asm:: Assembler instructions with C expressions as operands. 17413 (With them you can define ``built-in'' functions.) 17414* Constraints:: Constraints for asm operands 17415* Asm Labels:: Specifying the assembler name to use for a C symbol. 17416* Explicit Reg Vars:: Defining variables residing in specified registers. 17417* Alternate Keywords:: `__const__', `__asm__', etc., for header files. 17418* Incomplete Enums:: `enum foo;', with details to follow. 17419* Function Names:: Printable strings which are the name of the current 17420 function. 17421* Return Address:: Getting the return or frame address of a function. 17422* Vector Extensions:: Using vector instructions through built-in functions. 17423* Offsetof:: Special syntax for implementing `offsetof'. 17424* Atomic Builtins:: Built-in functions for atomic memory access. 17425* Object Size Checking:: Built-in functions for limited buffer overflow 17426 checking. 17427* Other Builtins:: Other built-in functions. 17428* Target Builtins:: Built-in functions specific to particular targets. 17429* Target Format Checks:: Format checks specific to particular targets. 17430* Pragmas:: Pragmas accepted by GCC. 17431* Unnamed Fields:: Unnamed struct/union fields within structs/unions. 17432* Thread-Local:: Per-thread variables. 17433* Binary constants:: Binary constants using the `0b' prefix. 17434 17435 17436File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 17437 174386.1 Statements and Declarations in Expressions 17439============================================== 17440 17441A compound statement enclosed in parentheses may appear as an expression 17442in GNU C. This allows you to use loops, switches, and local variables 17443within an expression. 17444 17445 Recall that a compound statement is a sequence of statements surrounded 17446by braces; in this construct, parentheses go around the braces. For 17447example: 17448 17449 ({ int y = foo (); int z; 17450 if (y > 0) z = y; 17451 else z = - y; 17452 z; }) 17453 17454is a valid (though slightly more complex than necessary) expression for 17455the absolute value of `foo ()'. 17456 17457 The last thing in the compound statement should be an expression 17458followed by a semicolon; the value of this subexpression serves as the 17459value of the entire construct. (If you use some other kind of statement 17460last within the braces, the construct has type `void', and thus 17461effectively no value.) 17462 17463 This feature is especially useful in making macro definitions "safe" 17464(so that they evaluate each operand exactly once). For example, the 17465"maximum" function is commonly defined as a macro in standard C as 17466follows: 17467 17468 #define max(a,b) ((a) > (b) ? (a) : (b)) 17469 17470But this definition computes either A or B twice, with bad results if 17471the operand has side effects. In GNU C, if you know the type of the 17472operands (here taken as `int'), you can define the macro safely as 17473follows: 17474 17475 #define maxint(a,b) \ 17476 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 17477 17478 Embedded statements are not allowed in constant expressions, such as 17479the value of an enumeration constant, the width of a bit-field, or the 17480initial value of a static variable. 17481 17482 If you don't know the type of the operand, you can still do this, but 17483you must use `typeof' (*note Typeof::). 17484 17485 In G++, the result value of a statement expression undergoes array and 17486function pointer decay, and is returned by value to the enclosing 17487expression. For instance, if `A' is a class, then 17488 17489 A a; 17490 17491 ({a;}).Foo () 17492 17493will construct a temporary `A' object to hold the result of the 17494statement expression, and that will be used to invoke `Foo'. Therefore 17495the `this' pointer observed by `Foo' will not be the address of `a'. 17496 17497 Any temporaries created within a statement within a statement 17498expression will be destroyed at the statement's end. This makes 17499statement expressions inside macros slightly different from function 17500calls. In the latter case temporaries introduced during argument 17501evaluation will be destroyed at the end of the statement that includes 17502the function call. In the statement expression case they will be 17503destroyed during the statement expression. For instance, 17504 17505 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 17506 template<typename T> T function(T a) { T b = a; return b + 3; } 17507 17508 void foo () 17509 { 17510 macro (X ()); 17511 function (X ()); 17512 } 17513 17514will have different places where temporaries are destroyed. For the 17515`macro' case, the temporary `X' will be destroyed just after the 17516initialization of `b'. In the `function' case that temporary will be 17517destroyed when the function returns. 17518 17519 These considerations mean that it is probably a bad idea to use 17520statement-expressions of this form in header files that are designed to 17521work with C++. (Note that some versions of the GNU C Library contained 17522header files using statement-expression that lead to precisely this 17523bug.) 17524 17525 Jumping into a statement expression with `goto' or using a `switch' 17526statement outside the statement expression with a `case' or `default' 17527label inside the statement expression is not permitted. Jumping into a 17528statement expression with a computed `goto' (*note Labels as Values::) 17529yields undefined behavior. Jumping out of a statement expression is 17530permitted, but if the statement expression is part of a larger 17531expression then it is unspecified which other subexpressions of that 17532expression have been evaluated except where the language definition 17533requires certain subexpressions to be evaluated before or after the 17534statement expression. In any case, as with a function call the 17535evaluation of a statement expression is not interleaved with the 17536evaluation of other parts of the containing expression. For example, 17537 17538 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 17539 17540will call `foo' and `bar1' and will not call `baz' but may or may not 17541call `bar2'. If `bar2' is called, it will be called after `foo' and 17542before `bar1' 17543 17544 17545File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 17546 175476.2 Locally Declared Labels 17548=========================== 17549 17550GCC allows you to declare "local labels" in any nested block scope. A 17551local label is just like an ordinary label, but you can only reference 17552it (with a `goto' statement, or by taking its address) within the block 17553in which it was declared. 17554 17555 A local label declaration looks like this: 17556 17557 __label__ LABEL; 17558 17559or 17560 17561 __label__ LABEL1, LABEL2, /* ... */; 17562 17563 Local label declarations must come at the beginning of the block, 17564before any ordinary declarations or statements. 17565 17566 The label declaration defines the label _name_, but does not define 17567the label itself. You must do this in the usual way, with `LABEL:', 17568within the statements of the statement expression. 17569 17570 The local label feature is useful for complex macros. If a macro 17571contains nested loops, a `goto' can be useful for breaking out of them. 17572However, an ordinary label whose scope is the whole function cannot be 17573used: if the macro can be expanded several times in one function, the 17574label will be multiply defined in that function. A local label avoids 17575this problem. For example: 17576 17577 #define SEARCH(value, array, target) \ 17578 do { \ 17579 __label__ found; \ 17580 typeof (target) _SEARCH_target = (target); \ 17581 typeof (*(array)) *_SEARCH_array = (array); \ 17582 int i, j; \ 17583 int value; \ 17584 for (i = 0; i < max; i++) \ 17585 for (j = 0; j < max; j++) \ 17586 if (_SEARCH_array[i][j] == _SEARCH_target) \ 17587 { (value) = i; goto found; } \ 17588 (value) = -1; \ 17589 found:; \ 17590 } while (0) 17591 17592 This could also be written using a statement-expression: 17593 17594 #define SEARCH(array, target) \ 17595 ({ \ 17596 __label__ found; \ 17597 typeof (target) _SEARCH_target = (target); \ 17598 typeof (*(array)) *_SEARCH_array = (array); \ 17599 int i, j; \ 17600 int value; \ 17601 for (i = 0; i < max; i++) \ 17602 for (j = 0; j < max; j++) \ 17603 if (_SEARCH_array[i][j] == _SEARCH_target) \ 17604 { value = i; goto found; } \ 17605 value = -1; \ 17606 found: \ 17607 value; \ 17608 }) 17609 17610 Local label declarations also make the labels they declare visible to 17611nested functions, if there are any. *Note Nested Functions::, for 17612details. 17613 17614 17615File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 17616 176176.3 Labels as Values 17618==================== 17619 17620You can get the address of a label defined in the current function (or 17621a containing function) with the unary operator `&&'. The value has 17622type `void *'. This value is a constant and can be used wherever a 17623constant of that type is valid. For example: 17624 17625 void *ptr; 17626 /* ... */ 17627 ptr = &&foo; 17628 17629 To use these values, you need to be able to jump to one. This is done 17630with the computed goto statement(1), `goto *EXP;'. For example, 17631 17632 goto *ptr; 17633 17634Any expression of type `void *' is allowed. 17635 17636 One way of using these constants is in initializing a static array that 17637will serve as a jump table: 17638 17639 static void *array[] = { &&foo, &&bar, &&hack }; 17640 17641 Then you can select a label with indexing, like this: 17642 17643 goto *array[i]; 17644 17645Note that this does not check whether the subscript is in bounds--array 17646indexing in C never does that. 17647 17648 Such an array of label values serves a purpose much like that of the 17649`switch' statement. The `switch' statement is cleaner, so use that 17650rather than an array unless the problem does not fit a `switch' 17651statement very well. 17652 17653 Another use of label values is in an interpreter for threaded code. 17654The labels within the interpreter function can be stored in the 17655threaded code for super-fast dispatching. 17656 17657 You may not use this mechanism to jump to code in a different function. 17658If you do that, totally unpredictable things will happen. The best way 17659to avoid this is to store the label address only in automatic variables 17660and never pass it as an argument. 17661 17662 An alternate way to write the above example is 17663 17664 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 17665 &&hack - &&foo }; 17666 goto *(&&foo + array[i]); 17667 17668This is more friendly to code living in shared libraries, as it reduces 17669the number of dynamic relocations that are needed, and by consequence, 17670allows the data to be read-only. 17671 17672 The `&&foo' expressions for the same label might have different values 17673if the containing function is inlined or cloned. If a program relies 17674on them being always the same, 17675`__attribute__((__noinline__,__noclone__))' should be used to prevent 17676inlining and cloning. If `&&foo' is used in a static variable 17677initializer, inlining and cloning is forbidden. 17678 17679 ---------- Footnotes ---------- 17680 17681 (1) The analogous feature in Fortran is called an assigned goto, but 17682that name seems inappropriate in C, where one can do more than simply 17683store label addresses in label variables. 17684 17685 17686File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 17687 176886.4 Nested Functions 17689==================== 17690 17691A "nested function" is a function defined inside another function. 17692(Nested functions are not supported for GNU C++.) The nested function's 17693name is local to the block where it is defined. For example, here we 17694define a nested function named `square', and call it twice: 17695 17696 foo (double a, double b) 17697 { 17698 double square (double z) { return z * z; } 17699 17700 return square (a) + square (b); 17701 } 17702 17703 The nested function can access all the variables of the containing 17704function that are visible at the point of its definition. This is 17705called "lexical scoping". For example, here we show a nested function 17706which uses an inherited variable named `offset': 17707 17708 bar (int *array, int offset, int size) 17709 { 17710 int access (int *array, int index) 17711 { return array[index + offset]; } 17712 int i; 17713 /* ... */ 17714 for (i = 0; i < size; i++) 17715 /* ... */ access (array, i) /* ... */ 17716 } 17717 17718 Nested function definitions are permitted within functions in the 17719places where variable definitions are allowed; that is, in any block, 17720mixed with the other declarations and statements in the block. 17721 17722 It is possible to call the nested function from outside the scope of 17723its name by storing its address or passing the address to another 17724function: 17725 17726 hack (int *array, int size) 17727 { 17728 void store (int index, int value) 17729 { array[index] = value; } 17730 17731 intermediate (store, size); 17732 } 17733 17734 Here, the function `intermediate' receives the address of `store' as 17735an argument. If `intermediate' calls `store', the arguments given to 17736`store' are used to store into `array'. But this technique works only 17737so long as the containing function (`hack', in this example) does not 17738exit. 17739 17740 If you try to call the nested function through its address after the 17741containing function has exited, all hell will break loose. If you try 17742to call it after a containing scope level has exited, and if it refers 17743to some of the variables that are no longer in scope, you may be lucky, 17744but it's not wise to take the risk. If, however, the nested function 17745does not refer to anything that has gone out of scope, you should be 17746safe. 17747 17748 GCC implements taking the address of a nested function using a 17749technique called "trampolines". This technique was described in 17750`Lexical Closures for C++' (Thomas M. Breuel, USENIX C++ Conference 17751Proceedings, October 17-21, 1988). 17752 17753 A nested function can jump to a label inherited from a containing 17754function, provided the label was explicitly declared in the containing 17755function (*note Local Labels::). Such a jump returns instantly to the 17756containing function, exiting the nested function which did the `goto' 17757and any intermediate functions as well. Here is an example: 17758 17759 bar (int *array, int offset, int size) 17760 { 17761 __label__ failure; 17762 int access (int *array, int index) 17763 { 17764 if (index > size) 17765 goto failure; 17766 return array[index + offset]; 17767 } 17768 int i; 17769 /* ... */ 17770 for (i = 0; i < size; i++) 17771 /* ... */ access (array, i) /* ... */ 17772 /* ... */ 17773 return 0; 17774 17775 /* Control comes here from `access' 17776 if it detects an error. */ 17777 failure: 17778 return -1; 17779 } 17780 17781 A nested function always has no linkage. Declaring one with `extern' 17782or `static' is erroneous. If you need to declare the nested function 17783before its definition, use `auto' (which is otherwise meaningless for 17784function declarations). 17785 17786 bar (int *array, int offset, int size) 17787 { 17788 __label__ failure; 17789 auto int access (int *, int); 17790 /* ... */ 17791 int access (int *array, int index) 17792 { 17793 if (index > size) 17794 goto failure; 17795 return array[index + offset]; 17796 } 17797 /* ... */ 17798 } 17799 17800 17801File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 17802 178036.5 Constructing Function Calls 17804=============================== 17805 17806Using the built-in functions described below, you can record the 17807arguments a function received, and call another function with the same 17808arguments, without knowing the number or types of the arguments. 17809 17810 You can also record the return value of that function call, and later 17811return that value, without knowing what data type the function tried to 17812return (as long as your caller expects that data type). 17813 17814 However, these built-in functions may interact badly with some 17815sophisticated features or other extensions of the language. It is, 17816therefore, not recommended to use them outside very simple functions 17817acting as mere forwarders for their arguments. 17818 17819 -- Built-in Function: void * __builtin_apply_args () 17820 This built-in function returns a pointer to data describing how to 17821 perform a call with the same arguments as were passed to the 17822 current function. 17823 17824 The function saves the arg pointer register, structure value 17825 address, and all registers that might be used to pass arguments to 17826 a function into a block of memory allocated on the stack. Then it 17827 returns the address of that block. 17828 17829 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 17830 *ARGUMENTS, size_t SIZE) 17831 This built-in function invokes FUNCTION with a copy of the 17832 parameters described by ARGUMENTS and SIZE. 17833 17834 The value of ARGUMENTS should be the value returned by 17835 `__builtin_apply_args'. The argument SIZE specifies the size of 17836 the stack argument data, in bytes. 17837 17838 This function returns a pointer to data describing how to return 17839 whatever value was returned by FUNCTION. The data is saved in a 17840 block of memory allocated on the stack. 17841 17842 It is not always simple to compute the proper value for SIZE. The 17843 value is used by `__builtin_apply' to compute the amount of data 17844 that should be pushed on the stack and copied from the incoming 17845 argument area. 17846 17847 -- Built-in Function: void __builtin_return (void *RESULT) 17848 This built-in function returns the value described by RESULT from 17849 the containing function. You should specify, for RESULT, a value 17850 returned by `__builtin_apply'. 17851 17852 -- Built-in Function: __builtin_va_arg_pack () 17853 This built-in function represents all anonymous arguments of an 17854 inline function. It can be used only in inline functions which 17855 will be always inlined, never compiled as a separate function, 17856 such as those using `__attribute__ ((__always_inline__))' or 17857 `__attribute__ ((__gnu_inline__))' extern inline functions. It 17858 must be only passed as last argument to some other function with 17859 variable arguments. This is useful for writing small wrapper 17860 inlines for variable argument functions, when using preprocessor 17861 macros is undesirable. For example: 17862 extern int myprintf (FILE *f, const char *format, ...); 17863 extern inline __attribute__ ((__gnu_inline__)) int 17864 myprintf (FILE *f, const char *format, ...) 17865 { 17866 int r = fprintf (f, "myprintf: "); 17867 if (r < 0) 17868 return r; 17869 int s = fprintf (f, format, __builtin_va_arg_pack ()); 17870 if (s < 0) 17871 return s; 17872 return r + s; 17873 } 17874 17875 -- Built-in Function: __builtin_va_arg_pack_len () 17876 This built-in function returns the number of anonymous arguments of 17877 an inline function. It can be used only in inline functions which 17878 will be always inlined, never compiled as a separate function, such 17879 as those using `__attribute__ ((__always_inline__))' or 17880 `__attribute__ ((__gnu_inline__))' extern inline functions. For 17881 example following will do link or runtime checking of open 17882 arguments for optimized code: 17883 #ifdef __OPTIMIZE__ 17884 extern inline __attribute__((__gnu_inline__)) int 17885 myopen (const char *path, int oflag, ...) 17886 { 17887 if (__builtin_va_arg_pack_len () > 1) 17888 warn_open_too_many_arguments (); 17889 17890 if (__builtin_constant_p (oflag)) 17891 { 17892 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 17893 { 17894 warn_open_missing_mode (); 17895 return __open_2 (path, oflag); 17896 } 17897 return open (path, oflag, __builtin_va_arg_pack ()); 17898 } 17899 17900 if (__builtin_va_arg_pack_len () < 1) 17901 return __open_2 (path, oflag); 17902 17903 return open (path, oflag, __builtin_va_arg_pack ()); 17904 } 17905 #endif 17906 17907 17908File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 17909 179106.6 Referring to a Type with `typeof' 17911===================================== 17912 17913Another way to refer to the type of an expression is with `typeof'. 17914The syntax of using of this keyword looks like `sizeof', but the 17915construct acts semantically like a type name defined with `typedef'. 17916 17917 There are two ways of writing the argument to `typeof': with an 17918expression or with a type. Here is an example with an expression: 17919 17920 typeof (x[0](1)) 17921 17922This assumes that `x' is an array of pointers to functions; the type 17923described is that of the values of the functions. 17924 17925 Here is an example with a typename as the argument: 17926 17927 typeof (int *) 17928 17929Here the type described is that of pointers to `int'. 17930 17931 If you are writing a header file that must work when included in ISO C 17932programs, write `__typeof__' instead of `typeof'. *Note Alternate 17933Keywords::. 17934 17935 A `typeof'-construct can be used anywhere a typedef name could be 17936used. For example, you can use it in a declaration, in a cast, or 17937inside of `sizeof' or `typeof'. 17938 17939 The operand of `typeof' is evaluated for its side effects if and only 17940if it is an expression of variably modified type or the name of such a 17941type. 17942 17943 `typeof' is often useful in conjunction with the 17944statements-within-expressions feature. Here is how the two together can 17945be used to define a safe "maximum" macro that operates on any 17946arithmetic type and evaluates each of its arguments exactly once: 17947 17948 #define max(a,b) \ 17949 ({ typeof (a) _a = (a); \ 17950 typeof (b) _b = (b); \ 17951 _a > _b ? _a : _b; }) 17952 17953 The reason for using names that start with underscores for the local 17954variables is to avoid conflicts with variable names that occur within 17955the expressions that are substituted for `a' and `b'. Eventually we 17956hope to design a new form of declaration syntax that allows you to 17957declare variables whose scopes start only after their initializers; 17958this will be a more reliable way to prevent such conflicts. 17959 17960Some more examples of the use of `typeof': 17961 17962 * This declares `y' with the type of what `x' points to. 17963 17964 typeof (*x) y; 17965 17966 * This declares `y' as an array of such values. 17967 17968 typeof (*x) y[4]; 17969 17970 * This declares `y' as an array of pointers to characters: 17971 17972 typeof (typeof (char *)[4]) y; 17973 17974 It is equivalent to the following traditional C declaration: 17975 17976 char *y[4]; 17977 17978 To see the meaning of the declaration using `typeof', and why it 17979 might be a useful way to write, rewrite it with these macros: 17980 17981 #define pointer(T) typeof(T *) 17982 #define array(T, N) typeof(T [N]) 17983 17984 Now the declaration can be rewritten this way: 17985 17986 array (pointer (char), 4) y; 17987 17988 Thus, `array (pointer (char), 4)' is the type of arrays of 4 17989 pointers to `char'. 17990 17991 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 17992limited extension which permitted one to write 17993 17994 typedef T = EXPR; 17995 17996with the effect of declaring T to have the type of the expression EXPR. 17997This extension does not work with GCC 3 (versions between 3.0 and 3.2 17998will crash; 3.2.1 and later give an error). Code which relies on it 17999should be rewritten to use `typeof': 18000 18001 typedef typeof(EXPR) T; 18002 18003This will work with all versions of GCC. 18004 18005 18006File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 18007 180086.7 Conditionals with Omitted Operands 18009====================================== 18010 18011The middle operand in a conditional expression may be omitted. Then if 18012the first operand is nonzero, its value is the value of the conditional 18013expression. 18014 18015 Therefore, the expression 18016 18017 x ? : y 18018 18019has the value of `x' if that is nonzero; otherwise, the value of `y'. 18020 18021 This example is perfectly equivalent to 18022 18023 x ? x : y 18024 18025In this simple case, the ability to omit the middle operand is not 18026especially useful. When it becomes useful is when the first operand 18027does, or may (if it is a macro argument), contain a side effect. Then 18028repeating the operand in the middle would perform the side effect 18029twice. Omitting the middle operand uses the value already computed 18030without the undesirable effects of recomputing it. 18031 18032 18033File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 18034 180356.8 Double-Word Integers 18036======================== 18037 18038ISO C99 supports data types for integers that are at least 64 bits wide, 18039and as an extension GCC supports them in C90 mode and in C++. Simply 18040write `long long int' for a signed integer, or `unsigned long long int' 18041for an unsigned integer. To make an integer constant of type `long 18042long int', add the suffix `LL' to the integer. To make an integer 18043constant of type `unsigned long long int', add the suffix `ULL' to the 18044integer. 18045 18046 You can use these types in arithmetic like any other integer types. 18047Addition, subtraction, and bitwise boolean operations on these types 18048are open-coded on all types of machines. Multiplication is open-coded 18049if the machine supports fullword-to-doubleword a widening multiply 18050instruction. Division and shifts are open-coded only on machines that 18051provide special support. The operations that are not open-coded use 18052special library routines that come with GCC. 18053 18054 There may be pitfalls when you use `long long' types for function 18055arguments, unless you declare function prototypes. If a function 18056expects type `int' for its argument, and you pass a value of type `long 18057long int', confusion will result because the caller and the subroutine 18058will disagree about the number of bytes for the argument. Likewise, if 18059the function expects `long long int' and you pass `int'. The best way 18060to avoid such problems is to use prototypes. 18061 18062 18063File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 18064 180656.9 Complex Numbers 18066=================== 18067 18068ISO C99 supports complex floating data types, and as an extension GCC 18069supports them in C90 mode and in C++, and supports complex integer data 18070types which are not part of ISO C99. You can declare complex types 18071using the keyword `_Complex'. As an extension, the older GNU keyword 18072`__complex__' is also supported. 18073 18074 For example, `_Complex double x;' declares `x' as a variable whose 18075real part and imaginary part are both of type `double'. `_Complex 18076short int y;' declares `y' to have real and imaginary parts of type 18077`short int'; this is not likely to be useful, but it shows that the set 18078of complex types is complete. 18079 18080 To write a constant with a complex data type, use the suffix `i' or 18081`j' (either one; they are equivalent). For example, `2.5fi' has type 18082`_Complex float' and `3i' has type `_Complex int'. Such a constant 18083always has a pure imaginary value, but you can form any complex value 18084you like by adding one to a real constant. This is a GNU extension; if 18085you have an ISO C99 conforming C library (such as GNU libc), and want 18086to construct complex constants of floating type, you should include 18087`<complex.h>' and use the macros `I' or `_Complex_I' instead. 18088 18089 To extract the real part of a complex-valued expression EXP, write 18090`__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 18091part. This is a GNU extension; for values of floating type, you should 18092use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 18093`cimag' and `cimagl', declared in `<complex.h>' and also provided as 18094built-in functions by GCC. 18095 18096 The operator `~' performs complex conjugation when used on a value 18097with a complex type. This is a GNU extension; for values of floating 18098type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 18099declared in `<complex.h>' and also provided as built-in functions by 18100GCC. 18101 18102 GCC can allocate complex automatic variables in a noncontiguous 18103fashion; it's even possible for the real part to be in a register while 18104the imaginary part is on the stack (or vice-versa). Only the DWARF2 18105debug info format can represent this, so use of DWARF2 is recommended. 18106If you are using the stabs debug info format, GCC describes a 18107noncontiguous complex variable as if it were two separate variables of 18108noncomplex type. If the variable's actual name is `foo', the two 18109fictitious variables are named `foo$real' and `foo$imag'. You can 18110examine and set these two fictitious variables with your debugger. 18111 18112 18113File: gcc.info, Node: Floating Types, Next: Half-Precision, Prev: Complex, Up: C Extensions 18114 181156.10 Additional Floating Types 18116============================== 18117 18118As an extension, the GNU C compiler supports additional floating types, 18119`__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 18120(`TFmode') floating types. Support for additional types includes the 18121arithmetic operators: add, subtract, multiply, divide; unary arithmetic 18122operators; relational operators; equality operators; and conversions to 18123and from integer and other floating types. Use a suffix `w' or `W' in 18124a literal constant of type `__float80' and `q' or `Q' for `_float128'. 18125You can declare complex types using the corresponding internal complex 18126type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 18127 18128 typedef _Complex float __attribute__((mode(TC))) _Complex128; 18129 typedef _Complex float __attribute__((mode(XC))) _Complex80; 18130 18131 Not all targets support additional floating point types. `__float80' 18132and `__float128' types are supported on i386, x86_64 and ia64 targets. 18133 18134 18135File: gcc.info, Node: Half-Precision, Next: Decimal Float, Prev: Floating Types, Up: C Extensions 18136 181376.11 Half-Precision Floating Point 18138================================== 18139 18140On ARM targets, GCC supports half-precision (16-bit) floating point via 18141the `__fp16' type. You must enable this type explicitly with the 18142`-mfp16-format' command-line option in order to use it. 18143 18144 ARM supports two incompatible representations for half-precision 18145floating-point values. You must choose one of the representations and 18146use it consistently in your program. 18147 18148 Specifying `-mfp16-format=ieee' selects the IEEE 754-2008 format. 18149This format can represent normalized values in the range of 2^-14 to 1815065504. There are 11 bits of significand precision, approximately 3 18151decimal digits. 18152 18153 Specifying `-mfp16-format=alternative' selects the ARM alternative 18154format. This representation is similar to the IEEE format, but does 18155not support infinities or NaNs. Instead, the range of exponents is 18156extended, so that this format can represent normalized values in the 18157range of 2^-14 to 131008. 18158 18159 The `__fp16' type is a storage format only. For purposes of 18160arithmetic and other operations, `__fp16' values in C or C++ 18161expressions are automatically promoted to `float'. In addition, you 18162cannot declare a function with a return value or parameters of type 18163`__fp16'. 18164 18165 Note that conversions from `double' to `__fp16' involve an 18166intermediate conversion to `float'. Because of rounding, this can 18167sometimes produce a different result than a direct conversion. 18168 18169 ARM provides hardware support for conversions between `__fp16' and 18170`float' values as an extension to VFP and NEON (Advanced SIMD). GCC 18171generates code using these hardware instructions if you compile with 18172options to select an FPU that provides them; for example, 18173`-mfpu=neon-fp16 -mfloat-abi=softfp', in addition to the 18174`-mfp16-format' option to select a half-precision format. 18175 18176 Language-level support for the `__fp16' data type is independent of 18177whether GCC generates code using hardware floating-point instructions. 18178In cases where hardware support is not specified, GCC implements 18179conversions between `__fp16' and `float' values as library calls. 18180 18181 18182File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Half-Precision, Up: C Extensions 18183 181846.12 Decimal Floating Types 18185=========================== 18186 18187As an extension, the GNU C compiler supports decimal floating types as 18188defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal 18189floating types in GCC will evolve as the draft technical report changes. 18190Calling conventions for any target might also change. Not all targets 18191support decimal floating types. 18192 18193 The decimal floating types are `_Decimal32', `_Decimal64', and 18194`_Decimal128'. They use a radix of ten, unlike the floating types 18195`float', `double', and `long double' whose radix is not specified by 18196the C standard but is usually two. 18197 18198 Support for decimal floating types includes the arithmetic operators 18199add, subtract, multiply, divide; unary arithmetic operators; relational 18200operators; equality operators; and conversions to and from integer and 18201other floating types. Use a suffix `df' or `DF' in a literal constant 18202of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 18203for `_Decimal128'. 18204 18205 GCC support of decimal float as specified by the draft technical report 18206is incomplete: 18207 18208 * When the value of a decimal floating type cannot be represented in 18209 the integer type to which it is being converted, the result is 18210 undefined rather than the result value specified by the draft 18211 technical report. 18212 18213 * GCC does not provide the C library functionality associated with 18214 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 18215 must come from a separate C library implementation. Because of 18216 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 18217 indicate that the implementation conforms to the technical report. 18218 18219 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 18220the DWARF2 debug information format. 18221 18222 18223File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 18224 182256.13 Hex Floats 18226=============== 18227 18228ISO C99 supports floating-point numbers written not only in the usual 18229decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 18230written in hexadecimal format. As a GNU extension, GCC supports this 18231in C90 mode (except in some cases when strictly conforming) and in C++. 18232In that format the `0x' hex introducer and the `p' or `P' exponent 18233field are mandatory. The exponent is a decimal number that indicates 18234the power of 2 by which the significant part will be multiplied. Thus 18235`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 18236is the same as `1.55e1'. 18237 18238 Unlike for floating-point numbers in the decimal notation the exponent 18239is always required in the hexadecimal notation. Otherwise the compiler 18240would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 18241could mean `1.0f' or `1.9375' since `f' is also the extension for 18242floating-point constants of type `float'. 18243 18244 18245File: gcc.info, Node: Fixed-Point, Next: Named Address Spaces, Prev: Hex Floats, Up: C Extensions 18246 182476.14 Fixed-Point Types 18248====================== 18249 18250As an extension, the GNU C compiler supports fixed-point types as 18251defined in the N1169 draft of ISO/IEC DTR 18037. Support for 18252fixed-point types in GCC will evolve as the draft technical report 18253changes. Calling conventions for any target might also change. Not 18254all targets support fixed-point types. 18255 18256 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 18257`long long _Fract', `unsigned short _Fract', `unsigned _Fract', 18258`unsigned long _Fract', `unsigned long long _Fract', `_Sat short 18259_Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 18260`_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 18261long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 18262`_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 18263`unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 18264`_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 18265_Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 18266unsigned long _Accum', `_Sat unsigned long long _Accum'. 18267 18268 Fixed-point data values contain fractional and optional integral parts. 18269The format of fixed-point data varies and depends on the target machine. 18270 18271 Support for fixed-point types includes: 18272 * prefix and postfix increment and decrement operators (`++', `--') 18273 18274 * unary arithmetic operators (`+', `-', `!') 18275 18276 * binary arithmetic operators (`+', `-', `*', `/') 18277 18278 * binary shift operators (`<<', `>>') 18279 18280 * relational operators (`<', `<=', `>=', `>') 18281 18282 * equality operators (`==', `!=') 18283 18284 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 18285 18286 * conversions to and from integer, floating-point, or fixed-point 18287 types 18288 18289 Use a suffix in a fixed-point literal constant: 18290 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 18291 18292 * `r' or `R' for `_Fract' and `_Sat _Fract' 18293 18294 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 18295 18296 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 18297 18298 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 18299 short _Fract' 18300 18301 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 18302 18303 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 18304 _Fract' 18305 18306 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 18307 unsigned long long _Fract' 18308 18309 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 18310 18311 * `k' or `K' for `_Accum' and `_Sat _Accum' 18312 18313 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 18314 18315 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 18316 18317 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 18318 short _Accum' 18319 18320 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 18321 18322 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 18323 _Accum' 18324 18325 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 18326 unsigned long long _Accum' 18327 18328 GCC support of fixed-point types as specified by the draft technical 18329report is incomplete: 18330 18331 * Pragmas to control overflow and rounding behaviors are not 18332 implemented. 18333 18334 Fixed-point types are supported by the DWARF2 debug information format. 18335 18336 18337File: gcc.info, Node: Named Address Spaces, Next: Zero Length, Prev: Fixed-Point, Up: C Extensions 18338 183396.15 Named address spaces 18340========================= 18341 18342As an extension, the GNU C compiler supports named address spaces as 18343defined in the N1275 draft of ISO/IEC DTR 18037. Support for named 18344address spaces in GCC will evolve as the draft technical report changes. 18345Calling conventions for any target might also change. At present, only 18346the SPU target supports other address spaces. On the SPU target, for 18347example, variables may be declared as belonging to another address space 18348by qualifying the type with the `__ea' address space identifier: 18349 18350 extern int __ea i; 18351 18352 When the variable `i' is accessed, the compiler will generate special 18353code to access this variable. It may use runtime library support, or 18354generate special machine instructions to access that address space. 18355 18356 The `__ea' identifier may be used exactly like any other C type 18357qualifier (e.g., `const' or `volatile'). See the N1275 document for 18358more details. 18359 18360 18361File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Named Address Spaces, Up: C Extensions 18362 183636.16 Arrays of Length Zero 18364========================== 18365 18366Zero-length arrays are allowed in GNU C. They are very useful as the 18367last element of a structure which is really a header for a 18368variable-length object: 18369 18370 struct line { 18371 int length; 18372 char contents[0]; 18373 }; 18374 18375 struct line *thisline = (struct line *) 18376 malloc (sizeof (struct line) + this_length); 18377 thisline->length = this_length; 18378 18379 In ISO C90, you would have to give `contents' a length of 1, which 18380means either you waste space or complicate the argument to `malloc'. 18381 18382 In ISO C99, you would use a "flexible array member", which is slightly 18383different in syntax and semantics: 18384 18385 * Flexible array members are written as `contents[]' without the `0'. 18386 18387 * Flexible array members have incomplete type, and so the `sizeof' 18388 operator may not be applied. As a quirk of the original 18389 implementation of zero-length arrays, `sizeof' evaluates to zero. 18390 18391 * Flexible array members may only appear as the last member of a 18392 `struct' that is otherwise non-empty. 18393 18394 * A structure containing a flexible array member, or a union 18395 containing such a structure (possibly recursively), may not be a 18396 member of a structure or an element of an array. (However, these 18397 uses are permitted by GCC as extensions.) 18398 18399 GCC versions before 3.0 allowed zero-length arrays to be statically 18400initialized, as if they were flexible arrays. In addition to those 18401cases that were useful, it also allowed initializations in situations 18402that would corrupt later data. Non-empty initialization of zero-length 18403arrays is now treated like any case where there are more initializer 18404elements than the array holds, in that a suitable warning about "excess 18405elements in array" is given, and the excess elements (all of them, in 18406this case) are ignored. 18407 18408 Instead GCC allows static initialization of flexible array members. 18409This is equivalent to defining a new structure containing the original 18410structure followed by an array of sufficient size to contain the data. 18411I.e. in the following, `f1' is constructed as if it were declared like 18412`f2'. 18413 18414 struct f1 { 18415 int x; int y[]; 18416 } f1 = { 1, { 2, 3, 4 } }; 18417 18418 struct f2 { 18419 struct f1 f1; int data[3]; 18420 } f2 = { { 1 }, { 2, 3, 4 } }; 18421 18422The convenience of this extension is that `f1' has the desired type, 18423eliminating the need to consistently refer to `f2.f1'. 18424 18425 This has symmetry with normal static arrays, in that an array of 18426unknown size is also written with `[]'. 18427 18428 Of course, this extension only makes sense if the extra data comes at 18429the end of a top-level object, as otherwise we would be overwriting 18430data at subsequent offsets. To avoid undue complication and confusion 18431with initialization of deeply nested arrays, we simply disallow any 18432non-empty initialization except when the structure is the top-level 18433object. For example: 18434 18435 struct foo { int x; int y[]; }; 18436 struct bar { struct foo z; }; 18437 18438 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 18439 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 18440 struct bar c = { { 1, { } } }; // Valid. 18441 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 18442 18443 18444File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 18445 184466.17 Structures With No Members 18447=============================== 18448 18449GCC permits a C structure to have no members: 18450 18451 struct empty { 18452 }; 18453 18454 The structure will have size zero. In C++, empty structures are part 18455of the language. G++ treats empty structures as if they had a single 18456member of type `char'. 18457 18458 18459File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 18460 184616.18 Arrays of Variable Length 18462============================== 18463 18464Variable-length automatic arrays are allowed in ISO C99, and as an 18465extension GCC accepts them in C90 mode and in C++. These arrays are 18466declared like any other automatic arrays, but with a length that is not 18467a constant expression. The storage is allocated at the point of 18468declaration and deallocated when the brace-level is exited. For 18469example: 18470 18471 FILE * 18472 concat_fopen (char *s1, char *s2, char *mode) 18473 { 18474 char str[strlen (s1) + strlen (s2) + 1]; 18475 strcpy (str, s1); 18476 strcat (str, s2); 18477 return fopen (str, mode); 18478 } 18479 18480 Jumping or breaking out of the scope of the array name deallocates the 18481storage. Jumping into the scope is not allowed; you get an error 18482message for it. 18483 18484 You can use the function `alloca' to get an effect much like 18485variable-length arrays. The function `alloca' is available in many 18486other C implementations (but not in all). On the other hand, 18487variable-length arrays are more elegant. 18488 18489 There are other differences between these two methods. Space allocated 18490with `alloca' exists until the containing _function_ returns. The 18491space for a variable-length array is deallocated as soon as the array 18492name's scope ends. (If you use both variable-length arrays and 18493`alloca' in the same function, deallocation of a variable-length array 18494will also deallocate anything more recently allocated with `alloca'.) 18495 18496 You can also use variable-length arrays as arguments to functions: 18497 18498 struct entry 18499 tester (int len, char data[len][len]) 18500 { 18501 /* ... */ 18502 } 18503 18504 The length of an array is computed once when the storage is allocated 18505and is remembered for the scope of the array in case you access it with 18506`sizeof'. 18507 18508 If you want to pass the array first and the length afterward, you can 18509use a forward declaration in the parameter list--another GNU extension. 18510 18511 struct entry 18512 tester (int len; char data[len][len], int len) 18513 { 18514 /* ... */ 18515 } 18516 18517 The `int len' before the semicolon is a "parameter forward 18518declaration", and it serves the purpose of making the name `len' known 18519when the declaration of `data' is parsed. 18520 18521 You can write any number of such parameter forward declarations in the 18522parameter list. They can be separated by commas or semicolons, but the 18523last one must end with a semicolon, which is followed by the "real" 18524parameter declarations. Each forward declaration must match a "real" 18525declaration in parameter name and data type. ISO C99 does not support 18526parameter forward declarations. 18527 18528 18529File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 18530 185316.19 Macros with a Variable Number of Arguments. 18532================================================ 18533 18534In the ISO C standard of 1999, a macro can be declared to accept a 18535variable number of arguments much as a function can. The syntax for 18536defining the macro is similar to that of a function. Here is an 18537example: 18538 18539 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 18540 18541 Here `...' is a "variable argument". In the invocation of such a 18542macro, it represents the zero or more tokens until the closing 18543parenthesis that ends the invocation, including any commas. This set of 18544tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 18545it appears. See the CPP manual for more information. 18546 18547 GCC has long supported variadic macros, and used a different syntax 18548that allowed you to give a name to the variable arguments just like any 18549other argument. Here is an example: 18550 18551 #define debug(format, args...) fprintf (stderr, format, args) 18552 18553 This is in all ways equivalent to the ISO C example above, but arguably 18554more readable and descriptive. 18555 18556 GNU CPP has two further variadic macro extensions, and permits them to 18557be used with either of the above forms of macro definition. 18558 18559 In standard C, you are not allowed to leave the variable argument out 18560entirely; but you are allowed to pass an empty argument. For example, 18561this invocation is invalid in ISO C, because there is no comma after 18562the string: 18563 18564 debug ("A message") 18565 18566 GNU CPP permits you to completely omit the variable arguments in this 18567way. In the above examples, the compiler would complain, though since 18568the expansion of the macro still has the extra comma after the format 18569string. 18570 18571 To help solve this problem, CPP behaves specially for variable 18572arguments used with the token paste operator, `##'. If instead you 18573write 18574 18575 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 18576 18577 and if the variable arguments are omitted or empty, the `##' operator 18578causes the preprocessor to remove the comma before it. If you do 18579provide some variable arguments in your macro invocation, GNU CPP does 18580not complain about the paste operation and instead places the variable 18581arguments after the comma. Just like any other pasted macro argument, 18582these arguments are not macro expanded. 18583 18584 18585File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 18586 185876.20 Slightly Looser Rules for Escaped Newlines 18588=============================================== 18589 18590Recently, the preprocessor has relaxed its treatment of escaped 18591newlines. Previously, the newline had to immediately follow a 18592backslash. The current implementation allows whitespace in the form of 18593spaces, horizontal and vertical tabs, and form feeds between the 18594backslash and the subsequent newline. The preprocessor issues a 18595warning, but treats it as a valid escaped newline and combines the two 18596lines to form a single logical line. This works within comments and 18597tokens, as well as between tokens. Comments are _not_ treated as 18598whitespace for the purposes of this relaxation, since they have not yet 18599been replaced with spaces. 18600 18601 18602File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 18603 186046.21 Non-Lvalue Arrays May Have Subscripts 18605========================================== 18606 18607In ISO C99, arrays that are not lvalues still decay to pointers, and 18608may be subscripted, although they may not be modified or used after the 18609next sequence point and the unary `&' operator may not be applied to 18610them. As an extension, GCC allows such arrays to be subscripted in C90 18611mode, though otherwise they do not decay to pointers outside C99 mode. 18612For example, this is valid in GNU C though not valid in C90: 18613 18614 struct foo {int a[4];}; 18615 18616 struct foo f(); 18617 18618 bar (int index) 18619 { 18620 return f().a[index]; 18621 } 18622 18623 18624File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 18625 186266.22 Arithmetic on `void'- and Function-Pointers 18627================================================ 18628 18629In GNU C, addition and subtraction operations are supported on pointers 18630to `void' and on pointers to functions. This is done by treating the 18631size of a `void' or of a function as 1. 18632 18633 A consequence of this is that `sizeof' is also allowed on `void' and 18634on function types, and returns 1. 18635 18636 The option `-Wpointer-arith' requests a warning if these extensions 18637are used. 18638 18639 18640File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 18641 186426.23 Non-Constant Initializers 18643============================== 18644 18645As in standard C++ and ISO C99, the elements of an aggregate 18646initializer for an automatic variable are not required to be constant 18647expressions in GNU C. Here is an example of an initializer with 18648run-time varying elements: 18649 18650 foo (float f, float g) 18651 { 18652 float beat_freqs[2] = { f-g, f+g }; 18653 /* ... */ 18654 } 18655 18656 18657File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 18658 186596.24 Compound Literals 18660====================== 18661 18662ISO C99 supports compound literals. A compound literal looks like a 18663cast containing an initializer. Its value is an object of the type 18664specified in the cast, containing the elements specified in the 18665initializer; it is an lvalue. As an extension, GCC supports compound 18666literals in C90 mode and in C++. 18667 18668 Usually, the specified type is a structure. Assume that `struct foo' 18669and `structure' are declared as shown: 18670 18671 struct foo {int a; char b[2];} structure; 18672 18673Here is an example of constructing a `struct foo' with a compound 18674literal: 18675 18676 structure = ((struct foo) {x + y, 'a', 0}); 18677 18678This is equivalent to writing the following: 18679 18680 { 18681 struct foo temp = {x + y, 'a', 0}; 18682 structure = temp; 18683 } 18684 18685 You can also construct an array. If all the elements of the compound 18686literal are (made up of) simple constant expressions, suitable for use 18687in initializers of objects of static storage duration, then the compound 18688literal can be coerced to a pointer to its first element and used in 18689such an initializer, as shown here: 18690 18691 char **foo = (char *[]) { "x", "y", "z" }; 18692 18693 Compound literals for scalar types and union types are is also 18694allowed, but then the compound literal is equivalent to a cast. 18695 18696 As a GNU extension, GCC allows initialization of objects with static 18697storage duration by compound literals (which is not possible in ISO 18698C99, because the initializer is not a constant). It is handled as if 18699the object was initialized only with the bracket enclosed list if the 18700types of the compound literal and the object match. The initializer 18701list of the compound literal must be constant. If the object being 18702initialized has array type of unknown size, the size is determined by 18703compound literal size. 18704 18705 static struct foo x = (struct foo) {1, 'a', 'b'}; 18706 static int y[] = (int []) {1, 2, 3}; 18707 static int z[] = (int [3]) {1}; 18708 18709The above lines are equivalent to the following: 18710 static struct foo x = {1, 'a', 'b'}; 18711 static int y[] = {1, 2, 3}; 18712 static int z[] = {1, 0, 0}; 18713 18714 18715File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 18716 187176.25 Designated Initializers 18718============================ 18719 18720Standard C90 requires the elements of an initializer to appear in a 18721fixed order, the same as the order of the elements in the array or 18722structure being initialized. 18723 18724 In ISO C99 you can give the elements in any order, specifying the array 18725indices or structure field names they apply to, and GNU C allows this as 18726an extension in C90 mode as well. This extension is not implemented in 18727GNU C++. 18728 18729 To specify an array index, write `[INDEX] =' before the element value. 18730For example, 18731 18732 int a[6] = { [4] = 29, [2] = 15 }; 18733 18734is equivalent to 18735 18736 int a[6] = { 0, 0, 15, 0, 29, 0 }; 18737 18738The index values must be constant expressions, even if the array being 18739initialized is automatic. 18740 18741 An alternative syntax for this which has been obsolete since GCC 2.5 18742but GCC still accepts is to write `[INDEX]' before the element value, 18743with no `='. 18744 18745 To initialize a range of elements to the same value, write `[FIRST ... 18746LAST] = VALUE'. This is a GNU extension. For example, 18747 18748 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 18749 18750If the value in it has side-effects, the side-effects will happen only 18751once, not for each initialized field by the range initializer. 18752 18753Note that the length of the array is the highest value specified plus 18754one. 18755 18756 In a structure initializer, specify the name of a field to initialize 18757with `.FIELDNAME =' before the element value. For example, given the 18758following structure, 18759 18760 struct point { int x, y; }; 18761 18762the following initialization 18763 18764 struct point p = { .y = yvalue, .x = xvalue }; 18765 18766is equivalent to 18767 18768 struct point p = { xvalue, yvalue }; 18769 18770 Another syntax which has the same meaning, obsolete since GCC 2.5, is 18771`FIELDNAME:', as shown here: 18772 18773 struct point p = { y: yvalue, x: xvalue }; 18774 18775 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 18776also use a designator (or the obsolete colon syntax) when initializing 18777a union, to specify which element of the union should be used. For 18778example, 18779 18780 union foo { int i; double d; }; 18781 18782 union foo f = { .d = 4 }; 18783 18784will convert 4 to a `double' to store it in the union using the second 18785element. By contrast, casting 4 to type `union foo' would store it 18786into the union as the integer `i', since it is an integer. (*Note Cast 18787to Union::.) 18788 18789 You can combine this technique of naming elements with ordinary C 18790initialization of successive elements. Each initializer element that 18791does not have a designator applies to the next consecutive element of 18792the array or structure. For example, 18793 18794 int a[6] = { [1] = v1, v2, [4] = v4 }; 18795 18796is equivalent to 18797 18798 int a[6] = { 0, v1, v2, 0, v4, 0 }; 18799 18800 Labeling the elements of an array initializer is especially useful 18801when the indices are characters or belong to an `enum' type. For 18802example: 18803 18804 int whitespace[256] 18805 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 18806 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 18807 18808 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 18809before an `=' to specify a nested subobject to initialize; the list is 18810taken relative to the subobject corresponding to the closest 18811surrounding brace pair. For example, with the `struct point' 18812declaration above: 18813 18814 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 18815 18816If the same field is initialized multiple times, it will have value from 18817the last initialization. If any such overridden initialization has 18818side-effect, it is unspecified whether the side-effect happens or not. 18819Currently, GCC will discard them and issue a warning. 18820 18821 18822File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 18823 188246.26 Case Ranges 18825================ 18826 18827You can specify a range of consecutive values in a single `case' label, 18828like this: 18829 18830 case LOW ... HIGH: 18831 18832This has the same effect as the proper number of individual `case' 18833labels, one for each integer value from LOW to HIGH, inclusive. 18834 18835 This feature is especially useful for ranges of ASCII character codes: 18836 18837 case 'A' ... 'Z': 18838 18839 *Be careful:* Write spaces around the `...', for otherwise it may be 18840parsed wrong when you use it with integer values. For example, write 18841this: 18842 18843 case 1 ... 5: 18844 18845rather than this: 18846 18847 case 1...5: 18848 18849 18850File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 18851 188526.27 Cast to a Union Type 18853========================= 18854 18855A cast to union type is similar to other casts, except that the type 18856specified is a union type. You can specify the type either with `union 18857TAG' or with a typedef name. A cast to union is actually a constructor 18858though, not a cast, and hence does not yield an lvalue like normal 18859casts. (*Note Compound Literals::.) 18860 18861 The types that may be cast to the union type are those of the members 18862of the union. Thus, given the following union and variables: 18863 18864 union foo { int i; double d; }; 18865 int x; 18866 double y; 18867 18868both `x' and `y' can be cast to type `union foo'. 18869 18870 Using the cast as the right-hand side of an assignment to a variable of 18871union type is equivalent to storing in a member of the union: 18872 18873 union foo u; 18874 /* ... */ 18875 u = (union foo) x == u.i = x 18876 u = (union foo) y == u.d = y 18877 18878 You can also use the union cast as a function argument: 18879 18880 void hack (union foo); 18881 /* ... */ 18882 hack ((union foo) x); 18883 18884 18885File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 18886 188876.28 Mixed Declarations and Code 18888================================ 18889 18890ISO C99 and ISO C++ allow declarations and code to be freely mixed 18891within compound statements. As an extension, GCC also allows this in 18892C90 mode. For example, you could do: 18893 18894 int i; 18895 /* ... */ 18896 i++; 18897 int j = i + 2; 18898 18899 Each identifier is visible from where it is declared until the end of 18900the enclosing block. 18901 18902 18903File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 18904 189056.29 Declaring Attributes of Functions 18906====================================== 18907 18908In GNU C, you declare certain things about functions called in your 18909program which help the compiler optimize function calls and check your 18910code more carefully. 18911 18912 The keyword `__attribute__' allows you to specify special attributes 18913when making a declaration. This keyword is followed by an attribute 18914specification inside double parentheses. The following attributes are 18915currently defined for functions on all targets: `aligned', 18916`alloc_size', `noreturn', `returns_twice', `noinline', `noclone', 18917`always_inline', `flatten', `pure', `const', `nothrow', `sentinel', 18918`format', `format_arg', `no_instrument_function', `section', 18919`constructor', `destructor', `used', `unused', `deprecated', `weak', 18920`malloc', `alias', `warn_unused_result', `nonnull', `gnu_inline', 18921`externally_visible', `hot', `cold', `artificial', `error' and 18922`warning'. Several other attributes are defined for functions on 18923particular target systems. Other attributes, including `section' are 18924supported for variables declarations (*note Variable Attributes::) and 18925for types (*note Type Attributes::). 18926 18927 GCC plugins may provide their own attributes. 18928 18929 You may also specify attributes with `__' preceding and following each 18930keyword. This allows you to use them in header files without being 18931concerned about a possible macro of the same name. For example, you 18932may use `__noreturn__' instead of `noreturn'. 18933 18934 *Note Attribute Syntax::, for details of the exact syntax for using 18935attributes. 18936 18937`alias ("TARGET")' 18938 The `alias' attribute causes the declaration to be emitted as an 18939 alias for another symbol, which must be specified. For instance, 18940 18941 void __f () { /* Do something. */; } 18942 void f () __attribute__ ((weak, alias ("__f"))); 18943 18944 defines `f' to be a weak alias for `__f'. In C++, the mangled 18945 name for the target must be used. It is an error if `__f' is not 18946 defined in the same translation unit. 18947 18948 Not all target machines support this attribute. 18949 18950`aligned (ALIGNMENT)' 18951 This attribute specifies a minimum alignment for the function, 18952 measured in bytes. 18953 18954 You cannot use this attribute to decrease the alignment of a 18955 function, only to increase it. However, when you explicitly 18956 specify a function alignment this will override the effect of the 18957 `-falign-functions' (*note Optimize Options::) option for this 18958 function. 18959 18960 Note that the effectiveness of `aligned' attributes may be limited 18961 by inherent limitations in your linker. On many systems, the 18962 linker is only able to arrange for functions to be aligned up to a 18963 certain maximum alignment. (For some linkers, the maximum 18964 supported alignment may be very very small.) See your linker 18965 documentation for further information. 18966 18967 The `aligned' attribute can also be used for variables and fields 18968 (*note Variable Attributes::.) 18969 18970`alloc_size' 18971 The `alloc_size' attribute is used to tell the compiler that the 18972 function return value points to memory, where the size is given by 18973 one or two of the functions parameters. GCC uses this information 18974 to improve the correctness of `__builtin_object_size'. 18975 18976 The function parameter(s) denoting the allocated size are 18977 specified by one or two integer arguments supplied to the 18978 attribute. The allocated size is either the value of the single 18979 function argument specified or the product of the two function 18980 arguments specified. Argument numbering starts at one. 18981 18982 For instance, 18983 18984 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 18985 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 18986 18987 declares that my_calloc will return memory of the size given by 18988 the product of parameter 1 and 2 and that my_realloc will return 18989 memory of the size given by parameter 2. 18990 18991`always_inline' 18992 Generally, functions are not inlined unless optimization is 18993 specified. For functions declared inline, this attribute inlines 18994 the function even if no optimization level was specified. 18995 18996`gnu_inline' 18997 This attribute should be used with a function which is also 18998 declared with the `inline' keyword. It directs GCC to treat the 18999 function as if it were defined in gnu90 mode even when compiling 19000 in C99 or gnu99 mode. 19001 19002 If the function is declared `extern', then this definition of the 19003 function is used only for inlining. In no case is the function 19004 compiled as a standalone function, not even if you take its address 19005 explicitly. Such an address becomes an external reference, as if 19006 you had only declared the function, and had not defined it. This 19007 has almost the effect of a macro. The way to use this is to put a 19008 function definition in a header file with this attribute, and put 19009 another copy of the function, without `extern', in a library file. 19010 The definition in the header file will cause most calls to the 19011 function to be inlined. If any uses of the function remain, they 19012 will refer to the single copy in the library. Note that the two 19013 definitions of the functions need not be precisely the same, 19014 although if they do not have the same effect your program may 19015 behave oddly. 19016 19017 In C, if the function is neither `extern' nor `static', then the 19018 function is compiled as a standalone function, as well as being 19019 inlined where possible. 19020 19021 This is how GCC traditionally handled functions declared `inline'. 19022 Since ISO C99 specifies a different semantics for `inline', this 19023 function attribute is provided as a transition measure and as a 19024 useful feature in its own right. This attribute is available in 19025 GCC 4.1.3 and later. It is available if either of the 19026 preprocessor macros `__GNUC_GNU_INLINE__' or 19027 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 19028 As Fast As a Macro: Inline. 19029 19030 In C++, this attribute does not depend on `extern' in any way, but 19031 it still requires the `inline' keyword to enable its special 19032 behavior. 19033 19034`artificial' 19035 This attribute is useful for small inline wrappers which if 19036 possible should appear during debugging as a unit, depending on 19037 the debug info format it will either mean marking the function as 19038 artificial or using the caller location for all instructions 19039 within the inlined body. 19040 19041`bank_switch' 19042 When added to an interrupt handler with the M32C port, causes the 19043 prologue and epilogue to use bank switching to preserve the 19044 registers rather than saving them on the stack. 19045 19046`flatten' 19047 Generally, inlining into a function is limited. For a function 19048 marked with this attribute, every call inside this function will 19049 be inlined, if possible. Whether the function itself is 19050 considered for inlining depends on its size and the current 19051 inlining parameters. 19052 19053`error ("MESSAGE")' 19054 If this attribute is used on a function declaration and a call to 19055 such a function is not eliminated through dead code elimination or 19056 other optimizations, an error which will include MESSAGE will be 19057 diagnosed. This is useful for compile time checking, especially 19058 together with `__builtin_constant_p' and inline functions where 19059 checking the inline function arguments is not possible through 19060 `extern char [(condition) ? 1 : -1];' tricks. While it is 19061 possible to leave the function undefined and thus invoke a link 19062 failure, when using this attribute the problem will be diagnosed 19063 earlier and with exact location of the call even in presence of 19064 inline functions or when not emitting debugging information. 19065 19066`warning ("MESSAGE")' 19067 If this attribute is used on a function declaration and a call to 19068 such a function is not eliminated through dead code elimination or 19069 other optimizations, a warning which will include MESSAGE will be 19070 diagnosed. This is useful for compile time checking, especially 19071 together with `__builtin_constant_p' and inline functions. While 19072 it is possible to define the function with a message in 19073 `.gnu.warning*' section, when using this attribute the problem 19074 will be diagnosed earlier and with exact location of the call even 19075 in presence of inline functions or when not emitting debugging 19076 information. 19077 19078`cdecl' 19079 On the Intel 386, the `cdecl' attribute causes the compiler to 19080 assume that the calling function will pop off the stack space used 19081 to pass arguments. This is useful to override the effects of the 19082 `-mrtd' switch. 19083 19084`const' 19085 Many functions do not examine any values except their arguments, 19086 and have no effects except the return value. Basically this is 19087 just slightly more strict class than the `pure' attribute below, 19088 since function is not allowed to read global memory. 19089 19090 Note that a function that has pointer arguments and examines the 19091 data pointed to must _not_ be declared `const'. Likewise, a 19092 function that calls a non-`const' function usually must not be 19093 `const'. It does not make sense for a `const' function to return 19094 `void'. 19095 19096 The attribute `const' is not implemented in GCC versions earlier 19097 than 2.5. An alternative way to declare that a function has no 19098 side effects, which works in the current version and in some older 19099 versions, is as follows: 19100 19101 typedef int intfn (); 19102 19103 extern const intfn square; 19104 19105 This approach does not work in GNU C++ from 2.6.0 on, since the 19106 language specifies that the `const' must be attached to the return 19107 value. 19108 19109`constructor' 19110`destructor' 19111`constructor (PRIORITY)' 19112`destructor (PRIORITY)' 19113 The `constructor' attribute causes the function to be called 19114 automatically before execution enters `main ()'. Similarly, the 19115 `destructor' attribute causes the function to be called 19116 automatically after `main ()' has completed or `exit ()' has been 19117 called. Functions with these attributes are useful for 19118 initializing data that will be used implicitly during the 19119 execution of the program. 19120 19121 You may provide an optional integer priority to control the order 19122 in which constructor and destructor functions are run. A 19123 constructor with a smaller priority number runs before a 19124 constructor with a larger priority number; the opposite 19125 relationship holds for destructors. So, if you have a constructor 19126 that allocates a resource and a destructor that deallocates the 19127 same resource, both functions typically have the same priority. 19128 The priorities for constructor and destructor functions are the 19129 same as those specified for namespace-scope C++ objects (*note C++ 19130 Attributes::). 19131 19132 These attributes are not currently implemented for Objective-C. 19133 19134`deprecated' 19135`deprecated (MSG)' 19136 The `deprecated' attribute results in a warning if the function is 19137 used anywhere in the source file. This is useful when identifying 19138 functions that are expected to be removed in a future version of a 19139 program. The warning also includes the location of the declaration 19140 of the deprecated function, to enable users to easily find further 19141 information about why the function is deprecated, or what they 19142 should do instead. Note that the warnings only occurs for uses: 19143 19144 int old_fn () __attribute__ ((deprecated)); 19145 int old_fn (); 19146 int (*fn_ptr)() = old_fn; 19147 19148 results in a warning on line 3 but not line 2. The optional msg 19149 argument, which must be a string, will be printed in the warning if 19150 present. 19151 19152 The `deprecated' attribute can also be used for variables and 19153 types (*note Variable Attributes::, *note Type Attributes::.) 19154 19155`disinterrupt' 19156 On MeP targets, this attribute causes the compiler to emit 19157 instructions to disable interrupts for the duration of the given 19158 function. 19159 19160`dllexport' 19161 On Microsoft Windows targets and Symbian OS targets the 19162 `dllexport' attribute causes the compiler to provide a global 19163 pointer to a pointer in a DLL, so that it can be referenced with 19164 the `dllimport' attribute. On Microsoft Windows targets, the 19165 pointer name is formed by combining `_imp__' and the function or 19166 variable name. 19167 19168 You can use `__declspec(dllexport)' as a synonym for 19169 `__attribute__ ((dllexport))' for compatibility with other 19170 compilers. 19171 19172 On systems that support the `visibility' attribute, this attribute 19173 also implies "default" visibility. It is an error to explicitly 19174 specify any other visibility. 19175 19176 Currently, the `dllexport' attribute is ignored for inlined 19177 functions, unless the `-fkeep-inline-functions' flag has been 19178 used. The attribute is also ignored for undefined symbols. 19179 19180 When applied to C++ classes, the attribute marks defined 19181 non-inlined member functions and static data members as exports. 19182 Static consts initialized in-class are not marked unless they are 19183 also defined out-of-class. 19184 19185 For Microsoft Windows targets there are alternative methods for 19186 including the symbol in the DLL's export table such as using a 19187 `.def' file with an `EXPORTS' section or, with GNU ld, using the 19188 `--export-all' linker flag. 19189 19190`dllimport' 19191 On Microsoft Windows and Symbian OS targets, the `dllimport' 19192 attribute causes the compiler to reference a function or variable 19193 via a global pointer to a pointer that is set up by the DLL 19194 exporting the symbol. The attribute implies `extern'. On 19195 Microsoft Windows targets, the pointer name is formed by combining 19196 `_imp__' and the function or variable name. 19197 19198 You can use `__declspec(dllimport)' as a synonym for 19199 `__attribute__ ((dllimport))' for compatibility with other 19200 compilers. 19201 19202 On systems that support the `visibility' attribute, this attribute 19203 also implies "default" visibility. It is an error to explicitly 19204 specify any other visibility. 19205 19206 Currently, the attribute is ignored for inlined functions. If the 19207 attribute is applied to a symbol _definition_, an error is 19208 reported. If a symbol previously declared `dllimport' is later 19209 defined, the attribute is ignored in subsequent references, and a 19210 warning is emitted. The attribute is also overridden by a 19211 subsequent declaration as `dllexport'. 19212 19213 When applied to C++ classes, the attribute marks non-inlined 19214 member functions and static data members as imports. However, the 19215 attribute is ignored for virtual methods to allow creation of 19216 vtables using thunks. 19217 19218 On the SH Symbian OS target the `dllimport' attribute also has 19219 another affect--it can cause the vtable and run-time type 19220 information for a class to be exported. This happens when the 19221 class has a dllimport'ed constructor or a non-inline, non-pure 19222 virtual function and, for either of those two conditions, the 19223 class also has an inline constructor or destructor and has a key 19224 function that is defined in the current translation unit. 19225 19226 For Microsoft Windows based targets the use of the `dllimport' 19227 attribute on functions is not necessary, but provides a small 19228 performance benefit by eliminating a thunk in the DLL. The use of 19229 the `dllimport' attribute on imported variables was required on 19230 older versions of the GNU linker, but can now be avoided by 19231 passing the `--enable-auto-import' switch to the GNU linker. As 19232 with functions, using the attribute for a variable eliminates a 19233 thunk in the DLL. 19234 19235 One drawback to using this attribute is that a pointer to a 19236 _variable_ marked as `dllimport' cannot be used as a constant 19237 address. However, a pointer to a _function_ with the `dllimport' 19238 attribute can be used as a constant initializer; in this case, the 19239 address of a stub function in the import lib is referenced. On 19240 Microsoft Windows targets, the attribute can be disabled for 19241 functions by setting the `-mnop-fun-dllimport' flag. 19242 19243`eightbit_data' 19244 Use this attribute on the H8/300, H8/300H, and H8S to indicate 19245 that the specified variable should be placed into the eight bit 19246 data section. The compiler will generate more efficient code for 19247 certain operations on data in the eight bit data area. Note the 19248 eight bit data area is limited to 256 bytes of data. 19249 19250 You must use GAS and GLD from GNU binutils version 2.7 or later for 19251 this attribute to work correctly. 19252 19253`exception_handler' 19254 Use this attribute on the Blackfin to indicate that the specified 19255 function is an exception handler. The compiler will generate 19256 function entry and exit sequences suitable for use in an exception 19257 handler when this attribute is present. 19258 19259`externally_visible' 19260 This attribute, attached to a global variable or function, 19261 nullifies the effect of the `-fwhole-program' command-line option, 19262 so the object remains visible outside the current compilation unit. 19263 19264`far' 19265 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 19266 use a calling convention that takes care of switching memory banks 19267 when entering and leaving a function. This calling convention is 19268 also the default when using the `-mlong-calls' option. 19269 19270 On 68HC12 the compiler will use the `call' and `rtc' instructions 19271 to call and return from a function. 19272 19273 On 68HC11 the compiler will generate a sequence of instructions to 19274 invoke a board-specific routine to switch the memory bank and call 19275 the real function. The board-specific routine simulates a `call'. 19276 At the end of a function, it will jump to a board-specific routine 19277 instead of using `rts'. The board-specific return routine 19278 simulates the `rtc'. 19279 19280 On MeP targets this causes the compiler to use a calling convention 19281 which assumes the called function is too far away for the built-in 19282 addressing modes. 19283 19284`fast_interrupt' 19285 Use this attribute on the M32C and RX ports to indicate that the 19286 specified function is a fast interrupt handler. This is just like 19287 the `interrupt' attribute, except that `freit' is used to return 19288 instead of `reit'. 19289 19290`fastcall' 19291 On the Intel 386, the `fastcall' attribute causes the compiler to 19292 pass the first argument (if of integral type) in the register ECX 19293 and the second argument (if of integral type) in the register EDX. 19294 Subsequent and other typed arguments are passed on the stack. The 19295 called function will pop the arguments off the stack. If the 19296 number of arguments is variable all arguments are pushed on the 19297 stack. 19298 19299`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 19300 The `format' attribute specifies that a function takes `printf', 19301 `scanf', `strftime' or `strfmon' style arguments which should be 19302 type-checked against a format string. For example, the 19303 declaration: 19304 19305 extern int 19306 my_printf (void *my_object, const char *my_format, ...) 19307 __attribute__ ((format (printf, 2, 3))); 19308 19309 causes the compiler to check the arguments in calls to `my_printf' 19310 for consistency with the `printf' style format string argument 19311 `my_format'. 19312 19313 The parameter ARCHETYPE determines how the format string is 19314 interpreted, and should be `printf', `scanf', `strftime', 19315 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 19316 also use `__printf__', `__scanf__', `__strftime__' or 19317 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 19318 `ms_strftime' are also present. ARCHTYPE values such as `printf' 19319 refer to the formats accepted by the system's C run-time library, 19320 while `gnu_' values always refer to the formats accepted by the 19321 GNU C Library. On Microsoft Windows targets, `ms_' values refer 19322 to the formats accepted by the `msvcrt.dll' library. The 19323 parameter STRING-INDEX specifies which argument is the format 19324 string argument (starting from 1), while FIRST-TO-CHECK is the 19325 number of the first argument to check against the format string. 19326 For functions where the arguments are not available to be checked 19327 (such as `vprintf'), specify the third parameter as zero. In this 19328 case the compiler only checks the format string for consistency. 19329 For `strftime' formats, the third parameter is required to be zero. 19330 Since non-static C++ methods have an implicit `this' argument, the 19331 arguments of such methods should be counted from two, not one, when 19332 giving values for STRING-INDEX and FIRST-TO-CHECK. 19333 19334 In the example above, the format string (`my_format') is the second 19335 argument of the function `my_print', and the arguments to check 19336 start with the third argument, so the correct parameters for the 19337 format attribute are 2 and 3. 19338 19339 The `format' attribute allows you to identify your own functions 19340 which take format strings as arguments, so that GCC can check the 19341 calls to these functions for errors. The compiler always (unless 19342 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 19343 standard library functions `printf', `fprintf', `sprintf', 19344 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 19345 `vsprintf' whenever such warnings are requested (using 19346 `-Wformat'), so there is no need to modify the header file 19347 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 19348 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 19349 strictly conforming C standard modes, the X/Open function 19350 `strfmon' is also checked as are `printf_unlocked' and 19351 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 19352 Dialect Options. 19353 19354 The target may provide additional types of format checks. *Note 19355 Format Checks Specific to Particular Target Machines: Target 19356 Format Checks. 19357 19358`format_arg (STRING-INDEX)' 19359 The `format_arg' attribute specifies that a function takes a format 19360 string for a `printf', `scanf', `strftime' or `strfmon' style 19361 function and modifies it (for example, to translate it into 19362 another language), so the result can be passed to a `printf', 19363 `scanf', `strftime' or `strfmon' style function (with the 19364 remaining arguments to the format function the same as they would 19365 have been for the unmodified string). For example, the 19366 declaration: 19367 19368 extern char * 19369 my_dgettext (char *my_domain, const char *my_format) 19370 __attribute__ ((format_arg (2))); 19371 19372 causes the compiler to check the arguments in calls to a `printf', 19373 `scanf', `strftime' or `strfmon' type function, whose format 19374 string argument is a call to the `my_dgettext' function, for 19375 consistency with the format string argument `my_format'. If the 19376 `format_arg' attribute had not been specified, all the compiler 19377 could tell in such calls to format functions would be that the 19378 format string argument is not constant; this would generate a 19379 warning when `-Wformat-nonliteral' is used, but the calls could 19380 not be checked without the attribute. 19381 19382 The parameter STRING-INDEX specifies which argument is the format 19383 string argument (starting from one). Since non-static C++ methods 19384 have an implicit `this' argument, the arguments of such methods 19385 should be counted from two. 19386 19387 The `format-arg' attribute allows you to identify your own 19388 functions which modify format strings, so that GCC can check the 19389 calls to `printf', `scanf', `strftime' or `strfmon' type function 19390 whose operands are a call to one of your own function. The 19391 compiler always treats `gettext', `dgettext', and `dcgettext' in 19392 this manner except when strict ISO C support is requested by 19393 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 19394 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 19395 Dialect Options. 19396 19397`function_vector' 19398 Use this attribute on the H8/300, H8/300H, and H8S to indicate 19399 that the specified function should be called through the function 19400 vector. Calling a function through the function vector will 19401 reduce code size, however; the function vector has a limited size 19402 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 19403 and H8S) and shares space with the interrupt vector. 19404 19405 In SH2A target, this attribute declares a function to be called 19406 using the TBR relative addressing mode. The argument to this 19407 attribute is the entry number of the same function in a vector 19408 table containing all the TBR relative addressable functions. For 19409 the successful jump, register TBR should contain the start address 19410 of this TBR relative vector table. In the startup routine of the 19411 user application, user needs to care of this TBR register 19412 initialization. The TBR relative vector table can have at max 256 19413 function entries. The jumps to these functions will be generated 19414 using a SH2A specific, non delayed branch instruction JSR/N 19415 @(disp8,TBR). You must use GAS and GLD from GNU binutils version 19416 2.7 or later for this attribute to work correctly. 19417 19418 Please refer the example of M16C target, to see the use of this 19419 attribute while declaring a function, 19420 19421 In an application, for a function being called once, this 19422 attribute will save at least 8 bytes of code; and if other 19423 successive calls are being made to the same function, it will save 19424 2 bytes of code per each of these calls. 19425 19426 On M16C/M32C targets, the `function_vector' attribute declares a 19427 special page subroutine call function. Use of this attribute 19428 reduces the code size by 2 bytes for each call generated to the 19429 subroutine. The argument to the attribute is the vector number 19430 entry from the special page vector table which contains the 16 19431 low-order bits of the subroutine's entry address. Each vector 19432 table has special page number (18 to 255) which are used in `jsrs' 19433 instruction. Jump addresses of the routines are generated by 19434 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 19435 M32C targets), to the 2 byte addresses set in the vector table. 19436 Therefore you need to ensure that all the special page vector 19437 routines should get mapped within the address range 0x0F0000 to 19438 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 19439 19440 In the following example 2 bytes will be saved for each call to 19441 function `foo'. 19442 19443 void foo (void) __attribute__((function_vector(0x18))); 19444 void foo (void) 19445 { 19446 } 19447 19448 void bar (void) 19449 { 19450 foo(); 19451 } 19452 19453 If functions are defined in one file and are called in another 19454 file, then be sure to write this declaration in both files. 19455 19456 This attribute is ignored for R8C target. 19457 19458`interrupt' 19459 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MeP, 19460 MIPS, RX and Xstormy16 ports to indicate that the specified 19461 function is an interrupt handler. The compiler will generate 19462 function entry and exit sequences suitable for use in an interrupt 19463 handler when this attribute is present. 19464 19465 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 19466 and SH processors can be specified via the `interrupt_handler' 19467 attribute. 19468 19469 Note, on the AVR, interrupts will be enabled inside the function. 19470 19471 Note, for the ARM, you can specify the kind of interrupt to be 19472 handled by adding an optional parameter to the interrupt attribute 19473 like this: 19474 19475 void f () __attribute__ ((interrupt ("IRQ"))); 19476 19477 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 19478 and UNDEF. 19479 19480 On ARMv7-M the interrupt type is ignored, and the attribute means 19481 the function may be called with a word aligned stack pointer. 19482 19483 On MIPS targets, you can use the following attributes to modify 19484 the behavior of an interrupt handler: 19485 `use_shadow_register_set' 19486 Assume that the handler uses a shadow register set, instead of 19487 the main general-purpose registers. 19488 19489 `keep_interrupts_masked' 19490 Keep interrupts masked for the whole function. Without this 19491 attribute, GCC tries to reenable interrupts for as much of 19492 the function as it can. 19493 19494 `use_debug_exception_return' 19495 Return using the `deret' instruction. Interrupt handlers 19496 that don't have this attribute return using `eret' instead. 19497 19498 You can use any combination of these attributes, as shown below: 19499 void __attribute__ ((interrupt)) v0 (); 19500 void __attribute__ ((interrupt, use_shadow_register_set)) v1 (); 19501 void __attribute__ ((interrupt, keep_interrupts_masked)) v2 (); 19502 void __attribute__ ((interrupt, use_debug_exception_return)) v3 (); 19503 void __attribute__ ((interrupt, use_shadow_register_set, 19504 keep_interrupts_masked)) v4 (); 19505 void __attribute__ ((interrupt, use_shadow_register_set, 19506 use_debug_exception_return)) v5 (); 19507 void __attribute__ ((interrupt, keep_interrupts_masked, 19508 use_debug_exception_return)) v6 (); 19509 void __attribute__ ((interrupt, use_shadow_register_set, 19510 keep_interrupts_masked, 19511 use_debug_exception_return)) v7 (); 19512 19513`interrupt_handler' 19514 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 19515 and SH to indicate that the specified function is an interrupt 19516 handler. The compiler will generate function entry and exit 19517 sequences suitable for use in an interrupt handler when this 19518 attribute is present. 19519 19520`interrupt_thread' 19521 Use this attribute on fido, a subarchitecture of the m68k, to 19522 indicate that the specified function is an interrupt handler that 19523 is designed to run as a thread. The compiler omits generate 19524 prologue/epilogue sequences and replaces the return instruction 19525 with a `sleep' instruction. This attribute is available only on 19526 fido. 19527 19528`isr' 19529 Use this attribute on ARM to write Interrupt Service Routines. 19530 This is an alias to the `interrupt' attribute above. 19531 19532`kspisusp' 19533 When used together with `interrupt_handler', `exception_handler' 19534 or `nmi_handler', code will be generated to load the stack pointer 19535 from the USP register in the function prologue. 19536 19537`l1_text' 19538 This attribute specifies a function to be placed into L1 19539 Instruction SRAM. The function will be put into a specific section 19540 named `.l1.text'. With `-mfdpic', function calls with a such 19541 function as the callee or caller will use inlined PLT. 19542 19543`l2' 19544 On the Blackfin, this attribute specifies a function to be placed 19545 into L2 SRAM. The function will be put into a specific section 19546 named `.l1.text'. With `-mfdpic', callers of such functions will 19547 use an inlined PLT. 19548 19549`long_call/short_call' 19550 This attribute specifies how a particular function is called on 19551 ARM. Both attributes override the `-mlong-calls' (*note ARM 19552 Options::) command line switch and `#pragma long_calls' settings. 19553 The `long_call' attribute indicates that the function might be far 19554 away from the call site and require a different (more expensive) 19555 calling sequence. The `short_call' attribute always places the 19556 offset to the function from the call site into the `BL' 19557 instruction directly. 19558 19559`longcall/shortcall' 19560 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 19561 indicates that the function might be far away from the call site 19562 and require a different (more expensive) calling sequence. The 19563 `shortcall' attribute indicates that the function is always close 19564 enough for the shorter calling sequence to be used. These 19565 attributes override both the `-mlongcall' switch and, on the 19566 RS/6000 and PowerPC, the `#pragma longcall' setting. 19567 19568 *Note RS/6000 and PowerPC Options::, for more information on 19569 whether long calls are necessary. 19570 19571`long_call/near/far' 19572 These attributes specify how a particular function is called on 19573 MIPS. The attributes override the `-mlong-calls' (*note MIPS 19574 Options::) command-line switch. The `long_call' and `far' 19575 attributes are synonyms, and cause the compiler to always call the 19576 function by first loading its address into a register, and then 19577 using the contents of that register. The `near' attribute has the 19578 opposite effect; it specifies that non-PIC calls should be made 19579 using the more efficient `jal' instruction. 19580 19581`malloc' 19582 The `malloc' attribute is used to tell the compiler that a function 19583 may be treated as if any non-`NULL' pointer it returns cannot 19584 alias any other pointer valid when the function returns. This 19585 will often improve optimization. Standard functions with this 19586 property include `malloc' and `calloc'. `realloc'-like functions 19587 have this property as long as the old pointer is never referred to 19588 (including comparing it to the new pointer) after the function 19589 returns a non-`NULL' value. 19590 19591`mips16/nomips16' 19592 On MIPS targets, you can use the `mips16' and `nomips16' function 19593 attributes to locally select or turn off MIPS16 code generation. 19594 A function with the `mips16' attribute is emitted as MIPS16 code, 19595 while MIPS16 code generation is disabled for functions with the 19596 `nomips16' attribute. These attributes override the `-mips16' and 19597 `-mno-mips16' options on the command line (*note MIPS Options::). 19598 19599 When compiling files containing mixed MIPS16 and non-MIPS16 code, 19600 the preprocessor symbol `__mips16' reflects the setting on the 19601 command line, not that within individual functions. Mixed MIPS16 19602 and non-MIPS16 code may interact badly with some GCC extensions 19603 such as `__builtin_apply' (*note Constructing Calls::). 19604 19605`model (MODEL-NAME)' 19606 On the M32R/D, use this attribute to set the addressability of an 19607 object, and of the code generated for a function. The identifier 19608 MODEL-NAME is one of `small', `medium', or `large', representing 19609 each of the code models. 19610 19611 Small model objects live in the lower 16MB of memory (so that their 19612 addresses can be loaded with the `ld24' instruction), and are 19613 callable with the `bl' instruction. 19614 19615 Medium model objects may live anywhere in the 32-bit address space 19616 (the compiler will generate `seth/add3' instructions to load their 19617 addresses), and are callable with the `bl' instruction. 19618 19619 Large model objects may live anywhere in the 32-bit address space 19620 (the compiler will generate `seth/add3' instructions to load their 19621 addresses), and may not be reachable with the `bl' instruction 19622 (the compiler will generate the much slower `seth/add3/jl' 19623 instruction sequence). 19624 19625 On IA-64, use this attribute to set the addressability of an 19626 object. At present, the only supported identifier for MODEL-NAME 19627 is `small', indicating addressability via "small" (22-bit) 19628 addresses (so that their addresses can be loaded with the `addl' 19629 instruction). Caveat: such addressing is by definition not 19630 position independent and hence this attribute must not be used for 19631 objects defined by shared libraries. 19632 19633`ms_abi/sysv_abi' 19634 On 64-bit x86_64-*-* targets, you can use an ABI attribute to 19635 indicate which calling convention should be used for a function. 19636 The `ms_abi' attribute tells the compiler to use the Microsoft 19637 ABI, while the `sysv_abi' attribute tells the compiler to use the 19638 ABI used on GNU/Linux and other systems. The default is to use 19639 the Microsoft ABI when targeting Windows. On all other systems, 19640 the default is the AMD ABI. 19641 19642 Note, the `ms_abi' attribute for Windows targets currently requires 19643 the `-maccumulate-outgoing-args' option. 19644 19645`ms_hook_prologue' 19646 On 32 bit i[34567]86-*-* targets, you can use this function 19647 attribute to make gcc generate the "hot-patching" function 19648 prologue used in Win32 API functions in Microsoft Windows XP 19649 Service Pack 2 and newer. This requires support for the swap 19650 suffix in the assembler. (GNU Binutils 2.19.51 or later) 19651 19652`naked' 19653 Use this attribute on the ARM, AVR, IP2K, RX and SPU ports to 19654 indicate that the specified function does not need 19655 prologue/epilogue sequences generated by the compiler. It is up 19656 to the programmer to provide these sequences. The only statements 19657 that can be safely included in naked functions are `asm' 19658 statements that do not have operands. All other statements, 19659 including declarations of local variables, `if' statements, and so 19660 forth, should be avoided. Naked functions should be used to 19661 implement the body of an assembly function, while allowing the 19662 compiler to construct the requisite function declaration for the 19663 assembler. 19664 19665`near' 19666 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 19667 use the normal calling convention based on `jsr' and `rts'. This 19668 attribute can be used to cancel the effect of the `-mlong-calls' 19669 option. 19670 19671 On MeP targets this attribute causes the compiler to assume the 19672 called function is close enough to use the normal calling 19673 convention, overriding the `-mtf' command line option. 19674 19675`nesting' 19676 Use this attribute together with `interrupt_handler', 19677 `exception_handler' or `nmi_handler' to indicate that the function 19678 entry code should enable nested interrupts or exceptions. 19679 19680`nmi_handler' 19681 Use this attribute on the Blackfin to indicate that the specified 19682 function is an NMI handler. The compiler will generate function 19683 entry and exit sequences suitable for use in an NMI handler when 19684 this attribute is present. 19685 19686`no_instrument_function' 19687 If `-finstrument-functions' is given, profiling function calls will 19688 be generated at entry and exit of most user-compiled functions. 19689 Functions with this attribute will not be so instrumented. 19690 19691`noinline' 19692 This function attribute prevents a function from being considered 19693 for inlining. If the function does not have side-effects, there 19694 are optimizations other than inlining that causes function calls 19695 to be optimized away, although the function call is live. To keep 19696 such calls from being optimized away, put 19697 asm (""); 19698 (*note Extended Asm::) in the called function, to serve as a 19699 special side-effect. 19700 19701`noclone' 19702 This function attribute prevents a function from being considered 19703 for cloning - a mechanism which produces specialized copies of 19704 functions and which is (currently) performed by interprocedural 19705 constant propagation. 19706 19707`nonnull (ARG-INDEX, ...)' 19708 The `nonnull' attribute specifies that some function parameters 19709 should be non-null pointers. For instance, the declaration: 19710 19711 extern void * 19712 my_memcpy (void *dest, const void *src, size_t len) 19713 __attribute__((nonnull (1, 2))); 19714 19715 causes the compiler to check that, in calls to `my_memcpy', 19716 arguments DEST and SRC are non-null. If the compiler determines 19717 that a null pointer is passed in an argument slot marked as 19718 non-null, and the `-Wnonnull' option is enabled, a warning is 19719 issued. The compiler may also choose to make optimizations based 19720 on the knowledge that certain function arguments will not be null. 19721 19722 If no argument index list is given to the `nonnull' attribute, all 19723 pointer arguments are marked as non-null. To illustrate, the 19724 following declaration is equivalent to the previous example: 19725 19726 extern void * 19727 my_memcpy (void *dest, const void *src, size_t len) 19728 __attribute__((nonnull)); 19729 19730`noreturn' 19731 A few standard library functions, such as `abort' and `exit', 19732 cannot return. GCC knows this automatically. Some programs define 19733 their own functions that never return. You can declare them 19734 `noreturn' to tell the compiler this fact. For example, 19735 19736 void fatal () __attribute__ ((noreturn)); 19737 19738 void 19739 fatal (/* ... */) 19740 { 19741 /* ... */ /* Print error message. */ /* ... */ 19742 exit (1); 19743 } 19744 19745 The `noreturn' keyword tells the compiler to assume that `fatal' 19746 cannot return. It can then optimize without regard to what would 19747 happen if `fatal' ever did return. This makes slightly better 19748 code. More importantly, it helps avoid spurious warnings of 19749 uninitialized variables. 19750 19751 The `noreturn' keyword does not affect the exceptional path when 19752 that applies: a `noreturn'-marked function may still return to the 19753 caller by throwing an exception or calling `longjmp'. 19754 19755 Do not assume that registers saved by the calling function are 19756 restored before calling the `noreturn' function. 19757 19758 It does not make sense for a `noreturn' function to have a return 19759 type other than `void'. 19760 19761 The attribute `noreturn' is not implemented in GCC versions 19762 earlier than 2.5. An alternative way to declare that a function 19763 does not return, which works in the current version and in some 19764 older versions, is as follows: 19765 19766 typedef void voidfn (); 19767 19768 volatile voidfn fatal; 19769 19770 This approach does not work in GNU C++. 19771 19772`nothrow' 19773 The `nothrow' attribute is used to inform the compiler that a 19774 function cannot throw an exception. For example, most functions in 19775 the standard C library can be guaranteed not to throw an exception 19776 with the notable exceptions of `qsort' and `bsearch' that take 19777 function pointer arguments. The `nothrow' attribute is not 19778 implemented in GCC versions earlier than 3.3. 19779 19780`optimize' 19781 The `optimize' attribute is used to specify that a function is to 19782 be compiled with different optimization options than specified on 19783 the command line. Arguments can either be numbers or strings. 19784 Numbers are assumed to be an optimization level. Strings that 19785 begin with `O' are assumed to be an optimization option, while 19786 other options are assumed to be used with a `-f' prefix. You can 19787 also use the `#pragma GCC optimize' pragma to set the optimization 19788 options that affect more than one function. *Note Function 19789 Specific Option Pragmas::, for details about the `#pragma GCC 19790 optimize' pragma. 19791 19792 This can be used for instance to have frequently executed functions 19793 compiled with more aggressive optimization options that produce 19794 faster and larger code, while other functions can be called with 19795 less aggressive options. 19796 19797`pcs' 19798 The `pcs' attribute can be used to control the calling convention 19799 used for a function on ARM. The attribute takes an argument that 19800 specifies the calling convention to use. 19801 19802 When compiling using the AAPCS ABI (or a variant of that) then 19803 valid values for the argument are `"aapcs"' and `"aapcs-vfp"'. In 19804 order to use a variant other than `"aapcs"' then the compiler must 19805 be permitted to use the appropriate co-processor registers (i.e., 19806 the VFP registers must be available in order to use `"aapcs-vfp"'). 19807 For example, 19808 19809 /* Argument passed in r0, and result returned in r0+r1. */ 19810 double f2d (float) __attribute__((pcs("aapcs"))); 19811 19812 Variadic functions always use the `"aapcs"' calling convention and 19813 the compiler will reject attempts to specify an alternative. 19814 19815`pure' 19816 Many functions have no effects except the return value and their 19817 return value depends only on the parameters and/or global 19818 variables. Such a function can be subject to common subexpression 19819 elimination and loop optimization just as an arithmetic operator 19820 would be. These functions should be declared with the attribute 19821 `pure'. For example, 19822 19823 int square (int) __attribute__ ((pure)); 19824 19825 says that the hypothetical function `square' is safe to call fewer 19826 times than the program says. 19827 19828 Some of common examples of pure functions are `strlen' or `memcmp'. 19829 Interesting non-pure functions are functions with infinite loops 19830 or those depending on volatile memory or other system resource, 19831 that may change between two consecutive calls (such as `feof' in a 19832 multithreading environment). 19833 19834 The attribute `pure' is not implemented in GCC versions earlier 19835 than 2.96. 19836 19837`hot' 19838 The `hot' attribute is used to inform the compiler that a function 19839 is a hot spot of the compiled program. The function is optimized 19840 more aggressively and on many target it is placed into special 19841 subsection of the text section so all hot functions appears close 19842 together improving locality. 19843 19844 When profile feedback is available, via `-fprofile-use', hot 19845 functions are automatically detected and this attribute is ignored. 19846 19847 The `hot' attribute is not implemented in GCC versions earlier 19848 than 4.3. 19849 19850`cold' 19851 The `cold' attribute is used to inform the compiler that a 19852 function is unlikely executed. The function is optimized for size 19853 rather than speed and on many targets it is placed into special 19854 subsection of the text section so all cold functions appears close 19855 together improving code locality of non-cold parts of program. 19856 The paths leading to call of cold functions within code are marked 19857 as unlikely by the branch prediction mechanism. It is thus useful 19858 to mark functions used to handle unlikely conditions, such as 19859 `perror', as cold to improve optimization of hot functions that do 19860 call marked functions in rare occasions. 19861 19862 When profile feedback is available, via `-fprofile-use', hot 19863 functions are automatically detected and this attribute is ignored. 19864 19865 The `cold' attribute is not implemented in GCC versions earlier 19866 than 4.3. 19867 19868`regparm (NUMBER)' 19869 On the Intel 386, the `regparm' attribute causes the compiler to 19870 pass arguments number one to NUMBER if they are of integral type 19871 in registers EAX, EDX, and ECX instead of on the stack. Functions 19872 that take a variable number of arguments will continue to be 19873 passed all of their arguments on the stack. 19874 19875 Beware that on some ELF systems this attribute is unsuitable for 19876 global functions in shared libraries with lazy binding (which is 19877 the default). Lazy binding will send the first call via resolving 19878 code in the loader, which might assume EAX, EDX and ECX can be 19879 clobbered, as per the standard calling conventions. Solaris 8 is 19880 affected by this. GNU systems with GLIBC 2.1 or higher, and 19881 FreeBSD, are believed to be safe since the loaders there save EAX, 19882 EDX and ECX. (Lazy binding can be disabled with the linker or the 19883 loader if desired, to avoid the problem.) 19884 19885`sseregparm' 19886 On the Intel 386 with SSE support, the `sseregparm' attribute 19887 causes the compiler to pass up to 3 floating point arguments in 19888 SSE registers instead of on the stack. Functions that take a 19889 variable number of arguments will continue to pass all of their 19890 floating point arguments on the stack. 19891 19892`force_align_arg_pointer' 19893 On the Intel x86, the `force_align_arg_pointer' attribute may be 19894 applied to individual function definitions, generating an alternate 19895 prologue and epilogue that realigns the runtime stack if necessary. 19896 This supports mixing legacy codes that run with a 4-byte aligned 19897 stack with modern codes that keep a 16-byte stack for SSE 19898 compatibility. 19899 19900`resbank' 19901 On the SH2A target, this attribute enables the high-speed register 19902 saving and restoration using a register bank for 19903 `interrupt_handler' routines. Saving to the bank is performed 19904 automatically after the CPU accepts an interrupt that uses a 19905 register bank. 19906 19907 The nineteen 32-bit registers comprising general register R0 to 19908 R14, control register GBR, and system registers MACH, MACL, and PR 19909 and the vector table address offset are saved into a register 19910 bank. Register banks are stacked in first-in last-out (FILO) 19911 sequence. Restoration from the bank is executed by issuing a 19912 RESBANK instruction. 19913 19914`returns_twice' 19915 The `returns_twice' attribute tells the compiler that a function 19916 may return more than one time. The compiler will ensure that all 19917 registers are dead before calling such a function and will emit a 19918 warning about the variables that may be clobbered after the second 19919 return from the function. Examples of such functions are `setjmp' 19920 and `vfork'. The `longjmp'-like counterpart of such function, if 19921 any, might need to be marked with the `noreturn' attribute. 19922 19923`saveall' 19924 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 19925 indicate that all registers except the stack pointer should be 19926 saved in the prologue regardless of whether they are used or not. 19927 19928`section ("SECTION-NAME")' 19929 Normally, the compiler places the code it generates in the `text' 19930 section. Sometimes, however, you need additional sections, or you 19931 need certain particular functions to appear in special sections. 19932 The `section' attribute specifies that a function lives in a 19933 particular section. For example, the declaration: 19934 19935 extern void foobar (void) __attribute__ ((section ("bar"))); 19936 19937 puts the function `foobar' in the `bar' section. 19938 19939 Some file formats do not support arbitrary sections so the 19940 `section' attribute is not available on all platforms. If you 19941 need to map the entire contents of a module to a particular 19942 section, consider using the facilities of the linker instead. 19943 19944`sentinel' 19945 This function attribute ensures that a parameter in a function 19946 call is an explicit `NULL'. The attribute is only valid on 19947 variadic functions. By default, the sentinel is located at 19948 position zero, the last parameter of the function call. If an 19949 optional integer position argument P is supplied to the attribute, 19950 the sentinel must be located at position P counting backwards from 19951 the end of the argument list. 19952 19953 __attribute__ ((sentinel)) 19954 is equivalent to 19955 __attribute__ ((sentinel(0))) 19956 19957 The attribute is automatically set with a position of 0 for the 19958 built-in functions `execl' and `execlp'. The built-in function 19959 `execle' has the attribute set with a position of 1. 19960 19961 A valid `NULL' in this context is defined as zero with any pointer 19962 type. If your system defines the `NULL' macro with an integer type 19963 then you need to add an explicit cast. GCC replaces `stddef.h' 19964 with a copy that redefines NULL appropriately. 19965 19966 The warnings for missing or incorrect sentinels are enabled with 19967 `-Wformat'. 19968 19969`short_call' 19970 See long_call/short_call. 19971 19972`shortcall' 19973 See longcall/shortcall. 19974 19975`signal' 19976 Use this attribute on the AVR to indicate that the specified 19977 function is a signal handler. The compiler will generate function 19978 entry and exit sequences suitable for use in a signal handler when 19979 this attribute is present. Interrupts will be disabled inside the 19980 function. 19981 19982`sp_switch' 19983 Use this attribute on the SH to indicate an `interrupt_handler' 19984 function should switch to an alternate stack. It expects a string 19985 argument that names a global variable holding the address of the 19986 alternate stack. 19987 19988 void *alt_stack; 19989 void f () __attribute__ ((interrupt_handler, 19990 sp_switch ("alt_stack"))); 19991 19992`stdcall' 19993 On the Intel 386, the `stdcall' attribute causes the compiler to 19994 assume that the called function will pop off the stack space used 19995 to pass arguments, unless it takes a variable number of arguments. 19996 19997`syscall_linkage' 19998 This attribute is used to modify the IA64 calling convention by 19999 marking all input registers as live at all function exits. This 20000 makes it possible to restart a system call after an interrupt 20001 without having to save/restore the input registers. This also 20002 prevents kernel data from leaking into application code. 20003 20004`target' 20005 The `target' attribute is used to specify that a function is to be 20006 compiled with different target options than specified on the 20007 command line. This can be used for instance to have functions 20008 compiled with a different ISA (instruction set architecture) than 20009 the default. You can also use the `#pragma GCC target' pragma to 20010 set more than one function to be compiled with specific target 20011 options. *Note Function Specific Option Pragmas::, for details 20012 about the `#pragma GCC target' pragma. 20013 20014 For instance on a 386, you could compile one function with 20015 `target("sse4.1,arch=core2")' and another with 20016 `target("sse4a,arch=amdfam10")' that would be equivalent to 20017 compiling the first function with `-msse4.1' and `-march=core2' 20018 options, and the second function with `-msse4a' and 20019 `-march=amdfam10' options. It is up to the user to make sure that 20020 a function is only invoked on a machine that supports the 20021 particular ISA it was compiled for (for example by using `cpuid' 20022 on 386 to determine what feature bits and architecture family are 20023 used). 20024 20025 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 20026 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 20027 20028 On the 386, the following options are allowed: 20029 20030 `abm' 20031 `no-abm' 20032 Enable/disable the generation of the advanced bit 20033 instructions. 20034 20035 `aes' 20036 `no-aes' 20037 Enable/disable the generation of the AES instructions. 20038 20039 `mmx' 20040 `no-mmx' 20041 Enable/disable the generation of the MMX instructions. 20042 20043 `pclmul' 20044 `no-pclmul' 20045 Enable/disable the generation of the PCLMUL instructions. 20046 20047 `popcnt' 20048 `no-popcnt' 20049 Enable/disable the generation of the POPCNT instruction. 20050 20051 `sse' 20052 `no-sse' 20053 Enable/disable the generation of the SSE instructions. 20054 20055 `sse2' 20056 `no-sse2' 20057 Enable/disable the generation of the SSE2 instructions. 20058 20059 `sse3' 20060 `no-sse3' 20061 Enable/disable the generation of the SSE3 instructions. 20062 20063 `sse4' 20064 `no-sse4' 20065 Enable/disable the generation of the SSE4 instructions (both 20066 SSE4.1 and SSE4.2). 20067 20068 `sse4.1' 20069 `no-sse4.1' 20070 Enable/disable the generation of the sse4.1 instructions. 20071 20072 `sse4.2' 20073 `no-sse4.2' 20074 Enable/disable the generation of the sse4.2 instructions. 20075 20076 `sse4a' 20077 `no-sse4a' 20078 Enable/disable the generation of the SSE4A instructions. 20079 20080 `fma4' 20081 `no-fma4' 20082 Enable/disable the generation of the FMA4 instructions. 20083 20084 `xop' 20085 `no-xop' 20086 Enable/disable the generation of the XOP instructions. 20087 20088 `lwp' 20089 `no-lwp' 20090 Enable/disable the generation of the LWP instructions. 20091 20092 `ssse3' 20093 `no-ssse3' 20094 Enable/disable the generation of the SSSE3 instructions. 20095 20096 `cld' 20097 `no-cld' 20098 Enable/disable the generation of the CLD before string moves. 20099 20100 `fancy-math-387' 20101 `no-fancy-math-387' 20102 Enable/disable the generation of the `sin', `cos', and `sqrt' 20103 instructions on the 387 floating point unit. 20104 20105 `fused-madd' 20106 `no-fused-madd' 20107 Enable/disable the generation of the fused multiply/add 20108 instructions. 20109 20110 `ieee-fp' 20111 `no-ieee-fp' 20112 Enable/disable the generation of floating point that depends 20113 on IEEE arithmetic. 20114 20115 `inline-all-stringops' 20116 `no-inline-all-stringops' 20117 Enable/disable inlining of string operations. 20118 20119 `inline-stringops-dynamically' 20120 `no-inline-stringops-dynamically' 20121 Enable/disable the generation of the inline code to do small 20122 string operations and calling the library routines for large 20123 operations. 20124 20125 `align-stringops' 20126 `no-align-stringops' 20127 Do/do not align destination of inlined string operations. 20128 20129 `recip' 20130 `no-recip' 20131 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 20132 RSQRTPS instructions followed an additional Newton-Raphson 20133 step instead of doing a floating point division. 20134 20135 `arch=ARCH' 20136 Specify the architecture to generate code for in compiling 20137 the function. 20138 20139 `tune=TUNE' 20140 Specify the architecture to tune for in compiling the 20141 function. 20142 20143 `fpmath=FPMATH' 20144 Specify which floating point unit to use. The 20145 `target("fpmath=sse,387")' option must be specified as 20146 `target("fpmath=sse+387")' because the comma would separate 20147 different options. 20148 20149 On the 386, you can use either multiple strings to specify multiple 20150 options, or you can separate the option with a comma (`,'). 20151 20152 On the 386, the inliner will not inline a function that has 20153 different target options than the caller, unless the callee has a 20154 subset of the target options of the caller. For example a 20155 function declared with `target("sse3")' can inline a function with 20156 `target("sse2")', since `-msse3' implies `-msse2'. 20157 20158 The `target' attribute is not implemented in GCC versions earlier 20159 than 4.4, and at present only the 386 uses it. 20160 20161`tiny_data' 20162 Use this attribute on the H8/300H and H8S to indicate that the 20163 specified variable should be placed into the tiny data section. 20164 The compiler will generate more efficient code for loads and stores 20165 on data in the tiny data section. Note the tiny data area is 20166 limited to slightly under 32kbytes of data. 20167 20168`trap_exit' 20169 Use this attribute on the SH for an `interrupt_handler' to return 20170 using `trapa' instead of `rte'. This attribute expects an integer 20171 argument specifying the trap number to be used. 20172 20173`unused' 20174 This attribute, attached to a function, means that the function is 20175 meant to be possibly unused. GCC will not produce a warning for 20176 this function. 20177 20178`used' 20179 This attribute, attached to a function, means that code must be 20180 emitted for the function even if it appears that the function is 20181 not referenced. This is useful, for example, when the function is 20182 referenced only in inline assembly. 20183 20184`version_id' 20185 This IA64 HP-UX attribute, attached to a global variable or 20186 function, renames a symbol to contain a version string, thus 20187 allowing for function level versioning. HP-UX system header files 20188 may use version level functioning for some system calls. 20189 20190 extern int foo () __attribute__((version_id ("20040821"))); 20191 20192 Calls to FOO will be mapped to calls to FOO{20040821}. 20193 20194`visibility ("VISIBILITY_TYPE")' 20195 This attribute affects the linkage of the declaration to which it 20196 is attached. There are four supported VISIBILITY_TYPE values: 20197 default, hidden, protected or internal visibility. 20198 20199 void __attribute__ ((visibility ("protected"))) 20200 f () { /* Do something. */; } 20201 int i __attribute__ ((visibility ("hidden"))); 20202 20203 The possible values of VISIBILITY_TYPE correspond to the 20204 visibility settings in the ELF gABI. 20205 20206 "default" 20207 Default visibility is the normal case for the object file 20208 format. This value is available for the visibility attribute 20209 to override other options that may change the assumed 20210 visibility of entities. 20211 20212 On ELF, default visibility means that the declaration is 20213 visible to other modules and, in shared libraries, means that 20214 the declared entity may be overridden. 20215 20216 On Darwin, default visibility means that the declaration is 20217 visible to other modules. 20218 20219 Default visibility corresponds to "external linkage" in the 20220 language. 20221 20222 "hidden" 20223 Hidden visibility indicates that the entity declared will 20224 have a new form of linkage, which we'll call "hidden 20225 linkage". Two declarations of an object with hidden linkage 20226 refer to the same object if they are in the same shared 20227 object. 20228 20229 "internal" 20230 Internal visibility is like hidden visibility, but with 20231 additional processor specific semantics. Unless otherwise 20232 specified by the psABI, GCC defines internal visibility to 20233 mean that a function is _never_ called from another module. 20234 Compare this with hidden functions which, while they cannot 20235 be referenced directly by other modules, can be referenced 20236 indirectly via function pointers. By indicating that a 20237 function cannot be called from outside the module, GCC may 20238 for instance omit the load of a PIC register since it is known 20239 that the calling function loaded the correct value. 20240 20241 "protected" 20242 Protected visibility is like default visibility except that it 20243 indicates that references within the defining module will 20244 bind to the definition in that module. That is, the declared 20245 entity cannot be overridden by another module. 20246 20247 20248 All visibilities are supported on many, but not all, ELF targets 20249 (supported when the assembler supports the `.visibility' 20250 pseudo-op). Default visibility is supported everywhere. Hidden 20251 visibility is supported on Darwin targets. 20252 20253 The visibility attribute should be applied only to declarations 20254 which would otherwise have external linkage. The attribute should 20255 be applied consistently, so that the same entity should not be 20256 declared with different settings of the attribute. 20257 20258 In C++, the visibility attribute applies to types as well as 20259 functions and objects, because in C++ types have linkage. A class 20260 must not have greater visibility than its non-static data member 20261 types and bases, and class members default to the visibility of 20262 their class. Also, a declaration without explicit visibility is 20263 limited to the visibility of its type. 20264 20265 In C++, you can mark member functions and static member variables 20266 of a class with the visibility attribute. This is useful if you 20267 know a particular method or static member variable should only be 20268 used from one shared object; then you can mark it hidden while the 20269 rest of the class has default visibility. Care must be taken to 20270 avoid breaking the One Definition Rule; for example, it is usually 20271 not useful to mark an inline method as hidden without marking the 20272 whole class as hidden. 20273 20274 A C++ namespace declaration can also have the visibility attribute. 20275 This attribute applies only to the particular namespace body, not 20276 to other definitions of the same namespace; it is equivalent to 20277 using `#pragma GCC visibility' before and after the namespace 20278 definition (*note Visibility Pragmas::). 20279 20280 In C++, if a template argument has limited visibility, this 20281 restriction is implicitly propagated to the template instantiation. 20282 Otherwise, template instantiations and specializations default to 20283 the visibility of their template. 20284 20285 If both the template and enclosing class have explicit visibility, 20286 the visibility from the template is used. 20287 20288`vliw' 20289 On MeP, the `vliw' attribute tells the compiler to emit 20290 instructions in VLIW mode instead of core mode. Note that this 20291 attribute is not allowed unless a VLIW coprocessor has been 20292 configured and enabled through command line options. 20293 20294`warn_unused_result' 20295 The `warn_unused_result' attribute causes a warning to be emitted 20296 if a caller of the function with this attribute does not use its 20297 return value. This is useful for functions where not checking the 20298 result is either a security problem or always a bug, such as 20299 `realloc'. 20300 20301 int fn () __attribute__ ((warn_unused_result)); 20302 int foo () 20303 { 20304 if (fn () < 0) return -1; 20305 fn (); 20306 return 0; 20307 } 20308 20309 results in warning on line 5. 20310 20311`weak' 20312 The `weak' attribute causes the declaration to be emitted as a weak 20313 symbol rather than a global. This is primarily useful in defining 20314 library functions which can be overridden in user code, though it 20315 can also be used with non-function declarations. Weak symbols are 20316 supported for ELF targets, and also for a.out targets when using 20317 the GNU assembler and linker. 20318 20319`weakref' 20320`weakref ("TARGET")' 20321 The `weakref' attribute marks a declaration as a weak reference. 20322 Without arguments, it should be accompanied by an `alias' attribute 20323 naming the target symbol. Optionally, the TARGET may be given as 20324 an argument to `weakref' itself. In either case, `weakref' 20325 implicitly marks the declaration as `weak'. Without a TARGET, 20326 given as an argument to `weakref' or to `alias', `weakref' is 20327 equivalent to `weak'. 20328 20329 static int x() __attribute__ ((weakref ("y"))); 20330 /* is equivalent to... */ 20331 static int x() __attribute__ ((weak, weakref, alias ("y"))); 20332 /* and to... */ 20333 static int x() __attribute__ ((weakref)); 20334 static int x() __attribute__ ((alias ("y"))); 20335 20336 A weak reference is an alias that does not by itself require a 20337 definition to be given for the target symbol. If the target 20338 symbol is only referenced through weak references, then the 20339 becomes a `weak' undefined symbol. If it is directly referenced, 20340 however, then such strong references prevail, and a definition 20341 will be required for the symbol, not necessarily in the same 20342 translation unit. 20343 20344 The effect is equivalent to moving all references to the alias to a 20345 separate translation unit, renaming the alias to the aliased 20346 symbol, declaring it as weak, compiling the two separate 20347 translation units and performing a reloadable link on them. 20348 20349 At present, a declaration to which `weakref' is attached can only 20350 be `static'. 20351 20352 20353 You can specify multiple attributes in a declaration by separating them 20354by commas within the double parentheses or by immediately following an 20355attribute declaration with another attribute declaration. 20356 20357 Some people object to the `__attribute__' feature, suggesting that ISO 20358C's `#pragma' should be used instead. At the time `__attribute__' was 20359designed, there were two reasons for not doing this. 20360 20361 1. It is impossible to generate `#pragma' commands from a macro. 20362 20363 2. There is no telling what the same `#pragma' might mean in another 20364 compiler. 20365 20366 These two reasons applied to almost any application that might have 20367been proposed for `#pragma'. It was basically a mistake to use 20368`#pragma' for _anything_. 20369 20370 The ISO C99 standard includes `_Pragma', which now allows pragmas to 20371be generated from macros. In addition, a `#pragma GCC' namespace is 20372now in use for GCC-specific pragmas. However, it has been found 20373convenient to use `__attribute__' to achieve a natural attachment of 20374attributes to their corresponding declarations, whereas `#pragma GCC' 20375is of use for constructs that do not naturally form part of the 20376grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 20377Directives. 20378 20379 20380File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 20381 203826.30 Attribute Syntax 20383===================== 20384 20385This section describes the syntax with which `__attribute__' may be 20386used, and the constructs to which attribute specifiers bind, for the C 20387language. Some details may vary for C++ and Objective-C. Because of 20388infelicities in the grammar for attributes, some forms described here 20389may not be successfully parsed in all cases. 20390 20391 There are some problems with the semantics of attributes in C++. For 20392example, there are no manglings for attributes, although they may affect 20393code generation, so problems may arise when attributed types are used in 20394conjunction with templates or overloading. Similarly, `typeid' does 20395not distinguish between types with different attributes. Support for 20396attributes in C++ may be restricted in future to attributes on 20397declarations only, but not on nested declarators. 20398 20399 *Note Function Attributes::, for details of the semantics of attributes 20400applying to functions. *Note Variable Attributes::, for details of the 20401semantics of attributes applying to variables. *Note Type Attributes::, 20402for details of the semantics of attributes applying to structure, union 20403and enumerated types. 20404 20405 An "attribute specifier" is of the form `__attribute__ 20406((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 20407comma-separated sequence of "attributes", where each attribute is one 20408of the following: 20409 20410 * Empty. Empty attributes are ignored. 20411 20412 * A word (which may be an identifier such as `unused', or a reserved 20413 word such as `const'). 20414 20415 * A word, followed by, in parentheses, parameters for the attribute. 20416 These parameters take one of the following forms: 20417 20418 * An identifier. For example, `mode' attributes use this form. 20419 20420 * An identifier followed by a comma and a non-empty 20421 comma-separated list of expressions. For example, `format' 20422 attributes use this form. 20423 20424 * A possibly empty comma-separated list of expressions. For 20425 example, `format_arg' attributes use this form with the list 20426 being a single integer constant expression, and `alias' 20427 attributes use this form with the list being a single string 20428 constant. 20429 20430 An "attribute specifier list" is a sequence of one or more attribute 20431specifiers, not separated by any other tokens. 20432 20433 In GNU C, an attribute specifier list may appear after the colon 20434following a label, other than a `case' or `default' label. The only 20435attribute it makes sense to use after a label is `unused'. This 20436feature is intended for code generated by programs which contains labels 20437that may be unused but which is compiled with `-Wall'. It would not 20438normally be appropriate to use in it human-written code, though it 20439could be useful in cases where the code that jumps to the label is 20440contained within an `#ifdef' conditional. GNU C++ only permits 20441attributes on labels if the attribute specifier is immediately followed 20442by a semicolon (i.e., the label applies to an empty statement). If the 20443semicolon is missing, C++ label attributes are ambiguous, as it is 20444permissible for a declaration, which could begin with an attribute 20445list, to be labelled in C++. Declarations cannot be labelled in C90 or 20446C99, so the ambiguity does not arise there. 20447 20448 An attribute specifier list may appear as part of a `struct', `union' 20449or `enum' specifier. It may go either immediately after the `struct', 20450`union' or `enum' keyword, or after the closing brace. The former 20451syntax is preferred. Where attribute specifiers follow the closing 20452brace, they are considered to relate to the structure, union or 20453enumerated type defined, not to any enclosing declaration the type 20454specifier appears in, and the type defined is not complete until after 20455the attribute specifiers. 20456 20457 Otherwise, an attribute specifier appears as part of a declaration, 20458counting declarations of unnamed parameters and type names, and relates 20459to that declaration (which may be nested in another declaration, for 20460example in the case of a parameter declaration), or to a particular 20461declarator within a declaration. Where an attribute specifier is 20462applied to a parameter declared as a function or an array, it should 20463apply to the function or array rather than the pointer to which the 20464parameter is implicitly converted, but this is not yet correctly 20465implemented. 20466 20467 Any list of specifiers and qualifiers at the start of a declaration may 20468contain attribute specifiers, whether or not such a list may in that 20469context contain storage class specifiers. (Some attributes, however, 20470are essentially in the nature of storage class specifiers, and only make 20471sense where storage class specifiers may be used; for example, 20472`section'.) There is one necessary limitation to this syntax: the 20473first old-style parameter declaration in a function definition cannot 20474begin with an attribute specifier, because such an attribute applies to 20475the function instead by syntax described below (which, however, is not 20476yet implemented in this case). In some other cases, attribute 20477specifiers are permitted by this grammar but not yet supported by the 20478compiler. All attribute specifiers in this place relate to the 20479declaration as a whole. In the obsolescent usage where a type of `int' 20480is implied by the absence of type specifiers, such a list of specifiers 20481and qualifiers may be an attribute specifier list with no other 20482specifiers or qualifiers. 20483 20484 At present, the first parameter in a function prototype must have some 20485type specifier which is not an attribute specifier; this resolves an 20486ambiguity in the interpretation of `void f(int (__attribute__((foo)) 20487x))', but is subject to change. At present, if the parentheses of a 20488function declarator contain only attributes then those attributes are 20489ignored, rather than yielding an error or warning or implying a single 20490parameter of type int, but this is subject to change. 20491 20492 An attribute specifier list may appear immediately before a declarator 20493(other than the first) in a comma-separated list of declarators in a 20494declaration of more than one identifier using a single list of 20495specifiers and qualifiers. Such attribute specifiers apply only to the 20496identifier before whose declarator they appear. For example, in 20497 20498 __attribute__((noreturn)) void d0 (void), 20499 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 20500 d2 (void) 20501 20502the `noreturn' attribute applies to all the functions declared; the 20503`format' attribute only applies to `d1'. 20504 20505 An attribute specifier list may appear immediately before the comma, 20506`=' or semicolon terminating the declaration of an identifier other 20507than a function definition. Such attribute specifiers apply to the 20508declared object or function. Where an assembler name for an object or 20509function is specified (*note Asm Labels::), the attribute must follow 20510the `asm' specification. 20511 20512 An attribute specifier list may, in future, be permitted to appear 20513after the declarator in a function definition (before any old-style 20514parameter declarations or the function body). 20515 20516 Attribute specifiers may be mixed with type qualifiers appearing inside 20517the `[]' of a parameter array declarator, in the C99 construct by which 20518such qualifiers are applied to the pointer to which the array is 20519implicitly converted. Such attribute specifiers apply to the pointer, 20520not to the array, but at present this is not implemented and they are 20521ignored. 20522 20523 An attribute specifier list may appear at the start of a nested 20524declarator. At present, there are some limitations in this usage: the 20525attributes correctly apply to the declarator, but for most individual 20526attributes the semantics this implies are not implemented. When 20527attribute specifiers follow the `*' of a pointer declarator, they may 20528be mixed with any type qualifiers present. The following describes the 20529formal semantics of this syntax. It will make the most sense if you 20530are familiar with the formal specification of declarators in the ISO C 20531standard. 20532 20533 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 20534where `T' contains declaration specifiers that specify a type TYPE 20535(such as `int') and `D1' is a declarator that contains an identifier 20536IDENT. The type specified for IDENT for derived declarators whose type 20537does not include an attribute specifier is as in the ISO C standard. 20538 20539 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 20540declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 20541TYPE" for IDENT, then `T D1' specifies the type 20542"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 20543 20544 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 20545D', and the declaration `T D' specifies the type 20546"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 20547the type "DERIVED-DECLARATOR-TYPE-LIST 20548TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 20549 20550 For example, 20551 20552 void (__attribute__((noreturn)) ****f) (void); 20553 20554specifies the type "pointer to pointer to pointer to pointer to 20555non-returning function returning `void'". As another example, 20556 20557 char *__attribute__((aligned(8))) *f; 20558 20559specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 20560again that this does not work with most attributes; for example, the 20561usage of `aligned' and `noreturn' attributes given above is not yet 20562supported. 20563 20564 For compatibility with existing code written for compiler versions that 20565did not implement attributes on nested declarators, some laxity is 20566allowed in the placing of attributes. If an attribute that only applies 20567to types is applied to a declaration, it will be treated as applying to 20568the type of that declaration. If an attribute that only applies to 20569declarations is applied to the type of a declaration, it will be treated 20570as applying to that declaration; and, for compatibility with code 20571placing the attributes immediately before the identifier declared, such 20572an attribute applied to a function return type will be treated as 20573applying to the function type, and such an attribute applied to an array 20574element type will be treated as applying to the array type. If an 20575attribute that only applies to function types is applied to a 20576pointer-to-function type, it will be treated as applying to the pointer 20577target type; if such an attribute is applied to a function return type 20578that is not a pointer-to-function type, it will be treated as applying 20579to the function type. 20580 20581 20582File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 20583 205846.31 Prototypes and Old-Style Function Definitions 20585================================================== 20586 20587GNU C extends ISO C to allow a function prototype to override a later 20588old-style non-prototype definition. Consider the following example: 20589 20590 /* Use prototypes unless the compiler is old-fashioned. */ 20591 #ifdef __STDC__ 20592 #define P(x) x 20593 #else 20594 #define P(x) () 20595 #endif 20596 20597 /* Prototype function declaration. */ 20598 int isroot P((uid_t)); 20599 20600 /* Old-style function definition. */ 20601 int 20602 isroot (x) /* ??? lossage here ??? */ 20603 uid_t x; 20604 { 20605 return x == 0; 20606 } 20607 20608 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 20609this example, because subword arguments in old-style non-prototype 20610definitions are promoted. Therefore in this example the function 20611definition's argument is really an `int', which does not match the 20612prototype argument type of `short'. 20613 20614 This restriction of ISO C makes it hard to write code that is portable 20615to traditional C compilers, because the programmer does not know 20616whether the `uid_t' type is `short', `int', or `long'. Therefore, in 20617cases like these GNU C allows a prototype to override a later old-style 20618definition. More precisely, in GNU C, a function prototype argument 20619type overrides the argument type specified by a later old-style 20620definition if the former type is the same as the latter type before 20621promotion. Thus in GNU C the above example is equivalent to the 20622following: 20623 20624 int isroot (uid_t); 20625 20626 int 20627 isroot (uid_t x) 20628 { 20629 return x == 0; 20630 } 20631 20632GNU C++ does not support old-style function definitions, so this 20633extension is irrelevant. 20634 20635 20636File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 20637 206386.32 C++ Style Comments 20639======================= 20640 20641In GNU C, you may use C++ style comments, which start with `//' and 20642continue until the end of the line. Many other C implementations allow 20643such comments, and they are included in the 1999 C standard. However, 20644C++ style comments are not recognized if you specify an `-std' option 20645specifying a version of ISO C before C99, or `-ansi' (equivalent to 20646`-std=c90'). 20647 20648 20649File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 20650 206516.33 Dollar Signs in Identifier Names 20652===================================== 20653 20654In GNU C, you may normally use dollar signs in identifier names. This 20655is because many traditional C implementations allow such identifiers. 20656However, dollar signs in identifiers are not supported on a few target 20657machines, typically because the target assembler does not allow them. 20658 20659 20660File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 20661 206626.34 The Character <ESC> in Constants 20663===================================== 20664 20665You can use the sequence `\e' in a string or character constant to 20666stand for the ASCII character <ESC>. 20667 20668 20669File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 20670 206716.35 Specifying Attributes of Variables 20672======================================= 20673 20674The keyword `__attribute__' allows you to specify special attributes of 20675variables or structure fields. This keyword is followed by an 20676attribute specification inside double parentheses. Some attributes are 20677currently defined generically for variables. Other attributes are 20678defined for variables on particular target systems. Other attributes 20679are available for functions (*note Function Attributes::) and for types 20680(*note Type Attributes::). Other front ends might define more 20681attributes (*note Extensions to the C++ Language: C++ Extensions.). 20682 20683 You may also specify attributes with `__' preceding and following each 20684keyword. This allows you to use them in header files without being 20685concerned about a possible macro of the same name. For example, you 20686may use `__aligned__' instead of `aligned'. 20687 20688 *Note Attribute Syntax::, for details of the exact syntax for using 20689attributes. 20690 20691`aligned (ALIGNMENT)' 20692 This attribute specifies a minimum alignment for the variable or 20693 structure field, measured in bytes. For example, the declaration: 20694 20695 int x __attribute__ ((aligned (16))) = 0; 20696 20697 causes the compiler to allocate the global variable `x' on a 20698 16-byte boundary. On a 68040, this could be used in conjunction 20699 with an `asm' expression to access the `move16' instruction which 20700 requires 16-byte aligned operands. 20701 20702 You can also specify the alignment of structure fields. For 20703 example, to create a double-word aligned `int' pair, you could 20704 write: 20705 20706 struct foo { int x[2] __attribute__ ((aligned (8))); }; 20707 20708 This is an alternative to creating a union with a `double' member 20709 that forces the union to be double-word aligned. 20710 20711 As in the preceding examples, you can explicitly specify the 20712 alignment (in bytes) that you wish the compiler to use for a given 20713 variable or structure field. Alternatively, you can leave out the 20714 alignment factor and just ask the compiler to align a variable or 20715 field to the default alignment for the target architecture you are 20716 compiling for. The default alignment is sufficient for all scalar 20717 types, but may not be enough for all vector types on a target 20718 which supports vector operations. The default alignment is fixed 20719 for a particular target ABI. 20720 20721 Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__', 20722 which is the largest alignment ever used for any data type on the 20723 target machine you are compiling for. For example, you could 20724 write: 20725 20726 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 20727 20728 The compiler automatically sets the alignment for the declared 20729 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 20730 often make copy operations more efficient, because the compiler can 20731 use whatever instructions copy the biggest chunks of memory when 20732 performing copies to or from the variables or fields that you have 20733 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 20734 may change depending on command line options. 20735 20736 When used on a struct, or struct member, the `aligned' attribute 20737 can only increase the alignment; in order to decrease it, the 20738 `packed' attribute must be specified as well. When used as part 20739 of a typedef, the `aligned' attribute can both increase and 20740 decrease alignment, and specifying the `packed' attribute will 20741 generate a warning. 20742 20743 Note that the effectiveness of `aligned' attributes may be limited 20744 by inherent limitations in your linker. On many systems, the 20745 linker is only able to arrange for variables to be aligned up to a 20746 certain maximum alignment. (For some linkers, the maximum 20747 supported alignment may be very very small.) If your linker is 20748 only able to align variables up to a maximum of 8 byte alignment, 20749 then specifying `aligned(16)' in an `__attribute__' will still 20750 only provide you with 8 byte alignment. See your linker 20751 documentation for further information. 20752 20753 The `aligned' attribute can also be used for functions (*note 20754 Function Attributes::.) 20755 20756`cleanup (CLEANUP_FUNCTION)' 20757 The `cleanup' attribute runs a function when the variable goes out 20758 of scope. This attribute can only be applied to auto function 20759 scope variables; it may not be applied to parameters or variables 20760 with static storage duration. The function must take one 20761 parameter, a pointer to a type compatible with the variable. The 20762 return value of the function (if any) is ignored. 20763 20764 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 20765 during the stack unwinding that happens during the processing of 20766 the exception. Note that the `cleanup' attribute does not allow 20767 the exception to be caught, only to perform an action. It is 20768 undefined what happens if CLEANUP_FUNCTION does not return 20769 normally. 20770 20771`common' 20772`nocommon' 20773 The `common' attribute requests GCC to place a variable in 20774 "common" storage. The `nocommon' attribute requests the 20775 opposite--to allocate space for it directly. 20776 20777 These attributes override the default chosen by the `-fno-common' 20778 and `-fcommon' flags respectively. 20779 20780`deprecated' 20781`deprecated (MSG)' 20782 The `deprecated' attribute results in a warning if the variable is 20783 used anywhere in the source file. This is useful when identifying 20784 variables that are expected to be removed in a future version of a 20785 program. The warning also includes the location of the declaration 20786 of the deprecated variable, to enable users to easily find further 20787 information about why the variable is deprecated, or what they 20788 should do instead. Note that the warning only occurs for uses: 20789 20790 extern int old_var __attribute__ ((deprecated)); 20791 extern int old_var; 20792 int new_fn () { return old_var; } 20793 20794 results in a warning on line 3 but not line 2. The optional msg 20795 argument, which must be a string, will be printed in the warning if 20796 present. 20797 20798 The `deprecated' attribute can also be used for functions and 20799 types (*note Function Attributes::, *note Type Attributes::.) 20800 20801`mode (MODE)' 20802 This attribute specifies the data type for the 20803 declaration--whichever type corresponds to the mode MODE. This in 20804 effect lets you request an integer or floating point type 20805 according to its width. 20806 20807 You may also specify a mode of `byte' or `__byte__' to indicate 20808 the mode corresponding to a one-byte integer, `word' or `__word__' 20809 for the mode of a one-word integer, and `pointer' or `__pointer__' 20810 for the mode used to represent pointers. 20811 20812`packed' 20813 The `packed' attribute specifies that a variable or structure field 20814 should have the smallest possible alignment--one byte for a 20815 variable, and one bit for a field, unless you specify a larger 20816 value with the `aligned' attribute. 20817 20818 Here is a structure in which the field `x' is packed, so that it 20819 immediately follows `a': 20820 20821 struct foo 20822 { 20823 char a; 20824 int x[2] __attribute__ ((packed)); 20825 }; 20826 20827 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 20828 attribute on bit-fields of type `char'. This has been fixed in 20829 GCC 4.4 but the change can lead to differences in the structure 20830 layout. See the documentation of `-Wpacked-bitfield-compat' for 20831 more information. 20832 20833`section ("SECTION-NAME")' 20834 Normally, the compiler places the objects it generates in sections 20835 like `data' and `bss'. Sometimes, however, you need additional 20836 sections, or you need certain particular variables to appear in 20837 special sections, for example to map to special hardware. The 20838 `section' attribute specifies that a variable (or function) lives 20839 in a particular section. For example, this small program uses 20840 several specific section names: 20841 20842 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 20843 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 20844 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 20845 int init_data __attribute__ ((section ("INITDATA"))); 20846 20847 main() 20848 { 20849 /* Initialize stack pointer */ 20850 init_sp (stack + sizeof (stack)); 20851 20852 /* Initialize initialized data */ 20853 memcpy (&init_data, &data, &edata - &data); 20854 20855 /* Turn on the serial ports */ 20856 init_duart (&a); 20857 init_duart (&b); 20858 } 20859 20860 Use the `section' attribute with _global_ variables and not 20861 _local_ variables, as shown in the example. 20862 20863 You may use the `section' attribute with initialized or 20864 uninitialized global variables but the linker requires each object 20865 be defined once, with the exception that uninitialized variables 20866 tentatively go in the `common' (or `bss') section and can be 20867 multiply "defined". Using the `section' attribute will change 20868 what section the variable goes into and may cause the linker to 20869 issue an error if an uninitialized variable has multiple 20870 definitions. You can force a variable to be initialized with the 20871 `-fno-common' flag or the `nocommon' attribute. 20872 20873 Some file formats do not support arbitrary sections so the 20874 `section' attribute is not available on all platforms. If you 20875 need to map the entire contents of a module to a particular 20876 section, consider using the facilities of the linker instead. 20877 20878`shared' 20879 On Microsoft Windows, in addition to putting variable definitions 20880 in a named section, the section can also be shared among all 20881 running copies of an executable or DLL. For example, this small 20882 program defines shared data by putting it in a named section 20883 `shared' and marking the section shareable: 20884 20885 int foo __attribute__((section ("shared"), shared)) = 0; 20886 20887 int 20888 main() 20889 { 20890 /* Read and write foo. All running 20891 copies see the same value. */ 20892 return 0; 20893 } 20894 20895 You may only use the `shared' attribute along with `section' 20896 attribute with a fully initialized global definition because of 20897 the way linkers work. See `section' attribute for more 20898 information. 20899 20900 The `shared' attribute is only available on Microsoft Windows. 20901 20902`tls_model ("TLS_MODEL")' 20903 The `tls_model' attribute sets thread-local storage model (*note 20904 Thread-Local::) of a particular `__thread' variable, overriding 20905 `-ftls-model=' command line switch on a per-variable basis. The 20906 TLS_MODEL argument should be one of `global-dynamic', 20907 `local-dynamic', `initial-exec' or `local-exec'. 20908 20909 Not all targets support this attribute. 20910 20911`unused' 20912 This attribute, attached to a variable, means that the variable is 20913 meant to be possibly unused. GCC will not produce a warning for 20914 this variable. 20915 20916`used' 20917 This attribute, attached to a variable, means that the variable 20918 must be emitted even if it appears that the variable is not 20919 referenced. 20920 20921`vector_size (BYTES)' 20922 This attribute specifies the vector size for the variable, 20923 measured in bytes. For example, the declaration: 20924 20925 int foo __attribute__ ((vector_size (16))); 20926 20927 causes the compiler to set the mode for `foo', to be 16 bytes, 20928 divided into `int' sized units. Assuming a 32-bit int (a vector of 20929 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 20930 20931 This attribute is only applicable to integral and float scalars, 20932 although arrays, pointers, and function return values are allowed 20933 in conjunction with this construct. 20934 20935 Aggregates with this attribute are invalid, even if they are of 20936 the same size as a corresponding scalar. For example, the 20937 declaration: 20938 20939 struct S { int a; }; 20940 struct S __attribute__ ((vector_size (16))) foo; 20941 20942 is invalid even if the size of the structure is the same as the 20943 size of the `int'. 20944 20945`selectany' 20946 The `selectany' attribute causes an initialized global variable to 20947 have link-once semantics. When multiple definitions of the 20948 variable are encountered by the linker, the first is selected and 20949 the remainder are discarded. Following usage by the Microsoft 20950 compiler, the linker is told _not_ to warn about size or content 20951 differences of the multiple definitions. 20952 20953 Although the primary usage of this attribute is for POD types, the 20954 attribute can also be applied to global C++ objects that are 20955 initialized by a constructor. In this case, the static 20956 initialization and destruction code for the object is emitted in 20957 each translation defining the object, but the calls to the 20958 constructor and destructor are protected by a link-once guard 20959 variable. 20960 20961 The `selectany' attribute is only available on Microsoft Windows 20962 targets. You can use `__declspec (selectany)' as a synonym for 20963 `__attribute__ ((selectany))' for compatibility with other 20964 compilers. 20965 20966`weak' 20967 The `weak' attribute is described in *note Function Attributes::. 20968 20969`dllimport' 20970 The `dllimport' attribute is described in *note Function 20971 Attributes::. 20972 20973`dllexport' 20974 The `dllexport' attribute is described in *note Function 20975 Attributes::. 20976 20977 209786.35.1 Blackfin Variable Attributes 20979----------------------------------- 20980 20981Three attributes are currently defined for the Blackfin. 20982 20983`l1_data' 20984`l1_data_A' 20985`l1_data_B' 20986 Use these attributes on the Blackfin to place the variable into L1 20987 Data SRAM. Variables with `l1_data' attribute will be put into 20988 the specific section named `.l1.data'. Those with `l1_data_A' 20989 attribute will be put into the specific section named 20990 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 20991 the specific section named `.l1.data.B'. 20992 20993`l2' 20994 Use this attribute on the Blackfin to place the variable into L2 20995 SRAM. Variables with `l2' attribute will be put into the specific 20996 section named `.l2.data'. 20997 209986.35.2 M32R/D Variable Attributes 20999--------------------------------- 21000 21001One attribute is currently defined for the M32R/D. 21002 21003`model (MODEL-NAME)' 21004 Use this attribute on the M32R/D to set the addressability of an 21005 object. The identifier MODEL-NAME is one of `small', `medium', or 21006 `large', representing each of the code models. 21007 21008 Small model objects live in the lower 16MB of memory (so that their 21009 addresses can be loaded with the `ld24' instruction). 21010 21011 Medium and large model objects may live anywhere in the 32-bit 21012 address space (the compiler will generate `seth/add3' instructions 21013 to load their addresses). 21014 210156.35.3 MeP Variable Attributes 21016------------------------------ 21017 21018The MeP target has a number of addressing modes and busses. The `near' 21019space spans the standard memory space's first 16 megabytes (24 bits). 21020The `far' space spans the entire 32-bit memory space. The `based' 21021space is a 128 byte region in the memory space which is addressed 21022relative to the `$tp' register. The `tiny' space is a 65536 byte 21023region relative to the `$gp' register. In addition to these memory 21024regions, the MeP target has a separate 16-bit control bus which is 21025specified with `cb' attributes. 21026 21027`based' 21028 Any variable with the `based' attribute will be assigned to the 21029 `.based' section, and will be accessed with relative to the `$tp' 21030 register. 21031 21032`tiny' 21033 Likewise, the `tiny' attribute assigned variables to the `.tiny' 21034 section, relative to the `$gp' register. 21035 21036`near' 21037 Variables with the `near' attribute are assumed to have addresses 21038 that fit in a 24-bit addressing mode. This is the default for 21039 large variables (`-mtiny=4' is the default) but this attribute can 21040 override `-mtiny=' for small variables, or override `-ml'. 21041 21042`far' 21043 Variables with the `far' attribute are addressed using a full 21044 32-bit address. Since this covers the entire memory space, this 21045 allows modules to make no assumptions about where variables might 21046 be stored. 21047 21048`io' 21049`io (ADDR)' 21050 Variables with the `io' attribute are used to address 21051 memory-mapped peripherals. If an address is specified, the 21052 variable is assigned that address, else it is not assigned an 21053 address (it is assumed some other module will assign an address). 21054 Example: 21055 21056 int timer_count __attribute__((io(0x123))); 21057 21058`cb' 21059`cb (ADDR)' 21060 Variables with the `cb' attribute are used to access the control 21061 bus, using special instructions. `addr' indicates the control bus 21062 address. Example: 21063 21064 int cpu_clock __attribute__((cb(0x123))); 21065 21066 210676.35.4 i386 Variable Attributes 21068------------------------------- 21069 21070Two attributes are currently defined for i386 configurations: 21071`ms_struct' and `gcc_struct' 21072 21073`ms_struct' 21074`gcc_struct' 21075 If `packed' is used on a structure, or if bit-fields are used it 21076 may be that the Microsoft ABI packs them differently than GCC 21077 would normally pack them. Particularly when moving packed data 21078 between functions compiled with GCC and the native Microsoft 21079 compiler (either via function call or as data in a file), it may 21080 be necessary to access either format. 21081 21082 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 21083 Windows X86 compilers to match the native Microsoft compiler. 21084 21085 The Microsoft structure layout algorithm is fairly simple with the 21086 exception of the bitfield packing: 21087 21088 The padding and alignment of members of structures and whether a 21089 bit field can straddle a storage-unit boundary 21090 21091 1. Structure members are stored sequentially in the order in 21092 which they are declared: the first member has the lowest 21093 memory address and the last member the highest. 21094 21095 2. Every data object has an alignment-requirement. The 21096 alignment-requirement for all data except structures, unions, 21097 and arrays is either the size of the object or the current 21098 packing size (specified with either the aligned attribute or 21099 the pack pragma), whichever is less. For structures, unions, 21100 and arrays, the alignment-requirement is the largest 21101 alignment-requirement of its members. Every object is 21102 allocated an offset so that: 21103 21104 offset % alignment-requirement == 0 21105 21106 3. Adjacent bit fields are packed into the same 1-, 2-, or 21107 4-byte allocation unit if the integral types are the same 21108 size and if the next bit field fits into the current 21109 allocation unit without crossing the boundary imposed by the 21110 common alignment requirements of the bit fields. 21111 21112 Handling of zero-length bitfields: 21113 21114 MSVC interprets zero-length bitfields in the following ways: 21115 21116 1. If a zero-length bitfield is inserted between two bitfields 21117 that would normally be coalesced, the bitfields will not be 21118 coalesced. 21119 21120 For example: 21121 21122 struct 21123 { 21124 unsigned long bf_1 : 12; 21125 unsigned long : 0; 21126 unsigned long bf_2 : 12; 21127 } t1; 21128 21129 The size of `t1' would be 8 bytes with the zero-length 21130 bitfield. If the zero-length bitfield were removed, `t1''s 21131 size would be 4 bytes. 21132 21133 2. If a zero-length bitfield is inserted after a bitfield, 21134 `foo', and the alignment of the zero-length bitfield is 21135 greater than the member that follows it, `bar', `bar' will be 21136 aligned as the type of the zero-length bitfield. 21137 21138 For example: 21139 21140 struct 21141 { 21142 char foo : 4; 21143 short : 0; 21144 char bar; 21145 } t2; 21146 21147 struct 21148 { 21149 char foo : 4; 21150 short : 0; 21151 double bar; 21152 } t3; 21153 21154 For `t2', `bar' will be placed at offset 2, rather than 21155 offset 1. Accordingly, the size of `t2' will be 4. For 21156 `t3', the zero-length bitfield will not affect the alignment 21157 of `bar' or, as a result, the size of the structure. 21158 21159 Taking this into account, it is important to note the 21160 following: 21161 21162 1. If a zero-length bitfield follows a normal bitfield, the 21163 type of the zero-length bitfield may affect the 21164 alignment of the structure as whole. For example, `t2' 21165 has a size of 4 bytes, since the zero-length bitfield 21166 follows a normal bitfield, and is of type short. 21167 21168 2. Even if a zero-length bitfield is not followed by a 21169 normal bitfield, it may still affect the alignment of 21170 the structure: 21171 21172 struct 21173 { 21174 char foo : 6; 21175 long : 0; 21176 } t4; 21177 21178 Here, `t4' will take up 4 bytes. 21179 21180 3. Zero-length bitfields following non-bitfield members are 21181 ignored: 21182 21183 struct 21184 { 21185 char foo; 21186 long : 0; 21187 char bar; 21188 } t5; 21189 21190 Here, `t5' will take up 2 bytes. 21191 211926.35.5 PowerPC Variable Attributes 21193---------------------------------- 21194 21195Three attributes currently are defined for PowerPC configurations: 21196`altivec', `ms_struct' and `gcc_struct'. 21197 21198 For full documentation of the struct attributes please see the 21199documentation in *note i386 Variable Attributes::. 21200 21201 For documentation of `altivec' attribute please see the documentation 21202in *note PowerPC Type Attributes::. 21203 212046.35.6 SPU Variable Attributes 21205------------------------------ 21206 21207The SPU supports the `spu_vector' attribute for variables. For 21208documentation of this attribute please see the documentation in *note 21209SPU Type Attributes::. 21210 212116.35.7 Xstormy16 Variable Attributes 21212------------------------------------ 21213 21214One attribute is currently defined for xstormy16 configurations: 21215`below100'. 21216 21217`below100' 21218 If a variable has the `below100' attribute (`BELOW100' is allowed 21219 also), GCC will place the variable in the first 0x100 bytes of 21220 memory and use special opcodes to access it. Such variables will 21221 be placed in either the `.bss_below100' section or the 21222 `.data_below100' section. 21223 21224 212256.35.8 AVR Variable Attributes 21226------------------------------ 21227 21228`progmem' 21229 The `progmem' attribute is used on the AVR to place data in the 21230 Program Memory address space. The AVR is a Harvard Architecture 21231 processor and data normally resides in the Data Memory address 21232 space. 21233 21234 21235File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 21236 212376.36 Specifying Attributes of Types 21238=================================== 21239 21240The keyword `__attribute__' allows you to specify special attributes of 21241`struct' and `union' types when you define such types. This keyword is 21242followed by an attribute specification inside double parentheses. 21243Seven attributes are currently defined for types: `aligned', `packed', 21244`transparent_union', `unused', `deprecated', `visibility', and 21245`may_alias'. Other attributes are defined for functions (*note 21246Function Attributes::) and for variables (*note Variable Attributes::). 21247 21248 You may also specify any one of these attributes with `__' preceding 21249and following its keyword. This allows you to use these attributes in 21250header files without being concerned about a possible macro of the same 21251name. For example, you may use `__aligned__' instead of `aligned'. 21252 21253 You may specify type attributes in an enum, struct or union type 21254declaration or definition, or for other types in a `typedef' 21255declaration. 21256 21257 For an enum, struct or union type, you may specify attributes either 21258between the enum, struct or union tag and the name of the type, or just 21259past the closing curly brace of the _definition_. The former syntax is 21260preferred. 21261 21262 *Note Attribute Syntax::, for details of the exact syntax for using 21263attributes. 21264 21265`aligned (ALIGNMENT)' 21266 This attribute specifies a minimum alignment (in bytes) for 21267 variables of the specified type. For example, the declarations: 21268 21269 struct S { short f[3]; } __attribute__ ((aligned (8))); 21270 typedef int more_aligned_int __attribute__ ((aligned (8))); 21271 21272 force the compiler to insure (as far as it can) that each variable 21273 whose type is `struct S' or `more_aligned_int' will be allocated 21274 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 21275 all variables of type `struct S' aligned to 8-byte boundaries 21276 allows the compiler to use the `ldd' and `std' (doubleword load and 21277 store) instructions when copying one variable of type `struct S' to 21278 another, thus improving run-time efficiency. 21279 21280 Note that the alignment of any given `struct' or `union' type is 21281 required by the ISO C standard to be at least a perfect multiple of 21282 the lowest common multiple of the alignments of all of the members 21283 of the `struct' or `union' in question. This means that you _can_ 21284 effectively adjust the alignment of a `struct' or `union' type by 21285 attaching an `aligned' attribute to any one of the members of such 21286 a type, but the notation illustrated in the example above is a 21287 more obvious, intuitive, and readable way to request the compiler 21288 to adjust the alignment of an entire `struct' or `union' type. 21289 21290 As in the preceding example, you can explicitly specify the 21291 alignment (in bytes) that you wish the compiler to use for a given 21292 `struct' or `union' type. Alternatively, you can leave out the 21293 alignment factor and just ask the compiler to align a type to the 21294 maximum useful alignment for the target machine you are compiling 21295 for. For example, you could write: 21296 21297 struct S { short f[3]; } __attribute__ ((aligned)); 21298 21299 Whenever you leave out the alignment factor in an `aligned' 21300 attribute specification, the compiler automatically sets the 21301 alignment for the type to the largest alignment which is ever used 21302 for any data type on the target machine you are compiling for. 21303 Doing this can often make copy operations more efficient, because 21304 the compiler can use whatever instructions copy the biggest chunks 21305 of memory when performing copies to or from the variables which 21306 have types that you have aligned this way. 21307 21308 In the example above, if the size of each `short' is 2 bytes, then 21309 the size of the entire `struct S' type is 6 bytes. The smallest 21310 power of two which is greater than or equal to that is 8, so the 21311 compiler sets the alignment for the entire `struct S' type to 8 21312 bytes. 21313 21314 Note that although you can ask the compiler to select a 21315 time-efficient alignment for a given type and then declare only 21316 individual stand-alone objects of that type, the compiler's 21317 ability to select a time-efficient alignment is primarily useful 21318 only when you plan to create arrays of variables having the 21319 relevant (efficiently aligned) type. If you declare or use arrays 21320 of variables of an efficiently-aligned type, then it is likely 21321 that your program will also be doing pointer arithmetic (or 21322 subscripting, which amounts to the same thing) on pointers to the 21323 relevant type, and the code that the compiler generates for these 21324 pointer arithmetic operations will often be more efficient for 21325 efficiently-aligned types than for other types. 21326 21327 The `aligned' attribute can only increase the alignment; but you 21328 can decrease it by specifying `packed' as well. See below. 21329 21330 Note that the effectiveness of `aligned' attributes may be limited 21331 by inherent limitations in your linker. On many systems, the 21332 linker is only able to arrange for variables to be aligned up to a 21333 certain maximum alignment. (For some linkers, the maximum 21334 supported alignment may be very very small.) If your linker is 21335 only able to align variables up to a maximum of 8 byte alignment, 21336 then specifying `aligned(16)' in an `__attribute__' will still 21337 only provide you with 8 byte alignment. See your linker 21338 documentation for further information. 21339 21340`packed' 21341 This attribute, attached to `struct' or `union' type definition, 21342 specifies that each member (other than zero-width bitfields) of 21343 the structure or union is placed to minimize the memory required. 21344 When attached to an `enum' definition, it indicates that the 21345 smallest integral type should be used. 21346 21347 Specifying this attribute for `struct' and `union' types is 21348 equivalent to specifying the `packed' attribute on each of the 21349 structure or union members. Specifying the `-fshort-enums' flag 21350 on the line is equivalent to specifying the `packed' attribute on 21351 all `enum' definitions. 21352 21353 In the following example `struct my_packed_struct''s members are 21354 packed closely together, but the internal layout of its `s' member 21355 is not packed--to do that, `struct my_unpacked_struct' would need 21356 to be packed too. 21357 21358 struct my_unpacked_struct 21359 { 21360 char c; 21361 int i; 21362 }; 21363 21364 struct __attribute__ ((__packed__)) my_packed_struct 21365 { 21366 char c; 21367 int i; 21368 struct my_unpacked_struct s; 21369 }; 21370 21371 You may only specify this attribute on the definition of an `enum', 21372 `struct' or `union', not on a `typedef' which does not also define 21373 the enumerated type, structure or union. 21374 21375`transparent_union' 21376 This attribute, attached to a `union' type definition, indicates 21377 that any function parameter having that union type causes calls to 21378 that function to be treated in a special way. 21379 21380 First, the argument corresponding to a transparent union type can 21381 be of any type in the union; no cast is required. Also, if the 21382 union contains a pointer type, the corresponding argument can be a 21383 null pointer constant or a void pointer expression; and if the 21384 union contains a void pointer type, the corresponding argument can 21385 be any pointer expression. If the union member type is a pointer, 21386 qualifiers like `const' on the referenced type must be respected, 21387 just as with normal pointer conversions. 21388 21389 Second, the argument is passed to the function using the calling 21390 conventions of the first member of the transparent union, not the 21391 calling conventions of the union itself. All members of the union 21392 must have the same machine representation; this is necessary for 21393 this argument passing to work properly. 21394 21395 Transparent unions are designed for library functions that have 21396 multiple interfaces for compatibility reasons. For example, 21397 suppose the `wait' function must accept either a value of type 21398 `int *' to comply with Posix, or a value of type `union wait *' to 21399 comply with the 4.1BSD interface. If `wait''s parameter were 21400 `void *', `wait' would accept both kinds of arguments, but it 21401 would also accept any other pointer type and this would make 21402 argument type checking less useful. Instead, `<sys/wait.h>' might 21403 define the interface as follows: 21404 21405 typedef union __attribute__ ((__transparent_union__)) 21406 { 21407 int *__ip; 21408 union wait *__up; 21409 } wait_status_ptr_t; 21410 21411 pid_t wait (wait_status_ptr_t); 21412 21413 This interface allows either `int *' or `union wait *' arguments 21414 to be passed, using the `int *' calling convention. The program 21415 can call `wait' with arguments of either type: 21416 21417 int w1 () { int w; return wait (&w); } 21418 int w2 () { union wait w; return wait (&w); } 21419 21420 With this interface, `wait''s implementation might look like this: 21421 21422 pid_t wait (wait_status_ptr_t p) 21423 { 21424 return waitpid (-1, p.__ip, 0); 21425 } 21426 21427`unused' 21428 When attached to a type (including a `union' or a `struct'), this 21429 attribute means that variables of that type are meant to appear 21430 possibly unused. GCC will not produce a warning for any variables 21431 of that type, even if the variable appears to do nothing. This is 21432 often the case with lock or thread classes, which are usually 21433 defined and then not referenced, but contain constructors and 21434 destructors that have nontrivial bookkeeping functions. 21435 21436`deprecated' 21437`deprecated (MSG)' 21438 The `deprecated' attribute results in a warning if the type is 21439 used anywhere in the source file. This is useful when identifying 21440 types that are expected to be removed in a future version of a 21441 program. If possible, the warning also includes the location of 21442 the declaration of the deprecated type, to enable users to easily 21443 find further information about why the type is deprecated, or what 21444 they should do instead. Note that the warnings only occur for 21445 uses and then only if the type is being applied to an identifier 21446 that itself is not being declared as deprecated. 21447 21448 typedef int T1 __attribute__ ((deprecated)); 21449 T1 x; 21450 typedef T1 T2; 21451 T2 y; 21452 typedef T1 T3 __attribute__ ((deprecated)); 21453 T3 z __attribute__ ((deprecated)); 21454 21455 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 21456 warning is issued for line 4 because T2 is not explicitly 21457 deprecated. Line 5 has no warning because T3 is explicitly 21458 deprecated. Similarly for line 6. The optional msg argument, 21459 which must be a string, will be printed in the warning if present. 21460 21461 The `deprecated' attribute can also be used for functions and 21462 variables (*note Function Attributes::, *note Variable 21463 Attributes::.) 21464 21465`may_alias' 21466 Accesses through pointers to types with this attribute are not 21467 subject to type-based alias analysis, but are instead assumed to 21468 be able to alias any other type of objects. In the context of 21469 6.5/7 an lvalue expression dereferencing such a pointer is treated 21470 like having a character type. See `-fstrict-aliasing' for more 21471 information on aliasing issues. This extension exists to support 21472 some vector APIs, in which pointers to one vector type are 21473 permitted to alias pointers to a different vector type. 21474 21475 Note that an object of a type with this attribute does not have any 21476 special semantics. 21477 21478 Example of use: 21479 21480 typedef short __attribute__((__may_alias__)) short_a; 21481 21482 int 21483 main (void) 21484 { 21485 int a = 0x12345678; 21486 short_a *b = (short_a *) &a; 21487 21488 b[1] = 0; 21489 21490 if (a == 0x12345678) 21491 abort(); 21492 21493 exit(0); 21494 } 21495 21496 If you replaced `short_a' with `short' in the variable 21497 declaration, the above program would abort when compiled with 21498 `-fstrict-aliasing', which is on by default at `-O2' or above in 21499 recent GCC versions. 21500 21501`visibility' 21502 In C++, attribute visibility (*note Function Attributes::) can 21503 also be applied to class, struct, union and enum types. Unlike 21504 other type attributes, the attribute must appear between the 21505 initial keyword and the name of the type; it cannot appear after 21506 the body of the type. 21507 21508 Note that the type visibility is applied to vague linkage entities 21509 associated with the class (vtable, typeinfo node, etc.). In 21510 particular, if a class is thrown as an exception in one shared 21511 object and caught in another, the class must have default 21512 visibility. Otherwise the two shared objects will be unable to 21513 use the same typeinfo node and exception handling will break. 21514 21515 215166.36.1 ARM Type Attributes 21517-------------------------- 21518 21519On those ARM targets that support `dllimport' (such as Symbian OS), you 21520can use the `notshared' attribute to indicate that the virtual table 21521and other similar data for a class should not be exported from a DLL. 21522For example: 21523 21524 class __declspec(notshared) C { 21525 public: 21526 __declspec(dllimport) C(); 21527 virtual void f(); 21528 } 21529 21530 __declspec(dllexport) 21531 C::C() {} 21532 21533 In this code, `C::C' is exported from the current DLL, but the virtual 21534table for `C' is not exported. (You can use `__attribute__' instead of 21535`__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 21536 215376.36.2 MeP Type Attributes 21538-------------------------- 21539 21540Many of the MeP variable attributes may be applied to types as well. 21541Specifically, the `based', `tiny', `near', and `far' attributes may be 21542applied to either. The `io' and `cb' attributes may not be applied to 21543types. 21544 215456.36.3 i386 Type Attributes 21546--------------------------- 21547 21548Two attributes are currently defined for i386 configurations: 21549`ms_struct' and `gcc_struct'. 21550 21551`ms_struct' 21552`gcc_struct' 21553 If `packed' is used on a structure, or if bit-fields are used it 21554 may be that the Microsoft ABI packs them differently than GCC 21555 would normally pack them. Particularly when moving packed data 21556 between functions compiled with GCC and the native Microsoft 21557 compiler (either via function call or as data in a file), it may 21558 be necessary to access either format. 21559 21560 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 21561 Windows X86 compilers to match the native Microsoft compiler. 21562 21563 To specify multiple attributes, separate them by commas within the 21564double parentheses: for example, `__attribute__ ((aligned (16), 21565packed))'. 21566 215676.36.4 PowerPC Type Attributes 21568------------------------------ 21569 21570Three attributes currently are defined for PowerPC configurations: 21571`altivec', `ms_struct' and `gcc_struct'. 21572 21573 For full documentation of the `ms_struct' and `gcc_struct' attributes 21574please see the documentation in *note i386 Type Attributes::. 21575 21576 The `altivec' attribute allows one to declare AltiVec vector data 21577types supported by the AltiVec Programming Interface Manual. The 21578attribute requires an argument to specify one of three vector types: 21579`vector__', `pixel__' (always followed by unsigned short), and `bool__' 21580(always followed by unsigned). 21581 21582 __attribute__((altivec(vector__))) 21583 __attribute__((altivec(pixel__))) unsigned short 21584 __attribute__((altivec(bool__))) unsigned 21585 21586 These attributes mainly are intended to support the `__vector', 21587`__pixel', and `__bool' AltiVec keywords. 21588 215896.36.5 SPU Type Attributes 21590-------------------------- 21591 21592The SPU supports the `spu_vector' attribute for types. This attribute 21593allows one to declare vector data types supported by the 21594Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 21595to support the `__vector' keyword. 21596 21597 21598File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 21599 216006.37 Inquiring on Alignment of Types or Variables 21601================================================= 21602 21603The keyword `__alignof__' allows you to inquire about how an object is 21604aligned, or the minimum alignment usually required by a type. Its 21605syntax is just like `sizeof'. 21606 21607 For example, if the target machine requires a `double' value to be 21608aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 21609is true on many RISC machines. On more traditional machine designs, 21610`__alignof__ (double)' is 4 or even 2. 21611 21612 Some machines never actually require alignment; they allow reference 21613to any data type even at an odd address. For these machines, 21614`__alignof__' reports the smallest alignment that GCC will give the 21615data type, usually as mandated by the target ABI. 21616 21617 If the operand of `__alignof__' is an lvalue rather than a type, its 21618value is the required alignment for its type, taking into account any 21619minimum alignment specified with GCC's `__attribute__' extension (*note 21620Variable Attributes::). For example, after this declaration: 21621 21622 struct foo { int x; char y; } foo1; 21623 21624the value of `__alignof__ (foo1.y)' is 1, even though its actual 21625alignment is probably 2 or 4, the same as `__alignof__ (int)'. 21626 21627 It is an error to ask for the alignment of an incomplete type. 21628 21629 21630File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 21631 216326.38 An Inline Function is As Fast As a Macro 21633============================================= 21634 21635By declaring a function inline, you can direct GCC to make calls to 21636that function faster. One way GCC can achieve this is to integrate 21637that function's code into the code for its callers. This makes 21638execution faster by eliminating the function-call overhead; in 21639addition, if any of the actual argument values are constant, their 21640known values may permit simplifications at compile time so that not all 21641of the inline function's code needs to be included. The effect on code 21642size is less predictable; object code may be larger or smaller with 21643function inlining, depending on the particular case. You can also 21644direct GCC to try to integrate all "simple enough" functions into their 21645callers with the option `-finline-functions'. 21646 21647 GCC implements three different semantics of declaring a function 21648inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 21649`gnu_inline' attribute is present on all inline declarations, another 21650when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the 21651third is used when compiling C++. 21652 21653 To declare a function inline, use the `inline' keyword in its 21654declaration, like this: 21655 21656 static inline int 21657 inc (int *a) 21658 { 21659 (*a)++; 21660 } 21661 21662 If you are writing a header file to be included in ISO C90 programs, 21663write `__inline__' instead of `inline'. *Note Alternate Keywords::. 21664 21665 The three types of inlining behave similarly in two important cases: 21666when the `inline' keyword is used on a `static' function, like the 21667example above, and when a function is first declared without using the 21668`inline' keyword and then is defined with `inline', like this: 21669 21670 extern int inc (int *a); 21671 inline int 21672 inc (int *a) 21673 { 21674 (*a)++; 21675 } 21676 21677 In both of these common cases, the program behaves the same as if you 21678had not used the `inline' keyword, except for its speed. 21679 21680 When a function is both inline and `static', if all calls to the 21681function are integrated into the caller, and the function's address is 21682never used, then the function's own assembler code is never referenced. 21683In this case, GCC does not actually output assembler code for the 21684function, unless you specify the option `-fkeep-inline-functions'. 21685Some calls cannot be integrated for various reasons (in particular, 21686calls that precede the function's definition cannot be integrated, and 21687neither can recursive calls within the definition). If there is a 21688nonintegrated call, then the function is compiled to assembler code as 21689usual. The function must also be compiled as usual if the program 21690refers to its address, because that can't be inlined. 21691 21692 Note that certain usages in a function definition can make it 21693unsuitable for inline substitution. Among these usages are: use of 21694varargs, use of alloca, use of variable sized data types (*note 21695Variable Length::), use of computed goto (*note Labels as Values::), 21696use of nonlocal goto, and nested functions (*note Nested Functions::). 21697Using `-Winline' will warn when a function marked `inline' could not be 21698substituted, and will give the reason for the failure. 21699 21700 As required by ISO C++, GCC considers member functions defined within 21701the body of a class to be marked inline even if they are not explicitly 21702declared with the `inline' keyword. You can override this with 21703`-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 21704Dialect Options. 21705 21706 GCC does not inline any functions when not optimizing unless you 21707specify the `always_inline' attribute for the function, like this: 21708 21709 /* Prototype. */ 21710 inline void foo (const char) __attribute__((always_inline)); 21711 21712 The remainder of this section is specific to GNU C90 inlining. 21713 21714 When an inline function is not `static', then the compiler must assume 21715that there may be calls from other source files; since a global symbol 21716can be defined only once in any program, the function must not be 21717defined in the other source files, so the calls therein cannot be 21718integrated. Therefore, a non-`static' inline function is always 21719compiled on its own in the usual fashion. 21720 21721 If you specify both `inline' and `extern' in the function definition, 21722then the definition is used only for inlining. In no case is the 21723function compiled on its own, not even if you refer to its address 21724explicitly. Such an address becomes an external reference, as if you 21725had only declared the function, and had not defined it. 21726 21727 This combination of `inline' and `extern' has almost the effect of a 21728macro. The way to use it is to put a function definition in a header 21729file with these keywords, and put another copy of the definition 21730(lacking `inline' and `extern') in a library file. The definition in 21731the header file will cause most calls to the function to be inlined. 21732If any uses of the function remain, they will refer to the single copy 21733in the library. 21734 21735 21736File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 21737 217386.39 Assembler Instructions with C Expression Operands 21739====================================================== 21740 21741In an assembler instruction using `asm', you can specify the operands 21742of the instruction using C expressions. This means you need not guess 21743which registers or memory locations will contain the data you want to 21744use. 21745 21746 You must specify an assembler instruction template much like what 21747appears in a machine description, plus an operand constraint string for 21748each operand. 21749 21750 For example, here is how to use the 68881's `fsinx' instruction: 21751 21752 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 21753 21754Here `angle' is the C expression for the input operand while `result' 21755is that of the output operand. Each has `"f"' as its operand 21756constraint, saying that a floating point register is required. The `=' 21757in `=f' indicates that the operand is an output; all output operands' 21758constraints must use `='. The constraints use the same language used 21759in the machine description (*note Constraints::). 21760 21761 Each operand is described by an operand-constraint string followed by 21762the C expression in parentheses. A colon separates the assembler 21763template from the first output operand and another separates the last 21764output operand from the first input, if any. Commas separate the 21765operands within each group. The total number of operands is currently 21766limited to 30; this limitation may be lifted in some future version of 21767GCC. 21768 21769 If there are no output operands but there are input operands, you must 21770place two consecutive colons surrounding the place where the output 21771operands would go. 21772 21773 As of GCC version 3.1, it is also possible to specify input and output 21774operands using symbolic names which can be referenced within the 21775assembler code. These names are specified inside square brackets 21776preceding the constraint string, and can be referenced inside the 21777assembler code using `%[NAME]' instead of a percentage sign followed by 21778the operand number. Using named operands the above example could look 21779like: 21780 21781 asm ("fsinx %[angle],%[output]" 21782 : [output] "=f" (result) 21783 : [angle] "f" (angle)); 21784 21785Note that the symbolic operand names have no relation whatsoever to 21786other C identifiers. You may use any name you like, even those of 21787existing C symbols, but you must ensure that no two operands within the 21788same assembler construct use the same symbolic name. 21789 21790 Output operand expressions must be lvalues; the compiler can check 21791this. The input operands need not be lvalues. The compiler cannot 21792check whether the operands have data types that are reasonable for the 21793instruction being executed. It does not parse the assembler instruction 21794template and does not know what it means or even whether it is valid 21795assembler input. The extended `asm' feature is most often used for 21796machine instructions the compiler itself does not know exist. If the 21797output expression cannot be directly addressed (for example, it is a 21798bit-field), your constraint must allow a register. In that case, GCC 21799will use the register as the output of the `asm', and then store that 21800register into the output. 21801 21802 The ordinary output operands must be write-only; GCC will assume that 21803the values in these operands before the instruction are dead and need 21804not be generated. Extended asm supports input-output or read-write 21805operands. Use the constraint character `+' to indicate such an operand 21806and list it with the output operands. You should only use read-write 21807operands when the constraints for the operand (or the operand in which 21808only some of the bits are to be changed) allow a register. 21809 21810 You may, as an alternative, logically split its function into two 21811separate operands, one input operand and one write-only output operand. 21812The connection between them is expressed by constraints which say they 21813need to be in the same location when the instruction executes. You can 21814use the same C expression for both operands, or different expressions. 21815For example, here we write the (fictitious) `combine' instruction with 21816`bar' as its read-only source operand and `foo' as its read-write 21817destination: 21818 21819 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 21820 21821The constraint `"0"' for operand 1 says that it must occupy the same 21822location as operand 0. A number in constraint is allowed only in an 21823input operand and it must refer to an output operand. 21824 21825 Only a number in the constraint can guarantee that one operand will be 21826in the same place as another. The mere fact that `foo' is the value of 21827both operands is not enough to guarantee that they will be in the same 21828place in the generated assembler code. The following would not work 21829reliably: 21830 21831 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 21832 21833 Various optimizations or reloading could cause operands 0 and 1 to be 21834in different registers; GCC knows no reason not to do so. For example, 21835the compiler might find a copy of the value of `foo' in one register and 21836use it for operand 1, but generate the output operand 0 in a different 21837register (copying it afterward to `foo''s own address). Of course, 21838since the register for operand 1 is not even mentioned in the assembler 21839code, the result will not work, but GCC can't tell that. 21840 21841 As of GCC version 3.1, one may write `[NAME]' instead of the operand 21842number for a matching constraint. For example: 21843 21844 asm ("cmoveq %1,%2,%[result]" 21845 : [result] "=r"(result) 21846 : "r" (test), "r"(new), "[result]"(old)); 21847 21848 Sometimes you need to make an `asm' operand be a specific register, 21849but there's no matching constraint letter for that register _by 21850itself_. To force the operand into that register, use a local variable 21851for the operand and specify the register in the variable declaration. 21852*Note Explicit Reg Vars::. Then for the `asm' operand, use any 21853register constraint letter that matches the register: 21854 21855 register int *p1 asm ("r0") = ...; 21856 register int *p2 asm ("r1") = ...; 21857 register int *result asm ("r0"); 21858 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 21859 21860 In the above example, beware that a register that is call-clobbered by 21861the target ABI will be overwritten by any function call in the 21862assignment, including library calls for arithmetic operators. Also a 21863register may be clobbered when generating some operations, like 21864variable shift, memory copy or memory move on x86. Assuming it is a 21865call-clobbered register, this may happen to `r0' above by the 21866assignment to `p2'. If you have to use such a register, use temporary 21867variables for expressions between the register assignment and use: 21868 21869 int t1 = ...; 21870 register int *p1 asm ("r0") = ...; 21871 register int *p2 asm ("r1") = t1; 21872 register int *result asm ("r0"); 21873 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 21874 21875 Some instructions clobber specific hard registers. To describe this, 21876write a third colon after the input operands, followed by the names of 21877the clobbered hard registers (given as strings). Here is a realistic 21878example for the VAX: 21879 21880 asm volatile ("movc3 %0,%1,%2" 21881 : /* no outputs */ 21882 : "g" (from), "g" (to), "g" (count) 21883 : "r0", "r1", "r2", "r3", "r4", "r5"); 21884 21885 You may not write a clobber description in a way that overlaps with an 21886input or output operand. For example, you may not have an operand 21887describing a register class with one member if you mention that register 21888in the clobber list. Variables declared to live in specific registers 21889(*note Explicit Reg Vars::), and used as asm input or output operands 21890must have no part mentioned in the clobber description. There is no 21891way for you to specify that an input operand is modified without also 21892specifying it as an output operand. Note that if all the output 21893operands you specify are for this purpose (and hence unused), you will 21894then also need to specify `volatile' for the `asm' construct, as 21895described below, to prevent GCC from deleting the `asm' statement as 21896unused. 21897 21898 If you refer to a particular hardware register from the assembler code, 21899you will probably have to list the register after the third colon to 21900tell the compiler the register's value is modified. In some assemblers, 21901the register names begin with `%'; to produce one `%' in the assembler 21902code, you must write `%%' in the input. 21903 21904 If your assembler instruction can alter the condition code register, 21905add `cc' to the list of clobbered registers. GCC on some machines 21906represents the condition codes as a specific hardware register; `cc' 21907serves to name this register. On other machines, the condition code is 21908handled differently, and specifying `cc' has no effect. But it is 21909valid no matter what the machine. 21910 21911 If your assembler instructions access memory in an unpredictable 21912fashion, add `memory' to the list of clobbered registers. This will 21913cause GCC to not keep memory values cached in registers across the 21914assembler instruction and not optimize stores or loads to that memory. 21915You will also want to add the `volatile' keyword if the memory affected 21916is not listed in the inputs or outputs of the `asm', as the `memory' 21917clobber does not count as a side-effect of the `asm'. If you know how 21918large the accessed memory is, you can add it as input or output but if 21919this is not known, you should add `memory'. As an example, if you 21920access ten bytes of a string, you can use a memory input like: 21921 21922 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 21923 21924 Note that in the following example the memory input is necessary, 21925otherwise GCC might optimize the store to `x' away: 21926 int foo () 21927 { 21928 int x = 42; 21929 int *y = &x; 21930 int result; 21931 asm ("magic stuff accessing an 'int' pointed to by '%1'" 21932 "=&d" (r) : "a" (y), "m" (*y)); 21933 return result; 21934 } 21935 21936 You can put multiple assembler instructions together in a single `asm' 21937template, separated by the characters normally used in assembly code 21938for the system. A combination that works in most places is a newline 21939to break the line, plus a tab character to move to the instruction field 21940(written as `\n\t'). Sometimes semicolons can be used, if the 21941assembler allows semicolons as a line-breaking character. Note that 21942some assembler dialects use semicolons to start a comment. The input 21943operands are guaranteed not to use any of the clobbered registers, and 21944neither will the output operands' addresses, so you can read and write 21945the clobbered registers as many times as you like. Here is an example 21946of multiple instructions in a template; it assumes the subroutine 21947`_foo' accepts arguments in registers 9 and 10: 21948 21949 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 21950 : /* no outputs */ 21951 : "g" (from), "g" (to) 21952 : "r9", "r10"); 21953 21954 Unless an output operand has the `&' constraint modifier, GCC may 21955allocate it in the same register as an unrelated input operand, on the 21956assumption the inputs are consumed before the outputs are produced. 21957This assumption may be false if the assembler code actually consists of 21958more than one instruction. In such a case, use `&' for each output 21959operand that may not overlap an input. *Note Modifiers::. 21960 21961 If you want to test the condition code produced by an assembler 21962instruction, you must include a branch and a label in the `asm' 21963construct, as follows: 21964 21965 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 21966 : "g" (result) 21967 : "g" (input)); 21968 21969This assumes your assembler supports local labels, as the GNU assembler 21970and most Unix assemblers do. 21971 21972 Speaking of labels, jumps from one `asm' to another are not supported. 21973The compiler's optimizers do not know about these jumps, and therefore 21974they cannot take account of them when deciding how to optimize. *Note 21975Extended asm with goto::. 21976 21977 Usually the most convenient way to use these `asm' instructions is to 21978encapsulate them in macros that look like functions. For example, 21979 21980 #define sin(x) \ 21981 ({ double __value, __arg = (x); \ 21982 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 21983 __value; }) 21984 21985Here the variable `__arg' is used to make sure that the instruction 21986operates on a proper `double' value, and to accept only those arguments 21987`x' which can convert automatically to a `double'. 21988 21989 Another way to make sure the instruction operates on the correct data 21990type is to use a cast in the `asm'. This is different from using a 21991variable `__arg' in that it converts more different types. For 21992example, if the desired type were `int', casting the argument to `int' 21993would accept a pointer with no complaint, while assigning the argument 21994to an `int' variable named `__arg' would warn about using a pointer 21995unless the caller explicitly casts it. 21996 21997 If an `asm' has output operands, GCC assumes for optimization purposes 21998the instruction has no side effects except to change the output 21999operands. This does not mean instructions with a side effect cannot be 22000used, but you must be careful, because the compiler may eliminate them 22001if the output operands aren't used, or move them out of loops, or 22002replace two with one if they constitute a common subexpression. Also, 22003if your instruction does have a side effect on a variable that otherwise 22004appears not to change, the old value of the variable may be reused later 22005if it happens to be found in a register. 22006 22007 You can prevent an `asm' instruction from being deleted by writing the 22008keyword `volatile' after the `asm'. For example: 22009 22010 #define get_and_set_priority(new) \ 22011 ({ int __old; \ 22012 asm volatile ("get_and_set_priority %0, %1" \ 22013 : "=g" (__old) : "g" (new)); \ 22014 __old; }) 22015 22016The `volatile' keyword indicates that the instruction has important 22017side-effects. GCC will not delete a volatile `asm' if it is reachable. 22018(The instruction can still be deleted if GCC can prove that 22019control-flow will never reach the location of the instruction.) Note 22020that even a volatile `asm' instruction can be moved relative to other 22021code, including across jump instructions. For example, on many targets 22022there is a system register which can be set to control the rounding 22023mode of floating point operations. You might try setting it with a 22024volatile `asm', like this PowerPC example: 22025 22026 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 22027 sum = x + y; 22028 22029This will not work reliably, as the compiler may move the addition back 22030before the volatile `asm'. To make it work you need to add an 22031artificial dependency to the `asm' referencing a variable in the code 22032you don't want moved, for example: 22033 22034 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 22035 sum = x + y; 22036 22037 Similarly, you can't expect a sequence of volatile `asm' instructions 22038to remain perfectly consecutive. If you want consecutive output, use a 22039single `asm'. Also, GCC will perform some optimizations across a 22040volatile `asm' instruction; GCC does not "forget everything" when it 22041encounters a volatile `asm' instruction the way some other compilers do. 22042 22043 An `asm' instruction without any output operands will be treated 22044identically to a volatile `asm' instruction. 22045 22046 It is a natural idea to look for a way to give access to the condition 22047code left by the assembler instruction. However, when we attempted to 22048implement this, we found no way to make it work reliably. The problem 22049is that output operands might need reloading, which would result in 22050additional following "store" instructions. On most machines, these 22051instructions would alter the condition code before there was time to 22052test it. This problem doesn't arise for ordinary "test" and "compare" 22053instructions because they don't have any output operands. 22054 22055 For reasons similar to those described above, it is not possible to 22056give an assembler instruction access to the condition code left by 22057previous instructions. 22058 22059 As of GCC version 4.5, `asm goto' may be used to have the assembly 22060jump to one or more C labels. In this form, a fifth section after the 22061clobber list contains a list of all C labels to which the assembly may 22062jump. Each label operand is implicitly self-named. The `asm' is also 22063assumed to fall through to the next statement. 22064 22065 This form of `asm' is restricted to not have outputs. This is due to 22066a internal restriction in the compiler that control transfer 22067instructions cannot have outputs. This restriction on `asm goto' may 22068be lifted in some future version of the compiler. In the mean time, 22069`asm goto' may include a memory clobber, and so leave outputs in memory. 22070 22071 int frob(int x) 22072 { 22073 int y; 22074 asm goto ("frob %%r5, %1; jc %l[error]; mov (%2), %%r5" 22075 : : "r"(x), "r"(&y) : "r5", "memory" : error); 22076 return y; 22077 error: 22078 return -1; 22079 } 22080 22081 In this (inefficient) example, the `frob' instruction sets the carry 22082bit to indicate an error. The `jc' instruction detects this and 22083branches to the `error' label. Finally, the output of the `frob' 22084instruction (`%r5') is stored into the memory for variable `y', which 22085is later read by the `return' statement. 22086 22087 void doit(void) 22088 { 22089 int i = 0; 22090 asm goto ("mfsr %%r1, 123; jmp %%r1;" 22091 ".pushsection doit_table;" 22092 ".long %l0, %l1, %l2, %l3;" 22093 ".popsection" 22094 : : : "r1" : label1, label2, label3, label4); 22095 __builtin_unreachable (); 22096 22097 label1: 22098 f1(); 22099 return; 22100 label2: 22101 f2(); 22102 return; 22103 label3: 22104 i = 1; 22105 label4: 22106 f3(i); 22107 } 22108 22109 In this (also inefficient) example, the `mfsr' instruction reads an 22110address from some out-of-band machine register, and the following `jmp' 22111instruction branches to that address. The address read by the `mfsr' 22112instruction is assumed to have been previously set via some 22113application-specific mechanism to be one of the four values stored in 22114the `doit_table' section. Finally, the `asm' is followed by a call to 22115`__builtin_unreachable' to indicate that the `asm' does not in fact 22116fall through. 22117 22118 #define TRACE1(NUM) \ 22119 do { \ 22120 asm goto ("0: nop;" \ 22121 ".pushsection trace_table;" \ 22122 ".long 0b, %l0;" \ 22123 ".popsection" \ 22124 : : : : trace#NUM); \ 22125 if (0) { trace#NUM: trace(); } \ 22126 } while (0) 22127 #define TRACE TRACE1(__COUNTER__) 22128 22129 In this example (which in fact inspired the `asm goto' feature) we 22130want on rare occasions to call the `trace' function; on other occasions 22131we'd like to keep the overhead to the absolute minimum. The normal 22132code path consists of a single `nop' instruction. However, we record 22133the address of this `nop' together with the address of a label that 22134calls the `trace' function. This allows the `nop' instruction to be 22135patched at runtime to be an unconditional branch to the stored label. 22136It is assumed that an optimizing compiler will move the labeled block 22137out of line, to optimize the fall through path from the `asm'. 22138 22139 If you are writing a header file that should be includable in ISO C 22140programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 22141 221426.39.1 Size of an `asm' 22143----------------------- 22144 22145Some targets require that GCC track the size of each instruction used in 22146order to generate correct code. Because the final length of an `asm' 22147is only known by the assembler, GCC must make an estimate as to how big 22148it will be. The estimate is formed by counting the number of 22149statements in the pattern of the `asm' and multiplying that by the 22150length of the longest instruction on that processor. Statements in the 22151`asm' are identified by newline characters and whatever statement 22152separator characters are supported by the assembler; on most processors 22153this is the ``;'' character. 22154 22155 Normally, GCC's estimate is perfectly adequate to ensure that correct 22156code is generated, but it is possible to confuse the compiler if you use 22157pseudo instructions or assembler macros that expand into multiple real 22158instructions or if you use assembler directives that expand to more 22159space in the object file than would be needed for a single instruction. 22160If this happens then the assembler will produce a diagnostic saying that 22161a label is unreachable. 22162 221636.39.2 i386 floating point asm operands 22164--------------------------------------- 22165 22166There are several rules on the usage of stack-like regs in asm_operands 22167insns. These rules apply only to the operands that are stack-like regs: 22168 22169 1. Given a set of input regs that die in an asm_operands, it is 22170 necessary to know which are implicitly popped by the asm, and 22171 which must be explicitly popped by gcc. 22172 22173 An input reg that is implicitly popped by the asm must be 22174 explicitly clobbered, unless it is constrained to match an output 22175 operand. 22176 22177 2. For any input reg that is implicitly popped by an asm, it is 22178 necessary to know how to adjust the stack to compensate for the 22179 pop. If any non-popped input is closer to the top of the 22180 reg-stack than the implicitly popped reg, it would not be possible 22181 to know what the stack looked like--it's not clear how the rest of 22182 the stack "slides up". 22183 22184 All implicitly popped input regs must be closer to the top of the 22185 reg-stack than any input that is not implicitly popped. 22186 22187 It is possible that if an input dies in an insn, reload might use 22188 the input reg for an output reload. Consider this example: 22189 22190 asm ("foo" : "=t" (a) : "f" (b)); 22191 22192 This asm says that input B is not popped by the asm, and that the 22193 asm pushes a result onto the reg-stack, i.e., the stack is one 22194 deeper after the asm than it was before. But, it is possible that 22195 reload will think that it can use the same reg for both the input 22196 and the output, if input B dies in this insn. 22197 22198 If any input operand uses the `f' constraint, all output reg 22199 constraints must use the `&' earlyclobber. 22200 22201 The asm above would be written as 22202 22203 asm ("foo" : "=&t" (a) : "f" (b)); 22204 22205 3. Some operands need to be in particular places on the stack. All 22206 output operands fall in this category--there is no other way to 22207 know which regs the outputs appear in unless the user indicates 22208 this in the constraints. 22209 22210 Output operands must specifically indicate which reg an output 22211 appears in after an asm. `=f' is not allowed: the operand 22212 constraints must select a class with a single reg. 22213 22214 4. Output operands may not be "inserted" between existing stack regs. 22215 Since no 387 opcode uses a read/write operand, all output operands 22216 are dead before the asm_operands, and are pushed by the 22217 asm_operands. It makes no sense to push anywhere but the top of 22218 the reg-stack. 22219 22220 Output operands must start at the top of the reg-stack: output 22221 operands may not "skip" a reg. 22222 22223 5. Some asm statements may need extra stack space for internal 22224 calculations. This can be guaranteed by clobbering stack registers 22225 unrelated to the inputs and outputs. 22226 22227 22228 Here are a couple of reasonable asms to want to write. This asm takes 22229one input, which is internally popped, and produces two outputs. 22230 22231 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 22232 22233 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 22234and replaces them with one output. The user must code the `st(1)' 22235clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 22236 22237 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 22238 22239 22240File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 22241 222426.40 Constraints for `asm' Operands 22243=================================== 22244 22245Here are specific details on what constraint letters you can use with 22246`asm' operands. Constraints can say whether an operand may be in a 22247register, and which kinds of register; whether the operand can be a 22248memory reference, and which kinds of address; whether the operand may 22249be an immediate constant, and which possible values it may have. 22250Constraints can also require two operands to match. 22251 22252* Menu: 22253 22254* Simple Constraints:: Basic use of constraints. 22255* Multi-Alternative:: When an insn has two alternative constraint-patterns. 22256* Modifiers:: More precise control over effects of constraints. 22257* Machine Constraints:: Special constraints for some particular machines. 22258 22259 22260File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 22261 222626.40.1 Simple Constraints 22263------------------------- 22264 22265The simplest kind of constraint is a string full of letters, each of 22266which describes one kind of operand that is permitted. Here are the 22267letters that are allowed: 22268 22269whitespace 22270 Whitespace characters are ignored and can be inserted at any 22271 position except the first. This enables each alternative for 22272 different operands to be visually aligned in the machine 22273 description even if they have different number of constraints and 22274 modifiers. 22275 22276`m' 22277 A memory operand is allowed, with any kind of address that the 22278 machine supports in general. Note that the letter used for the 22279 general memory constraint can be re-defined by a back end using 22280 the `TARGET_MEM_CONSTRAINT' macro. 22281 22282`o' 22283 A memory operand is allowed, but only if the address is 22284 "offsettable". This means that adding a small integer (actually, 22285 the width in bytes of the operand, as determined by its machine 22286 mode) may be added to the address and the result is also a valid 22287 memory address. 22288 22289 For example, an address which is constant is offsettable; so is an 22290 address that is the sum of a register and a constant (as long as a 22291 slightly larger constant is also within the range of 22292 address-offsets supported by the machine); but an autoincrement or 22293 autodecrement address is not offsettable. More complicated 22294 indirect/indexed addresses may or may not be offsettable depending 22295 on the other addressing modes that the machine supports. 22296 22297 Note that in an output operand which can be matched by another 22298 operand, the constraint letter `o' is valid only when accompanied 22299 by both `<' (if the target machine has predecrement addressing) 22300 and `>' (if the target machine has preincrement addressing). 22301 22302`V' 22303 A memory operand that is not offsettable. In other words, 22304 anything that would fit the `m' constraint but not the `o' 22305 constraint. 22306 22307`<' 22308 A memory operand with autodecrement addressing (either 22309 predecrement or postdecrement) is allowed. 22310 22311`>' 22312 A memory operand with autoincrement addressing (either 22313 preincrement or postincrement) is allowed. 22314 22315`r' 22316 A register operand is allowed provided that it is in a general 22317 register. 22318 22319`i' 22320 An immediate integer operand (one with constant value) is allowed. 22321 This includes symbolic constants whose values will be known only at 22322 assembly time or later. 22323 22324`n' 22325 An immediate integer operand with a known numeric value is allowed. 22326 Many systems cannot support assembly-time constants for operands 22327 less than a word wide. Constraints for these operands should use 22328 `n' rather than `i'. 22329 22330`I', `J', `K', ... `P' 22331 Other letters in the range `I' through `P' may be defined in a 22332 machine-dependent fashion to permit immediate integer operands with 22333 explicit integer values in specified ranges. For example, on the 22334 68000, `I' is defined to stand for the range of values 1 to 8. 22335 This is the range permitted as a shift count in the shift 22336 instructions. 22337 22338`E' 22339 An immediate floating operand (expression code `const_double') is 22340 allowed, but only if the target floating point format is the same 22341 as that of the host machine (on which the compiler is running). 22342 22343`F' 22344 An immediate floating operand (expression code `const_double' or 22345 `const_vector') is allowed. 22346 22347`G', `H' 22348 `G' and `H' may be defined in a machine-dependent fashion to 22349 permit immediate floating operands in particular ranges of values. 22350 22351`s' 22352 An immediate integer operand whose value is not an explicit 22353 integer is allowed. 22354 22355 This might appear strange; if an insn allows a constant operand 22356 with a value not known at compile time, it certainly must allow 22357 any known value. So why use `s' instead of `i'? Sometimes it 22358 allows better code to be generated. 22359 22360 For example, on the 68000 in a fullword instruction it is possible 22361 to use an immediate operand; but if the immediate value is between 22362 -128 and 127, better code results from loading the value into a 22363 register and using the register. This is because the load into 22364 the register can be done with a `moveq' instruction. We arrange 22365 for this to happen by defining the letter `K' to mean "any integer 22366 outside the range -128 to 127", and then specifying `Ks' in the 22367 operand constraints. 22368 22369`g' 22370 Any register, memory or immediate integer operand is allowed, 22371 except for registers that are not general registers. 22372 22373`X' 22374 Any operand whatsoever is allowed. 22375 22376`0', `1', `2', ... `9' 22377 An operand that matches the specified operand number is allowed. 22378 If a digit is used together with letters within the same 22379 alternative, the digit should come last. 22380 22381 This number is allowed to be more than a single digit. If multiple 22382 digits are encountered consecutively, they are interpreted as a 22383 single decimal integer. There is scant chance for ambiguity, 22384 since to-date it has never been desirable that `10' be interpreted 22385 as matching either operand 1 _or_ operand 0. Should this be 22386 desired, one can use multiple alternatives instead. 22387 22388 This is called a "matching constraint" and what it really means is 22389 that the assembler has only a single operand that fills two roles 22390 which `asm' distinguishes. For example, an add instruction uses 22391 two input operands and an output operand, but on most CISC 22392 machines an add instruction really has only two operands, one of 22393 them an input-output operand: 22394 22395 addl #35,r12 22396 22397 Matching constraints are used in these circumstances. More 22398 precisely, the two operands that match must include one input-only 22399 operand and one output-only operand. Moreover, the digit must be a 22400 smaller number than the number of the operand that uses it in the 22401 constraint. 22402 22403`p' 22404 An operand that is a valid memory address is allowed. This is for 22405 "load address" and "push address" instructions. 22406 22407 `p' in the constraint must be accompanied by `address_operand' as 22408 the predicate in the `match_operand'. This predicate interprets 22409 the mode specified in the `match_operand' as the mode of the memory 22410 reference for which the address would be valid. 22411 22412OTHER-LETTERS 22413 Other letters can be defined in machine-dependent fashion to stand 22414 for particular classes of registers or other arbitrary operand 22415 types. `d', `a' and `f' are defined on the 68000/68020 to stand 22416 for data, address and floating point registers. 22417 22418 22419File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 22420 224216.40.2 Multiple Alternative Constraints 22422--------------------------------------- 22423 22424Sometimes a single instruction has multiple alternative sets of possible 22425operands. For example, on the 68000, a logical-or instruction can 22426combine register or an immediate value into memory, or it can combine 22427any kind of operand into a register; but it cannot combine one memory 22428location into another. 22429 22430 These constraints are represented as multiple alternatives. An 22431alternative can be described by a series of letters for each operand. 22432The overall constraint for an operand is made from the letters for this 22433operand from the first alternative, a comma, the letters for this 22434operand from the second alternative, a comma, and so on until the last 22435alternative. 22436 22437 If all the operands fit any one alternative, the instruction is valid. 22438Otherwise, for each alternative, the compiler counts how many 22439instructions must be added to copy the operands so that that 22440alternative applies. The alternative requiring the least copying is 22441chosen. If two alternatives need the same amount of copying, the one 22442that comes first is chosen. These choices can be altered with the `?' 22443and `!' characters: 22444 22445`?' 22446 Disparage slightly the alternative that the `?' appears in, as a 22447 choice when no alternative applies exactly. The compiler regards 22448 this alternative as one unit more costly for each `?' that appears 22449 in it. 22450 22451`!' 22452 Disparage severely the alternative that the `!' appears in. This 22453 alternative can still be used if it fits without reloading, but if 22454 reloading is needed, some other alternative will be used. 22455 22456 22457File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 22458 224596.40.3 Constraint Modifier Characters 22460------------------------------------- 22461 22462Here are constraint modifier characters. 22463 22464`=' 22465 Means that this operand is write-only for this instruction: the 22466 previous value is discarded and replaced by output data. 22467 22468`+' 22469 Means that this operand is both read and written by the 22470 instruction. 22471 22472 When the compiler fixes up the operands to satisfy the constraints, 22473 it needs to know which operands are inputs to the instruction and 22474 which are outputs from it. `=' identifies an output; `+' 22475 identifies an operand that is both input and output; all other 22476 operands are assumed to be input only. 22477 22478 If you specify `=' or `+' in a constraint, you put it in the first 22479 character of the constraint string. 22480 22481`&' 22482 Means (in a particular alternative) that this operand is an 22483 "earlyclobber" operand, which is modified before the instruction is 22484 finished using the input operands. Therefore, this operand may 22485 not lie in a register that is used as an input operand or as part 22486 of any memory address. 22487 22488 `&' applies only to the alternative in which it is written. In 22489 constraints with multiple alternatives, sometimes one alternative 22490 requires `&' while others do not. See, for example, the `movdf' 22491 insn of the 68000. 22492 22493 An input operand can be tied to an earlyclobber operand if its only 22494 use as an input occurs before the early result is written. Adding 22495 alternatives of this form often allows GCC to produce better code 22496 when only some of the inputs can be affected by the earlyclobber. 22497 See, for example, the `mulsi3' insn of the ARM. 22498 22499 `&' does not obviate the need to write `='. 22500 22501`%' 22502 Declares the instruction to be commutative for this operand and the 22503 following operand. This means that the compiler may interchange 22504 the two operands if that is the cheapest way to make all operands 22505 fit the constraints. GCC can only handle one commutative pair in 22506 an asm; if you use more, the compiler may fail. Note that you 22507 need not use the modifier if the two alternatives are strictly 22508 identical; this would only waste time in the reload pass. The 22509 modifier is not operational after register allocation, so the 22510 result of `define_peephole2' and `define_split's performed after 22511 reload cannot rely on `%' to make the intended insn match. 22512 22513`#' 22514 Says that all following characters, up to the next comma, are to be 22515 ignored as a constraint. They are significant only for choosing 22516 register preferences. 22517 22518`*' 22519 Says that the following character should be ignored when choosing 22520 register preferences. `*' has no effect on the meaning of the 22521 constraint as a constraint, and no effect on reloading. 22522 22523 22524 22525File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 22526 225276.40.4 Constraints for Particular Machines 22528------------------------------------------ 22529 22530Whenever possible, you should use the general-purpose constraint letters 22531in `asm' arguments, since they will convey meaning more readily to 22532people reading your code. Failing that, use the constraint letters 22533that usually have very similar meanings across architectures. The most 22534commonly used constraints are `m' and `r' (for memory and 22535general-purpose registers respectively; *note Simple Constraints::), and 22536`I', usually the letter indicating the most common immediate-constant 22537format. 22538 22539 Each architecture defines additional constraints. These constraints 22540are used by the compiler itself for instruction generation, as well as 22541for `asm' statements; therefore, some of the constraints are not 22542particularly useful for `asm'. Here is a summary of some of the 22543machine-dependent constraints available on some particular machines; it 22544includes both constraints that are useful for `asm' and constraints 22545that aren't. The compiler source file mentioned in the table heading 22546for each architecture is the definitive reference for the meanings of 22547that architecture's constraints. 22548 22549_ARM family--`config/arm/arm.h'_ 22550 22551 `f' 22552 Floating-point register 22553 22554 `w' 22555 VFP floating-point register 22556 22557 `F' 22558 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 22559 4.0, 5.0 or 10.0 22560 22561 `G' 22562 Floating-point constant that would satisfy the constraint `F' 22563 if it were negated 22564 22565 `I' 22566 Integer that is valid as an immediate operand in a data 22567 processing instruction. That is, an integer in the range 0 22568 to 255 rotated by a multiple of 2 22569 22570 `J' 22571 Integer in the range -4095 to 4095 22572 22573 `K' 22574 Integer that satisfies constraint `I' when inverted (ones 22575 complement) 22576 22577 `L' 22578 Integer that satisfies constraint `I' when negated (twos 22579 complement) 22580 22581 `M' 22582 Integer in the range 0 to 32 22583 22584 `Q' 22585 A memory reference where the exact address is in a single 22586 register (``m'' is preferable for `asm' statements) 22587 22588 `R' 22589 An item in the constant pool 22590 22591 `S' 22592 A symbol in the text segment of the current file 22593 22594 `Uv' 22595 A memory reference suitable for VFP load/store insns 22596 (reg+constant offset) 22597 22598 `Uy' 22599 A memory reference suitable for iWMMXt load/store 22600 instructions. 22601 22602 `Uq' 22603 A memory reference suitable for the ARMv4 ldrsb instruction. 22604 22605_AVR family--`config/avr/constraints.md'_ 22606 22607 `l' 22608 Registers from r0 to r15 22609 22610 `a' 22611 Registers from r16 to r23 22612 22613 `d' 22614 Registers from r16 to r31 22615 22616 `w' 22617 Registers from r24 to r31. These registers can be used in 22618 `adiw' command 22619 22620 `e' 22621 Pointer register (r26-r31) 22622 22623 `b' 22624 Base pointer register (r28-r31) 22625 22626 `q' 22627 Stack pointer register (SPH:SPL) 22628 22629 `t' 22630 Temporary register r0 22631 22632 `x' 22633 Register pair X (r27:r26) 22634 22635 `y' 22636 Register pair Y (r29:r28) 22637 22638 `z' 22639 Register pair Z (r31:r30) 22640 22641 `I' 22642 Constant greater than -1, less than 64 22643 22644 `J' 22645 Constant greater than -64, less than 1 22646 22647 `K' 22648 Constant integer 2 22649 22650 `L' 22651 Constant integer 0 22652 22653 `M' 22654 Constant that fits in 8 bits 22655 22656 `N' 22657 Constant integer -1 22658 22659 `O' 22660 Constant integer 8, 16, or 24 22661 22662 `P' 22663 Constant integer 1 22664 22665 `G' 22666 A floating point constant 0.0 22667 22668 `R' 22669 Integer constant in the range -6 ... 5. 22670 22671 `Q' 22672 A memory address based on Y or Z pointer with displacement. 22673 22674_CRX Architecture--`config/crx/crx.h'_ 22675 22676 `b' 22677 Registers from r0 to r14 (registers without stack pointer) 22678 22679 `l' 22680 Register r16 (64-bit accumulator lo register) 22681 22682 `h' 22683 Register r17 (64-bit accumulator hi register) 22684 22685 `k' 22686 Register pair r16-r17. (64-bit accumulator lo-hi pair) 22687 22688 `I' 22689 Constant that fits in 3 bits 22690 22691 `J' 22692 Constant that fits in 4 bits 22693 22694 `K' 22695 Constant that fits in 5 bits 22696 22697 `L' 22698 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 22699 22700 `G' 22701 Floating point constant that is legal for store immediate 22702 22703_Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 22704 22705 `a' 22706 General register 1 22707 22708 `f' 22709 Floating point register 22710 22711 `q' 22712 Shift amount register 22713 22714 `x' 22715 Floating point register (deprecated) 22716 22717 `y' 22718 Upper floating point register (32-bit), floating point 22719 register (64-bit) 22720 22721 `Z' 22722 Any register 22723 22724 `I' 22725 Signed 11-bit integer constant 22726 22727 `J' 22728 Signed 14-bit integer constant 22729 22730 `K' 22731 Integer constant that can be deposited with a `zdepi' 22732 instruction 22733 22734 `L' 22735 Signed 5-bit integer constant 22736 22737 `M' 22738 Integer constant 0 22739 22740 `N' 22741 Integer constant that can be loaded with a `ldil' instruction 22742 22743 `O' 22744 Integer constant whose value plus one is a power of 2 22745 22746 `P' 22747 Integer constant that can be used for `and' operations in 22748 `depi' and `extru' instructions 22749 22750 `S' 22751 Integer constant 31 22752 22753 `U' 22754 Integer constant 63 22755 22756 `G' 22757 Floating-point constant 0.0 22758 22759 `A' 22760 A `lo_sum' data-linkage-table memory operand 22761 22762 `Q' 22763 A memory operand that can be used as the destination operand 22764 of an integer store instruction 22765 22766 `R' 22767 A scaled or unscaled indexed memory operand 22768 22769 `T' 22770 A memory operand for floating-point loads and stores 22771 22772 `W' 22773 A register indirect memory operand 22774 22775_picoChip family--`picochip.h'_ 22776 22777 `k' 22778 Stack register. 22779 22780 `f' 22781 Pointer register. A register which can be used to access 22782 memory without supplying an offset. Any other register can 22783 be used to access memory, but will need a constant offset. 22784 In the case of the offset being zero, it is more efficient to 22785 use a pointer register, since this reduces code size. 22786 22787 `t' 22788 A twin register. A register which may be paired with an 22789 adjacent register to create a 32-bit register. 22790 22791 `a' 22792 Any absolute memory address (e.g., symbolic constant, symbolic 22793 constant + offset). 22794 22795 `I' 22796 4-bit signed integer. 22797 22798 `J' 22799 4-bit unsigned integer. 22800 22801 `K' 22802 8-bit signed integer. 22803 22804 `M' 22805 Any constant whose absolute value is no greater than 4-bits. 22806 22807 `N' 22808 10-bit signed integer 22809 22810 `O' 22811 16-bit signed integer. 22812 22813 22814_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 22815 22816 `b' 22817 Address base register 22818 22819 `d' 22820 Floating point register (containing 64-bit value) 22821 22822 `f' 22823 Floating point register (containing 32-bit value) 22824 22825 `v' 22826 Altivec vector register 22827 22828 `wd' 22829 VSX vector register to hold vector double data 22830 22831 `wf' 22832 VSX vector register to hold vector float data 22833 22834 `ws' 22835 VSX vector register to hold scalar float data 22836 22837 `wa' 22838 Any VSX register 22839 22840 `h' 22841 `MQ', `CTR', or `LINK' register 22842 22843 `q' 22844 `MQ' register 22845 22846 `c' 22847 `CTR' register 22848 22849 `l' 22850 `LINK' register 22851 22852 `x' 22853 `CR' register (condition register) number 0 22854 22855 `y' 22856 `CR' register (condition register) 22857 22858 `z' 22859 `FPMEM' stack memory for FPR-GPR transfers 22860 22861 `I' 22862 Signed 16-bit constant 22863 22864 `J' 22865 Unsigned 16-bit constant shifted left 16 bits (use `L' 22866 instead for `SImode' constants) 22867 22868 `K' 22869 Unsigned 16-bit constant 22870 22871 `L' 22872 Signed 16-bit constant shifted left 16 bits 22873 22874 `M' 22875 Constant larger than 31 22876 22877 `N' 22878 Exact power of 2 22879 22880 `O' 22881 Zero 22882 22883 `P' 22884 Constant whose negation is a signed 16-bit constant 22885 22886 `G' 22887 Floating point constant that can be loaded into a register 22888 with one instruction per word 22889 22890 `H' 22891 Integer/Floating point constant that can be loaded into a 22892 register using three instructions 22893 22894 `m' 22895 Memory operand. Note that on PowerPC targets, `m' can include 22896 addresses that update the base register. It is therefore 22897 only safe to use `m' in an `asm' statement if that `asm' 22898 statement accesses the operand exactly once. The `asm' 22899 statement must also use `%U<OPNO>' as a placeholder for the 22900 "update" flag in the corresponding load or store instruction. 22901 For example: 22902 22903 asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val)); 22904 22905 is correct but: 22906 22907 asm ("st %1,%0" : "=m" (mem) : "r" (val)); 22908 22909 is not. Use `es' rather than `m' if you don't want the base 22910 register to be updated. 22911 22912 `es' 22913 A "stable" memory operand; that is, one which does not 22914 include any automodification of the base register. Unlike 22915 `m', this constraint can be used in `asm' statements that 22916 might access the operand several times, or that might not 22917 access it at all. 22918 22919 `Q' 22920 Memory operand that is an offset from a register (it is 22921 usually better to use `m' or `es' in `asm' statements) 22922 22923 `Z' 22924 Memory operand that is an indexed or indirect from a register 22925 (it is usually better to use `m' or `es' in `asm' statements) 22926 22927 `R' 22928 AIX TOC entry 22929 22930 `a' 22931 Address operand that is an indexed or indirect from a 22932 register (`p' is preferable for `asm' statements) 22933 22934 `S' 22935 Constant suitable as a 64-bit mask operand 22936 22937 `T' 22938 Constant suitable as a 32-bit mask operand 22939 22940 `U' 22941 System V Release 4 small data area reference 22942 22943 `t' 22944 AND masks that can be performed by two rldic{l, r} 22945 instructions 22946 22947 `W' 22948 Vector constant that does not require memory 22949 22950 `j' 22951 Vector constant that is all zeros. 22952 22953 22954_Intel 386--`config/i386/constraints.md'_ 22955 22956 `R' 22957 Legacy register--the eight integer registers available on all 22958 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 22959 22960 `q' 22961 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 22962 `c', and `d'; in 64-bit mode, any integer register. 22963 22964 `Q' 22965 Any register accessible as `Rh': `a', `b', `c', and `d'. 22966 22967 `a' 22968 The `a' register. 22969 22970 `b' 22971 The `b' register. 22972 22973 `c' 22974 The `c' register. 22975 22976 `d' 22977 The `d' register. 22978 22979 `S' 22980 The `si' register. 22981 22982 `D' 22983 The `di' register. 22984 22985 `A' 22986 The `a' and `d' registers, as a pair (for instructions that 22987 return half the result in one and half in the other). 22988 22989 `f' 22990 Any 80387 floating-point (stack) register. 22991 22992 `t' 22993 Top of 80387 floating-point stack (`%st(0)'). 22994 22995 `u' 22996 Second from top of 80387 floating-point stack (`%st(1)'). 22997 22998 `y' 22999 Any MMX register. 23000 23001 `x' 23002 Any SSE register. 23003 23004 `Yz' 23005 First SSE register (`%xmm0'). 23006 23007 `I' 23008 Integer constant in the range 0 ... 31, for 32-bit shifts. 23009 23010 `J' 23011 Integer constant in the range 0 ... 63, for 64-bit shifts. 23012 23013 `K' 23014 Signed 8-bit integer constant. 23015 23016 `L' 23017 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 23018 23019 `M' 23020 0, 1, 2, or 3 (shifts for the `lea' instruction). 23021 23022 `N' 23023 Unsigned 8-bit integer constant (for `in' and `out' 23024 instructions). 23025 23026 `G' 23027 Standard 80387 floating point constant. 23028 23029 `C' 23030 Standard SSE floating point constant. 23031 23032 `e' 23033 32-bit signed integer constant, or a symbolic reference known 23034 to fit that range (for immediate operands in sign-extending 23035 x86-64 instructions). 23036 23037 `Z' 23038 32-bit unsigned integer constant, or a symbolic reference 23039 known to fit that range (for immediate operands in 23040 zero-extending x86-64 instructions). 23041 23042 23043_Intel IA-64--`config/ia64/ia64.h'_ 23044 23045 `a' 23046 General register `r0' to `r3' for `addl' instruction 23047 23048 `b' 23049 Branch register 23050 23051 `c' 23052 Predicate register (`c' as in "conditional") 23053 23054 `d' 23055 Application register residing in M-unit 23056 23057 `e' 23058 Application register residing in I-unit 23059 23060 `f' 23061 Floating-point register 23062 23063 `m' 23064 Memory operand. Remember that `m' allows postincrement and 23065 postdecrement which require printing with `%Pn' on IA-64. 23066 Use `S' to disallow postincrement and postdecrement. 23067 23068 `G' 23069 Floating-point constant 0.0 or 1.0 23070 23071 `I' 23072 14-bit signed integer constant 23073 23074 `J' 23075 22-bit signed integer constant 23076 23077 `K' 23078 8-bit signed integer constant for logical instructions 23079 23080 `L' 23081 8-bit adjusted signed integer constant for compare pseudo-ops 23082 23083 `M' 23084 6-bit unsigned integer constant for shift counts 23085 23086 `N' 23087 9-bit signed integer constant for load and store 23088 postincrements 23089 23090 `O' 23091 The constant zero 23092 23093 `P' 23094 0 or -1 for `dep' instruction 23095 23096 `Q' 23097 Non-volatile memory for floating-point loads and stores 23098 23099 `R' 23100 Integer constant in the range 1 to 4 for `shladd' instruction 23101 23102 `S' 23103 Memory operand except postincrement and postdecrement 23104 23105_FRV--`config/frv/frv.h'_ 23106 23107 `a' 23108 Register in the class `ACC_REGS' (`acc0' to `acc7'). 23109 23110 `b' 23111 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 23112 23113 `c' 23114 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 23115 to `icc3'). 23116 23117 `d' 23118 Register in the class `GPR_REGS' (`gr0' to `gr63'). 23119 23120 `e' 23121 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 23122 registers are excluded not in the class but through the use 23123 of a machine mode larger than 4 bytes. 23124 23125 `f' 23126 Register in the class `FPR_REGS' (`fr0' to `fr63'). 23127 23128 `h' 23129 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 23130 registers are excluded not in the class but through the use 23131 of a machine mode larger than 4 bytes. 23132 23133 `l' 23134 Register in the class `LR_REG' (the `lr' register). 23135 23136 `q' 23137 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 23138 Register numbers not divisible by 4 are excluded not in the 23139 class but through the use of a machine mode larger than 8 23140 bytes. 23141 23142 `t' 23143 Register in the class `ICC_REGS' (`icc0' to `icc3'). 23144 23145 `u' 23146 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 23147 23148 `v' 23149 Register in the class `ICR_REGS' (`cc4' to `cc7'). 23150 23151 `w' 23152 Register in the class `FCR_REGS' (`cc0' to `cc3'). 23153 23154 `x' 23155 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 23156 Register numbers not divisible by 4 are excluded not in the 23157 class but through the use of a machine mode larger than 8 23158 bytes. 23159 23160 `z' 23161 Register in the class `SPR_REGS' (`lcr' and `lr'). 23162 23163 `A' 23164 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 23165 23166 `B' 23167 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 23168 23169 `C' 23170 Register in the class `CR_REGS' (`cc0' to `cc7'). 23171 23172 `G' 23173 Floating point constant zero 23174 23175 `I' 23176 6-bit signed integer constant 23177 23178 `J' 23179 10-bit signed integer constant 23180 23181 `L' 23182 16-bit signed integer constant 23183 23184 `M' 23185 16-bit unsigned integer constant 23186 23187 `N' 23188 12-bit signed integer constant that is negative--i.e. in the 23189 range of -2048 to -1 23190 23191 `O' 23192 Constant zero 23193 23194 `P' 23195 12-bit signed integer constant that is greater than 23196 zero--i.e. in the range of 1 to 2047. 23197 23198 23199_Blackfin family--`config/bfin/constraints.md'_ 23200 23201 `a' 23202 P register 23203 23204 `d' 23205 D register 23206 23207 `z' 23208 A call clobbered P register. 23209 23210 `qN' 23211 A single register. If N is in the range 0 to 7, the 23212 corresponding D register. If it is `A', then the register P0. 23213 23214 `D' 23215 Even-numbered D register 23216 23217 `W' 23218 Odd-numbered D register 23219 23220 `e' 23221 Accumulator register. 23222 23223 `A' 23224 Even-numbered accumulator register. 23225 23226 `B' 23227 Odd-numbered accumulator register. 23228 23229 `b' 23230 I register 23231 23232 `v' 23233 B register 23234 23235 `f' 23236 M register 23237 23238 `c' 23239 Registers used for circular buffering, i.e. I, B, or L 23240 registers. 23241 23242 `C' 23243 The CC register. 23244 23245 `t' 23246 LT0 or LT1. 23247 23248 `k' 23249 LC0 or LC1. 23250 23251 `u' 23252 LB0 or LB1. 23253 23254 `x' 23255 Any D, P, B, M, I or L register. 23256 23257 `y' 23258 Additional registers typically used only in prologues and 23259 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 23260 USP. 23261 23262 `w' 23263 Any register except accumulators or CC. 23264 23265 `Ksh' 23266 Signed 16 bit integer (in the range -32768 to 32767) 23267 23268 `Kuh' 23269 Unsigned 16 bit integer (in the range 0 to 65535) 23270 23271 `Ks7' 23272 Signed 7 bit integer (in the range -64 to 63) 23273 23274 `Ku7' 23275 Unsigned 7 bit integer (in the range 0 to 127) 23276 23277 `Ku5' 23278 Unsigned 5 bit integer (in the range 0 to 31) 23279 23280 `Ks4' 23281 Signed 4 bit integer (in the range -8 to 7) 23282 23283 `Ks3' 23284 Signed 3 bit integer (in the range -3 to 4) 23285 23286 `Ku3' 23287 Unsigned 3 bit integer (in the range 0 to 7) 23288 23289 `PN' 23290 Constant N, where N is a single-digit constant in the range 0 23291 to 4. 23292 23293 `PA' 23294 An integer equal to one of the MACFLAG_XXX constants that is 23295 suitable for use with either accumulator. 23296 23297 `PB' 23298 An integer equal to one of the MACFLAG_XXX constants that is 23299 suitable for use only with accumulator A1. 23300 23301 `M1' 23302 Constant 255. 23303 23304 `M2' 23305 Constant 65535. 23306 23307 `J' 23308 An integer constant with exactly a single bit set. 23309 23310 `L' 23311 An integer constant with all bits set except exactly one. 23312 23313 `H' 23314 23315 `Q' 23316 Any SYMBOL_REF. 23317 23318_M32C--`config/m32c/m32c.c'_ 23319 23320 `Rsp' 23321 `Rfb' 23322 `Rsb' 23323 `$sp', `$fb', `$sb'. 23324 23325 `Rcr' 23326 Any control register, when they're 16 bits wide (nothing if 23327 control registers are 24 bits wide) 23328 23329 `Rcl' 23330 Any control register, when they're 24 bits wide. 23331 23332 `R0w' 23333 `R1w' 23334 `R2w' 23335 `R3w' 23336 $r0, $r1, $r2, $r3. 23337 23338 `R02' 23339 $r0 or $r2, or $r2r0 for 32 bit values. 23340 23341 `R13' 23342 $r1 or $r3, or $r3r1 for 32 bit values. 23343 23344 `Rdi' 23345 A register that can hold a 64 bit value. 23346 23347 `Rhl' 23348 $r0 or $r1 (registers with addressable high/low bytes) 23349 23350 `R23' 23351 $r2 or $r3 23352 23353 `Raa' 23354 Address registers 23355 23356 `Raw' 23357 Address registers when they're 16 bits wide. 23358 23359 `Ral' 23360 Address registers when they're 24 bits wide. 23361 23362 `Rqi' 23363 Registers that can hold QI values. 23364 23365 `Rad' 23366 Registers that can be used with displacements ($a0, $a1, $sb). 23367 23368 `Rsi' 23369 Registers that can hold 32 bit values. 23370 23371 `Rhi' 23372 Registers that can hold 16 bit values. 23373 23374 `Rhc' 23375 Registers chat can hold 16 bit values, including all control 23376 registers. 23377 23378 `Rra' 23379 $r0 through R1, plus $a0 and $a1. 23380 23381 `Rfl' 23382 The flags register. 23383 23384 `Rmm' 23385 The memory-based pseudo-registers $mem0 through $mem15. 23386 23387 `Rpi' 23388 Registers that can hold pointers (16 bit registers for r8c, 23389 m16c; 24 bit registers for m32cm, m32c). 23390 23391 `Rpa' 23392 Matches multiple registers in a PARALLEL to form a larger 23393 register. Used to match function return values. 23394 23395 `Is3' 23396 -8 ... 7 23397 23398 `IS1' 23399 -128 ... 127 23400 23401 `IS2' 23402 -32768 ... 32767 23403 23404 `IU2' 23405 0 ... 65535 23406 23407 `In4' 23408 -8 ... -1 or 1 ... 8 23409 23410 `In5' 23411 -16 ... -1 or 1 ... 16 23412 23413 `In6' 23414 -32 ... -1 or 1 ... 32 23415 23416 `IM2' 23417 -65536 ... -1 23418 23419 `Ilb' 23420 An 8 bit value with exactly one bit set. 23421 23422 `Ilw' 23423 A 16 bit value with exactly one bit set. 23424 23425 `Sd' 23426 The common src/dest memory addressing modes. 23427 23428 `Sa' 23429 Memory addressed using $a0 or $a1. 23430 23431 `Si' 23432 Memory addressed with immediate addresses. 23433 23434 `Ss' 23435 Memory addressed using the stack pointer ($sp). 23436 23437 `Sf' 23438 Memory addressed using the frame base register ($fb). 23439 23440 `Ss' 23441 Memory addressed using the small base register ($sb). 23442 23443 `S1' 23444 $r1h 23445 23446_MeP--`config/mep/constraints.md'_ 23447 23448 `a' 23449 The $sp register. 23450 23451 `b' 23452 The $tp register. 23453 23454 `c' 23455 Any control register. 23456 23457 `d' 23458 Either the $hi or the $lo register. 23459 23460 `em' 23461 Coprocessor registers that can be directly loaded ($c0-$c15). 23462 23463 `ex' 23464 Coprocessor registers that can be moved to each other. 23465 23466 `er' 23467 Coprocessor registers that can be moved to core registers. 23468 23469 `h' 23470 The $hi register. 23471 23472 `j' 23473 The $rpc register. 23474 23475 `l' 23476 The $lo register. 23477 23478 `t' 23479 Registers which can be used in $tp-relative addressing. 23480 23481 `v' 23482 The $gp register. 23483 23484 `x' 23485 The coprocessor registers. 23486 23487 `y' 23488 The coprocessor control registers. 23489 23490 `z' 23491 The $0 register. 23492 23493 `A' 23494 User-defined register set A. 23495 23496 `B' 23497 User-defined register set B. 23498 23499 `C' 23500 User-defined register set C. 23501 23502 `D' 23503 User-defined register set D. 23504 23505 `I' 23506 Offsets for $gp-rel addressing. 23507 23508 `J' 23509 Constants that can be used directly with boolean insns. 23510 23511 `K' 23512 Constants that can be moved directly to registers. 23513 23514 `L' 23515 Small constants that can be added to registers. 23516 23517 `M' 23518 Long shift counts. 23519 23520 `N' 23521 Small constants that can be compared to registers. 23522 23523 `O' 23524 Constants that can be loaded into the top half of registers. 23525 23526 `S' 23527 Signed 8-bit immediates. 23528 23529 `T' 23530 Symbols encoded for $tp-rel or $gp-rel addressing. 23531 23532 `U' 23533 Non-constant addresses for loading/saving coprocessor 23534 registers. 23535 23536 `W' 23537 The top half of a symbol's value. 23538 23539 `Y' 23540 A register indirect address without offset. 23541 23542 `Z' 23543 Symbolic references to the control bus. 23544 23545 23546_MIPS--`config/mips/constraints.md'_ 23547 23548 `d' 23549 An address register. This is equivalent to `r' unless 23550 generating MIPS16 code. 23551 23552 `f' 23553 A floating-point register (if available). 23554 23555 `h' 23556 Formerly the `hi' register. This constraint is no longer 23557 supported. 23558 23559 `l' 23560 The `lo' register. Use this register to store values that are 23561 no bigger than a word. 23562 23563 `x' 23564 The concatenated `hi' and `lo' registers. Use this register 23565 to store doubleword values. 23566 23567 `c' 23568 A register suitable for use in an indirect jump. This will 23569 always be `$25' for `-mabicalls'. 23570 23571 `v' 23572 Register `$3'. Do not use this constraint in new code; it is 23573 retained only for compatibility with glibc. 23574 23575 `y' 23576 Equivalent to `r'; retained for backwards compatibility. 23577 23578 `z' 23579 A floating-point condition code register. 23580 23581 `I' 23582 A signed 16-bit constant (for arithmetic instructions). 23583 23584 `J' 23585 Integer zero. 23586 23587 `K' 23588 An unsigned 16-bit constant (for logic instructions). 23589 23590 `L' 23591 A signed 32-bit constant in which the lower 16 bits are zero. 23592 Such constants can be loaded using `lui'. 23593 23594 `M' 23595 A constant that cannot be loaded using `lui', `addiu' or 23596 `ori'. 23597 23598 `N' 23599 A constant in the range -65535 to -1 (inclusive). 23600 23601 `O' 23602 A signed 15-bit constant. 23603 23604 `P' 23605 A constant in the range 1 to 65535 (inclusive). 23606 23607 `G' 23608 Floating-point zero. 23609 23610 `R' 23611 An address that can be used in a non-macro load or store. 23612 23613_Motorola 680x0--`config/m68k/constraints.md'_ 23614 23615 `a' 23616 Address register 23617 23618 `d' 23619 Data register 23620 23621 `f' 23622 68881 floating-point register, if available 23623 23624 `I' 23625 Integer in the range 1 to 8 23626 23627 `J' 23628 16-bit signed number 23629 23630 `K' 23631 Signed number whose magnitude is greater than 0x80 23632 23633 `L' 23634 Integer in the range -8 to -1 23635 23636 `M' 23637 Signed number whose magnitude is greater than 0x100 23638 23639 `N' 23640 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 23641 23642 `O' 23643 16 (for rotate using swap) 23644 23645 `P' 23646 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 23647 23648 `R' 23649 Numbers that mov3q can handle 23650 23651 `G' 23652 Floating point constant that is not a 68881 constant 23653 23654 `S' 23655 Operands that satisfy 'm' when -mpcrel is in effect 23656 23657 `T' 23658 Operands that satisfy 's' when -mpcrel is not in effect 23659 23660 `Q' 23661 Address register indirect addressing mode 23662 23663 `U' 23664 Register offset addressing 23665 23666 `W' 23667 const_call_operand 23668 23669 `Cs' 23670 symbol_ref or const 23671 23672 `Ci' 23673 const_int 23674 23675 `C0' 23676 const_int 0 23677 23678 `Cj' 23679 Range of signed numbers that don't fit in 16 bits 23680 23681 `Cmvq' 23682 Integers valid for mvq 23683 23684 `Capsw' 23685 Integers valid for a moveq followed by a swap 23686 23687 `Cmvz' 23688 Integers valid for mvz 23689 23690 `Cmvs' 23691 Integers valid for mvs 23692 23693 `Ap' 23694 push_operand 23695 23696 `Ac' 23697 Non-register operands allowed in clr 23698 23699 23700_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 23701 23702 `a' 23703 Register `a' 23704 23705 `b' 23706 Register `b' 23707 23708 `d' 23709 Register `d' 23710 23711 `q' 23712 An 8-bit register 23713 23714 `t' 23715 Temporary soft register _.tmp 23716 23717 `u' 23718 A soft register _.d1 to _.d31 23719 23720 `w' 23721 Stack pointer register 23722 23723 `x' 23724 Register `x' 23725 23726 `y' 23727 Register `y' 23728 23729 `z' 23730 Pseudo register `z' (replaced by `x' or `y' at the end) 23731 23732 `A' 23733 An address register: x, y or z 23734 23735 `B' 23736 An address register: x or y 23737 23738 `D' 23739 Register pair (x:d) to form a 32-bit value 23740 23741 `L' 23742 Constants in the range -65536 to 65535 23743 23744 `M' 23745 Constants whose 16-bit low part is zero 23746 23747 `N' 23748 Constant integer 1 or -1 23749 23750 `O' 23751 Constant integer 16 23752 23753 `P' 23754 Constants in the range -8 to 2 23755 23756 23757_Moxie--`config/moxie/constraints.md'_ 23758 23759 `A' 23760 An absolute address 23761 23762 `B' 23763 An offset address 23764 23765 `W' 23766 A register indirect memory operand 23767 23768 `I' 23769 A constant in the range of 0 to 255. 23770 23771 `N' 23772 A constant in the range of 0 to -255. 23773 23774 23775_RX--`config/rx/constraints.md'_ 23776 23777 `Q' 23778 An address which does not involve register indirect 23779 addressing or pre/post increment/decrement addressing. 23780 23781 `Symbol' 23782 A symbol reference. 23783 23784 `Int08' 23785 A constant in the range -256 to 255, inclusive. 23786 23787 `Sint08' 23788 A constant in the range -128 to 127, inclusive. 23789 23790 `Sint16' 23791 A constant in the range -32768 to 32767, inclusive. 23792 23793 `Sint24' 23794 A constant in the range -8388608 to 8388607, inclusive. 23795 23796 `Uint04' 23797 A constant in the range 0 to 15, inclusive. 23798 23799 23800_SPARC--`config/sparc/sparc.h'_ 23801 23802 `f' 23803 Floating-point register on the SPARC-V8 architecture and 23804 lower floating-point register on the SPARC-V9 architecture. 23805 23806 `e' 23807 Floating-point register. It is equivalent to `f' on the 23808 SPARC-V8 architecture and contains both lower and upper 23809 floating-point registers on the SPARC-V9 architecture. 23810 23811 `c' 23812 Floating-point condition code register. 23813 23814 `d' 23815 Lower floating-point register. It is only valid on the 23816 SPARC-V9 architecture when the Visual Instruction Set is 23817 available. 23818 23819 `b' 23820 Floating-point register. It is only valid on the SPARC-V9 23821 architecture when the Visual Instruction Set is available. 23822 23823 `h' 23824 64-bit global or out register for the SPARC-V8+ architecture. 23825 23826 `D' 23827 A vector constant 23828 23829 `I' 23830 Signed 13-bit constant 23831 23832 `J' 23833 Zero 23834 23835 `K' 23836 32-bit constant with the low 12 bits clear (a constant that 23837 can be loaded with the `sethi' instruction) 23838 23839 `L' 23840 A constant in the range supported by `movcc' instructions 23841 23842 `M' 23843 A constant in the range supported by `movrcc' instructions 23844 23845 `N' 23846 Same as `K', except that it verifies that bits that are not 23847 in the lower 32-bit range are all zero. Must be used instead 23848 of `K' for modes wider than `SImode' 23849 23850 `O' 23851 The constant 4096 23852 23853 `G' 23854 Floating-point zero 23855 23856 `H' 23857 Signed 13-bit constant, sign-extended to 32 or 64 bits 23858 23859 `Q' 23860 Floating-point constant whose integral representation can be 23861 moved into an integer register using a single sethi 23862 instruction 23863 23864 `R' 23865 Floating-point constant whose integral representation can be 23866 moved into an integer register using a single mov instruction 23867 23868 `S' 23869 Floating-point constant whose integral representation can be 23870 moved into an integer register using a high/lo_sum 23871 instruction sequence 23872 23873 `T' 23874 Memory address aligned to an 8-byte boundary 23875 23876 `U' 23877 Even register 23878 23879 `W' 23880 Memory address for `e' constraint registers 23881 23882 `Y' 23883 Vector zero 23884 23885 23886_SPU--`config/spu/spu.h'_ 23887 23888 `a' 23889 An immediate which can be loaded with the il/ila/ilh/ilhu 23890 instructions. const_int is treated as a 64 bit value. 23891 23892 `c' 23893 An immediate for and/xor/or instructions. const_int is 23894 treated as a 64 bit value. 23895 23896 `d' 23897 An immediate for the `iohl' instruction. const_int is 23898 treated as a 64 bit value. 23899 23900 `f' 23901 An immediate which can be loaded with `fsmbi'. 23902 23903 `A' 23904 An immediate which can be loaded with the il/ila/ilh/ilhu 23905 instructions. const_int is treated as a 32 bit value. 23906 23907 `B' 23908 An immediate for most arithmetic instructions. const_int is 23909 treated as a 32 bit value. 23910 23911 `C' 23912 An immediate for and/xor/or instructions. const_int is 23913 treated as a 32 bit value. 23914 23915 `D' 23916 An immediate for the `iohl' instruction. const_int is 23917 treated as a 32 bit value. 23918 23919 `I' 23920 A constant in the range [-64, 63] for shift/rotate 23921 instructions. 23922 23923 `J' 23924 An unsigned 7-bit constant for conversion/nop/channel 23925 instructions. 23926 23927 `K' 23928 A signed 10-bit constant for most arithmetic instructions. 23929 23930 `M' 23931 A signed 16 bit immediate for `stop'. 23932 23933 `N' 23934 An unsigned 16-bit constant for `iohl' and `fsmbi'. 23935 23936 `O' 23937 An unsigned 7-bit constant whose 3 least significant bits are 23938 0. 23939 23940 `P' 23941 An unsigned 3-bit constant for 16-byte rotates and shifts 23942 23943 `R' 23944 Call operand, reg, for indirect calls 23945 23946 `S' 23947 Call operand, symbol, for relative calls. 23948 23949 `T' 23950 Call operand, const_int, for absolute calls. 23951 23952 `U' 23953 An immediate which can be loaded with the il/ila/ilh/ilhu 23954 instructions. const_int is sign extended to 128 bit. 23955 23956 `W' 23957 An immediate for shift and rotate instructions. const_int is 23958 treated as a 32 bit value. 23959 23960 `Y' 23961 An immediate for and/xor/or instructions. const_int is sign 23962 extended as a 128 bit. 23963 23964 `Z' 23965 An immediate for the `iohl' instruction. const_int is sign 23966 extended to 128 bit. 23967 23968 23969_S/390 and zSeries--`config/s390/s390.h'_ 23970 23971 `a' 23972 Address register (general purpose register except r0) 23973 23974 `c' 23975 Condition code register 23976 23977 `d' 23978 Data register (arbitrary general purpose register) 23979 23980 `f' 23981 Floating-point register 23982 23983 `I' 23984 Unsigned 8-bit constant (0-255) 23985 23986 `J' 23987 Unsigned 12-bit constant (0-4095) 23988 23989 `K' 23990 Signed 16-bit constant (-32768-32767) 23991 23992 `L' 23993 Value appropriate as displacement. 23994 `(0..4095)' 23995 for short displacement 23996 23997 `(-524288..524287)' 23998 for long displacement 23999 24000 `M' 24001 Constant integer with a value of 0x7fffffff. 24002 24003 `N' 24004 Multiple letter constraint followed by 4 parameter letters. 24005 `0..9:' 24006 number of the part counting from most to least 24007 significant 24008 24009 `H,Q:' 24010 mode of the part 24011 24012 `D,S,H:' 24013 mode of the containing operand 24014 24015 `0,F:' 24016 value of the other parts (F--all bits set) 24017 The constraint matches if the specified part of a constant 24018 has a value different from its other parts. 24019 24020 `Q' 24021 Memory reference without index register and with short 24022 displacement. 24023 24024 `R' 24025 Memory reference with index register and short displacement. 24026 24027 `S' 24028 Memory reference without index register but with long 24029 displacement. 24030 24031 `T' 24032 Memory reference with index register and long displacement. 24033 24034 `U' 24035 Pointer with short displacement. 24036 24037 `W' 24038 Pointer with long displacement. 24039 24040 `Y' 24041 Shift count operand. 24042 24043 24044_Score family--`config/score/score.h'_ 24045 24046 `d' 24047 Registers from r0 to r32. 24048 24049 `e' 24050 Registers from r0 to r16. 24051 24052 `t' 24053 r8--r11 or r22--r27 registers. 24054 24055 `h' 24056 hi register. 24057 24058 `l' 24059 lo register. 24060 24061 `x' 24062 hi + lo register. 24063 24064 `q' 24065 cnt register. 24066 24067 `y' 24068 lcb register. 24069 24070 `z' 24071 scb register. 24072 24073 `a' 24074 cnt + lcb + scb register. 24075 24076 `c' 24077 cr0--cr15 register. 24078 24079 `b' 24080 cp1 registers. 24081 24082 `f' 24083 cp2 registers. 24084 24085 `i' 24086 cp3 registers. 24087 24088 `j' 24089 cp1 + cp2 + cp3 registers. 24090 24091 `I' 24092 High 16-bit constant (32-bit constant with 16 LSBs zero). 24093 24094 `J' 24095 Unsigned 5 bit integer (in the range 0 to 31). 24096 24097 `K' 24098 Unsigned 16 bit integer (in the range 0 to 65535). 24099 24100 `L' 24101 Signed 16 bit integer (in the range -32768 to 32767). 24102 24103 `M' 24104 Unsigned 14 bit integer (in the range 0 to 16383). 24105 24106 `N' 24107 Signed 14 bit integer (in the range -8192 to 8191). 24108 24109 `Z' 24110 Any SYMBOL_REF. 24111 24112_Xstormy16--`config/stormy16/stormy16.h'_ 24113 24114 `a' 24115 Register r0. 24116 24117 `b' 24118 Register r1. 24119 24120 `c' 24121 Register r2. 24122 24123 `d' 24124 Register r8. 24125 24126 `e' 24127 Registers r0 through r7. 24128 24129 `t' 24130 Registers r0 and r1. 24131 24132 `y' 24133 The carry register. 24134 24135 `z' 24136 Registers r8 and r9. 24137 24138 `I' 24139 A constant between 0 and 3 inclusive. 24140 24141 `J' 24142 A constant that has exactly one bit set. 24143 24144 `K' 24145 A constant that has exactly one bit clear. 24146 24147 `L' 24148 A constant between 0 and 255 inclusive. 24149 24150 `M' 24151 A constant between -255 and 0 inclusive. 24152 24153 `N' 24154 A constant between -3 and 0 inclusive. 24155 24156 `O' 24157 A constant between 1 and 4 inclusive. 24158 24159 `P' 24160 A constant between -4 and -1 inclusive. 24161 24162 `Q' 24163 A memory reference that is a stack push. 24164 24165 `R' 24166 A memory reference that is a stack pop. 24167 24168 `S' 24169 A memory reference that refers to a constant address of known 24170 value. 24171 24172 `T' 24173 The register indicated by Rx (not implemented yet). 24174 24175 `U' 24176 A constant that is not between 2 and 15 inclusive. 24177 24178 `Z' 24179 The constant 0. 24180 24181 24182_Xtensa--`config/xtensa/constraints.md'_ 24183 24184 `a' 24185 General-purpose 32-bit register 24186 24187 `b' 24188 One-bit boolean register 24189 24190 `A' 24191 MAC16 40-bit accumulator register 24192 24193 `I' 24194 Signed 12-bit integer constant, for use in MOVI instructions 24195 24196 `J' 24197 Signed 8-bit integer constant, for use in ADDI instructions 24198 24199 `K' 24200 Integer constant valid for BccI instructions 24201 24202 `L' 24203 Unsigned constant valid for BccUI instructions 24204 24205 24206 24207 24208File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 24209 242106.41 Controlling Names Used in Assembler Code 24211============================================= 24212 24213You can specify the name to be used in the assembler code for a C 24214function or variable by writing the `asm' (or `__asm__') keyword after 24215the declarator as follows: 24216 24217 int foo asm ("myfoo") = 2; 24218 24219This specifies that the name to be used for the variable `foo' in the 24220assembler code should be `myfoo' rather than the usual `_foo'. 24221 24222 On systems where an underscore is normally prepended to the name of a C 24223function or variable, this feature allows you to define names for the 24224linker that do not start with an underscore. 24225 24226 It does not make sense to use this feature with a non-static local 24227variable since such variables do not have assembler names. If you are 24228trying to put the variable in a particular register, see *note Explicit 24229Reg Vars::. GCC presently accepts such code with a warning, but will 24230probably be changed to issue an error, rather than a warning, in the 24231future. 24232 24233 You cannot use `asm' in this way in a function _definition_; but you 24234can get the same effect by writing a declaration for the function 24235before its definition and putting `asm' there, like this: 24236 24237 extern func () asm ("FUNC"); 24238 24239 func (x, y) 24240 int x, y; 24241 /* ... */ 24242 24243 It is up to you to make sure that the assembler names you choose do not 24244conflict with any other assembler symbols. Also, you must not use a 24245register name; that would produce completely invalid assembler code. 24246GCC does not as yet have the ability to store static variables in 24247registers. Perhaps that will be added. 24248 24249 24250File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 24251 242526.42 Variables in Specified Registers 24253===================================== 24254 24255GNU C allows you to put a few global variables into specified hardware 24256registers. You can also specify the register in which an ordinary 24257register variable should be allocated. 24258 24259 * Global register variables reserve registers throughout the program. 24260 This may be useful in programs such as programming language 24261 interpreters which have a couple of global variables that are 24262 accessed very often. 24263 24264 * Local register variables in specific registers do not reserve the 24265 registers, except at the point where they are used as input or 24266 output operands in an `asm' statement and the `asm' statement 24267 itself is not deleted. The compiler's data flow analysis is 24268 capable of determining where the specified registers contain live 24269 values, and where they are available for other uses. Stores into 24270 local register variables may be deleted when they appear to be 24271 dead according to dataflow analysis. References to local register 24272 variables may be deleted or moved or simplified. 24273 24274 These local variables are sometimes convenient for use with the 24275 extended `asm' feature (*note Extended Asm::), if you want to 24276 write one output of the assembler instruction directly into a 24277 particular register. (This will work provided the register you 24278 specify fits the constraints specified for that operand in the 24279 `asm'.) 24280 24281* Menu: 24282 24283* Global Reg Vars:: 24284* Local Reg Vars:: 24285 24286 24287File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 24288 242896.42.1 Defining Global Register Variables 24290----------------------------------------- 24291 24292You can define a global register variable in GNU C like this: 24293 24294 register int *foo asm ("a5"); 24295 24296Here `a5' is the name of the register which should be used. Choose a 24297register which is normally saved and restored by function calls on your 24298machine, so that library routines will not clobber it. 24299 24300 Naturally the register name is cpu-dependent, so you would need to 24301conditionalize your program according to cpu type. The register `a5' 24302would be a good choice on a 68000 for a variable of pointer type. On 24303machines with register windows, be sure to choose a "global" register 24304that is not affected magically by the function call mechanism. 24305 24306 In addition, operating systems on one type of cpu may differ in how 24307they name the registers; then you would need additional conditionals. 24308For example, some 68000 operating systems call this register `%a5'. 24309 24310 Eventually there may be a way of asking the compiler to choose a 24311register automatically, but first we need to figure out how it should 24312choose and how to enable you to guide the choice. No solution is 24313evident. 24314 24315 Defining a global register variable in a certain register reserves that 24316register entirely for this use, at least within the current compilation. 24317The register will not be allocated for any other purpose in the 24318functions in the current compilation. The register will not be saved 24319and restored by these functions. Stores into this register are never 24320deleted even if they would appear to be dead, but references may be 24321deleted or moved or simplified. 24322 24323 It is not safe to access the global register variables from signal 24324handlers, or from more than one thread of control, because the system 24325library routines may temporarily use the register for other things 24326(unless you recompile them specially for the task at hand). 24327 24328 It is not safe for one function that uses a global register variable to 24329call another such function `foo' by way of a third function `lose' that 24330was compiled without knowledge of this variable (i.e. in a different 24331source file in which the variable wasn't declared). This is because 24332`lose' might save the register and put some other value there. For 24333example, you can't expect a global register variable to be available in 24334the comparison-function that you pass to `qsort', since `qsort' might 24335have put something else in that register. (If you are prepared to 24336recompile `qsort' with the same global register variable, you can solve 24337this problem.) 24338 24339 If you want to recompile `qsort' or other source files which do not 24340actually use your global register variable, so that they will not use 24341that register for any other purpose, then it suffices to specify the 24342compiler option `-ffixed-REG'. You need not actually add a global 24343register declaration to their source code. 24344 24345 A function which can alter the value of a global register variable 24346cannot safely be called from a function compiled without this variable, 24347because it could clobber the value the caller expects to find there on 24348return. Therefore, the function which is the entry point into the part 24349of the program that uses the global register variable must explicitly 24350save and restore the value which belongs to its caller. 24351 24352 On most machines, `longjmp' will restore to each global register 24353variable the value it had at the time of the `setjmp'. On some 24354machines, however, `longjmp' will not change the value of global 24355register variables. To be portable, the function that called `setjmp' 24356should make other arrangements to save the values of the global register 24357variables, and to restore them in a `longjmp'. This way, the same 24358thing will happen regardless of what `longjmp' does. 24359 24360 All global register variable declarations must precede all function 24361definitions. If such a declaration could appear after function 24362definitions, the declaration would be too late to prevent the register 24363from being used for other purposes in the preceding functions. 24364 24365 Global register variables may not have initial values, because an 24366executable file has no means to supply initial contents for a register. 24367 24368 On the SPARC, there are reports that g3 ... g7 are suitable registers, 24369but certain library functions, such as `getwd', as well as the 24370subroutines for division and remainder, modify g3 and g4. g1 and g2 24371are local temporaries. 24372 24373 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 24374course, it will not do to use more than a few of those. 24375 24376 24377File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 24378 243796.42.2 Specifying Registers for Local Variables 24380----------------------------------------------- 24381 24382You can define a local register variable with a specified register like 24383this: 24384 24385 register int *foo asm ("a5"); 24386 24387Here `a5' is the name of the register which should be used. Note that 24388this is the same syntax used for defining global register variables, 24389but for a local variable it would appear within a function. 24390 24391 Naturally the register name is cpu-dependent, but this is not a 24392problem, since specific registers are most often useful with explicit 24393assembler instructions (*note Extended Asm::). Both of these things 24394generally require that you conditionalize your program according to cpu 24395type. 24396 24397 In addition, operating systems on one type of cpu may differ in how 24398they name the registers; then you would need additional conditionals. 24399For example, some 68000 operating systems call this register `%a5'. 24400 24401 Defining such a register variable does not reserve the register; it 24402remains available for other uses in places where flow control determines 24403the variable's value is not live. 24404 24405 This option does not guarantee that GCC will generate code that has 24406this variable in the register you specify at all times. You may not 24407code an explicit reference to this register in the _assembler 24408instruction template_ part of an `asm' statement and assume it will 24409always refer to this variable. However, using the variable as an `asm' 24410_operand_ guarantees that the specified register is used for the 24411operand. 24412 24413 Stores into local register variables may be deleted when they appear 24414to be dead according to dataflow analysis. References to local 24415register variables may be deleted or moved or simplified. 24416 24417 As for global register variables, it's recommended that you choose a 24418register which is normally saved and restored by function calls on your 24419machine, so that library routines will not clobber it. A common 24420pitfall is to initialize multiple call-clobbered registers with 24421arbitrary expressions, where a function call or library call for an 24422arithmetic operator will overwrite a register value from a previous 24423assignment, for example `r0' below: 24424 register int *p1 asm ("r0") = ...; 24425 register int *p2 asm ("r1") = ...; 24426 In those cases, a solution is to use a temporary variable for each 24427arbitrary expression. *Note Example of asm with clobbered asm reg::. 24428 24429 24430File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 24431 244326.43 Alternate Keywords 24433======================= 24434 24435`-ansi' and the various `-std' options disable certain keywords. This 24436causes trouble when you want to use GNU C extensions, or a 24437general-purpose header file that should be usable by all programs, 24438including ISO C programs. The keywords `asm', `typeof' and `inline' 24439are not available in programs compiled with `-ansi' or `-std' (although 24440`inline' can be used in a program compiled with `-std=c99'). The ISO 24441C99 keyword `restrict' is only available when `-std=gnu99' (which will 24442eventually be the default) or `-std=c99' (or the equivalent 24443`-std=iso9899:1999') is used. 24444 24445 The way to solve these problems is to put `__' at the beginning and 24446end of each problematical keyword. For example, use `__asm__' instead 24447of `asm', and `__inline__' instead of `inline'. 24448 24449 Other C compilers won't accept these alternative keywords; if you want 24450to compile with another compiler, you can define the alternate keywords 24451as macros to replace them with the customary keywords. It looks like 24452this: 24453 24454 #ifndef __GNUC__ 24455 #define __asm__ asm 24456 #endif 24457 24458 `-pedantic' and other options cause warnings for many GNU C extensions. 24459You can prevent such warnings within one expression by writing 24460`__extension__' before the expression. `__extension__' has no effect 24461aside from this. 24462 24463 24464File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 24465 244666.44 Incomplete `enum' Types 24467============================ 24468 24469You can define an `enum' tag without specifying its possible values. 24470This results in an incomplete type, much like what you get if you write 24471`struct foo' without describing the elements. A later declaration 24472which does specify the possible values completes the type. 24473 24474 You can't allocate variables or storage using the type while it is 24475incomplete. However, you can work with pointers to that type. 24476 24477 This extension may not be very useful, but it makes the handling of 24478`enum' more consistent with the way `struct' and `union' are handled. 24479 24480 This extension is not supported by GNU C++. 24481 24482 24483File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 24484 244856.45 Function Names as Strings 24486============================== 24487 24488GCC provides three magic variables which hold the name of the current 24489function, as a string. The first of these is `__func__', which is part 24490of the C99 standard: 24491 24492 The identifier `__func__' is implicitly declared by the translator as 24493if, immediately following the opening brace of each function 24494definition, the declaration 24495 24496 static const char __func__[] = "function-name"; 24497 24498appeared, where function-name is the name of the lexically-enclosing 24499function. This name is the unadorned name of the function. 24500 24501 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 24502recognize only this name. However, it is not standardized. For 24503maximum portability, we recommend you use `__func__', but provide a 24504fallback definition with the preprocessor: 24505 24506 #if __STDC_VERSION__ < 199901L 24507 # if __GNUC__ >= 2 24508 # define __func__ __FUNCTION__ 24509 # else 24510 # define __func__ "<unknown>" 24511 # endif 24512 #endif 24513 24514 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 24515However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 24516the function as well as its bare name. For example, this program: 24517 24518 extern "C" { 24519 extern int printf (char *, ...); 24520 } 24521 24522 class a { 24523 public: 24524 void sub (int i) 24525 { 24526 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 24527 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 24528 } 24529 }; 24530 24531 int 24532 main (void) 24533 { 24534 a ax; 24535 ax.sub (0); 24536 return 0; 24537 } 24538 24539gives this output: 24540 24541 __FUNCTION__ = sub 24542 __PRETTY_FUNCTION__ = void a::sub(int) 24543 24544 These identifiers are not preprocessor macros. In GCC 3.3 and 24545earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 24546treated as string literals; they could be used to initialize `char' 24547arrays, and they could be concatenated with other string literals. GCC 245483.4 and later treat them as variables, like `__func__'. In C++, 24549`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 24550 24551 24552File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 24553 245546.46 Getting the Return or Frame Address of a Function 24555====================================================== 24556 24557These functions may be used to get information about the callers of a 24558function. 24559 24560 -- Built-in Function: void * __builtin_return_address (unsigned int 24561 LEVEL) 24562 This function returns the return address of the current function, 24563 or of one of its callers. The LEVEL argument is number of frames 24564 to scan up the call stack. A value of `0' yields the return 24565 address of the current function, a value of `1' yields the return 24566 address of the caller of the current function, and so forth. When 24567 inlining the expected behavior is that the function will return 24568 the address of the function that will be returned to. To work 24569 around this behavior use the `noinline' function attribute. 24570 24571 The LEVEL argument must be a constant integer. 24572 24573 On some machines it may be impossible to determine the return 24574 address of any function other than the current one; in such cases, 24575 or when the top of the stack has been reached, this function will 24576 return `0' or a random value. In addition, 24577 `__builtin_frame_address' may be used to determine if the top of 24578 the stack has been reached. 24579 24580 Additional post-processing of the returned value may be needed, see 24581 `__builtin_extract_return_address'. 24582 24583 This function should only be used with a nonzero argument for 24584 debugging purposes. 24585 24586 -- Built-in Function: void * __builtin_extract_return_address (void 24587 *ADDR) 24588 The address as returned by `__builtin_return_address' may have to 24589 be fed through this function to get the actual encoded address. 24590 For example, on the 31-bit S/390 platform the highest bit has to 24591 be masked out, or on SPARC platforms an offset has to be added for 24592 the true next instruction to be executed. 24593 24594 If no fixup is needed, this function simply passes through ADDR. 24595 24596 -- Built-in Function: void * __builtin_frob_return_address (void *ADDR) 24597 This function does the reverse of 24598 `__builtin_extract_return_address'. 24599 24600 -- Built-in Function: void * __builtin_frame_address (unsigned int 24601 LEVEL) 24602 This function is similar to `__builtin_return_address', but it 24603 returns the address of the function frame rather than the return 24604 address of the function. Calling `__builtin_frame_address' with a 24605 value of `0' yields the frame address of the current function, a 24606 value of `1' yields the frame address of the caller of the current 24607 function, and so forth. 24608 24609 The frame is the area on the stack which holds local variables and 24610 saved registers. The frame address is normally the address of the 24611 first word pushed on to the stack by the function. However, the 24612 exact definition depends upon the processor and the calling 24613 convention. If the processor has a dedicated frame pointer 24614 register, and the function has a frame, then 24615 `__builtin_frame_address' will return the value of the frame 24616 pointer register. 24617 24618 On some machines it may be impossible to determine the frame 24619 address of any function other than the current one; in such cases, 24620 or when the top of the stack has been reached, this function will 24621 return `0' if the first frame pointer is properly initialized by 24622 the startup code. 24623 24624 This function should only be used with a nonzero argument for 24625 debugging purposes. 24626 24627 24628File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 24629 246306.47 Using vector instructions through built-in functions 24631========================================================= 24632 24633On some targets, the instruction set contains SIMD vector instructions 24634that operate on multiple values contained in one large register at the 24635same time. For example, on the i386 the MMX, 3DNow! and SSE extensions 24636can be used this way. 24637 24638 The first step in using these extensions is to provide the necessary 24639data types. This should be done using an appropriate `typedef': 24640 24641 typedef int v4si __attribute__ ((vector_size (16))); 24642 24643 The `int' type specifies the base type, while the attribute specifies 24644the vector size for the variable, measured in bytes. For example, the 24645declaration above causes the compiler to set the mode for the `v4si' 24646type to be 16 bytes wide and divided into `int' sized units. For a 2464732-bit `int' this means a vector of 4 units of 4 bytes, and the 24648corresponding mode of `foo' will be V4SI. 24649 24650 The `vector_size' attribute is only applicable to integral and float 24651scalars, although arrays, pointers, and function return values are 24652allowed in conjunction with this construct. 24653 24654 All the basic integer types can be used as base types, both as signed 24655and as unsigned: `char', `short', `int', `long', `long long'. In 24656addition, `float' and `double' can be used to build floating-point 24657vector types. 24658 24659 Specifying a combination that is not valid for the current architecture 24660will cause GCC to synthesize the instructions using a narrower mode. 24661For example, if you specify a variable of type `V4SI' and your 24662architecture does not allow for this specific SIMD type, GCC will 24663produce code that uses 4 `SIs'. 24664 24665 The types defined in this manner can be used with a subset of normal C 24666operations. Currently, GCC will allow using the following operators on 24667these types: `+, -, *, /, unary minus, ^, |, &, ~, %'. 24668 24669 The operations behave like C++ `valarrays'. Addition is defined as 24670the addition of the corresponding elements of the operands. For 24671example, in the code below, each of the 4 elements in A will be added 24672to the corresponding 4 elements in B and the resulting vector will be 24673stored in C. 24674 24675 typedef int v4si __attribute__ ((vector_size (16))); 24676 24677 v4si a, b, c; 24678 24679 c = a + b; 24680 24681 Subtraction, multiplication, division, and the logical operations 24682operate in a similar manner. Likewise, the result of using the unary 24683minus or complement operators on a vector type is a vector whose 24684elements are the negative or complemented values of the corresponding 24685elements in the operand. 24686 24687 You can declare variables and use them in function calls and returns, 24688as well as in assignments and some casts. You can specify a vector 24689type as a return type for a function. Vector types can also be used as 24690function arguments. It is possible to cast from one vector type to 24691another, provided they are of the same size (in fact, you can also cast 24692vectors to and from other datatypes of the same size). 24693 24694 You cannot operate between vectors of different lengths or different 24695signedness without a cast. 24696 24697 A port that supports hardware vector operations, usually provides a set 24698of built-in functions that can be used to operate on vectors. For 24699example, a function to add two vectors and multiply the result by a 24700third could look like this: 24701 24702 v4si f (v4si a, v4si b, v4si c) 24703 { 24704 v4si tmp = __builtin_addv4si (a, b); 24705 return __builtin_mulv4si (tmp, c); 24706 } 24707 24708 24709File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 24710 247116.48 Offsetof 24712============= 24713 24714GCC implements for both C and C++ a syntactic extension to implement 24715the `offsetof' macro. 24716 24717 primary: 24718 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 24719 24720 offsetof_member_designator: 24721 `identifier' 24722 | offsetof_member_designator "." `identifier' 24723 | offsetof_member_designator "[" `expr' "]" 24724 24725 This extension is sufficient such that 24726 24727 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 24728 24729 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 24730dependent. In either case, MEMBER may consist of a single identifier, 24731or a sequence of member accesses and array references. 24732 24733 24734File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 24735 247366.49 Built-in functions for atomic memory access 24737================================================ 24738 24739The following builtins are intended to be compatible with those 24740described in the `Intel Itanium Processor-specific Application Binary 24741Interface', section 7.4. As such, they depart from the normal GCC 24742practice of using the "__builtin_" prefix, and further that they are 24743overloaded such that they work on multiple types. 24744 24745 The definition given in the Intel documentation allows only for the 24746use of the types `int', `long', `long long' as well as their unsigned 24747counterparts. GCC will allow any integral scalar or pointer type that 24748is 1, 2, 4 or 8 bytes in length. 24749 24750 Not all operations are supported by all target processors. If a 24751particular operation cannot be implemented on the target processor, a 24752warning will be generated and a call an external function will be 24753generated. The external function will carry the same name as the 24754builtin, with an additional suffix `_N' where N is the size of the data 24755type. 24756 24757 In most cases, these builtins are considered a "full barrier". That 24758is, no memory operand will be moved across the operation, either 24759forward or backward. Further, instructions will be issued as necessary 24760to prevent the processor from speculating loads across the operation 24761and from queuing stores after the operation. 24762 24763 All of the routines are described in the Intel documentation to take 24764"an optional list of variables protected by the memory barrier". It's 24765not clear what is meant by that; it could mean that _only_ the 24766following variables are protected, or it could mean that these variables 24767should in addition be protected. At present GCC ignores this list and 24768protects all variables which are globally accessible. If in the future 24769we make some use of this list, an empty list will continue to mean all 24770globally accessible variables. 24771 24772`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 24773`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 24774`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 24775`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 24776`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 24777`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 24778 These builtins perform the operation suggested by the name, and 24779 returns the value that had previously been in memory. That is, 24780 24781 { tmp = *ptr; *ptr OP= value; return tmp; } 24782 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 24783 24784 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' 24785 builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & 24786 value'. 24787 24788`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 24789`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 24790`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 24791`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 24792`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 24793`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 24794 These builtins perform the operation suggested by the name, and 24795 return the new value. That is, 24796 24797 { *ptr OP= value; return *ptr; } 24798 { *ptr = ~(*ptr & value); return *ptr; } // nand 24799 24800 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' 24801 builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & 24802 value'. 24803 24804`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 24805`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 24806 These builtins perform an atomic compare and swap. That is, if 24807 the current value of `*PTR' is OLDVAL, then write NEWVAL into 24808 `*PTR'. 24809 24810 The "bool" version returns true if the comparison is successful and 24811 NEWVAL was written. The "val" version returns the contents of 24812 `*PTR' before the operation. 24813 24814`__sync_synchronize (...)' 24815 This builtin issues a full memory barrier. 24816 24817`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 24818 This builtin, as described by Intel, is not a traditional 24819 test-and-set operation, but rather an atomic exchange operation. 24820 It writes VALUE into `*PTR', and returns the previous contents of 24821 `*PTR'. 24822 24823 Many targets have only minimal support for such locks, and do not 24824 support a full exchange operation. In this case, a target may 24825 support reduced functionality here by which the _only_ valid value 24826 to store is the immediate constant 1. The exact value actually 24827 stored in `*PTR' is implementation defined. 24828 24829 This builtin is not a full barrier, but rather an "acquire 24830 barrier". This means that references after the builtin cannot 24831 move to (or be speculated to) before the builtin, but previous 24832 memory stores may not be globally visible yet, and previous memory 24833 loads may not yet be satisfied. 24834 24835`void __sync_lock_release (TYPE *ptr, ...)' 24836 This builtin releases the lock acquired by 24837 `__sync_lock_test_and_set'. Normally this means writing the 24838 constant 0 to `*PTR'. 24839 24840 This builtin is not a full barrier, but rather a "release barrier". 24841 This means that all previous memory stores are globally visible, 24842 and all previous memory loads have been satisfied, but following 24843 memory reads are not prevented from being speculated to before the 24844 barrier. 24845 24846 24847File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 24848 248496.50 Object Size Checking Builtins 24850================================== 24851 24852GCC implements a limited buffer overflow protection mechanism that can 24853prevent some buffer overflow attacks. 24854 24855 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 24856 TYPE) 24857 is a built-in construct that returns a constant number of bytes 24858 from PTR to the end of the object PTR pointer points to (if known 24859 at compile time). `__builtin_object_size' never evaluates its 24860 arguments for side-effects. If there are any side-effects in 24861 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 24862 for TYPE 2 or 3. If there are multiple objects PTR can point to 24863 and all of them are known at compile time, the returned number is 24864 the maximum of remaining byte counts in those objects if TYPE & 2 24865 is 0 and minimum if nonzero. If it is not possible to determine 24866 which objects PTR points to at compile time, 24867 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 24868 1 and `(size_t) 0' for TYPE 2 or 3. 24869 24870 TYPE is an integer constant from 0 to 3. If the least significant 24871 bit is clear, objects are whole variables, if it is set, a closest 24872 surrounding subobject is considered the object a pointer points to. 24873 The second bit determines if maximum or minimum of remaining bytes 24874 is computed. 24875 24876 struct V { char buf1[10]; int b; char buf2[10]; } var; 24877 char *p = &var.buf1[1], *q = &var.b; 24878 24879 /* Here the object p points to is var. */ 24880 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 24881 /* The subobject p points to is var.buf1. */ 24882 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 24883 /* The object q points to is var. */ 24884 assert (__builtin_object_size (q, 0) 24885 == (char *) (&var + 1) - (char *) &var.b); 24886 /* The subobject q points to is var.b. */ 24887 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 24888 24889 There are built-in functions added for many common string operation 24890functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 24891provided. This built-in has an additional last argument, which is the 24892number of bytes remaining in object the DEST argument points to or 24893`(size_t) -1' if the size is not known. 24894 24895 The built-in functions are optimized into the normal string functions 24896like `memcpy' if the last argument is `(size_t) -1' or if it is known 24897at compile time that the destination object will not be overflown. If 24898the compiler can determine at compile time the object will be always 24899overflown, it issues a warning. 24900 24901 The intended use can be e.g. 24902 24903 #undef memcpy 24904 #define bos0(dest) __builtin_object_size (dest, 0) 24905 #define memcpy(dest, src, n) \ 24906 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 24907 24908 char *volatile p; 24909 char buf[10]; 24910 /* It is unknown what object p points to, so this is optimized 24911 into plain memcpy - no checking is possible. */ 24912 memcpy (p, "abcde", n); 24913 /* Destination is known and length too. It is known at compile 24914 time there will be no overflow. */ 24915 memcpy (&buf[5], "abcde", 5); 24916 /* Destination is known, but the length is not known at compile time. 24917 This will result in __memcpy_chk call that can check for overflow 24918 at runtime. */ 24919 memcpy (&buf[5], "abcde", n); 24920 /* Destination is known and it is known at compile time there will 24921 be overflow. There will be a warning and __memcpy_chk call that 24922 will abort the program at runtime. */ 24923 memcpy (&buf[6], "abcde", 5); 24924 24925 Such built-in functions are provided for `memcpy', `mempcpy', 24926`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 24927`strncat'. 24928 24929 There are also checking built-in functions for formatted output 24930functions. 24931 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 24932 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 24933 const char *fmt, ...); 24934 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 24935 va_list ap); 24936 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 24937 const char *fmt, va_list ap); 24938 24939 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 24940functions and can contain implementation specific flags on what 24941additional security measures the checking function might take, such as 24942handling `%n' differently. 24943 24944 The OS argument is the object size S points to, like in the other 24945built-in functions. There is a small difference in the behavior 24946though, if OS is `(size_t) -1', the built-in functions are optimized 24947into the non-checking functions only if FLAG is 0, otherwise the 24948checking function is called with OS argument set to `(size_t) -1'. 24949 24950 In addition to this, there are checking built-in functions 24951`__builtin___printf_chk', `__builtin___vprintf_chk', 24952`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 24953just one additional argument, FLAG, right before format string FMT. If 24954the compiler is able to optimize them to `fputc' etc. functions, it 24955will, otherwise the checking function should be called and the FLAG 24956argument passed to it. 24957 24958 24959File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 24960 249616.51 Other built-in functions provided by GCC 24962============================================= 24963 24964GCC provides a large number of built-in functions other than the ones 24965mentioned above. Some of these are for internal use in the processing 24966of exceptions or variable-length argument lists and will not be 24967documented here because they may change from time to time; we do not 24968recommend general use of these functions. 24969 24970 The remaining functions are provided for optimization purposes. 24971 24972 GCC includes built-in versions of many of the functions in the standard 24973C library. The versions prefixed with `__builtin_' will always be 24974treated as having the same meaning as the C library function even if you 24975specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 24976these functions are only optimized in certain cases; if they are not 24977optimized in a particular case, a call to the library function will be 24978emitted. 24979 24980 Outside strict ISO C mode (`-ansi', `-std=c90' or `-std=c99'), the 24981functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 24982`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 24983`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 24984`gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index', 24985`isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn', 24986`lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l', 24987`pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', 24988`signbit', `signbitf', `signbitl', `signbitd32', `signbitd64', 24989`signbitd128', `significandf', `significandl', `significand', `sincosf', 24990`sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup', 24991`strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0', 24992`y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in 24993functions. All these functions have corresponding versions prefixed 24994with `__builtin_', which may be used even in strict C90 mode. 24995 24996 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 24997`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 24998`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 24999`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 25000`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 25001`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 25002`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 25003`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 25004`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 25005`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 25006`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 25007`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 25008`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 25009`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 25010`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 25011`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 25012`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 25013`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 25014`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 25015`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 25016`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 25017`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 25018`remainderf', `remainderl', `remainder', `remquof', `remquol', 25019`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 25020`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 25021`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 25022`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 25023functions except in strict ISO C90 mode (`-ansi' or `-std=c90'). 25024 25025 There are also built-in versions of the ISO C99 functions `acosf', 25026`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 25027`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 25028`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 25029`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 25030`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 25031`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 25032recognized in any mode since ISO C90 reserves these names for the 25033purpose to which ISO C99 puts them. All these functions have 25034corresponding versions prefixed with `__builtin_'. 25035 25036 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 25037`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 25038`iswxdigit', `towlower' and `towupper' are handled as built-in functions 25039except in strict ISO C90 mode (`-ansi' or `-std=c90'). 25040 25041 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 25042`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 25043`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 25044`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 25045`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 25046`log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 25047`printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 25048`sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 25049`strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 25050`strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 25051`vsprintf' are all recognized as built-in functions unless 25052`-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 25053for an individual function). All of these functions have corresponding 25054versions prefixed with `__builtin_'. 25055 25056 GCC provides built-in versions of the ISO C99 floating point comparison 25057macros that avoid raising exceptions for unordered operands. They have 25058the same names as the standard macros ( `isgreater', `isgreaterequal', 25059`isless', `islessequal', `islessgreater', and `isunordered') , with 25060`__builtin_' prefixed. We intend for a library implementor to be able 25061to simply `#define' each standard macro to its built-in equivalent. In 25062the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 25063and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 25064and `isnan' builtins appear both with and without the `__builtin_' 25065prefix. 25066 25067 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 25068 You can use the built-in function `__builtin_types_compatible_p' to 25069 determine whether two types are the same. 25070 25071 This built-in function returns 1 if the unqualified versions of the 25072 types TYPE1 and TYPE2 (which are types, not expressions) are 25073 compatible, 0 otherwise. The result of this built-in function can 25074 be used in integer constant expressions. 25075 25076 This built-in function ignores top level qualifiers (e.g., `const', 25077 `volatile'). For example, `int' is equivalent to `const int'. 25078 25079 The type `int[]' and `int[5]' are compatible. On the other hand, 25080 `int' and `char *' are not compatible, even if the size of their 25081 types, on the particular architecture are the same. Also, the 25082 amount of pointer indirection is taken into account when 25083 determining similarity. Consequently, `short *' is not similar to 25084 `short **'. Furthermore, two types that are typedefed are 25085 considered compatible if their underlying types are compatible. 25086 25087 An `enum' type is not considered to be compatible with another 25088 `enum' type even if both are compatible with the same integer 25089 type; this is what the C standard specifies. For example, `enum 25090 {foo, bar}' is not similar to `enum {hot, dog}'. 25091 25092 You would typically use this function in code whose execution 25093 varies depending on the arguments' types. For example: 25094 25095 #define foo(x) \ 25096 ({ \ 25097 typeof (x) tmp = (x); \ 25098 if (__builtin_types_compatible_p (typeof (x), long double)) \ 25099 tmp = foo_long_double (tmp); \ 25100 else if (__builtin_types_compatible_p (typeof (x), double)) \ 25101 tmp = foo_double (tmp); \ 25102 else if (__builtin_types_compatible_p (typeof (x), float)) \ 25103 tmp = foo_float (tmp); \ 25104 else \ 25105 abort (); \ 25106 tmp; \ 25107 }) 25108 25109 _Note:_ This construct is only available for C. 25110 25111 25112 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 25113 EXP2) 25114 You can use the built-in function `__builtin_choose_expr' to 25115 evaluate code depending on the value of a constant expression. 25116 This built-in function returns EXP1 if CONST_EXP, which is an 25117 integer constant expression, is nonzero. Otherwise it returns 0. 25118 25119 This built-in function is analogous to the `? :' operator in C, 25120 except that the expression returned has its type unaltered by 25121 promotion rules. Also, the built-in function does not evaluate 25122 the expression that was not chosen. For example, if CONST_EXP 25123 evaluates to true, EXP2 is not evaluated even if it has 25124 side-effects. 25125 25126 This built-in function can return an lvalue if the chosen argument 25127 is an lvalue. 25128 25129 If EXP1 is returned, the return type is the same as EXP1's type. 25130 Similarly, if EXP2 is returned, its return type is the same as 25131 EXP2. 25132 25133 Example: 25134 25135 #define foo(x) \ 25136 __builtin_choose_expr ( \ 25137 __builtin_types_compatible_p (typeof (x), double), \ 25138 foo_double (x), \ 25139 __builtin_choose_expr ( \ 25140 __builtin_types_compatible_p (typeof (x), float), \ 25141 foo_float (x), \ 25142 /* The void expression results in a compile-time error \ 25143 when assigning the result to something. */ \ 25144 (void)0)) 25145 25146 _Note:_ This construct is only available for C. Furthermore, the 25147 unused expression (EXP1 or EXP2 depending on the value of 25148 CONST_EXP) may still generate syntax errors. This may change in 25149 future revisions. 25150 25151 25152 -- Built-in Function: int __builtin_constant_p (EXP) 25153 You can use the built-in function `__builtin_constant_p' to 25154 determine if a value is known to be constant at compile-time and 25155 hence that GCC can perform constant-folding on expressions 25156 involving that value. The argument of the function is the value 25157 to test. The function returns the integer 1 if the argument is 25158 known to be a compile-time constant and 0 if it is not known to be 25159 a compile-time constant. A return of 0 does not indicate that the 25160 value is _not_ a constant, but merely that GCC cannot prove it is 25161 a constant with the specified value of the `-O' option. 25162 25163 You would typically use this function in an embedded application 25164 where memory was a critical resource. If you have some complex 25165 calculation, you may want it to be folded if it involves 25166 constants, but need to call a function if it does not. For 25167 example: 25168 25169 #define Scale_Value(X) \ 25170 (__builtin_constant_p (X) \ 25171 ? ((X) * SCALE + OFFSET) : Scale (X)) 25172 25173 You may use this built-in function in either a macro or an inline 25174 function. However, if you use it in an inlined function and pass 25175 an argument of the function as the argument to the built-in, GCC 25176 will never return 1 when you call the inline function with a 25177 string constant or compound literal (*note Compound Literals::) 25178 and will not return 1 when you pass a constant numeric value to 25179 the inline function unless you specify the `-O' option. 25180 25181 You may also use `__builtin_constant_p' in initializers for static 25182 data. For instance, you can write 25183 25184 static const int table[] = { 25185 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 25186 /* ... */ 25187 }; 25188 25189 This is an acceptable initializer even if EXPRESSION is not a 25190 constant expression, including the case where 25191 `__builtin_constant_p' returns 1 because EXPRESSION can be folded 25192 to a constant but EXPRESSION contains operands that would not 25193 otherwise be permitted in a static initializer (for example, `0 && 25194 foo ()'). GCC must be more conservative about evaluating the 25195 built-in in this case, because it has no opportunity to perform 25196 optimization. 25197 25198 Previous versions of GCC did not accept this built-in in data 25199 initializers. The earliest version where it is completely safe is 25200 3.0.1. 25201 25202 -- Built-in Function: long __builtin_expect (long EXP, long C) 25203 You may use `__builtin_expect' to provide the compiler with branch 25204 prediction information. In general, you should prefer to use 25205 actual profile feedback for this (`-fprofile-arcs'), as 25206 programmers are notoriously bad at predicting how their programs 25207 actually perform. However, there are applications in which this 25208 data is hard to collect. 25209 25210 The return value is the value of EXP, which should be an integral 25211 expression. The semantics of the built-in are that it is expected 25212 that EXP == C. For example: 25213 25214 if (__builtin_expect (x, 0)) 25215 foo (); 25216 25217 would indicate that we do not expect to call `foo', since we 25218 expect `x' to be zero. Since you are limited to integral 25219 expressions for EXP, you should use constructions such as 25220 25221 if (__builtin_expect (ptr != NULL, 1)) 25222 error (); 25223 25224 when testing pointer or floating-point values. 25225 25226 -- Built-in Function: void __builtin_trap (void) 25227 This function causes the program to exit abnormally. GCC 25228 implements this function by using a target-dependent mechanism 25229 (such as intentionally executing an illegal instruction) or by 25230 calling `abort'. The mechanism used may vary from release to 25231 release so you should not rely on any particular implementation. 25232 25233 -- Built-in Function: void __builtin_unreachable (void) 25234 If control flow reaches the point of the `__builtin_unreachable', 25235 the program is undefined. It is useful in situations where the 25236 compiler cannot deduce the unreachability of the code. 25237 25238 One such case is immediately following an `asm' statement that 25239 will either never terminate, or one that transfers control 25240 elsewhere and never returns. In this example, without the 25241 `__builtin_unreachable', GCC would issue a warning that control 25242 reaches the end of a non-void function. It would also generate 25243 code to return after the `asm'. 25244 25245 int f (int c, int v) 25246 { 25247 if (c) 25248 { 25249 return v; 25250 } 25251 else 25252 { 25253 asm("jmp error_handler"); 25254 __builtin_unreachable (); 25255 } 25256 } 25257 25258 Because the `asm' statement unconditionally transfers control out 25259 of the function, control will never reach the end of the function 25260 body. The `__builtin_unreachable' is in fact unreachable and 25261 communicates this fact to the compiler. 25262 25263 Another use for `__builtin_unreachable' is following a call a 25264 function that never returns but that is not declared 25265 `__attribute__((noreturn))', as in this example: 25266 25267 void function_that_never_returns (void); 25268 25269 int g (int c) 25270 { 25271 if (c) 25272 { 25273 return 1; 25274 } 25275 else 25276 { 25277 function_that_never_returns (); 25278 __builtin_unreachable (); 25279 } 25280 } 25281 25282 25283 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 25284 *END) 25285 This function is used to flush the processor's instruction cache 25286 for the region of memory between BEGIN inclusive and END 25287 exclusive. Some targets require that the instruction cache be 25288 flushed, after modifying memory containing code, in order to obtain 25289 deterministic behavior. 25290 25291 If the target does not require instruction cache flushes, 25292 `__builtin___clear_cache' has no effect. Otherwise either 25293 instructions are emitted in-line to clear the instruction cache or 25294 a call to the `__clear_cache' function in libgcc is made. 25295 25296 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 25297 This function is used to minimize cache-miss latency by moving 25298 data into a cache before it is accessed. You can insert calls to 25299 `__builtin_prefetch' into code for which you know addresses of 25300 data in memory that is likely to be accessed soon. If the target 25301 supports them, data prefetch instructions will be generated. If 25302 the prefetch is done early enough before the access then the data 25303 will be in the cache by the time it is accessed. 25304 25305 The value of ADDR is the address of the memory to prefetch. There 25306 are two optional arguments, RW and LOCALITY. The value of RW is a 25307 compile-time constant one or zero; one means that the prefetch is 25308 preparing for a write to the memory address and zero, the default, 25309 means that the prefetch is preparing for a read. The value 25310 LOCALITY must be a compile-time constant integer between zero and 25311 three. A value of zero means that the data has no temporal 25312 locality, so it need not be left in the cache after the access. A 25313 value of three means that the data has a high degree of temporal 25314 locality and should be left in all levels of cache possible. 25315 Values of one and two mean, respectively, a low or moderate degree 25316 of temporal locality. The default is three. 25317 25318 for (i = 0; i < n; i++) 25319 { 25320 a[i] = a[i] + b[i]; 25321 __builtin_prefetch (&a[i+j], 1, 1); 25322 __builtin_prefetch (&b[i+j], 0, 1); 25323 /* ... */ 25324 } 25325 25326 Data prefetch does not generate faults if ADDR is invalid, but the 25327 address expression itself must be valid. For example, a prefetch 25328 of `p->next' will not fault if `p->next' is not a valid address, 25329 but evaluation will fault if `p' is not a valid address. 25330 25331 If the target does not support data prefetch, the address 25332 expression is evaluated if it includes side effects but no other 25333 code is generated and GCC does not issue a warning. 25334 25335 -- Built-in Function: double __builtin_huge_val (void) 25336 Returns a positive infinity, if supported by the floating-point 25337 format, else `DBL_MAX'. This function is suitable for 25338 implementing the ISO C macro `HUGE_VAL'. 25339 25340 -- Built-in Function: float __builtin_huge_valf (void) 25341 Similar to `__builtin_huge_val', except the return type is `float'. 25342 25343 -- Built-in Function: long double __builtin_huge_vall (void) 25344 Similar to `__builtin_huge_val', except the return type is `long 25345 double'. 25346 25347 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 25348 int, ...) 25349 This built-in implements the C99 fpclassify functionality. The 25350 first five int arguments should be the target library's notion of 25351 the possible FP classes and are used for return values. They must 25352 be constant values and they must appear in this order: `FP_NAN', 25353 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 25354 ellipsis is for exactly one floating point value to classify. GCC 25355 treats the last argument as type-generic, which means it does not 25356 do default promotion from float to double. 25357 25358 -- Built-in Function: double __builtin_inf (void) 25359 Similar to `__builtin_huge_val', except a warning is generated if 25360 the target floating-point format does not support infinities. 25361 25362 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 25363 Similar to `__builtin_inf', except the return type is `_Decimal32'. 25364 25365 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 25366 Similar to `__builtin_inf', except the return type is `_Decimal64'. 25367 25368 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 25369 Similar to `__builtin_inf', except the return type is 25370 `_Decimal128'. 25371 25372 -- Built-in Function: float __builtin_inff (void) 25373 Similar to `__builtin_inf', except the return type is `float'. 25374 This function is suitable for implementing the ISO C99 macro 25375 `INFINITY'. 25376 25377 -- Built-in Function: long double __builtin_infl (void) 25378 Similar to `__builtin_inf', except the return type is `long 25379 double'. 25380 25381 -- Built-in Function: int __builtin_isinf_sign (...) 25382 Similar to `isinf', except the return value will be negative for 25383 an argument of `-Inf'. Note while the parameter list is an 25384 ellipsis, this function only accepts exactly one floating point 25385 argument. GCC treats this parameter as type-generic, which means 25386 it does not do default promotion from float to double. 25387 25388 -- Built-in Function: double __builtin_nan (const char *str) 25389 This is an implementation of the ISO C99 function `nan'. 25390 25391 Since ISO C99 defines this function in terms of `strtod', which we 25392 do not implement, a description of the parsing is in order. The 25393 string is parsed as by `strtol'; that is, the base is recognized by 25394 leading `0' or `0x' prefixes. The number parsed is placed in the 25395 significand such that the least significant bit of the number is 25396 at the least significant bit of the significand. The number is 25397 truncated to fit the significand field provided. The significand 25398 is forced to be a quiet NaN. 25399 25400 This function, if given a string literal all of which would have 25401 been consumed by strtol, is evaluated early enough that it is 25402 considered a compile-time constant. 25403 25404 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 25405 Similar to `__builtin_nan', except the return type is `_Decimal32'. 25406 25407 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 25408 Similar to `__builtin_nan', except the return type is `_Decimal64'. 25409 25410 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 25411 Similar to `__builtin_nan', except the return type is 25412 `_Decimal128'. 25413 25414 -- Built-in Function: float __builtin_nanf (const char *str) 25415 Similar to `__builtin_nan', except the return type is `float'. 25416 25417 -- Built-in Function: long double __builtin_nanl (const char *str) 25418 Similar to `__builtin_nan', except the return type is `long 25419 double'. 25420 25421 -- Built-in Function: double __builtin_nans (const char *str) 25422 Similar to `__builtin_nan', except the significand is forced to be 25423 a signaling NaN. The `nans' function is proposed by WG14 N965. 25424 25425 -- Built-in Function: float __builtin_nansf (const char *str) 25426 Similar to `__builtin_nans', except the return type is `float'. 25427 25428 -- Built-in Function: long double __builtin_nansl (const char *str) 25429 Similar to `__builtin_nans', except the return type is `long 25430 double'. 25431 25432 -- Built-in Function: int __builtin_ffs (unsigned int x) 25433 Returns one plus the index of the least significant 1-bit of X, or 25434 if X is zero, returns zero. 25435 25436 -- Built-in Function: int __builtin_clz (unsigned int x) 25437 Returns the number of leading 0-bits in X, starting at the most 25438 significant bit position. If X is 0, the result is undefined. 25439 25440 -- Built-in Function: int __builtin_ctz (unsigned int x) 25441 Returns the number of trailing 0-bits in X, starting at the least 25442 significant bit position. If X is 0, the result is undefined. 25443 25444 -- Built-in Function: int __builtin_popcount (unsigned int x) 25445 Returns the number of 1-bits in X. 25446 25447 -- Built-in Function: int __builtin_parity (unsigned int x) 25448 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 25449 25450 -- Built-in Function: int __builtin_ffsl (unsigned long) 25451 Similar to `__builtin_ffs', except the argument type is `unsigned 25452 long'. 25453 25454 -- Built-in Function: int __builtin_clzl (unsigned long) 25455 Similar to `__builtin_clz', except the argument type is `unsigned 25456 long'. 25457 25458 -- Built-in Function: int __builtin_ctzl (unsigned long) 25459 Similar to `__builtin_ctz', except the argument type is `unsigned 25460 long'. 25461 25462 -- Built-in Function: int __builtin_popcountl (unsigned long) 25463 Similar to `__builtin_popcount', except the argument type is 25464 `unsigned long'. 25465 25466 -- Built-in Function: int __builtin_parityl (unsigned long) 25467 Similar to `__builtin_parity', except the argument type is 25468 `unsigned long'. 25469 25470 -- Built-in Function: int __builtin_ffsll (unsigned long long) 25471 Similar to `__builtin_ffs', except the argument type is `unsigned 25472 long long'. 25473 25474 -- Built-in Function: int __builtin_clzll (unsigned long long) 25475 Similar to `__builtin_clz', except the argument type is `unsigned 25476 long long'. 25477 25478 -- Built-in Function: int __builtin_ctzll (unsigned long long) 25479 Similar to `__builtin_ctz', except the argument type is `unsigned 25480 long long'. 25481 25482 -- Built-in Function: int __builtin_popcountll (unsigned long long) 25483 Similar to `__builtin_popcount', except the argument type is 25484 `unsigned long long'. 25485 25486 -- Built-in Function: int __builtin_parityll (unsigned long long) 25487 Similar to `__builtin_parity', except the argument type is 25488 `unsigned long long'. 25489 25490 -- Built-in Function: double __builtin_powi (double, int) 25491 Returns the first argument raised to the power of the second. 25492 Unlike the `pow' function no guarantees about precision and 25493 rounding are made. 25494 25495 -- Built-in Function: float __builtin_powif (float, int) 25496 Similar to `__builtin_powi', except the argument and return types 25497 are `float'. 25498 25499 -- Built-in Function: long double __builtin_powil (long double, int) 25500 Similar to `__builtin_powi', except the argument and return types 25501 are `long double'. 25502 25503 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 25504 Returns X with the order of the bytes reversed; for example, 25505 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 25506 8 bits. 25507 25508 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 25509 Similar to `__builtin_bswap32', except the argument and return 25510 types are 64-bit. 25511 25512 25513File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 25514 255156.52 Built-in Functions Specific to Particular Target Machines 25516============================================================== 25517 25518On some target machines, GCC supports many built-in functions specific 25519to those machines. Generally these generate calls to specific machine 25520instructions, but allow the compiler to schedule those calls. 25521 25522* Menu: 25523 25524* Alpha Built-in Functions:: 25525* ARM iWMMXt Built-in Functions:: 25526* ARM NEON Intrinsics:: 25527* Blackfin Built-in Functions:: 25528* FR-V Built-in Functions:: 25529* X86 Built-in Functions:: 25530* MIPS DSP Built-in Functions:: 25531* MIPS Paired-Single Support:: 25532* MIPS Loongson Built-in Functions:: 25533* Other MIPS Built-in Functions:: 25534* picoChip Built-in Functions:: 25535* PowerPC AltiVec/VSX Built-in Functions:: 25536* RX Built-in Functions:: 25537* SPARC VIS Built-in Functions:: 25538* SPU Built-in Functions:: 25539 25540 25541File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 25542 255436.52.1 Alpha Built-in Functions 25544------------------------------- 25545 25546These built-in functions are available for the Alpha family of 25547processors, depending on the command-line switches used. 25548 25549 The following built-in functions are always available. They all 25550generate the machine instruction that is part of the name. 25551 25552 long __builtin_alpha_implver (void) 25553 long __builtin_alpha_rpcc (void) 25554 long __builtin_alpha_amask (long) 25555 long __builtin_alpha_cmpbge (long, long) 25556 long __builtin_alpha_extbl (long, long) 25557 long __builtin_alpha_extwl (long, long) 25558 long __builtin_alpha_extll (long, long) 25559 long __builtin_alpha_extql (long, long) 25560 long __builtin_alpha_extwh (long, long) 25561 long __builtin_alpha_extlh (long, long) 25562 long __builtin_alpha_extqh (long, long) 25563 long __builtin_alpha_insbl (long, long) 25564 long __builtin_alpha_inswl (long, long) 25565 long __builtin_alpha_insll (long, long) 25566 long __builtin_alpha_insql (long, long) 25567 long __builtin_alpha_inswh (long, long) 25568 long __builtin_alpha_inslh (long, long) 25569 long __builtin_alpha_insqh (long, long) 25570 long __builtin_alpha_mskbl (long, long) 25571 long __builtin_alpha_mskwl (long, long) 25572 long __builtin_alpha_mskll (long, long) 25573 long __builtin_alpha_mskql (long, long) 25574 long __builtin_alpha_mskwh (long, long) 25575 long __builtin_alpha_msklh (long, long) 25576 long __builtin_alpha_mskqh (long, long) 25577 long __builtin_alpha_umulh (long, long) 25578 long __builtin_alpha_zap (long, long) 25579 long __builtin_alpha_zapnot (long, long) 25580 25581 The following built-in functions are always with `-mmax' or 25582`-mcpu=CPU' where CPU is `pca56' or later. They all generate the 25583machine instruction that is part of the name. 25584 25585 long __builtin_alpha_pklb (long) 25586 long __builtin_alpha_pkwb (long) 25587 long __builtin_alpha_unpkbl (long) 25588 long __builtin_alpha_unpkbw (long) 25589 long __builtin_alpha_minub8 (long, long) 25590 long __builtin_alpha_minsb8 (long, long) 25591 long __builtin_alpha_minuw4 (long, long) 25592 long __builtin_alpha_minsw4 (long, long) 25593 long __builtin_alpha_maxub8 (long, long) 25594 long __builtin_alpha_maxsb8 (long, long) 25595 long __builtin_alpha_maxuw4 (long, long) 25596 long __builtin_alpha_maxsw4 (long, long) 25597 long __builtin_alpha_perr (long, long) 25598 25599 The following built-in functions are always with `-mcix' or 25600`-mcpu=CPU' where CPU is `ev67' or later. They all generate the 25601machine instruction that is part of the name. 25602 25603 long __builtin_alpha_cttz (long) 25604 long __builtin_alpha_ctlz (long) 25605 long __builtin_alpha_ctpop (long) 25606 25607 The following builtins are available on systems that use the OSF/1 25608PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 25609when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 25610 25611 void *__builtin_thread_pointer (void) 25612 void __builtin_set_thread_pointer (void *) 25613 25614 25615File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 25616 256176.52.2 ARM iWMMXt Built-in Functions 25618------------------------------------ 25619 25620These built-in functions are available for the ARM family of processors 25621when the `-mcpu=iwmmxt' switch is used: 25622 25623 typedef int v2si __attribute__ ((vector_size (8))); 25624 typedef short v4hi __attribute__ ((vector_size (8))); 25625 typedef char v8qi __attribute__ ((vector_size (8))); 25626 25627 int __builtin_arm_getwcx (int) 25628 void __builtin_arm_setwcx (int, int) 25629 int __builtin_arm_textrmsb (v8qi, int) 25630 int __builtin_arm_textrmsh (v4hi, int) 25631 int __builtin_arm_textrmsw (v2si, int) 25632 int __builtin_arm_textrmub (v8qi, int) 25633 int __builtin_arm_textrmuh (v4hi, int) 25634 int __builtin_arm_textrmuw (v2si, int) 25635 v8qi __builtin_arm_tinsrb (v8qi, int) 25636 v4hi __builtin_arm_tinsrh (v4hi, int) 25637 v2si __builtin_arm_tinsrw (v2si, int) 25638 long long __builtin_arm_tmia (long long, int, int) 25639 long long __builtin_arm_tmiabb (long long, int, int) 25640 long long __builtin_arm_tmiabt (long long, int, int) 25641 long long __builtin_arm_tmiaph (long long, int, int) 25642 long long __builtin_arm_tmiatb (long long, int, int) 25643 long long __builtin_arm_tmiatt (long long, int, int) 25644 int __builtin_arm_tmovmskb (v8qi) 25645 int __builtin_arm_tmovmskh (v4hi) 25646 int __builtin_arm_tmovmskw (v2si) 25647 long long __builtin_arm_waccb (v8qi) 25648 long long __builtin_arm_wacch (v4hi) 25649 long long __builtin_arm_waccw (v2si) 25650 v8qi __builtin_arm_waddb (v8qi, v8qi) 25651 v8qi __builtin_arm_waddbss (v8qi, v8qi) 25652 v8qi __builtin_arm_waddbus (v8qi, v8qi) 25653 v4hi __builtin_arm_waddh (v4hi, v4hi) 25654 v4hi __builtin_arm_waddhss (v4hi, v4hi) 25655 v4hi __builtin_arm_waddhus (v4hi, v4hi) 25656 v2si __builtin_arm_waddw (v2si, v2si) 25657 v2si __builtin_arm_waddwss (v2si, v2si) 25658 v2si __builtin_arm_waddwus (v2si, v2si) 25659 v8qi __builtin_arm_walign (v8qi, v8qi, int) 25660 long long __builtin_arm_wand(long long, long long) 25661 long long __builtin_arm_wandn (long long, long long) 25662 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 25663 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 25664 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 25665 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 25666 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 25667 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 25668 v2si __builtin_arm_wcmpeqw (v2si, v2si) 25669 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 25670 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 25671 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 25672 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 25673 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 25674 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 25675 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 25676 long long __builtin_arm_wmacsz (v4hi, v4hi) 25677 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 25678 long long __builtin_arm_wmacuz (v4hi, v4hi) 25679 v4hi __builtin_arm_wmadds (v4hi, v4hi) 25680 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 25681 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 25682 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 25683 v2si __builtin_arm_wmaxsw (v2si, v2si) 25684 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 25685 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 25686 v2si __builtin_arm_wmaxuw (v2si, v2si) 25687 v8qi __builtin_arm_wminsb (v8qi, v8qi) 25688 v4hi __builtin_arm_wminsh (v4hi, v4hi) 25689 v2si __builtin_arm_wminsw (v2si, v2si) 25690 v8qi __builtin_arm_wminub (v8qi, v8qi) 25691 v4hi __builtin_arm_wminuh (v4hi, v4hi) 25692 v2si __builtin_arm_wminuw (v2si, v2si) 25693 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 25694 v4hi __builtin_arm_wmulul (v4hi, v4hi) 25695 v4hi __builtin_arm_wmulum (v4hi, v4hi) 25696 long long __builtin_arm_wor (long long, long long) 25697 v2si __builtin_arm_wpackdss (long long, long long) 25698 v2si __builtin_arm_wpackdus (long long, long long) 25699 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 25700 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 25701 v4hi __builtin_arm_wpackwss (v2si, v2si) 25702 v4hi __builtin_arm_wpackwus (v2si, v2si) 25703 long long __builtin_arm_wrord (long long, long long) 25704 long long __builtin_arm_wrordi (long long, int) 25705 v4hi __builtin_arm_wrorh (v4hi, long long) 25706 v4hi __builtin_arm_wrorhi (v4hi, int) 25707 v2si __builtin_arm_wrorw (v2si, long long) 25708 v2si __builtin_arm_wrorwi (v2si, int) 25709 v2si __builtin_arm_wsadb (v8qi, v8qi) 25710 v2si __builtin_arm_wsadbz (v8qi, v8qi) 25711 v2si __builtin_arm_wsadh (v4hi, v4hi) 25712 v2si __builtin_arm_wsadhz (v4hi, v4hi) 25713 v4hi __builtin_arm_wshufh (v4hi, int) 25714 long long __builtin_arm_wslld (long long, long long) 25715 long long __builtin_arm_wslldi (long long, int) 25716 v4hi __builtin_arm_wsllh (v4hi, long long) 25717 v4hi __builtin_arm_wsllhi (v4hi, int) 25718 v2si __builtin_arm_wsllw (v2si, long long) 25719 v2si __builtin_arm_wsllwi (v2si, int) 25720 long long __builtin_arm_wsrad (long long, long long) 25721 long long __builtin_arm_wsradi (long long, int) 25722 v4hi __builtin_arm_wsrah (v4hi, long long) 25723 v4hi __builtin_arm_wsrahi (v4hi, int) 25724 v2si __builtin_arm_wsraw (v2si, long long) 25725 v2si __builtin_arm_wsrawi (v2si, int) 25726 long long __builtin_arm_wsrld (long long, long long) 25727 long long __builtin_arm_wsrldi (long long, int) 25728 v4hi __builtin_arm_wsrlh (v4hi, long long) 25729 v4hi __builtin_arm_wsrlhi (v4hi, int) 25730 v2si __builtin_arm_wsrlw (v2si, long long) 25731 v2si __builtin_arm_wsrlwi (v2si, int) 25732 v8qi __builtin_arm_wsubb (v8qi, v8qi) 25733 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 25734 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 25735 v4hi __builtin_arm_wsubh (v4hi, v4hi) 25736 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 25737 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 25738 v2si __builtin_arm_wsubw (v2si, v2si) 25739 v2si __builtin_arm_wsubwss (v2si, v2si) 25740 v2si __builtin_arm_wsubwus (v2si, v2si) 25741 v4hi __builtin_arm_wunpckehsb (v8qi) 25742 v2si __builtin_arm_wunpckehsh (v4hi) 25743 long long __builtin_arm_wunpckehsw (v2si) 25744 v4hi __builtin_arm_wunpckehub (v8qi) 25745 v2si __builtin_arm_wunpckehuh (v4hi) 25746 long long __builtin_arm_wunpckehuw (v2si) 25747 v4hi __builtin_arm_wunpckelsb (v8qi) 25748 v2si __builtin_arm_wunpckelsh (v4hi) 25749 long long __builtin_arm_wunpckelsw (v2si) 25750 v4hi __builtin_arm_wunpckelub (v8qi) 25751 v2si __builtin_arm_wunpckeluh (v4hi) 25752 long long __builtin_arm_wunpckeluw (v2si) 25753 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 25754 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 25755 v2si __builtin_arm_wunpckihw (v2si, v2si) 25756 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 25757 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 25758 v2si __builtin_arm_wunpckilw (v2si, v2si) 25759 long long __builtin_arm_wxor (long long, long long) 25760 long long __builtin_arm_wzero () 25761 25762 25763File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 25764 257656.52.3 ARM NEON Intrinsics 25766-------------------------- 25767 25768These built-in intrinsics for the ARM Advanced SIMD extension are 25769available when the `-mfpu=neon' switch is used: 25770 257716.52.3.1 Addition 25772................. 25773 25774 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 25775 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 25776 25777 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 25778 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 25779 25780 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 25781 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 25782 25783 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 25784 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 25785 25786 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 25787 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 25788 25789 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 25790 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 25791 25792 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 25793 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 25794 25795 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 25796 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 25797 25798 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 25799 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 25800 25801 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 25802 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 25803 25804 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 25805 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 25806 25807 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 25808 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 25809 25810 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 25811 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 25812 25813 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 25814 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 25815 25816 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 25817 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 25818 25819 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 25820 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 25821 25822 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 25823 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 25824 25825 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 25826 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 25827 25828 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 25829 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 25830 25831 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 25832 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 25833 25834 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 25835 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 25836 25837 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 25838 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 25839 25840 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 25841 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 25842 25843 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 25844 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 25845 25846 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 25847 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 25848 25849 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 25850 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 25851 25852 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 25853 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 25854 25855 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 25856 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 25857 25858 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 25859 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 25860 25861 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 25862 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 25863 25864 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 25865 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 25866 25867 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 25868 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 25869 25870 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 25871 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 25872 25873 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 25874 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 25875 25876 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 25877 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 25878 25879 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 25880 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 25881 25882 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 25883 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 25884 25885 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 25886 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 25887 25888 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 25889 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 25890 25891 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 25892 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 25893 25894 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 25895 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 25896 25897 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 25898 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 25899 25900 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 25901 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 25902 25903 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 25904 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 25905 25906 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 25907 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 25908 25909 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 25910 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 25911 25912 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 25913 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 25914 25915 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 25916 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 25917 25918 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 25919 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 25920 25921 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 25922 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 25923 25924 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 25925 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 25926 25927 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 25928 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 25929 25930 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 25931 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 25932 25933 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 25934 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 25935 25936 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 25937 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 25938 25939 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 25940 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 25941 25942 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 25943 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 25944 25945 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 25946 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 25947 25948 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 25949 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 25950 25951 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 25952 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 25953 25954 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 25955 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 25956 25957 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 25958 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 25959 25960 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 25961 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 25962 25963 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 25964 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 25965 25966 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 25967 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 25968 25969 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 25970 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 25971 25972 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 25973 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 25974 25975 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 25976 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 25977 25978 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 25979 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 25980 25981 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 25982 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 25983 25984 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 25985 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 25986 25987 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 25988 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 25989 25990 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 25991 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 25992 25993 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 25994 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 25995 25996 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 25997 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 25998 25999 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 26000 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 26001 26002 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 26003 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 26004 26005 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 26006 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 26007 26008 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 26009 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 26010 26011 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 26012 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 26013 26014 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 26015 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 26016 26017 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 26018 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 26019 260206.52.3.2 Multiplication 26021....................... 26022 26023 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 26024 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 26025 26026 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 26027 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 26028 26029 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 26030 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 26031 26032 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 26033 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 26034 26035 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 26036 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 26037 26038 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 26039 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 26040 26041 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 26042 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 26043 26044 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 26045 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 26046 26047 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 26048 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 26049 26050 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 26051 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 26052 26053 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 26054 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 26055 26056 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 26057 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 26058 26059 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 26060 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 26061 26062 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 26063 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 26064 26065 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 26066 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 26067 26068 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 26069 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 26070 26071 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 26072 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 26073 26074 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 26075 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 26076 26077 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 26078 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 26079 26080 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 26081 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 26082 26083 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 26084 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 26085 26086 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 26087 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 26088 26089 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 26090 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 26091 26092 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 26093 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 26094 26095 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 26096 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 26097 26098 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 26099 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 26100 26101 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 26102 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 26103 26104 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 26105 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 26106 26107 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 26108 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 26109 26110 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 26111 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 26112 26113 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 26114 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 26115 26116 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 26117 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 26118 26119 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 26120 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 26121 261226.52.3.3 Multiply-accumulate 26123............................ 26124 26125 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 26126 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 26127 26128 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 26129 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 26130 26131 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 26132 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 26133 26134 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 26135 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 26136 26137 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 26138 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 26139 26140 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 26141 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 26142 26143 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 26144 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 26145 26146 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 26147 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 26148 26149 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 26150 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 26151 26152 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 26153 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 26154 26155 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 26156 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 26157 26158 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 26159 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 26160 26161 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 26162 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 26163 26164 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 26165 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 26166 26167 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 26168 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 26169 26170 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 26171 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 26172 26173 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 26174 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 26175 26176 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 26177 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 26178 26179 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 26180 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 26181 26182 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 26183 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 26184 26185 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 26186 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 26187 26188 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 26189 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 26190 261916.52.3.4 Multiply-subtract 26192.......................... 26193 26194 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 26195 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 26196 26197 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 26198 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 26199 26200 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 26201 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 26202 26203 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 26204 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 26205 26206 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 26207 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 26208 26209 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 26210 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 26211 26212 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 26213 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 26214 26215 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 26216 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 26217 26218 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 26219 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 26220 26221 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 26222 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 26223 26224 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 26225 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 26226 26227 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 26228 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 26229 26230 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 26231 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 26232 26233 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 26234 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 26235 26236 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 26237 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 26238 26239 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 26240 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 26241 26242 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 26243 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 26244 26245 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 26246 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 26247 26248 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 26249 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 26250 26251 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 26252 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 26253 26254 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 26255 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 26256 26257 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 26258 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 26259 262606.52.3.5 Subtraction 26261.................... 26262 26263 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 26264 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 26265 26266 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 26267 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 26268 26269 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 26270 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 26271 26272 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 26273 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 26274 26275 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 26276 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 26277 26278 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 26279 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 26280 26281 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 26282 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 26283 26284 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 26285 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 26286 26287 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 26288 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 26289 26290 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 26291 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 26292 26293 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 26294 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 26295 26296 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 26297 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 26298 26299 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 26300 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 26301 26302 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 26303 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 26304 26305 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 26306 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 26307 26308 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 26309 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 26310 26311 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 26312 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 26313 26314 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 26315 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 26316 26317 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 26318 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 26319 26320 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 26321 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 26322 26323 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 26324 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 26325 26326 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 26327 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 26328 26329 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 26330 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 26331 26332 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 26333 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 26334 26335 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 26336 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 26337 26338 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 26339 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 26340 26341 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 26342 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 26343 26344 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 26345 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 26346 26347 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 26348 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 26349 26350 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 26351 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 26352 26353 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 26354 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 26355 26356 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 26357 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 26358 26359 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 26360 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 26361 26362 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 26363 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 26364 26365 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 26366 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 26367 26368 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 26369 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 26370 26371 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 26372 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 26373 26374 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 26375 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 26376 26377 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 26378 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 26379 26380 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 26381 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 26382 26383 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 26384 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 26385 26386 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 26387 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 26388 26389 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 26390 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 26391 26392 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 26393 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 26394 26395 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 26396 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 26397 26398 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 26399 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 26400 26401 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 26402 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 26403 26404 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 26405 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 26406 26407 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 26408 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 26409 26410 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 26411 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 26412 26413 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 26414 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 26415 26416 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 26417 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 26418 26419 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 26420 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 26421 26422 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 26423 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 26424 26425 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 26426 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 26427 26428 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 26429 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 26430 26431 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 26432 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 26433 26434 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 26435 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 26436 26437 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 26438 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 26439 26440 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 26441 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 26442 26443 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 26444 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 26445 26446 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 26447 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 26448 26449 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 26450 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 26451 26452 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 26453 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 26454 26455 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 26456 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 26457 26458 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 26459 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 26460 26461 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 26462 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 26463 26464 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 26465 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 26466 26467 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 26468 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 26469 26470 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 26471 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 26472 264736.52.3.6 Comparison (equal-to) 26474.............................. 26475 26476 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 26477 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 26478 26479 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 26480 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 26481 26482 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 26483 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 26484 26485 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 26486 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 26487 26488 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 26489 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 26490 26491 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 26492 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 26493 26494 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 26495 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 26496 26497 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 26498 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 26499 26500 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 26501 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 26502 26503 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 26504 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 26505 26506 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 26507 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 26508 26509 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 26510 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 26511 26512 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 26513 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 26514 26515 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 26516 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 26517 26518 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 26519 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 26520 26521 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 26522 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 26523 265246.52.3.7 Comparison (greater-than-or-equal-to) 26525.............................................. 26526 26527 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 26528 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 26529 26530 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 26531 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 26532 26533 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 26534 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 26535 26536 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 26537 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 26538 26539 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 26540 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 26541 26542 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 26543 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 26544 26545 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 26546 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 26547 26548 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 26549 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 26550 26551 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 26552 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 26553 26554 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 26555 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 26556 26557 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 26558 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 26559 26560 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 26561 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 26562 26563 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 26564 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 26565 26566 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 26567 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 26568 265696.52.3.8 Comparison (less-than-or-equal-to) 26570........................................... 26571 26572 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 26573 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 26574 26575 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 26576 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 26577 26578 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 26579 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 26580 26581 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 26582 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 26583 26584 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 26585 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 26586 26587 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 26588 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 26589 26590 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 26591 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 26592 26593 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 26594 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 26595 26596 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 26597 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 26598 26599 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 26600 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 26601 26602 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 26603 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 26604 26605 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 26606 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 26607 26608 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 26609 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 26610 26611 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 26612 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 26613 266146.52.3.9 Comparison (greater-than) 26615.................................. 26616 26617 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 26618 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 26619 26620 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 26621 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 26622 26623 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 26624 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 26625 26626 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 26627 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 26628 26629 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 26630 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 26631 26632 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 26633 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 26634 26635 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 26636 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 26637 26638 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 26639 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 26640 26641 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 26642 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 26643 26644 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 26645 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 26646 26647 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 26648 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 26649 26650 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 26651 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 26652 26653 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 26654 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 26655 26656 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 26657 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 26658 266596.52.3.10 Comparison (less-than) 26660................................ 26661 26662 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 26663 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 26664 26665 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 26666 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 26667 26668 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 26669 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 26670 26671 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 26672 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 26673 26674 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 26675 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 26676 26677 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 26678 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 26679 26680 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 26681 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 26682 26683 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 26684 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 26685 26686 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 26687 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 26688 26689 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 26690 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 26691 26692 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 26693 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 26694 26695 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 26696 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 26697 26698 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 26699 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 26700 26701 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 26702 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 26703 267046.52.3.11 Comparison (absolute greater-than-or-equal-to) 26705........................................................ 26706 26707 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 26708 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 26709 26710 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 26711 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 26712 267136.52.3.12 Comparison (absolute less-than-or-equal-to) 26714..................................................... 26715 26716 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 26717 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 26718 26719 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 26720 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 26721 267226.52.3.13 Comparison (absolute greater-than) 26723............................................ 26724 26725 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 26726 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 26727 26728 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 26729 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 26730 267316.52.3.14 Comparison (absolute less-than) 26732......................................... 26733 26734 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 26735 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 26736 26737 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 26738 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 26739 267406.52.3.15 Test bits 26741................... 26742 26743 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 26744 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 26745 26746 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 26747 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 26748 26749 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 26750 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 26751 26752 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 26753 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 26754 26755 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 26756 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 26757 26758 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 26759 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 26760 26761 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 26762 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 26763 26764 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 26765 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 26766 26767 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 26768 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 26769 26770 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 26771 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 26772 26773 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 26774 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 26775 26776 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 26777 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 26778 26779 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 26780 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 26781 26782 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 26783 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 26784 267856.52.3.16 Absolute difference 26786............................. 26787 26788 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 26789 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 26790 26791 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 26792 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 26793 26794 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 26795 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 26796 26797 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 26798 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 26799 26800 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 26801 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 26802 26803 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 26804 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 26805 26806 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 26807 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 26808 26809 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 26810 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 26811 26812 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 26813 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 26814 26815 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 26816 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 26817 26818 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 26819 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 26820 26821 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 26822 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 26823 26824 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 26825 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 26826 26827 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 26828 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 26829 26830 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 26831 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 26832 26833 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 26834 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 26835 26836 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 26837 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 26838 26839 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 26840 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 26841 26842 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 26843 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 26844 26845 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 26846 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 26847 268486.52.3.17 Absolute difference and accumulate 26849............................................ 26850 26851 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 26852 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 26853 26854 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 26855 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 26856 26857 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 26858 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 26859 26860 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 26861 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 26862 26863 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 26864 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 26865 26866 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 26867 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 26868 26869 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 26870 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 26871 26872 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 26873 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 26874 26875 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 26876 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 26877 26878 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 26879 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 26880 26881 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 26882 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 26883 26884 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 26885 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 26886 26887 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 26888 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 26889 26890 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 26891 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 26892 26893 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 26894 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 26895 26896 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 26897 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 26898 26899 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 26900 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 26901 26902 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 26903 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 26904 269056.52.3.18 Maximum 26906................. 26907 26908 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 26909 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 26910 26911 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 26912 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 26913 26914 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 26915 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 26916 26917 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 26918 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 26919 26920 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 26921 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 26922 26923 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 26924 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 26925 26926 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 26927 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 26928 26929 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 26930 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 26931 26932 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 26933 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 26934 26935 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 26936 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 26937 26938 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 26939 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 26940 26941 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 26942 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 26943 26944 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 26945 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 26946 26947 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 26948 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 26949 269506.52.3.19 Minimum 26951................. 26952 26953 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 26954 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 26955 26956 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 26957 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 26958 26959 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 26960 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 26961 26962 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 26963 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 26964 26965 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 26966 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 26967 26968 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 26969 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 26970 26971 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 26972 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 26973 26974 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 26975 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 26976 26977 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 26978 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 26979 26980 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 26981 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 26982 26983 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 26984 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 26985 26986 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 26987 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 26988 26989 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 26990 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 26991 26992 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 26993 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 26994 269956.52.3.20 Pairwise add 26996...................... 26997 26998 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 26999 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 27000 27001 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 27002 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 27003 27004 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 27005 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 27006 27007 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 27008 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 27009 27010 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 27011 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 27012 27013 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 27014 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 27015 27016 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 27017 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 27018 27019 * uint64x1_t vpaddl_u32 (uint32x2_t) 27020 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 27021 27022 * uint32x2_t vpaddl_u16 (uint16x4_t) 27023 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 27024 27025 * uint16x4_t vpaddl_u8 (uint8x8_t) 27026 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 27027 27028 * int64x1_t vpaddl_s32 (int32x2_t) 27029 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 27030 27031 * int32x2_t vpaddl_s16 (int16x4_t) 27032 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 27033 27034 * int16x4_t vpaddl_s8 (int8x8_t) 27035 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 27036 27037 * uint64x2_t vpaddlq_u32 (uint32x4_t) 27038 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 27039 27040 * uint32x4_t vpaddlq_u16 (uint16x8_t) 27041 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 27042 27043 * uint16x8_t vpaddlq_u8 (uint8x16_t) 27044 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 27045 27046 * int64x2_t vpaddlq_s32 (int32x4_t) 27047 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 27048 27049 * int32x4_t vpaddlq_s16 (int16x8_t) 27050 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 27051 27052 * int16x8_t vpaddlq_s8 (int8x16_t) 27053 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 27054 270556.52.3.21 Pairwise add, single_opcode widen and accumulate 27056.......................................................... 27057 27058 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 27059 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 27060 27061 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 27062 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 27063 27064 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 27065 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 27066 27067 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 27068 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 27069 27070 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 27071 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 27072 27073 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 27074 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 27075 27076 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 27077 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 27078 27079 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 27080 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 27081 27082 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 27083 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 27084 27085 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 27086 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 27087 27088 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 27089 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 27090 27091 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 27092 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 27093 270946.52.3.22 Folding maximum 27095......................... 27096 27097 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 27098 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 27099 27100 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 27101 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 27102 27103 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 27104 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 27105 27106 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 27107 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 27108 27109 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 27110 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 27111 27112 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 27113 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 27114 27115 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 27116 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 27117 271186.52.3.23 Folding minimum 27119......................... 27120 27121 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 27122 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 27123 27124 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 27125 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 27126 27127 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 27128 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 27129 27130 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 27131 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 27132 27133 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 27134 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 27135 27136 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 27137 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 27138 27139 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 27140 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 27141 271426.52.3.24 Reciprocal step 27143......................... 27144 27145 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 27146 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 27147 27148 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 27149 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 27150 27151 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 27152 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 27153 27154 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 27155 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 27156 271576.52.3.25 Vector shift left 27158........................... 27159 27160 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 27161 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 27162 27163 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 27164 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 27165 27166 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 27167 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 27168 27169 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 27170 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 27171 27172 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 27173 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 27174 27175 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 27176 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 27177 27178 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 27179 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 27180 27181 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 27182 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 27183 27184 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 27185 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 27186 27187 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 27188 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 27189 27190 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 27191 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 27192 27193 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 27194 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 27195 27196 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 27197 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 27198 27199 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 27200 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 27201 27202 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 27203 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 27204 27205 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 27206 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 27207 27208 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 27209 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 27210 27211 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 27212 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 27213 27214 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 27215 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 27216 27217 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 27218 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 27219 27220 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 27221 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 27222 27223 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 27224 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 27225 27226 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 27227 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 27228 27229 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 27230 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 27231 27232 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 27233 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 27234 27235 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 27236 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 27237 27238 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 27239 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 27240 27241 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 27242 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 27243 27244 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 27245 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 27246 27247 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 27248 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 27249 27250 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 27251 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 27252 27253 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 27254 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 27255 27256 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 27257 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 27258 27259 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 27260 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 27261 27262 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 27263 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 27264 27265 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 27266 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 27267 27268 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 27269 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 27270 27271 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 27272 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 27273 27274 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 27275 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 27276 27277 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 27278 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 27279 27280 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 27281 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 27282 27283 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 27284 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 27285 27286 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 27287 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 27288 27289 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 27290 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 27291 27292 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 27293 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 27294 27295 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 27296 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 27297 27298 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 27299 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 27300 27301 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 27302 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 27303 27304 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 27305 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 27306 27307 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 27308 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 27309 27310 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 27311 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 27312 27313 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 27314 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 27315 27316 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 27317 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 27318 27319 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 27320 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 27321 27322 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 27323 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 27324 27325 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 27326 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 27327 27328 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 27329 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 27330 27331 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 27332 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 27333 27334 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 27335 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 27336 27337 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 27338 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 27339 27340 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 27341 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 27342 27343 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 27344 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 27345 27346 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 27347 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 27348 27349 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 27350 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 27351 273526.52.3.26 Vector shift left by constant 27353....................................... 27354 27355 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 27356 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 27357 27358 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 27359 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 27360 27361 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 27362 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 27363 27364 * int32x2_t vshl_n_s32 (int32x2_t, const int) 27365 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 27366 27367 * int16x4_t vshl_n_s16 (int16x4_t, const int) 27368 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 27369 27370 * int8x8_t vshl_n_s8 (int8x8_t, const int) 27371 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 27372 27373 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 27374 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 27375 27376 * int64x1_t vshl_n_s64 (int64x1_t, const int) 27377 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 27378 27379 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 27380 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 27381 27382 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 27383 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 27384 27385 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 27386 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 27387 27388 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 27389 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 27390 27391 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 27392 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 27393 27394 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 27395 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 27396 27397 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 27398 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 27399 27400 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 27401 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 27402 27403 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 27404 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 27405 27406 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 27407 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 27408 27409 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 27410 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 27411 27412 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 27413 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 27414 27415 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 27416 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 27417 27418 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 27419 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 27420 27421 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 27422 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 27423 27424 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 27425 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 27426 27427 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 27428 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 27429 27430 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 27431 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 27432 27433 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 27434 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 27435 27436 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 27437 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 27438 27439 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 27440 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 27441 27442 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 27443 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 27444 27445 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 27446 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 27447 27448 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 27449 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 27450 27451 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 27452 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 27453 27454 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 27455 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 27456 27457 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 27458 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 27459 27460 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 27461 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 27462 27463 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 27464 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 27465 27466 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 27467 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 27468 27469 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 27470 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 27471 27472 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 27473 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 27474 27475 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 27476 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 27477 27478 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 27479 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 27480 27481 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 27482 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 27483 27484 * int64x2_t vshll_n_s32 (int32x2_t, const int) 27485 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 27486 27487 * int32x4_t vshll_n_s16 (int16x4_t, const int) 27488 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 27489 27490 * int16x8_t vshll_n_s8 (int8x8_t, const int) 27491 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 27492 274936.52.3.27 Vector shift right by constant 27494........................................ 27495 27496 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 27497 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 27498 27499 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 27500 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 27501 27502 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 27503 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 27504 27505 * int32x2_t vshr_n_s32 (int32x2_t, const int) 27506 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 27507 27508 * int16x4_t vshr_n_s16 (int16x4_t, const int) 27509 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 27510 27511 * int8x8_t vshr_n_s8 (int8x8_t, const int) 27512 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 27513 27514 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 27515 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 27516 27517 * int64x1_t vshr_n_s64 (int64x1_t, const int) 27518 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 27519 27520 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 27521 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 27522 27523 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 27524 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 27525 27526 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 27527 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 27528 27529 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 27530 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 27531 27532 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 27533 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 27534 27535 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 27536 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 27537 27538 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 27539 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 27540 27541 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 27542 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 27543 27544 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 27545 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 27546 27547 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 27548 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 27549 27550 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 27551 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 27552 27553 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 27554 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 27555 27556 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 27557 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 27558 27559 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 27560 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 27561 27562 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 27563 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 27564 27565 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 27566 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 27567 27568 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 27569 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 27570 27571 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 27572 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 27573 27574 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 27575 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 27576 27577 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 27578 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 27579 27580 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 27581 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 27582 27583 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 27584 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 27585 27586 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 27587 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 27588 27589 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 27590 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 27591 27592 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 27593 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 27594 27595 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 27596 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 27597 27598 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 27599 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 27600 27601 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 27602 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 27603 27604 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 27605 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 27606 27607 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 27608 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 27609 27610 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 27611 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 27612 27613 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 27614 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 27615 27616 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 27617 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 27618 27619 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 27620 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 27621 27622 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 27623 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 27624 27625 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 27626 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 27627 27628 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 27629 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 27630 27631 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 27632 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 27633 27634 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 27635 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 27636 27637 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 27638 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 27639 27640 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 27641 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 27642 27643 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 27644 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 27645 27646 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 27647 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 27648 27649 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 27650 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 27651 27652 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 27653 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 27654 27655 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 27656 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 27657 27658 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 27659 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 27660 27661 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 27662 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 27663 27664 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 27665 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 27666 27667 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 27668 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 27669 27670 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 27671 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 27672 27673 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 27674 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 27675 27676 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 27677 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 27678 27679 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 27680 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 27681 276826.52.3.28 Vector shift right by constant and accumulate 27683....................................................... 27684 27685 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 27686 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 27687 27688 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 27689 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 27690 27691 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 27692 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 27693 27694 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 27695 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 27696 27697 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 27698 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 27699 27700 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 27701 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 27702 27703 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 27704 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 27705 27706 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 27707 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 27708 27709 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 27710 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 27711 27712 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 27713 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 27714 27715 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 27716 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 27717 27718 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 27719 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 27720 27721 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 27722 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 27723 27724 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 27725 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 27726 27727 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 27728 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 27729 27730 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 27731 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 27732 27733 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 27734 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 27735 27736 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 27737 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 27738 27739 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 27740 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 27741 27742 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 27743 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 27744 27745 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 27746 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 27747 27748 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 27749 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 27750 27751 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 27752 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 27753 27754 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 27755 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 27756 27757 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 27758 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 27759 27760 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 27761 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 27762 27763 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 27764 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 27765 27766 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 27767 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 27768 27769 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 27770 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 27771 27772 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 27773 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 27774 27775 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 27776 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 27777 27778 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 27779 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 27780 277816.52.3.29 Vector shift right and insert 27782....................................... 27783 27784 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 27785 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 27786 27787 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 27788 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 27789 27790 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 27791 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 27792 27793 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 27794 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 27795 27796 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 27797 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 27798 27799 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 27800 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 27801 27802 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 27803 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 27804 27805 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 27806 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 27807 27808 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 27809 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 27810 27811 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 27812 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 27813 27814 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 27815 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 27816 27817 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 27818 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 27819 27820 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 27821 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 27822 27823 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 27824 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 27825 27826 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 27827 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 27828 27829 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 27830 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 27831 27832 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 27833 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 27834 27835 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 27836 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 27837 27838 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 27839 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 27840 27841 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 27842 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 27843 278446.52.3.30 Vector shift left and insert 27845...................................... 27846 27847 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 27848 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 27849 27850 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 27851 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 27852 27853 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 27854 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 27855 27856 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 27857 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 27858 27859 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 27860 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 27861 27862 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 27863 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 27864 27865 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 27866 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 27867 27868 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 27869 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 27870 27871 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 27872 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 27873 27874 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 27875 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 27876 27877 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 27878 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 27879 27880 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 27881 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 27882 27883 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 27884 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 27885 27886 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 27887 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 27888 27889 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 27890 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 27891 27892 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 27893 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 27894 27895 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 27896 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 27897 27898 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 27899 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 27900 27901 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 27902 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 27903 27904 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 27905 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 27906 279076.52.3.31 Absolute value 27908........................ 27909 27910 * float32x2_t vabs_f32 (float32x2_t) 27911 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 27912 27913 * int32x2_t vabs_s32 (int32x2_t) 27914 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 27915 27916 * int16x4_t vabs_s16 (int16x4_t) 27917 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 27918 27919 * int8x8_t vabs_s8 (int8x8_t) 27920 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 27921 27922 * float32x4_t vabsq_f32 (float32x4_t) 27923 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 27924 27925 * int32x4_t vabsq_s32 (int32x4_t) 27926 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 27927 27928 * int16x8_t vabsq_s16 (int16x8_t) 27929 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 27930 27931 * int8x16_t vabsq_s8 (int8x16_t) 27932 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 27933 27934 * int32x2_t vqabs_s32 (int32x2_t) 27935 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 27936 27937 * int16x4_t vqabs_s16 (int16x4_t) 27938 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 27939 27940 * int8x8_t vqabs_s8 (int8x8_t) 27941 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 27942 27943 * int32x4_t vqabsq_s32 (int32x4_t) 27944 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 27945 27946 * int16x8_t vqabsq_s16 (int16x8_t) 27947 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 27948 27949 * int8x16_t vqabsq_s8 (int8x16_t) 27950 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 27951 279526.52.3.32 Negation 27953.................. 27954 27955 * float32x2_t vneg_f32 (float32x2_t) 27956 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 27957 27958 * int32x2_t vneg_s32 (int32x2_t) 27959 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 27960 27961 * int16x4_t vneg_s16 (int16x4_t) 27962 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 27963 27964 * int8x8_t vneg_s8 (int8x8_t) 27965 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 27966 27967 * float32x4_t vnegq_f32 (float32x4_t) 27968 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 27969 27970 * int32x4_t vnegq_s32 (int32x4_t) 27971 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 27972 27973 * int16x8_t vnegq_s16 (int16x8_t) 27974 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 27975 27976 * int8x16_t vnegq_s8 (int8x16_t) 27977 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 27978 27979 * int32x2_t vqneg_s32 (int32x2_t) 27980 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 27981 27982 * int16x4_t vqneg_s16 (int16x4_t) 27983 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 27984 27985 * int8x8_t vqneg_s8 (int8x8_t) 27986 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 27987 27988 * int32x4_t vqnegq_s32 (int32x4_t) 27989 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 27990 27991 * int16x8_t vqnegq_s16 (int16x8_t) 27992 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 27993 27994 * int8x16_t vqnegq_s8 (int8x16_t) 27995 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 27996 279976.52.3.33 Bitwise not 27998..................... 27999 28000 * uint32x2_t vmvn_u32 (uint32x2_t) 28001 _Form of expected instruction(s):_ `vmvn D0, D0' 28002 28003 * uint16x4_t vmvn_u16 (uint16x4_t) 28004 _Form of expected instruction(s):_ `vmvn D0, D0' 28005 28006 * uint8x8_t vmvn_u8 (uint8x8_t) 28007 _Form of expected instruction(s):_ `vmvn D0, D0' 28008 28009 * int32x2_t vmvn_s32 (int32x2_t) 28010 _Form of expected instruction(s):_ `vmvn D0, D0' 28011 28012 * int16x4_t vmvn_s16 (int16x4_t) 28013 _Form of expected instruction(s):_ `vmvn D0, D0' 28014 28015 * int8x8_t vmvn_s8 (int8x8_t) 28016 _Form of expected instruction(s):_ `vmvn D0, D0' 28017 28018 * poly8x8_t vmvn_p8 (poly8x8_t) 28019 _Form of expected instruction(s):_ `vmvn D0, D0' 28020 28021 * uint32x4_t vmvnq_u32 (uint32x4_t) 28022 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28023 28024 * uint16x8_t vmvnq_u16 (uint16x8_t) 28025 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28026 28027 * uint8x16_t vmvnq_u8 (uint8x16_t) 28028 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28029 28030 * int32x4_t vmvnq_s32 (int32x4_t) 28031 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28032 28033 * int16x8_t vmvnq_s16 (int16x8_t) 28034 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28035 28036 * int8x16_t vmvnq_s8 (int8x16_t) 28037 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28038 28039 * poly8x16_t vmvnq_p8 (poly8x16_t) 28040 _Form of expected instruction(s):_ `vmvn Q0, Q0' 28041 280426.52.3.34 Count leading sign bits 28043................................. 28044 28045 * int32x2_t vcls_s32 (int32x2_t) 28046 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 28047 28048 * int16x4_t vcls_s16 (int16x4_t) 28049 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 28050 28051 * int8x8_t vcls_s8 (int8x8_t) 28052 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 28053 28054 * int32x4_t vclsq_s32 (int32x4_t) 28055 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 28056 28057 * int16x8_t vclsq_s16 (int16x8_t) 28058 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 28059 28060 * int8x16_t vclsq_s8 (int8x16_t) 28061 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 28062 280636.52.3.35 Count leading zeros 28064............................. 28065 28066 * uint32x2_t vclz_u32 (uint32x2_t) 28067 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 28068 28069 * uint16x4_t vclz_u16 (uint16x4_t) 28070 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 28071 28072 * uint8x8_t vclz_u8 (uint8x8_t) 28073 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 28074 28075 * int32x2_t vclz_s32 (int32x2_t) 28076 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 28077 28078 * int16x4_t vclz_s16 (int16x4_t) 28079 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 28080 28081 * int8x8_t vclz_s8 (int8x8_t) 28082 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 28083 28084 * uint32x4_t vclzq_u32 (uint32x4_t) 28085 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 28086 28087 * uint16x8_t vclzq_u16 (uint16x8_t) 28088 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 28089 28090 * uint8x16_t vclzq_u8 (uint8x16_t) 28091 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 28092 28093 * int32x4_t vclzq_s32 (int32x4_t) 28094 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 28095 28096 * int16x8_t vclzq_s16 (int16x8_t) 28097 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 28098 28099 * int8x16_t vclzq_s8 (int8x16_t) 28100 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 28101 281026.52.3.36 Count number of set bits 28103.................................. 28104 28105 * uint8x8_t vcnt_u8 (uint8x8_t) 28106 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 28107 28108 * int8x8_t vcnt_s8 (int8x8_t) 28109 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 28110 28111 * poly8x8_t vcnt_p8 (poly8x8_t) 28112 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 28113 28114 * uint8x16_t vcntq_u8 (uint8x16_t) 28115 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 28116 28117 * int8x16_t vcntq_s8 (int8x16_t) 28118 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 28119 28120 * poly8x16_t vcntq_p8 (poly8x16_t) 28121 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 28122 281236.52.3.37 Reciprocal estimate 28124............................. 28125 28126 * float32x2_t vrecpe_f32 (float32x2_t) 28127 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 28128 28129 * uint32x2_t vrecpe_u32 (uint32x2_t) 28130 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 28131 28132 * float32x4_t vrecpeq_f32 (float32x4_t) 28133 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 28134 28135 * uint32x4_t vrecpeq_u32 (uint32x4_t) 28136 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 28137 281386.52.3.38 Reciprocal square-root estimate 28139......................................... 28140 28141 * float32x2_t vrsqrte_f32 (float32x2_t) 28142 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 28143 28144 * uint32x2_t vrsqrte_u32 (uint32x2_t) 28145 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 28146 28147 * float32x4_t vrsqrteq_f32 (float32x4_t) 28148 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 28149 28150 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 28151 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 28152 281536.52.3.39 Get lanes from a vector 28154................................. 28155 28156 * uint32_t vget_lane_u32 (uint32x2_t, const int) 28157 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28158 28159 * uint16_t vget_lane_u16 (uint16x4_t, const int) 28160 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 28161 28162 * uint8_t vget_lane_u8 (uint8x8_t, const int) 28163 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 28164 28165 * int32_t vget_lane_s32 (int32x2_t, const int) 28166 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28167 28168 * int16_t vget_lane_s16 (int16x4_t, const int) 28169 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 28170 28171 * int8_t vget_lane_s8 (int8x8_t, const int) 28172 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 28173 28174 * float32_t vget_lane_f32 (float32x2_t, const int) 28175 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28176 28177 * poly16_t vget_lane_p16 (poly16x4_t, const int) 28178 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 28179 28180 * poly8_t vget_lane_p8 (poly8x8_t, const int) 28181 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 28182 28183 * uint64_t vget_lane_u64 (uint64x1_t, const int) 28184 _Form of expected instruction(s):_ `vmov R0, R0, D0' 28185 28186 * int64_t vget_lane_s64 (int64x1_t, const int) 28187 _Form of expected instruction(s):_ `vmov R0, R0, D0' 28188 28189 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 28190 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28191 28192 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 28193 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 28194 28195 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 28196 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 28197 28198 * int32_t vgetq_lane_s32 (int32x4_t, const int) 28199 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28200 28201 * int16_t vgetq_lane_s16 (int16x8_t, const int) 28202 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 28203 28204 * int8_t vgetq_lane_s8 (int8x16_t, const int) 28205 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 28206 28207 * float32_t vgetq_lane_f32 (float32x4_t, const int) 28208 _Form of expected instruction(s):_ `vmov.32 R0, D0[0]' 28209 28210 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 28211 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 28212 28213 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 28214 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 28215 28216 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 28217 _Form of expected instruction(s):_ `vmov R0, R0, D0' 28218 28219 * int64_t vgetq_lane_s64 (int64x2_t, const int) 28220 _Form of expected instruction(s):_ `vmov R0, R0, D0' 28221 282226.52.3.40 Set lanes in a vector 28223............................... 28224 28225 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 28226 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28227 28228 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 28229 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28230 28231 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 28232 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28233 28234 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 28235 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28236 28237 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 28238 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28239 28240 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 28241 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28242 28243 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 28244 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28245 28246 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 28247 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28248 28249 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 28250 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28251 28252 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 28253 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28254 28255 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 28256 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28257 28258 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 28259 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28260 28261 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 28262 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28263 28264 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 28265 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28266 28267 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 28268 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28269 28270 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 28271 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28272 28273 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 28274 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28275 28276 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 28277 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 28278 28279 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 28280 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 28281 28282 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 28283 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 28284 28285 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 28286 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28287 28288 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 28289 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28290 282916.52.3.41 Create vector from literal bit pattern 28292................................................ 28293 28294 * uint32x2_t vcreate_u32 (uint64_t) 28295 28296 * uint16x4_t vcreate_u16 (uint64_t) 28297 28298 * uint8x8_t vcreate_u8 (uint64_t) 28299 28300 * int32x2_t vcreate_s32 (uint64_t) 28301 28302 * int16x4_t vcreate_s16 (uint64_t) 28303 28304 * int8x8_t vcreate_s8 (uint64_t) 28305 28306 * uint64x1_t vcreate_u64 (uint64_t) 28307 28308 * int64x1_t vcreate_s64 (uint64_t) 28309 28310 * float32x2_t vcreate_f32 (uint64_t) 28311 28312 * poly16x4_t vcreate_p16 (uint64_t) 28313 28314 * poly8x8_t vcreate_p8 (uint64_t) 28315 283166.52.3.42 Set all lanes to the same value 28317......................................... 28318 28319 * uint32x2_t vdup_n_u32 (uint32_t) 28320 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28321 28322 * uint16x4_t vdup_n_u16 (uint16_t) 28323 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28324 28325 * uint8x8_t vdup_n_u8 (uint8_t) 28326 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28327 28328 * int32x2_t vdup_n_s32 (int32_t) 28329 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28330 28331 * int16x4_t vdup_n_s16 (int16_t) 28332 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28333 28334 * int8x8_t vdup_n_s8 (int8_t) 28335 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28336 28337 * float32x2_t vdup_n_f32 (float32_t) 28338 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28339 28340 * poly16x4_t vdup_n_p16 (poly16_t) 28341 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28342 28343 * poly8x8_t vdup_n_p8 (poly8_t) 28344 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28345 28346 * uint64x1_t vdup_n_u64 (uint64_t) 28347 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28348 28349 * int64x1_t vdup_n_s64 (int64_t) 28350 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28351 28352 * uint32x4_t vdupq_n_u32 (uint32_t) 28353 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28354 28355 * uint16x8_t vdupq_n_u16 (uint16_t) 28356 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28357 28358 * uint8x16_t vdupq_n_u8 (uint8_t) 28359 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28360 28361 * int32x4_t vdupq_n_s32 (int32_t) 28362 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28363 28364 * int16x8_t vdupq_n_s16 (int16_t) 28365 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28366 28367 * int8x16_t vdupq_n_s8 (int8_t) 28368 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28369 28370 * float32x4_t vdupq_n_f32 (float32_t) 28371 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28372 28373 * poly16x8_t vdupq_n_p16 (poly16_t) 28374 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28375 28376 * poly8x16_t vdupq_n_p8 (poly8_t) 28377 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28378 28379 * uint64x2_t vdupq_n_u64 (uint64_t) 28380 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28381 28382 * int64x2_t vdupq_n_s64 (int64_t) 28383 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28384 28385 * uint32x2_t vmov_n_u32 (uint32_t) 28386 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28387 28388 * uint16x4_t vmov_n_u16 (uint16_t) 28389 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28390 28391 * uint8x8_t vmov_n_u8 (uint8_t) 28392 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28393 28394 * int32x2_t vmov_n_s32 (int32_t) 28395 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28396 28397 * int16x4_t vmov_n_s16 (int16_t) 28398 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28399 28400 * int8x8_t vmov_n_s8 (int8_t) 28401 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28402 28403 * float32x2_t vmov_n_f32 (float32_t) 28404 _Form of expected instruction(s):_ `vdup.32 D0, R0' 28405 28406 * poly16x4_t vmov_n_p16 (poly16_t) 28407 _Form of expected instruction(s):_ `vdup.16 D0, R0' 28408 28409 * poly8x8_t vmov_n_p8 (poly8_t) 28410 _Form of expected instruction(s):_ `vdup.8 D0, R0' 28411 28412 * uint64x1_t vmov_n_u64 (uint64_t) 28413 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28414 28415 * int64x1_t vmov_n_s64 (int64_t) 28416 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28417 28418 * uint32x4_t vmovq_n_u32 (uint32_t) 28419 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28420 28421 * uint16x8_t vmovq_n_u16 (uint16_t) 28422 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28423 28424 * uint8x16_t vmovq_n_u8 (uint8_t) 28425 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28426 28427 * int32x4_t vmovq_n_s32 (int32_t) 28428 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28429 28430 * int16x8_t vmovq_n_s16 (int16_t) 28431 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28432 28433 * int8x16_t vmovq_n_s8 (int8_t) 28434 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28435 28436 * float32x4_t vmovq_n_f32 (float32_t) 28437 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 28438 28439 * poly16x8_t vmovq_n_p16 (poly16_t) 28440 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 28441 28442 * poly8x16_t vmovq_n_p8 (poly8_t) 28443 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 28444 28445 * uint64x2_t vmovq_n_u64 (uint64_t) 28446 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28447 28448 * int64x2_t vmovq_n_s64 (int64_t) 28449 _Form of expected instruction(s):_ `vmov D0, R0, R0' 28450 28451 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 28452 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 28453 28454 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 28455 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 28456 28457 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 28458 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 28459 28460 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 28461 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 28462 28463 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 28464 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 28465 28466 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 28467 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 28468 28469 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 28470 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 28471 28472 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 28473 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 28474 28475 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 28476 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 28477 28478 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 28479 28480 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 28481 28482 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 28483 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 28484 28485 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 28486 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 28487 28488 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 28489 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 28490 28491 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 28492 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 28493 28494 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 28495 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 28496 28497 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 28498 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 28499 28500 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 28501 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 28502 28503 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 28504 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 28505 28506 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 28507 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 28508 28509 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 28510 28511 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 28512 285136.52.3.43 Combining vectors 28514........................... 28515 28516 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 28517 28518 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 28519 28520 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 28521 28522 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 28523 28524 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 28525 28526 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 28527 28528 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 28529 28530 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 28531 28532 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 28533 28534 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 28535 28536 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 28537 285386.52.3.44 Splitting vectors 28539........................... 28540 28541 * uint32x2_t vget_high_u32 (uint32x4_t) 28542 28543 * uint16x4_t vget_high_u16 (uint16x8_t) 28544 28545 * uint8x8_t vget_high_u8 (uint8x16_t) 28546 28547 * int32x2_t vget_high_s32 (int32x4_t) 28548 28549 * int16x4_t vget_high_s16 (int16x8_t) 28550 28551 * int8x8_t vget_high_s8 (int8x16_t) 28552 28553 * uint64x1_t vget_high_u64 (uint64x2_t) 28554 28555 * int64x1_t vget_high_s64 (int64x2_t) 28556 28557 * float32x2_t vget_high_f32 (float32x4_t) 28558 28559 * poly16x4_t vget_high_p16 (poly16x8_t) 28560 28561 * poly8x8_t vget_high_p8 (poly8x16_t) 28562 28563 * uint32x2_t vget_low_u32 (uint32x4_t) 28564 _Form of expected instruction(s):_ `vmov D0, D0' 28565 28566 * uint16x4_t vget_low_u16 (uint16x8_t) 28567 _Form of expected instruction(s):_ `vmov D0, D0' 28568 28569 * uint8x8_t vget_low_u8 (uint8x16_t) 28570 _Form of expected instruction(s):_ `vmov D0, D0' 28571 28572 * int32x2_t vget_low_s32 (int32x4_t) 28573 _Form of expected instruction(s):_ `vmov D0, D0' 28574 28575 * int16x4_t vget_low_s16 (int16x8_t) 28576 _Form of expected instruction(s):_ `vmov D0, D0' 28577 28578 * int8x8_t vget_low_s8 (int8x16_t) 28579 _Form of expected instruction(s):_ `vmov D0, D0' 28580 28581 * uint64x1_t vget_low_u64 (uint64x2_t) 28582 _Form of expected instruction(s):_ `vmov D0, D0' 28583 28584 * int64x1_t vget_low_s64 (int64x2_t) 28585 _Form of expected instruction(s):_ `vmov D0, D0' 28586 28587 * float32x2_t vget_low_f32 (float32x4_t) 28588 _Form of expected instruction(s):_ `vmov D0, D0' 28589 28590 * poly16x4_t vget_low_p16 (poly16x8_t) 28591 _Form of expected instruction(s):_ `vmov D0, D0' 28592 28593 * poly8x8_t vget_low_p8 (poly8x16_t) 28594 _Form of expected instruction(s):_ `vmov D0, D0' 28595 285966.52.3.45 Conversions 28597..................... 28598 28599 * float32x2_t vcvt_f32_u32 (uint32x2_t) 28600 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 28601 28602 * float32x2_t vcvt_f32_s32 (int32x2_t) 28603 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 28604 28605 * uint32x2_t vcvt_u32_f32 (float32x2_t) 28606 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 28607 28608 * int32x2_t vcvt_s32_f32 (float32x2_t) 28609 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 28610 28611 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 28612 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 28613 28614 * float32x4_t vcvtq_f32_s32 (int32x4_t) 28615 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 28616 28617 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 28618 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 28619 28620 * int32x4_t vcvtq_s32_f32 (float32x4_t) 28621 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 28622 28623 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 28624 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 28625 28626 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 28627 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 28628 28629 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 28630 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 28631 28632 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 28633 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 28634 28635 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 28636 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 28637 28638 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 28639 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 28640 28641 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 28642 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 28643 28644 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 28645 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 28646 286476.52.3.46 Move, single_opcode narrowing 28648....................................... 28649 28650 * uint32x2_t vmovn_u64 (uint64x2_t) 28651 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 28652 28653 * uint16x4_t vmovn_u32 (uint32x4_t) 28654 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 28655 28656 * uint8x8_t vmovn_u16 (uint16x8_t) 28657 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 28658 28659 * int32x2_t vmovn_s64 (int64x2_t) 28660 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 28661 28662 * int16x4_t vmovn_s32 (int32x4_t) 28663 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 28664 28665 * int8x8_t vmovn_s16 (int16x8_t) 28666 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 28667 28668 * uint32x2_t vqmovn_u64 (uint64x2_t) 28669 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 28670 28671 * uint16x4_t vqmovn_u32 (uint32x4_t) 28672 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 28673 28674 * uint8x8_t vqmovn_u16 (uint16x8_t) 28675 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 28676 28677 * int32x2_t vqmovn_s64 (int64x2_t) 28678 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 28679 28680 * int16x4_t vqmovn_s32 (int32x4_t) 28681 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 28682 28683 * int8x8_t vqmovn_s16 (int16x8_t) 28684 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 28685 28686 * uint32x2_t vqmovun_s64 (int64x2_t) 28687 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 28688 28689 * uint16x4_t vqmovun_s32 (int32x4_t) 28690 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 28691 28692 * uint8x8_t vqmovun_s16 (int16x8_t) 28693 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 28694 286956.52.3.47 Move, single_opcode long 28696.................................. 28697 28698 * uint64x2_t vmovl_u32 (uint32x2_t) 28699 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 28700 28701 * uint32x4_t vmovl_u16 (uint16x4_t) 28702 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 28703 28704 * uint16x8_t vmovl_u8 (uint8x8_t) 28705 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 28706 28707 * int64x2_t vmovl_s32 (int32x2_t) 28708 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 28709 28710 * int32x4_t vmovl_s16 (int16x4_t) 28711 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 28712 28713 * int16x8_t vmovl_s8 (int8x8_t) 28714 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 28715 287166.52.3.48 Table lookup 28717...................... 28718 28719 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 28720 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 28721 28722 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 28723 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 28724 28725 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 28726 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 28727 28728 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 28729 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 28730 28731 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 28732 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 28733 28734 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 28735 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 28736 28737 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 28738 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 28739 28740 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 28741 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 28742 28743 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 28744 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 28745 28746 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 28747 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 28748 D0' 28749 28750 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 28751 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 28752 D0' 28753 28754 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 28755 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 28756 D0' 28757 287586.52.3.49 Extended table lookup 28759............................... 28760 28761 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 28762 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 28763 28764 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 28765 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 28766 28767 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 28768 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 28769 28770 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 28771 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 28772 28773 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 28774 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 28775 28776 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 28777 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 28778 28779 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 28780 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 28781 28782 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 28783 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 28784 28785 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 28786 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 28787 28788 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 28789 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 28790 D0' 28791 28792 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 28793 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 28794 D0' 28795 28796 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 28797 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 28798 D0' 28799 288006.52.3.50 Multiply, lane 28801........................ 28802 28803 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 28804 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 28805 28806 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 28807 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 28808 28809 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 28810 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 28811 28812 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 28813 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 28814 28815 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 28816 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 28817 28818 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 28819 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 28820 28821 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 28822 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 28823 28824 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 28825 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 28826 28827 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 28828 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 28829 28830 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 28831 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 28832 288336.52.3.51 Long multiply, lane 28834............................. 28835 28836 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 28837 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 28838 28839 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 28840 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 28841 28842 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 28843 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 28844 28845 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 28846 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 28847 288486.52.3.52 Saturating doubling long multiply, lane 28849................................................. 28850 28851 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 28852 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 28853 28854 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 28855 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 28856 288576.52.3.53 Saturating doubling multiply high, lane 28858................................................. 28859 28860 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 28861 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 28862 28863 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 28864 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 28865 28866 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 28867 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 28868 28869 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 28870 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 28871 28872 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 28873 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 28874 28875 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 28876 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 28877 28878 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 28879 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 28880 28881 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 28882 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 28883 288846.52.3.54 Multiply-accumulate, lane 28885................................... 28886 28887 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 28888 const int) 28889 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 28890 28891 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 28892 const int) 28893 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 28894 28895 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 28896 const int) 28897 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 28898 28899 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 28900 int) 28901 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 28902 28903 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 28904 int) 28905 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 28906 28907 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 28908 const int) 28909 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 28910 28911 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 28912 const int) 28913 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 28914 28915 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 28916 const int) 28917 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 28918 28919 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 28920 int) 28921 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 28922 28923 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 28924 int) 28925 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 28926 28927 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 28928 const int) 28929 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 28930 28931 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 28932 const int) 28933 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 28934 28935 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 28936 int) 28937 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 28938 28939 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 28940 int) 28941 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 28942 28943 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 28944 int) 28945 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 28946 28947 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 28948 int) 28949 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 28950 289516.52.3.55 Multiply-subtract, lane 28952................................. 28953 28954 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 28955 const int) 28956 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 28957 28958 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 28959 const int) 28960 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 28961 28962 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 28963 const int) 28964 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 28965 28966 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 28967 int) 28968 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 28969 28970 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 28971 int) 28972 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 28973 28974 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 28975 const int) 28976 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 28977 28978 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 28979 const int) 28980 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 28981 28982 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 28983 const int) 28984 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 28985 28986 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 28987 int) 28988 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 28989 28990 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 28991 int) 28992 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 28993 28994 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 28995 const int) 28996 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 28997 28998 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 28999 const int) 29000 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 29001 29002 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 29003 int) 29004 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 29005 29006 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 29007 int) 29008 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 29009 29010 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 29011 int) 29012 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 29013 29014 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 29015 int) 29016 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 29017 290186.52.3.56 Vector multiply by scalar 29019................................... 29020 29021 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 29022 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 29023 29024 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 29025 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 29026 29027 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 29028 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 29029 29030 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 29031 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 29032 29033 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 29034 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 29035 29036 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 29037 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 29038 29039 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 29040 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 29041 29042 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 29043 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 29044 29045 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 29046 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 29047 29048 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 29049 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 29050 290516.52.3.57 Vector long multiply by scalar 29052........................................ 29053 29054 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 29055 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 29056 29057 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 29058 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 29059 29060 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 29061 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 29062 29063 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 29064 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 29065 290666.52.3.58 Vector saturating doubling long multiply by scalar 29067............................................................ 29068 29069 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 29070 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 29071 29072 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 29073 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 29074 290756.52.3.59 Vector saturating doubling multiply high by scalar 29076............................................................ 29077 29078 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 29079 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 29080 29081 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 29082 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 29083 29084 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 29085 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 29086 29087 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 29088 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 29089 29090 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 29091 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 29092 29093 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 29094 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 29095 29096 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 29097 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 29098 29099 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 29100 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 29101 291026.52.3.60 Vector multiply-accumulate by scalar 29103.............................................. 29104 29105 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 29106 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 29107 29108 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 29109 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 29110 29111 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 29112 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 29113 29114 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 29115 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 29116 29117 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 29118 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 29119 29120 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 29121 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 29122 29123 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 29124 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 29125 29126 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 29127 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 29128 29129 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 29130 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 29131 29132 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 29133 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 29134 29135 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 29136 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 29137 29138 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 29139 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 29140 29141 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 29142 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 29143 29144 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 29145 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 29146 29147 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 29148 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 29149 29150 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 29151 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 29152 291536.52.3.61 Vector multiply-subtract by scalar 29154............................................ 29155 29156 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 29157 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 29158 29159 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 29160 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 29161 29162 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 29163 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 29164 29165 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 29166 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 29167 29168 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 29169 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 29170 29171 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 29172 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 29173 29174 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 29175 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 29176 29177 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 29178 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 29179 29180 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 29181 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 29182 29183 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 29184 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 29185 29186 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 29187 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 29188 29189 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 29190 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 29191 29192 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 29193 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 29194 29195 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 29196 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 29197 29198 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 29199 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 29200 29201 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 29202 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 29203 292046.52.3.62 Vector extract 29205........................ 29206 29207 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 29208 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 29209 29210 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 29211 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 29212 29213 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 29214 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 29215 29216 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 29217 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 29218 29219 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 29220 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 29221 29222 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 29223 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 29224 29225 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 29226 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 29227 29228 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 29229 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 29230 29231 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 29232 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 29233 29234 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 29235 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 29236 29237 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 29238 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 29239 29240 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 29241 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 29242 29243 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 29244 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 29245 29246 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 29247 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 29248 29249 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 29250 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 29251 29252 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 29253 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 29254 29255 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 29256 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 29257 29258 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 29259 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 29260 29261 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 29262 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 29263 29264 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 29265 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 29266 29267 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 29268 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 29269 29270 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 29271 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 29272 292736.52.3.63 Reverse elements 29274.......................... 29275 29276 * uint32x2_t vrev64_u32 (uint32x2_t) 29277 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 29278 29279 * uint16x4_t vrev64_u16 (uint16x4_t) 29280 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 29281 29282 * uint8x8_t vrev64_u8 (uint8x8_t) 29283 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 29284 29285 * int32x2_t vrev64_s32 (int32x2_t) 29286 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 29287 29288 * int16x4_t vrev64_s16 (int16x4_t) 29289 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 29290 29291 * int8x8_t vrev64_s8 (int8x8_t) 29292 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 29293 29294 * float32x2_t vrev64_f32 (float32x2_t) 29295 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 29296 29297 * poly16x4_t vrev64_p16 (poly16x4_t) 29298 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 29299 29300 * poly8x8_t vrev64_p8 (poly8x8_t) 29301 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 29302 29303 * uint32x4_t vrev64q_u32 (uint32x4_t) 29304 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 29305 29306 * uint16x8_t vrev64q_u16 (uint16x8_t) 29307 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 29308 29309 * uint8x16_t vrev64q_u8 (uint8x16_t) 29310 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 29311 29312 * int32x4_t vrev64q_s32 (int32x4_t) 29313 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 29314 29315 * int16x8_t vrev64q_s16 (int16x8_t) 29316 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 29317 29318 * int8x16_t vrev64q_s8 (int8x16_t) 29319 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 29320 29321 * float32x4_t vrev64q_f32 (float32x4_t) 29322 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 29323 29324 * poly16x8_t vrev64q_p16 (poly16x8_t) 29325 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 29326 29327 * poly8x16_t vrev64q_p8 (poly8x16_t) 29328 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 29329 29330 * uint16x4_t vrev32_u16 (uint16x4_t) 29331 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 29332 29333 * int16x4_t vrev32_s16 (int16x4_t) 29334 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 29335 29336 * uint8x8_t vrev32_u8 (uint8x8_t) 29337 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 29338 29339 * int8x8_t vrev32_s8 (int8x8_t) 29340 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 29341 29342 * poly16x4_t vrev32_p16 (poly16x4_t) 29343 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 29344 29345 * poly8x8_t vrev32_p8 (poly8x8_t) 29346 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 29347 29348 * uint16x8_t vrev32q_u16 (uint16x8_t) 29349 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 29350 29351 * int16x8_t vrev32q_s16 (int16x8_t) 29352 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 29353 29354 * uint8x16_t vrev32q_u8 (uint8x16_t) 29355 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 29356 29357 * int8x16_t vrev32q_s8 (int8x16_t) 29358 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 29359 29360 * poly16x8_t vrev32q_p16 (poly16x8_t) 29361 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 29362 29363 * poly8x16_t vrev32q_p8 (poly8x16_t) 29364 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 29365 29366 * uint8x8_t vrev16_u8 (uint8x8_t) 29367 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 29368 29369 * int8x8_t vrev16_s8 (int8x8_t) 29370 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 29371 29372 * poly8x8_t vrev16_p8 (poly8x8_t) 29373 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 29374 29375 * uint8x16_t vrev16q_u8 (uint8x16_t) 29376 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 29377 29378 * int8x16_t vrev16q_s8 (int8x16_t) 29379 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 29380 29381 * poly8x16_t vrev16q_p8 (poly8x16_t) 29382 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 29383 293846.52.3.64 Bit selection 29385....................... 29386 29387 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 29388 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29389 D0, D0, D0' _or_ `vbif D0, D0, D0' 29390 29391 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 29392 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29393 D0, D0, D0' _or_ `vbif D0, D0, D0' 29394 29395 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 29396 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29397 D0, D0, D0' _or_ `vbif D0, D0, D0' 29398 29399 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 29400 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29401 D0, D0, D0' _or_ `vbif D0, D0, D0' 29402 29403 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 29404 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29405 D0, D0, D0' _or_ `vbif D0, D0, D0' 29406 29407 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 29408 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29409 D0, D0, D0' _or_ `vbif D0, D0, D0' 29410 29411 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 29412 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29413 D0, D0, D0' _or_ `vbif D0, D0, D0' 29414 29415 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 29416 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29417 D0, D0, D0' _or_ `vbif D0, D0, D0' 29418 29419 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 29420 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29421 D0, D0, D0' _or_ `vbif D0, D0, D0' 29422 29423 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 29424 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29425 D0, D0, D0' _or_ `vbif D0, D0, D0' 29426 29427 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 29428 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 29429 D0, D0, D0' _or_ `vbif D0, D0, D0' 29430 29431 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 29432 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29433 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29434 29435 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 29436 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29437 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29438 29439 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 29440 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29441 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29442 29443 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 29444 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29445 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29446 29447 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 29448 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29449 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29450 29451 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 29452 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29453 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29454 29455 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 29456 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29457 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29458 29459 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 29460 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29461 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29462 29463 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 29464 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29465 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29466 29467 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 29468 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29469 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29470 29471 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 29472 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 29473 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 29474 294756.52.3.65 Transpose elements 29476............................ 29477 29478 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 29479 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 29480 29481 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 29482 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 29483 29484 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 29485 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 29486 29487 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 29488 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 29489 29490 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 29491 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 29492 29493 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 29494 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 29495 29496 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 29497 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 29498 29499 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 29500 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 29501 29502 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 29503 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 29504 29505 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 29506 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 29507 29508 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 29509 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 29510 29511 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 29512 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 29513 29514 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 29515 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 29516 29517 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 29518 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 29519 29520 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 29521 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 29522 29523 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 29524 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 29525 29526 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 29527 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 29528 29529 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 29530 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 29531 295326.52.3.66 Zip elements 29533...................... 29534 29535 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 29536 _Form of expected instruction(s):_ `vzip.32 D0, D1' 29537 29538 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 29539 _Form of expected instruction(s):_ `vzip.16 D0, D1' 29540 29541 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 29542 _Form of expected instruction(s):_ `vzip.8 D0, D1' 29543 29544 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 29545 _Form of expected instruction(s):_ `vzip.32 D0, D1' 29546 29547 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 29548 _Form of expected instruction(s):_ `vzip.16 D0, D1' 29549 29550 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 29551 _Form of expected instruction(s):_ `vzip.8 D0, D1' 29552 29553 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 29554 _Form of expected instruction(s):_ `vzip.32 D0, D1' 29555 29556 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 29557 _Form of expected instruction(s):_ `vzip.16 D0, D1' 29558 29559 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 29560 _Form of expected instruction(s):_ `vzip.8 D0, D1' 29561 29562 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 29563 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 29564 29565 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 29566 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 29567 29568 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 29569 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 29570 29571 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 29572 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 29573 29574 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 29575 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 29576 29577 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 29578 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 29579 29580 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 29581 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 29582 29583 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 29584 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 29585 29586 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 29587 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 29588 295896.52.3.67 Unzip elements 29590........................ 29591 29592 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 29593 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 29594 29595 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 29596 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 29597 29598 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 29599 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 29600 29601 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 29602 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 29603 29604 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 29605 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 29606 29607 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 29608 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 29609 29610 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 29611 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 29612 29613 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 29614 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 29615 29616 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 29617 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 29618 29619 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 29620 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 29621 29622 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 29623 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 29624 29625 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 29626 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 29627 29628 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 29629 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 29630 29631 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 29632 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 29633 29634 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 29635 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 29636 29637 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 29638 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 29639 29640 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 29641 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 29642 29643 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 29644 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 29645 296466.52.3.68 Element/structure loads, VLD1 variants 29647................................................ 29648 29649 * uint32x2_t vld1_u32 (const uint32_t *) 29650 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 29651 29652 * uint16x4_t vld1_u16 (const uint16_t *) 29653 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 29654 29655 * uint8x8_t vld1_u8 (const uint8_t *) 29656 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 29657 29658 * int32x2_t vld1_s32 (const int32_t *) 29659 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 29660 29661 * int16x4_t vld1_s16 (const int16_t *) 29662 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 29663 29664 * int8x8_t vld1_s8 (const int8_t *) 29665 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 29666 29667 * uint64x1_t vld1_u64 (const uint64_t *) 29668 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29669 29670 * int64x1_t vld1_s64 (const int64_t *) 29671 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29672 29673 * float32x2_t vld1_f32 (const float32_t *) 29674 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 29675 29676 * poly16x4_t vld1_p16 (const poly16_t *) 29677 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 29678 29679 * poly8x8_t vld1_p8 (const poly8_t *) 29680 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 29681 29682 * uint32x4_t vld1q_u32 (const uint32_t *) 29683 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 29684 29685 * uint16x8_t vld1q_u16 (const uint16_t *) 29686 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 29687 29688 * uint8x16_t vld1q_u8 (const uint8_t *) 29689 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 29690 29691 * int32x4_t vld1q_s32 (const int32_t *) 29692 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 29693 29694 * int16x8_t vld1q_s16 (const int16_t *) 29695 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 29696 29697 * int8x16_t vld1q_s8 (const int8_t *) 29698 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 29699 29700 * uint64x2_t vld1q_u64 (const uint64_t *) 29701 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 29702 29703 * int64x2_t vld1q_s64 (const int64_t *) 29704 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 29705 29706 * float32x4_t vld1q_f32 (const float32_t *) 29707 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 29708 29709 * poly16x8_t vld1q_p16 (const poly16_t *) 29710 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 29711 29712 * poly8x16_t vld1q_p8 (const poly8_t *) 29713 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 29714 29715 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 29716 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29717 29718 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 29719 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29720 29721 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 29722 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29723 29724 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 29725 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29726 29727 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 29728 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29729 29730 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 29731 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29732 29733 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 29734 int) 29735 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29736 29737 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 29738 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29739 29740 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 29741 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29742 29743 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 29744 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29745 29746 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 29747 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29748 29749 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 29750 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29751 29752 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 29753 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29754 29755 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 29756 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29757 29758 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 29759 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29760 29761 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 29762 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29763 29764 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 29765 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29766 29767 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 29768 int) 29769 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 29770 29771 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 29772 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 29773 29774 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 29775 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 29776 29777 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 29778 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29779 29780 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 29781 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29782 29783 * uint32x2_t vld1_dup_u32 (const uint32_t *) 29784 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 29785 29786 * uint16x4_t vld1_dup_u16 (const uint16_t *) 29787 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 29788 29789 * uint8x8_t vld1_dup_u8 (const uint8_t *) 29790 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 29791 29792 * int32x2_t vld1_dup_s32 (const int32_t *) 29793 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 29794 29795 * int16x4_t vld1_dup_s16 (const int16_t *) 29796 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 29797 29798 * int8x8_t vld1_dup_s8 (const int8_t *) 29799 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 29800 29801 * float32x2_t vld1_dup_f32 (const float32_t *) 29802 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 29803 29804 * poly16x4_t vld1_dup_p16 (const poly16_t *) 29805 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 29806 29807 * poly8x8_t vld1_dup_p8 (const poly8_t *) 29808 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 29809 29810 * uint64x1_t vld1_dup_u64 (const uint64_t *) 29811 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29812 29813 * int64x1_t vld1_dup_s64 (const int64_t *) 29814 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 29815 29816 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 29817 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 29818 29819 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 29820 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 29821 29822 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 29823 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 29824 29825 * int32x4_t vld1q_dup_s32 (const int32_t *) 29826 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 29827 29828 * int16x8_t vld1q_dup_s16 (const int16_t *) 29829 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 29830 29831 * int8x16_t vld1q_dup_s8 (const int8_t *) 29832 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 29833 29834 * float32x4_t vld1q_dup_f32 (const float32_t *) 29835 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 29836 29837 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 29838 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 29839 29840 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 29841 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 29842 29843 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 29844 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 29845 29846 * int64x2_t vld1q_dup_s64 (const int64_t *) 29847 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 29848 298496.52.3.69 Element/structure stores, VST1 variants 29850................................................. 29851 29852 * void vst1_u32 (uint32_t *, uint32x2_t) 29853 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 29854 29855 * void vst1_u16 (uint16_t *, uint16x4_t) 29856 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 29857 29858 * void vst1_u8 (uint8_t *, uint8x8_t) 29859 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 29860 29861 * void vst1_s32 (int32_t *, int32x2_t) 29862 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 29863 29864 * void vst1_s16 (int16_t *, int16x4_t) 29865 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 29866 29867 * void vst1_s8 (int8_t *, int8x8_t) 29868 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 29869 29870 * void vst1_u64 (uint64_t *, uint64x1_t) 29871 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29872 29873 * void vst1_s64 (int64_t *, int64x1_t) 29874 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29875 29876 * void vst1_f32 (float32_t *, float32x2_t) 29877 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 29878 29879 * void vst1_p16 (poly16_t *, poly16x4_t) 29880 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 29881 29882 * void vst1_p8 (poly8_t *, poly8x8_t) 29883 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 29884 29885 * void vst1q_u32 (uint32_t *, uint32x4_t) 29886 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 29887 29888 * void vst1q_u16 (uint16_t *, uint16x8_t) 29889 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 29890 29891 * void vst1q_u8 (uint8_t *, uint8x16_t) 29892 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 29893 29894 * void vst1q_s32 (int32_t *, int32x4_t) 29895 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 29896 29897 * void vst1q_s16 (int16_t *, int16x8_t) 29898 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 29899 29900 * void vst1q_s8 (int8_t *, int8x16_t) 29901 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 29902 29903 * void vst1q_u64 (uint64_t *, uint64x2_t) 29904 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 29905 29906 * void vst1q_s64 (int64_t *, int64x2_t) 29907 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 29908 29909 * void vst1q_f32 (float32_t *, float32x4_t) 29910 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 29911 29912 * void vst1q_p16 (poly16_t *, poly16x8_t) 29913 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 29914 29915 * void vst1q_p8 (poly8_t *, poly8x16_t) 29916 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 29917 29918 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 29919 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29920 29921 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 29922 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29923 29924 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 29925 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29926 29927 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 29928 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29929 29930 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 29931 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29932 29933 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 29934 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29935 29936 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 29937 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29938 29939 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 29940 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29941 29942 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 29943 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29944 29945 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 29946 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29947 29948 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 29949 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29950 29951 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 29952 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29953 29954 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 29955 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29956 29957 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 29958 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29959 29960 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 29961 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29962 29963 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 29964 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29965 29966 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 29967 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29968 29969 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 29970 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 29971 29972 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 29973 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 29974 29975 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 29976 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 29977 29978 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 29979 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29980 29981 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 29982 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 29983 299846.52.3.70 Element/structure loads, VLD2 variants 29985................................................ 29986 29987 * uint32x2x2_t vld2_u32 (const uint32_t *) 29988 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 29989 29990 * uint16x4x2_t vld2_u16 (const uint16_t *) 29991 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 29992 29993 * uint8x8x2_t vld2_u8 (const uint8_t *) 29994 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 29995 29996 * int32x2x2_t vld2_s32 (const int32_t *) 29997 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 29998 29999 * int16x4x2_t vld2_s16 (const int16_t *) 30000 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 30001 30002 * int8x8x2_t vld2_s8 (const int8_t *) 30003 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 30004 30005 * float32x2x2_t vld2_f32 (const float32_t *) 30006 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 30007 30008 * poly16x4x2_t vld2_p16 (const poly16_t *) 30009 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 30010 30011 * poly8x8x2_t vld2_p8 (const poly8_t *) 30012 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 30013 30014 * uint64x1x2_t vld2_u64 (const uint64_t *) 30015 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 30016 30017 * int64x1x2_t vld2_s64 (const int64_t *) 30018 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 30019 30020 * uint32x4x2_t vld2q_u32 (const uint32_t *) 30021 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 30022 30023 * uint16x8x2_t vld2q_u16 (const uint16_t *) 30024 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 30025 30026 * uint8x16x2_t vld2q_u8 (const uint8_t *) 30027 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 30028 30029 * int32x4x2_t vld2q_s32 (const int32_t *) 30030 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 30031 30032 * int16x8x2_t vld2q_s16 (const int16_t *) 30033 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 30034 30035 * int8x16x2_t vld2q_s8 (const int8_t *) 30036 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 30037 30038 * float32x4x2_t vld2q_f32 (const float32_t *) 30039 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 30040 30041 * poly16x8x2_t vld2q_p16 (const poly16_t *) 30042 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 30043 30044 * poly8x16x2_t vld2q_p8 (const poly8_t *) 30045 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 30046 30047 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 30048 int) 30049 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30050 30051 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 30052 int) 30053 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30054 30055 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 30056 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 30057 30058 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 30059 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30060 30061 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 30062 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30063 30064 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 30065 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 30066 30067 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 30068 const int) 30069 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30070 30071 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 30072 int) 30073 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30074 30075 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 30076 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 30077 30078 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 30079 int) 30080 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30081 30082 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 30083 int) 30084 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30085 30086 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 30087 int) 30088 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30089 30090 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 30091 int) 30092 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30093 30094 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 30095 const int) 30096 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 30097 30098 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 30099 int) 30100 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 30101 30102 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 30103 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 30104 30105 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 30106 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 30107 30108 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 30109 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 30110 30111 * int32x2x2_t vld2_dup_s32 (const int32_t *) 30112 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 30113 30114 * int16x4x2_t vld2_dup_s16 (const int16_t *) 30115 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 30116 30117 * int8x8x2_t vld2_dup_s8 (const int8_t *) 30118 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 30119 30120 * float32x2x2_t vld2_dup_f32 (const float32_t *) 30121 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 30122 30123 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 30124 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 30125 30126 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 30127 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 30128 30129 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 30130 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 30131 30132 * int64x1x2_t vld2_dup_s64 (const int64_t *) 30133 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 30134 301356.52.3.71 Element/structure stores, VST2 variants 30136................................................. 30137 30138 * void vst2_u32 (uint32_t *, uint32x2x2_t) 30139 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30140 30141 * void vst2_u16 (uint16_t *, uint16x4x2_t) 30142 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30143 30144 * void vst2_u8 (uint8_t *, uint8x8x2_t) 30145 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30146 30147 * void vst2_s32 (int32_t *, int32x2x2_t) 30148 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30149 30150 * void vst2_s16 (int16_t *, int16x4x2_t) 30151 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30152 30153 * void vst2_s8 (int8_t *, int8x8x2_t) 30154 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30155 30156 * void vst2_f32 (float32_t *, float32x2x2_t) 30157 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30158 30159 * void vst2_p16 (poly16_t *, poly16x4x2_t) 30160 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30161 30162 * void vst2_p8 (poly8_t *, poly8x8x2_t) 30163 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30164 30165 * void vst2_u64 (uint64_t *, uint64x1x2_t) 30166 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 30167 30168 * void vst2_s64 (int64_t *, int64x1x2_t) 30169 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 30170 30171 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 30172 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30173 30174 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 30175 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30176 30177 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 30178 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30179 30180 * void vst2q_s32 (int32_t *, int32x4x2_t) 30181 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30182 30183 * void vst2q_s16 (int16_t *, int16x8x2_t) 30184 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30185 30186 * void vst2q_s8 (int8_t *, int8x16x2_t) 30187 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30188 30189 * void vst2q_f32 (float32_t *, float32x4x2_t) 30190 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 30191 30192 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 30193 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 30194 30195 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 30196 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 30197 30198 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 30199 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30200 30201 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 30202 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30203 30204 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 30205 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 30206 30207 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 30208 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30209 30210 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 30211 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30212 30213 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 30214 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 30215 30216 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 30217 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30218 30219 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 30220 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30221 30222 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 30223 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 30224 30225 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 30226 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30227 30228 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 30229 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30230 30231 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 30232 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30233 30234 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 30235 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30236 30237 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 30238 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 30239 30240 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 30241 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 30242 302436.52.3.72 Element/structure loads, VLD3 variants 30244................................................ 30245 30246 * uint32x2x3_t vld3_u32 (const uint32_t *) 30247 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30248 30249 * uint16x4x3_t vld3_u16 (const uint16_t *) 30250 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30251 30252 * uint8x8x3_t vld3_u8 (const uint8_t *) 30253 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30254 30255 * int32x2x3_t vld3_s32 (const int32_t *) 30256 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30257 30258 * int16x4x3_t vld3_s16 (const int16_t *) 30259 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30260 30261 * int8x8x3_t vld3_s8 (const int8_t *) 30262 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30263 30264 * float32x2x3_t vld3_f32 (const float32_t *) 30265 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30266 30267 * poly16x4x3_t vld3_p16 (const poly16_t *) 30268 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30269 30270 * poly8x8x3_t vld3_p8 (const poly8_t *) 30271 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30272 30273 * uint64x1x3_t vld3_u64 (const uint64_t *) 30274 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 30275 30276 * int64x1x3_t vld3_s64 (const int64_t *) 30277 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 30278 30279 * uint32x4x3_t vld3q_u32 (const uint32_t *) 30280 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30281 30282 * uint16x8x3_t vld3q_u16 (const uint16_t *) 30283 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30284 30285 * uint8x16x3_t vld3q_u8 (const uint8_t *) 30286 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30287 30288 * int32x4x3_t vld3q_s32 (const int32_t *) 30289 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30290 30291 * int16x8x3_t vld3q_s16 (const int16_t *) 30292 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30293 30294 * int8x16x3_t vld3q_s8 (const int8_t *) 30295 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30296 30297 * float32x4x3_t vld3q_f32 (const float32_t *) 30298 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 30299 30300 * poly16x8x3_t vld3q_p16 (const poly16_t *) 30301 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 30302 30303 * poly8x16x3_t vld3q_p8 (const poly8_t *) 30304 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 30305 30306 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 30307 int) 30308 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30309 [R0]' 30310 30311 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 30312 int) 30313 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30314 [R0]' 30315 30316 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 30317 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 30318 [R0]' 30319 30320 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 30321 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30322 [R0]' 30323 30324 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 30325 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30326 [R0]' 30327 30328 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 30329 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 30330 [R0]' 30331 30332 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 30333 const int) 30334 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30335 [R0]' 30336 30337 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 30338 int) 30339 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30340 [R0]' 30341 30342 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 30343 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 30344 [R0]' 30345 30346 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 30347 int) 30348 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30349 [R0]' 30350 30351 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 30352 int) 30353 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30354 [R0]' 30355 30356 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 30357 int) 30358 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30359 [R0]' 30360 30361 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 30362 int) 30363 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30364 [R0]' 30365 30366 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 30367 const int) 30368 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 30369 [R0]' 30370 30371 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 30372 int) 30373 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 30374 [R0]' 30375 30376 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 30377 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 30378 [R0]' 30379 30380 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 30381 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 30382 [R0]' 30383 30384 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 30385 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 30386 [R0]' 30387 30388 * int32x2x3_t vld3_dup_s32 (const int32_t *) 30389 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 30390 [R0]' 30391 30392 * int16x4x3_t vld3_dup_s16 (const int16_t *) 30393 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 30394 [R0]' 30395 30396 * int8x8x3_t vld3_dup_s8 (const int8_t *) 30397 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 30398 [R0]' 30399 30400 * float32x2x3_t vld3_dup_f32 (const float32_t *) 30401 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 30402 [R0]' 30403 30404 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 30405 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 30406 [R0]' 30407 30408 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 30409 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 30410 [R0]' 30411 30412 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 30413 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 30414 30415 * int64x1x3_t vld3_dup_s64 (const int64_t *) 30416 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 30417 304186.52.3.73 Element/structure stores, VST3 variants 30419................................................. 30420 30421 * void vst3_u32 (uint32_t *, uint32x2x3_t) 30422 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 30423 30424 * void vst3_u16 (uint16_t *, uint16x4x3_t) 30425 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 30426 30427 * void vst3_u8 (uint8_t *, uint8x8x3_t) 30428 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 30429 30430 * void vst3_s32 (int32_t *, int32x2x3_t) 30431 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 30432 30433 * void vst3_s16 (int16_t *, int16x4x3_t) 30434 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 30435 30436 * void vst3_s8 (int8_t *, int8x8x3_t) 30437 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 30438 30439 * void vst3_f32 (float32_t *, float32x2x3_t) 30440 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 30441 30442 * void vst3_p16 (poly16_t *, poly16x4x3_t) 30443 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 30444 30445 * void vst3_p8 (poly8_t *, poly8x8x3_t) 30446 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 30447 30448 * void vst3_u64 (uint64_t *, uint64x1x3_t) 30449 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 30450 30451 * void vst3_s64 (int64_t *, int64x1x3_t) 30452 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 30453 30454 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 30455 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 30456 30457 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 30458 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 30459 30460 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 30461 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 30462 30463 * void vst3q_s32 (int32_t *, int32x4x3_t) 30464 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 30465 30466 * void vst3q_s16 (int16_t *, int16x8x3_t) 30467 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 30468 30469 * void vst3q_s8 (int8_t *, int8x16x3_t) 30470 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 30471 30472 * void vst3q_f32 (float32_t *, float32x4x3_t) 30473 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 30474 30475 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 30476 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 30477 30478 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 30479 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 30480 30481 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 30482 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30483 [R0]' 30484 30485 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 30486 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30487 [R0]' 30488 30489 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 30490 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 30491 [R0]' 30492 30493 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 30494 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30495 [R0]' 30496 30497 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 30498 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30499 [R0]' 30500 30501 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 30502 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 30503 [R0]' 30504 30505 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 30506 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30507 [R0]' 30508 30509 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 30510 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30511 [R0]' 30512 30513 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 30514 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 30515 [R0]' 30516 30517 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 30518 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30519 [R0]' 30520 30521 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 30522 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30523 [R0]' 30524 30525 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 30526 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30527 [R0]' 30528 30529 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 30530 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30531 [R0]' 30532 30533 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 30534 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 30535 [R0]' 30536 30537 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 30538 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 30539 [R0]' 30540 305416.52.3.74 Element/structure loads, VLD4 variants 30542................................................ 30543 30544 * uint32x2x4_t vld4_u32 (const uint32_t *) 30545 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30546 30547 * uint16x4x4_t vld4_u16 (const uint16_t *) 30548 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30549 30550 * uint8x8x4_t vld4_u8 (const uint8_t *) 30551 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30552 30553 * int32x2x4_t vld4_s32 (const int32_t *) 30554 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30555 30556 * int16x4x4_t vld4_s16 (const int16_t *) 30557 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30558 30559 * int8x8x4_t vld4_s8 (const int8_t *) 30560 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30561 30562 * float32x2x4_t vld4_f32 (const float32_t *) 30563 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30564 30565 * poly16x4x4_t vld4_p16 (const poly16_t *) 30566 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30567 30568 * poly8x8x4_t vld4_p8 (const poly8_t *) 30569 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30570 30571 * uint64x1x4_t vld4_u64 (const uint64_t *) 30572 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 30573 30574 * int64x1x4_t vld4_s64 (const int64_t *) 30575 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 30576 30577 * uint32x4x4_t vld4q_u32 (const uint32_t *) 30578 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30579 30580 * uint16x8x4_t vld4q_u16 (const uint16_t *) 30581 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30582 30583 * uint8x16x4_t vld4q_u8 (const uint8_t *) 30584 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30585 30586 * int32x4x4_t vld4q_s32 (const int32_t *) 30587 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30588 30589 * int16x8x4_t vld4q_s16 (const int16_t *) 30590 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30591 30592 * int8x16x4_t vld4q_s8 (const int8_t *) 30593 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30594 30595 * float32x4x4_t vld4q_f32 (const float32_t *) 30596 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 30597 30598 * poly16x8x4_t vld4q_p16 (const poly16_t *) 30599 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 30600 30601 * poly8x16x4_t vld4q_p8 (const poly8_t *) 30602 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 30603 30604 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 30605 int) 30606 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30607 D3[0]}, [R0]' 30608 30609 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 30610 int) 30611 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30612 D3[0]}, [R0]' 30613 30614 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 30615 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 30616 D3[0]}, [R0]' 30617 30618 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 30619 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30620 D3[0]}, [R0]' 30621 30622 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 30623 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30624 D3[0]}, [R0]' 30625 30626 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 30627 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 30628 D3[0]}, [R0]' 30629 30630 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 30631 const int) 30632 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30633 D3[0]}, [R0]' 30634 30635 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 30636 int) 30637 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30638 D3[0]}, [R0]' 30639 30640 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 30641 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 30642 D3[0]}, [R0]' 30643 30644 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 30645 int) 30646 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30647 D3[0]}, [R0]' 30648 30649 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 30650 int) 30651 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30652 D3[0]}, [R0]' 30653 30654 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 30655 int) 30656 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30657 D3[0]}, [R0]' 30658 30659 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 30660 int) 30661 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30662 D3[0]}, [R0]' 30663 30664 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 30665 const int) 30666 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 30667 D3[0]}, [R0]' 30668 30669 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 30670 int) 30671 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 30672 D3[0]}, [R0]' 30673 30674 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 30675 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 30676 D3[]}, [R0]' 30677 30678 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 30679 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 30680 D3[]}, [R0]' 30681 30682 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 30683 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 30684 D3[]}, [R0]' 30685 30686 * int32x2x4_t vld4_dup_s32 (const int32_t *) 30687 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 30688 D3[]}, [R0]' 30689 30690 * int16x4x4_t vld4_dup_s16 (const int16_t *) 30691 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 30692 D3[]}, [R0]' 30693 30694 * int8x8x4_t vld4_dup_s8 (const int8_t *) 30695 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 30696 D3[]}, [R0]' 30697 30698 * float32x2x4_t vld4_dup_f32 (const float32_t *) 30699 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 30700 D3[]}, [R0]' 30701 30702 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 30703 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 30704 D3[]}, [R0]' 30705 30706 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 30707 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 30708 D3[]}, [R0]' 30709 30710 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 30711 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 30712 30713 * int64x1x4_t vld4_dup_s64 (const int64_t *) 30714 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 30715 307166.52.3.75 Element/structure stores, VST4 variants 30717................................................. 30718 30719 * void vst4_u32 (uint32_t *, uint32x2x4_t) 30720 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30721 30722 * void vst4_u16 (uint16_t *, uint16x4x4_t) 30723 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30724 30725 * void vst4_u8 (uint8_t *, uint8x8x4_t) 30726 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30727 30728 * void vst4_s32 (int32_t *, int32x2x4_t) 30729 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30730 30731 * void vst4_s16 (int16_t *, int16x4x4_t) 30732 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30733 30734 * void vst4_s8 (int8_t *, int8x8x4_t) 30735 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30736 30737 * void vst4_f32 (float32_t *, float32x2x4_t) 30738 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30739 30740 * void vst4_p16 (poly16_t *, poly16x4x4_t) 30741 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30742 30743 * void vst4_p8 (poly8_t *, poly8x8x4_t) 30744 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30745 30746 * void vst4_u64 (uint64_t *, uint64x1x4_t) 30747 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 30748 30749 * void vst4_s64 (int64_t *, int64x1x4_t) 30750 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 30751 30752 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 30753 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30754 30755 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 30756 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30757 30758 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 30759 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30760 30761 * void vst4q_s32 (int32_t *, int32x4x4_t) 30762 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30763 30764 * void vst4q_s16 (int16_t *, int16x8x4_t) 30765 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30766 30767 * void vst4q_s8 (int8_t *, int8x16x4_t) 30768 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30769 30770 * void vst4q_f32 (float32_t *, float32x4x4_t) 30771 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 30772 30773 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 30774 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 30775 30776 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 30777 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 30778 30779 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 30780 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30781 D3[0]}, [R0]' 30782 30783 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 30784 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30785 D3[0]}, [R0]' 30786 30787 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 30788 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 30789 D3[0]}, [R0]' 30790 30791 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 30792 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30793 D3[0]}, [R0]' 30794 30795 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 30796 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30797 D3[0]}, [R0]' 30798 30799 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 30800 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 30801 D3[0]}, [R0]' 30802 30803 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 30804 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30805 D3[0]}, [R0]' 30806 30807 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 30808 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30809 D3[0]}, [R0]' 30810 30811 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 30812 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 30813 D3[0]}, [R0]' 30814 30815 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 30816 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30817 D3[0]}, [R0]' 30818 30819 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 30820 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30821 D3[0]}, [R0]' 30822 30823 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 30824 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30825 D3[0]}, [R0]' 30826 30827 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 30828 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30829 D3[0]}, [R0]' 30830 30831 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 30832 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 30833 D3[0]}, [R0]' 30834 30835 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 30836 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 30837 D3[0]}, [R0]' 30838 308396.52.3.76 Logical operations (AND) 30840.................................. 30841 30842 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 30843 _Form of expected instruction(s):_ `vand D0, D0, D0' 30844 30845 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 30846 _Form of expected instruction(s):_ `vand D0, D0, D0' 30847 30848 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 30849 _Form of expected instruction(s):_ `vand D0, D0, D0' 30850 30851 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 30852 _Form of expected instruction(s):_ `vand D0, D0, D0' 30853 30854 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 30855 _Form of expected instruction(s):_ `vand D0, D0, D0' 30856 30857 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 30858 _Form of expected instruction(s):_ `vand D0, D0, D0' 30859 30860 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 30861 _Form of expected instruction(s):_ `vand D0, D0, D0' 30862 30863 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 30864 _Form of expected instruction(s):_ `vand D0, D0, D0' 30865 30866 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 30867 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30868 30869 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 30870 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30871 30872 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 30873 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30874 30875 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 30876 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30877 30878 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 30879 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30880 30881 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 30882 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30883 30884 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 30885 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30886 30887 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 30888 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 30889 308906.52.3.77 Logical operations (OR) 30891................................. 30892 30893 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 30894 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30895 30896 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 30897 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30898 30899 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 30900 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30901 30902 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 30903 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30904 30905 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 30906 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30907 30908 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 30909 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30910 30911 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 30912 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30913 30914 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 30915 _Form of expected instruction(s):_ `vorr D0, D0, D0' 30916 30917 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 30918 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30919 30920 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 30921 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30922 30923 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 30924 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30925 30926 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 30927 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30928 30929 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 30930 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30931 30932 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 30933 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30934 30935 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 30936 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30937 30938 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 30939 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 30940 309416.52.3.78 Logical operations (exclusive OR) 30942........................................... 30943 30944 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 30945 _Form of expected instruction(s):_ `veor D0, D0, D0' 30946 30947 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 30948 _Form of expected instruction(s):_ `veor D0, D0, D0' 30949 30950 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 30951 _Form of expected instruction(s):_ `veor D0, D0, D0' 30952 30953 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 30954 _Form of expected instruction(s):_ `veor D0, D0, D0' 30955 30956 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 30957 _Form of expected instruction(s):_ `veor D0, D0, D0' 30958 30959 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 30960 _Form of expected instruction(s):_ `veor D0, D0, D0' 30961 30962 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 30963 _Form of expected instruction(s):_ `veor D0, D0, D0' 30964 30965 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 30966 _Form of expected instruction(s):_ `veor D0, D0, D0' 30967 30968 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 30969 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30970 30971 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 30972 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30973 30974 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 30975 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30976 30977 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 30978 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30979 30980 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 30981 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30982 30983 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 30984 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30985 30986 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 30987 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30988 30989 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 30990 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 30991 309926.52.3.79 Logical operations (AND-NOT) 30993...................................... 30994 30995 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 30996 _Form of expected instruction(s):_ `vbic D0, D0, D0' 30997 30998 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 30999 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31000 31001 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 31002 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31003 31004 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 31005 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31006 31007 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 31008 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31009 31010 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 31011 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31012 31013 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 31014 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31015 31016 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 31017 _Form of expected instruction(s):_ `vbic D0, D0, D0' 31018 31019 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 31020 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31021 31022 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 31023 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31024 31025 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 31026 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31027 31028 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 31029 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31030 31031 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 31032 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31033 31034 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 31035 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31036 31037 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 31038 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31039 31040 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 31041 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 31042 310436.52.3.80 Logical operations (OR-NOT) 31044..................................... 31045 31046 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 31047 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31048 31049 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 31050 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31051 31052 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 31053 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31054 31055 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 31056 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31057 31058 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 31059 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31060 31061 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 31062 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31063 31064 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 31065 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31066 31067 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 31068 _Form of expected instruction(s):_ `vorn D0, D0, D0' 31069 31070 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 31071 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31072 31073 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 31074 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31075 31076 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 31077 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31078 31079 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 31080 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31081 31082 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 31083 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31084 31085 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 31086 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31087 31088 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 31089 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31090 31091 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 31092 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 31093 310946.52.3.81 Reinterpret casts 31095........................... 31096 31097 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 31098 31099 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 31100 31101 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 31102 31103 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 31104 31105 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 31106 31107 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 31108 31109 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 31110 31111 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 31112 31113 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 31114 31115 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 31116 31117 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 31118 31119 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 31120 31121 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 31122 31123 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 31124 31125 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 31126 31127 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 31128 31129 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 31130 31131 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 31132 31133 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 31134 31135 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 31136 31137 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 31138 31139 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 31140 31141 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 31142 31143 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 31144 31145 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 31146 31147 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 31148 31149 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 31150 31151 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 31152 31153 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 31154 31155 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 31156 31157 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 31158 31159 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 31160 31161 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 31162 31163 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 31164 31165 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 31166 31167 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 31168 31169 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 31170 31171 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 31172 31173 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 31174 31175 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 31176 31177 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 31178 31179 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 31180 31181 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 31182 31183 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 31184 31185 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 31186 31187 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 31188 31189 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 31190 31191 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 31192 31193 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 31194 31195 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 31196 31197 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 31198 31199 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 31200 31201 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 31202 31203 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 31204 31205 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 31206 31207 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 31208 31209 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 31210 31211 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 31212 31213 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 31214 31215 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 31216 31217 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 31218 31219 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 31220 31221 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 31222 31223 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 31224 31225 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 31226 31227 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 31228 31229 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 31230 31231 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 31232 31233 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 31234 31235 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 31236 31237 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 31238 31239 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 31240 31241 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 31242 31243 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 31244 31245 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 31246 31247 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 31248 31249 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 31250 31251 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 31252 31253 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 31254 31255 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 31256 31257 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 31258 31259 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 31260 31261 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 31262 31263 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 31264 31265 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 31266 31267 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 31268 31269 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 31270 31271 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 31272 31273 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 31274 31275 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 31276 31277 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 31278 31279 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 31280 31281 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 31282 31283 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 31284 31285 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 31286 31287 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 31288 31289 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 31290 31291 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 31292 31293 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 31294 31295 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 31296 31297 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 31298 31299 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 31300 31301 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 31302 31303 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 31304 31305 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 31306 31307 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 31308 31309 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 31310 31311 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 31312 31313 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 31314 31315 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 31316 31317 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 31318 31319 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 31320 31321 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 31322 31323 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 31324 31325 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 31326 31327 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 31328 31329 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 31330 31331 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 31332 31333 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 31334 31335 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 31336 31337 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 31338 31339 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 31340 31341 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 31342 31343 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 31344 31345 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 31346 31347 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 31348 31349 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 31350 31351 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 31352 31353 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 31354 31355 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 31356 31357 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 31358 31359 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 31360 31361 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 31362 31363 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 31364 31365 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 31366 31367 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 31368 31369 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 31370 31371 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 31372 31373 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 31374 31375 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 31376 31377 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 31378 31379 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 31380 31381 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 31382 31383 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 31384 31385 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 31386 31387 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 31388 31389 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 31390 31391 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 31392 31393 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 31394 31395 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 31396 31397 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 31398 31399 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 31400 31401 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 31402 31403 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 31404 31405 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 31406 31407 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 31408 31409 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 31410 31411 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 31412 31413 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 31414 31415 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 31416 31417 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 31418 31419 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 31420 31421 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 31422 31423 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 31424 31425 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 31426 31427 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 31428 31429 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 31430 31431 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 31432 31433 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 31434 31435 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 31436 31437 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 31438 31439 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 31440 31441 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 31442 31443 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 31444 31445 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 31446 31447 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 31448 31449 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 31450 31451 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 31452 31453 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 31454 31455 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 31456 31457 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 31458 31459 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 31460 31461 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 31462 31463 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 31464 31465 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 31466 31467 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 31468 31469 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 31470 31471 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 31472 31473 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 31474 31475 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 31476 31477 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 31478 31479 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 31480 31481 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 31482 31483 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 31484 31485 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 31486 31487 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 31488 31489 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 31490 31491 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 31492 31493 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 31494 31495 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 31496 31497 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 31498 31499 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 31500 31501 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 31502 31503 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 31504 31505 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 31506 31507 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 31508 31509 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 31510 31511 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 31512 31513 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 31514 31515 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 31516 31517 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 31518 31519 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 31520 31521 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 31522 31523 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 31524 31525 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 31526 31527 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 31528 31529 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 31530 31531 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 31532 31533 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 31534 31535 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 31536 31537 31538File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 31539 315406.52.4 Blackfin Built-in Functions 31541---------------------------------- 31542 31543Currently, there are two Blackfin-specific built-in functions. These 31544are used for generating `CSYNC' and `SSYNC' machine insns without using 31545inline assembly; by using these built-in functions the compiler can 31546automatically add workarounds for hardware errata involving these 31547instructions. These functions are named as follows: 31548 31549 void __builtin_bfin_csync (void) 31550 void __builtin_bfin_ssync (void) 31551 31552 31553File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 31554 315556.52.5 FR-V Built-in Functions 31556------------------------------ 31557 31558GCC provides many FR-V-specific built-in functions. In general, these 31559functions are intended to be compatible with those described by `FR-V 31560Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 31561The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 31562which pass 128-bit values by pointer rather than by value. 31563 31564 Most of the functions are named after specific FR-V instructions. 31565Such functions are said to be "directly mapped" and are summarized here 31566in tabular form. 31567 31568* Menu: 31569 31570* Argument Types:: 31571* Directly-mapped Integer Functions:: 31572* Directly-mapped Media Functions:: 31573* Raw read/write Functions:: 31574* Other Built-in Functions:: 31575 31576 31577File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 31578 315796.52.5.1 Argument Types 31580....................... 31581 31582The arguments to the built-in functions can be divided into three 31583groups: register numbers, compile-time constants and run-time values. 31584In order to make this classification clear at a glance, the arguments 31585and return values are given the following pseudo types: 31586 31587Pseudo type Real C type Constant? Description 31588`uh' `unsigned short' No an unsigned halfword 31589`uw1' `unsigned int' No an unsigned word 31590`sw1' `int' No a signed word 31591`uw2' `unsigned long long' No an unsigned doubleword 31592`sw2' `long long' No a signed doubleword 31593`const' `int' Yes an integer constant 31594`acc' `int' Yes an ACC register number 31595`iacc' `int' Yes an IACC register number 31596 31597 These pseudo types are not defined by GCC, they are simply a notational 31598convenience used in this manual. 31599 31600 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 31601run time. They correspond to register operands in the underlying FR-V 31602instructions. 31603 31604 `const' arguments represent immediate operands in the underlying FR-V 31605instructions. They must be compile-time constants. 31606 31607 `acc' arguments are evaluated at compile time and specify the number 31608of an accumulator register. For example, an `acc' argument of 2 will 31609select the ACC2 register. 31610 31611 `iacc' arguments are similar to `acc' arguments but specify the number 31612of an IACC register. See *note Other Built-in Functions:: for more 31613details. 31614 31615 31616File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 31617 316186.52.5.2 Directly-mapped Integer Functions 31619.......................................... 31620 31621The functions listed below map directly to FR-V I-type instructions. 31622 31623Function prototype Example usage Assembly output 31624`sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 31625`sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 31626`sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 31627`sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 31628`void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 31629`void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 31630`void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 31631`sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 31632`sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 31633`uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 31634 31635 31636File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 31637 316386.52.5.3 Directly-mapped Media Functions 31639........................................ 31640 31641The functions listed below map directly to FR-V M-type instructions. 31642 31643Function prototype Example usage Assembly output 31644`uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 31645`void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 31646`sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 31647`uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 31648`uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 31649`void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 31650`uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 31651`uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 31652`void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 31653`void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 31654`void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 31655`uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 31656`uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 31657`uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 31658`uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 31659`void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 31660`void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 31661`void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 31662`void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 31663`uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 31664`uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 31665`void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 31666`void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 31667`uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 31668`uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 31669`uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 31670`void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 31671`void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 31672`uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 31673`uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 31674`uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 31675`sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 31676`uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 31677`sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 31678`uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 31679`sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 31680`uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 31681`void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 31682`void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 31683`void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 31684`void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 31685`void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 31686`void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 31687`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 31688`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 31689`uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 31690`uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 31691`uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 31692`sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 31693`uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 31694`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 31695`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 31696`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 31697`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 31698`sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 31699`sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 31700`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 31701`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 31702`void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 31703sw2)' 31704`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 31705`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 31706`void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 31707sw2)' 31708`void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 31709uw2)' 31710`sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 31711`uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 31712`sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 31713`sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 31714`uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 31715`void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 31716sw2)' 31717`void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 31718sw2)' 31719`uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 31720`uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 31721`uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 31722`uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 31723`sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 31724`uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 31725`uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 31726`sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 31727`uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 31728`void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 31729`sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 31730`uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 31731`void __MTRAP (void)' `__MTRAP ()' `MTRAP' 31732`uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 31733`uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 31734`void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 31735`void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 31736`uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 31737 31738 31739File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 31740 317416.52.5.4 Raw read/write Functions 31742................................. 31743 31744This sections describes built-in functions related to read and write 31745instructions to access memory. These functions generate `membar' 31746instructions to flush the I/O load and stores where appropriate, as 31747described in Fujitsu's manual described above. 31748 31749`unsigned char __builtin_read8 (void *DATA)' 31750 31751`unsigned short __builtin_read16 (void *DATA)' 31752 31753`unsigned long __builtin_read32 (void *DATA)' 31754 31755`unsigned long long __builtin_read64 (void *DATA)' 31756 31757`void __builtin_write8 (void *DATA, unsigned char DATUM)' 31758 31759`void __builtin_write16 (void *DATA, unsigned short DATUM)' 31760 31761`void __builtin_write32 (void *DATA, unsigned long DATUM)' 31762 31763`void __builtin_write64 (void *DATA, unsigned long long DATUM)' 31764 31765 31766File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 31767 317686.52.5.5 Other Built-in Functions 31769................................. 31770 31771This section describes built-in functions that are not named after a 31772specific FR-V instruction. 31773 31774`sw2 __IACCreadll (iacc REG)' 31775 Return the full 64-bit value of IACC0. The REG argument is 31776 reserved for future expansion and must be 0. 31777 31778`sw1 __IACCreadl (iacc REG)' 31779 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 31780 Other values of REG are rejected as invalid. 31781 31782`void __IACCsetll (iacc REG, sw2 X)' 31783 Set the full 64-bit value of IACC0 to X. The REG argument is 31784 reserved for future expansion and must be 0. 31785 31786`void __IACCsetl (iacc REG, sw1 X)' 31787 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 31788 values of REG are rejected as invalid. 31789 31790`void __data_prefetch0 (const void *X)' 31791 Use the `dcpl' instruction to load the contents of address X into 31792 the data cache. 31793 31794`void __data_prefetch (const void *X)' 31795 Use the `nldub' instruction to load the contents of address X into 31796 the data cache. The instruction will be issued in slot I1. 31797 31798 31799File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 31800 318016.52.6 X86 Built-in Functions 31802----------------------------- 31803 31804These built-in functions are available for the i386 and x86-64 family 31805of computers, depending on the command-line switches used. 31806 31807 Note that, if you specify command-line switches such as `-msse', the 31808compiler could use the extended instruction sets even if the built-ins 31809are not used explicitly in the program. For this reason, applications 31810which perform runtime CPU detection must compile separate files for each 31811supported architecture, using the appropriate flags. In particular, 31812the file containing the CPU detection code should be compiled without 31813these options. 31814 31815 The following machine modes are available for use with MMX built-in 31816functions (*note Vector Extensions::): `V2SI' for a vector of two 3181732-bit integers, `V4HI' for a vector of four 16-bit integers, and 31818`V8QI' for a vector of eight 8-bit integers. Some of the built-in 31819functions operate on MMX registers as a whole 64-bit entity, these use 31820`V1DI' as their mode. 31821 31822 If 3DNow! extensions are enabled, `V2SF' is used as a mode for a vector 31823of two 32-bit floating point values. 31824 31825 If SSE extensions are enabled, `V4SF' is used for a vector of four 3182632-bit floating point values. Some instructions use a vector of four 3182732-bit integers, these use `V4SI'. Finally, some instructions operate 31828on an entire vector register, interpreting it as a 128-bit integer, 31829these use mode `TI'. 31830 31831 In 64-bit mode, the x86-64 family of processors uses additional 31832built-in functions for efficient use of `TF' (`__float128') 128-bit 31833floating point and `TC' 128-bit complex floating point values. 31834 31835 The following floating point built-in functions are available in 64-bit 31836mode. All of them implement the function that is part of the name. 31837 31838 __float128 __builtin_fabsq (__float128) 31839 __float128 __builtin_copysignq (__float128, __float128) 31840 31841 The following floating point built-in functions are made available in 31842the 64-bit mode. 31843 31844`__float128 __builtin_infq (void)' 31845 Similar to `__builtin_inf', except the return type is `__float128'. 31846 31847`__float128 __builtin_huge_valq (void)' 31848 Similar to `__builtin_huge_val', except the return type is 31849 `__float128'. 31850 31851 The following built-in functions are made available by `-mmmx'. All 31852of them generate the machine instruction that is part of the name. 31853 31854 v8qi __builtin_ia32_paddb (v8qi, v8qi) 31855 v4hi __builtin_ia32_paddw (v4hi, v4hi) 31856 v2si __builtin_ia32_paddd (v2si, v2si) 31857 v8qi __builtin_ia32_psubb (v8qi, v8qi) 31858 v4hi __builtin_ia32_psubw (v4hi, v4hi) 31859 v2si __builtin_ia32_psubd (v2si, v2si) 31860 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 31861 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 31862 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 31863 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 31864 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 31865 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 31866 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 31867 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 31868 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 31869 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 31870 di __builtin_ia32_pand (di, di) 31871 di __builtin_ia32_pandn (di,di) 31872 di __builtin_ia32_por (di, di) 31873 di __builtin_ia32_pxor (di, di) 31874 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 31875 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 31876 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 31877 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 31878 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 31879 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 31880 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 31881 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 31882 v2si __builtin_ia32_punpckhdq (v2si, v2si) 31883 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 31884 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 31885 v2si __builtin_ia32_punpckldq (v2si, v2si) 31886 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 31887 v4hi __builtin_ia32_packssdw (v2si, v2si) 31888 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 31889 31890 v4hi __builtin_ia32_psllw (v4hi, v4hi) 31891 v2si __builtin_ia32_pslld (v2si, v2si) 31892 v1di __builtin_ia32_psllq (v1di, v1di) 31893 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 31894 v2si __builtin_ia32_psrld (v2si, v2si) 31895 v1di __builtin_ia32_psrlq (v1di, v1di) 31896 v4hi __builtin_ia32_psraw (v4hi, v4hi) 31897 v2si __builtin_ia32_psrad (v2si, v2si) 31898 v4hi __builtin_ia32_psllwi (v4hi, int) 31899 v2si __builtin_ia32_pslldi (v2si, int) 31900 v1di __builtin_ia32_psllqi (v1di, int) 31901 v4hi __builtin_ia32_psrlwi (v4hi, int) 31902 v2si __builtin_ia32_psrldi (v2si, int) 31903 v1di __builtin_ia32_psrlqi (v1di, int) 31904 v4hi __builtin_ia32_psrawi (v4hi, int) 31905 v2si __builtin_ia32_psradi (v2si, int) 31906 31907 The following built-in functions are made available either with 31908`-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 31909of them generate the machine instruction that is part of the name. 31910 31911 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 31912 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 31913 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 31914 v1di __builtin_ia32_psadbw (v8qi, v8qi) 31915 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 31916 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 31917 v8qi __builtin_ia32_pminub (v8qi, v8qi) 31918 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 31919 int __builtin_ia32_pextrw (v4hi, int) 31920 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 31921 int __builtin_ia32_pmovmskb (v8qi) 31922 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 31923 void __builtin_ia32_movntq (di *, di) 31924 void __builtin_ia32_sfence (void) 31925 31926 The following built-in functions are available when `-msse' is used. 31927All of them generate the machine instruction that is part of the name. 31928 31929 int __builtin_ia32_comieq (v4sf, v4sf) 31930 int __builtin_ia32_comineq (v4sf, v4sf) 31931 int __builtin_ia32_comilt (v4sf, v4sf) 31932 int __builtin_ia32_comile (v4sf, v4sf) 31933 int __builtin_ia32_comigt (v4sf, v4sf) 31934 int __builtin_ia32_comige (v4sf, v4sf) 31935 int __builtin_ia32_ucomieq (v4sf, v4sf) 31936 int __builtin_ia32_ucomineq (v4sf, v4sf) 31937 int __builtin_ia32_ucomilt (v4sf, v4sf) 31938 int __builtin_ia32_ucomile (v4sf, v4sf) 31939 int __builtin_ia32_ucomigt (v4sf, v4sf) 31940 int __builtin_ia32_ucomige (v4sf, v4sf) 31941 v4sf __builtin_ia32_addps (v4sf, v4sf) 31942 v4sf __builtin_ia32_subps (v4sf, v4sf) 31943 v4sf __builtin_ia32_mulps (v4sf, v4sf) 31944 v4sf __builtin_ia32_divps (v4sf, v4sf) 31945 v4sf __builtin_ia32_addss (v4sf, v4sf) 31946 v4sf __builtin_ia32_subss (v4sf, v4sf) 31947 v4sf __builtin_ia32_mulss (v4sf, v4sf) 31948 v4sf __builtin_ia32_divss (v4sf, v4sf) 31949 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 31950 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 31951 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 31952 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 31953 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 31954 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 31955 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 31956 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 31957 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 31958 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 31959 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 31960 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 31961 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 31962 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 31963 v4si __builtin_ia32_cmpless (v4sf, v4sf) 31964 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 31965 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 31966 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 31967 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 31968 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 31969 v4sf __builtin_ia32_maxps (v4sf, v4sf) 31970 v4sf __builtin_ia32_maxss (v4sf, v4sf) 31971 v4sf __builtin_ia32_minps (v4sf, v4sf) 31972 v4sf __builtin_ia32_minss (v4sf, v4sf) 31973 v4sf __builtin_ia32_andps (v4sf, v4sf) 31974 v4sf __builtin_ia32_andnps (v4sf, v4sf) 31975 v4sf __builtin_ia32_orps (v4sf, v4sf) 31976 v4sf __builtin_ia32_xorps (v4sf, v4sf) 31977 v4sf __builtin_ia32_movss (v4sf, v4sf) 31978 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 31979 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 31980 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 31981 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 31982 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 31983 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 31984 v2si __builtin_ia32_cvtps2pi (v4sf) 31985 int __builtin_ia32_cvtss2si (v4sf) 31986 v2si __builtin_ia32_cvttps2pi (v4sf) 31987 int __builtin_ia32_cvttss2si (v4sf) 31988 v4sf __builtin_ia32_rcpps (v4sf) 31989 v4sf __builtin_ia32_rsqrtps (v4sf) 31990 v4sf __builtin_ia32_sqrtps (v4sf) 31991 v4sf __builtin_ia32_rcpss (v4sf) 31992 v4sf __builtin_ia32_rsqrtss (v4sf) 31993 v4sf __builtin_ia32_sqrtss (v4sf) 31994 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 31995 void __builtin_ia32_movntps (float *, v4sf) 31996 int __builtin_ia32_movmskps (v4sf) 31997 31998 The following built-in functions are available when `-msse' is used. 31999 32000`v4sf __builtin_ia32_loadaps (float *)' 32001 Generates the `movaps' machine instruction as a load from memory. 32002 32003`void __builtin_ia32_storeaps (float *, v4sf)' 32004 Generates the `movaps' machine instruction as a store to memory. 32005 32006`v4sf __builtin_ia32_loadups (float *)' 32007 Generates the `movups' machine instruction as a load from memory. 32008 32009`void __builtin_ia32_storeups (float *, v4sf)' 32010 Generates the `movups' machine instruction as a store to memory. 32011 32012`v4sf __builtin_ia32_loadsss (float *)' 32013 Generates the `movss' machine instruction as a load from memory. 32014 32015`void __builtin_ia32_storess (float *, v4sf)' 32016 Generates the `movss' machine instruction as a store to memory. 32017 32018`v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 32019 Generates the `movhps' machine instruction as a load from memory. 32020 32021`v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 32022 Generates the `movlps' machine instruction as a load from memory 32023 32024`void __builtin_ia32_storehps (v2sf *, v4sf)' 32025 Generates the `movhps' machine instruction as a store to memory. 32026 32027`void __builtin_ia32_storelps (v2sf *, v4sf)' 32028 Generates the `movlps' machine instruction as a store to memory. 32029 32030 The following built-in functions are available when `-msse2' is used. 32031All of them generate the machine instruction that is part of the name. 32032 32033 int __builtin_ia32_comisdeq (v2df, v2df) 32034 int __builtin_ia32_comisdlt (v2df, v2df) 32035 int __builtin_ia32_comisdle (v2df, v2df) 32036 int __builtin_ia32_comisdgt (v2df, v2df) 32037 int __builtin_ia32_comisdge (v2df, v2df) 32038 int __builtin_ia32_comisdneq (v2df, v2df) 32039 int __builtin_ia32_ucomisdeq (v2df, v2df) 32040 int __builtin_ia32_ucomisdlt (v2df, v2df) 32041 int __builtin_ia32_ucomisdle (v2df, v2df) 32042 int __builtin_ia32_ucomisdgt (v2df, v2df) 32043 int __builtin_ia32_ucomisdge (v2df, v2df) 32044 int __builtin_ia32_ucomisdneq (v2df, v2df) 32045 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 32046 v2df __builtin_ia32_cmpltpd (v2df, v2df) 32047 v2df __builtin_ia32_cmplepd (v2df, v2df) 32048 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 32049 v2df __builtin_ia32_cmpgepd (v2df, v2df) 32050 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 32051 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 32052 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 32053 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 32054 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 32055 v2df __builtin_ia32_cmpngepd (v2df, v2df) 32056 v2df __builtin_ia32_cmpordpd (v2df, v2df) 32057 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 32058 v2df __builtin_ia32_cmpltsd (v2df, v2df) 32059 v2df __builtin_ia32_cmplesd (v2df, v2df) 32060 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 32061 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 32062 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 32063 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 32064 v2df __builtin_ia32_cmpordsd (v2df, v2df) 32065 v2di __builtin_ia32_paddq (v2di, v2di) 32066 v2di __builtin_ia32_psubq (v2di, v2di) 32067 v2df __builtin_ia32_addpd (v2df, v2df) 32068 v2df __builtin_ia32_subpd (v2df, v2df) 32069 v2df __builtin_ia32_mulpd (v2df, v2df) 32070 v2df __builtin_ia32_divpd (v2df, v2df) 32071 v2df __builtin_ia32_addsd (v2df, v2df) 32072 v2df __builtin_ia32_subsd (v2df, v2df) 32073 v2df __builtin_ia32_mulsd (v2df, v2df) 32074 v2df __builtin_ia32_divsd (v2df, v2df) 32075 v2df __builtin_ia32_minpd (v2df, v2df) 32076 v2df __builtin_ia32_maxpd (v2df, v2df) 32077 v2df __builtin_ia32_minsd (v2df, v2df) 32078 v2df __builtin_ia32_maxsd (v2df, v2df) 32079 v2df __builtin_ia32_andpd (v2df, v2df) 32080 v2df __builtin_ia32_andnpd (v2df, v2df) 32081 v2df __builtin_ia32_orpd (v2df, v2df) 32082 v2df __builtin_ia32_xorpd (v2df, v2df) 32083 v2df __builtin_ia32_movsd (v2df, v2df) 32084 v2df __builtin_ia32_unpckhpd (v2df, v2df) 32085 v2df __builtin_ia32_unpcklpd (v2df, v2df) 32086 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 32087 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 32088 v4si __builtin_ia32_paddd128 (v4si, v4si) 32089 v2di __builtin_ia32_paddq128 (v2di, v2di) 32090 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 32091 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 32092 v4si __builtin_ia32_psubd128 (v4si, v4si) 32093 v2di __builtin_ia32_psubq128 (v2di, v2di) 32094 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 32095 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 32096 v2di __builtin_ia32_pand128 (v2di, v2di) 32097 v2di __builtin_ia32_pandn128 (v2di, v2di) 32098 v2di __builtin_ia32_por128 (v2di, v2di) 32099 v2di __builtin_ia32_pxor128 (v2di, v2di) 32100 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 32101 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 32102 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 32103 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 32104 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 32105 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 32106 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 32107 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 32108 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 32109 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 32110 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 32111 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 32112 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 32113 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 32114 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 32115 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 32116 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 32117 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 32118 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 32119 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 32120 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 32121 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 32122 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 32123 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 32124 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 32125 v2df __builtin_ia32_loadupd (double *) 32126 void __builtin_ia32_storeupd (double *, v2df) 32127 v2df __builtin_ia32_loadhpd (v2df, double const *) 32128 v2df __builtin_ia32_loadlpd (v2df, double const *) 32129 int __builtin_ia32_movmskpd (v2df) 32130 int __builtin_ia32_pmovmskb128 (v16qi) 32131 void __builtin_ia32_movnti (int *, int) 32132 void __builtin_ia32_movntpd (double *, v2df) 32133 void __builtin_ia32_movntdq (v2df *, v2df) 32134 v4si __builtin_ia32_pshufd (v4si, int) 32135 v8hi __builtin_ia32_pshuflw (v8hi, int) 32136 v8hi __builtin_ia32_pshufhw (v8hi, int) 32137 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 32138 v2df __builtin_ia32_sqrtpd (v2df) 32139 v2df __builtin_ia32_sqrtsd (v2df) 32140 v2df __builtin_ia32_shufpd (v2df, v2df, int) 32141 v2df __builtin_ia32_cvtdq2pd (v4si) 32142 v4sf __builtin_ia32_cvtdq2ps (v4si) 32143 v4si __builtin_ia32_cvtpd2dq (v2df) 32144 v2si __builtin_ia32_cvtpd2pi (v2df) 32145 v4sf __builtin_ia32_cvtpd2ps (v2df) 32146 v4si __builtin_ia32_cvttpd2dq (v2df) 32147 v2si __builtin_ia32_cvttpd2pi (v2df) 32148 v2df __builtin_ia32_cvtpi2pd (v2si) 32149 int __builtin_ia32_cvtsd2si (v2df) 32150 int __builtin_ia32_cvttsd2si (v2df) 32151 long long __builtin_ia32_cvtsd2si64 (v2df) 32152 long long __builtin_ia32_cvttsd2si64 (v2df) 32153 v4si __builtin_ia32_cvtps2dq (v4sf) 32154 v2df __builtin_ia32_cvtps2pd (v4sf) 32155 v4si __builtin_ia32_cvttps2dq (v4sf) 32156 v2df __builtin_ia32_cvtsi2sd (v2df, int) 32157 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 32158 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 32159 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 32160 void __builtin_ia32_clflush (const void *) 32161 void __builtin_ia32_lfence (void) 32162 void __builtin_ia32_mfence (void) 32163 v16qi __builtin_ia32_loaddqu (const char *) 32164 void __builtin_ia32_storedqu (char *, v16qi) 32165 v1di __builtin_ia32_pmuludq (v2si, v2si) 32166 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 32167 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 32168 v4si __builtin_ia32_pslld128 (v4si, v4si) 32169 v2di __builtin_ia32_psllq128 (v2di, v2di) 32170 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 32171 v4si __builtin_ia32_psrld128 (v4si, v4si) 32172 v2di __builtin_ia32_psrlq128 (v2di, v2di) 32173 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 32174 v4si __builtin_ia32_psrad128 (v4si, v4si) 32175 v2di __builtin_ia32_pslldqi128 (v2di, int) 32176 v8hi __builtin_ia32_psllwi128 (v8hi, int) 32177 v4si __builtin_ia32_pslldi128 (v4si, int) 32178 v2di __builtin_ia32_psllqi128 (v2di, int) 32179 v2di __builtin_ia32_psrldqi128 (v2di, int) 32180 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 32181 v4si __builtin_ia32_psrldi128 (v4si, int) 32182 v2di __builtin_ia32_psrlqi128 (v2di, int) 32183 v8hi __builtin_ia32_psrawi128 (v8hi, int) 32184 v4si __builtin_ia32_psradi128 (v4si, int) 32185 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 32186 v2di __builtin_ia32_movq128 (v2di) 32187 32188 The following built-in functions are available when `-msse3' is used. 32189All of them generate the machine instruction that is part of the name. 32190 32191 v2df __builtin_ia32_addsubpd (v2df, v2df) 32192 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 32193 v2df __builtin_ia32_haddpd (v2df, v2df) 32194 v4sf __builtin_ia32_haddps (v4sf, v4sf) 32195 v2df __builtin_ia32_hsubpd (v2df, v2df) 32196 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 32197 v16qi __builtin_ia32_lddqu (char const *) 32198 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 32199 v2df __builtin_ia32_movddup (v2df) 32200 v4sf __builtin_ia32_movshdup (v4sf) 32201 v4sf __builtin_ia32_movsldup (v4sf) 32202 void __builtin_ia32_mwait (unsigned int, unsigned int) 32203 32204 The following built-in functions are available when `-msse3' is used. 32205 32206`v2df __builtin_ia32_loadddup (double const *)' 32207 Generates the `movddup' machine instruction as a load from memory. 32208 32209 The following built-in functions are available when `-mssse3' is used. 32210All of them generate the machine instruction that is part of the name 32211with MMX registers. 32212 32213 v2si __builtin_ia32_phaddd (v2si, v2si) 32214 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 32215 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 32216 v2si __builtin_ia32_phsubd (v2si, v2si) 32217 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 32218 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 32219 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 32220 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 32221 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 32222 v8qi __builtin_ia32_psignb (v8qi, v8qi) 32223 v2si __builtin_ia32_psignd (v2si, v2si) 32224 v4hi __builtin_ia32_psignw (v4hi, v4hi) 32225 v1di __builtin_ia32_palignr (v1di, v1di, int) 32226 v8qi __builtin_ia32_pabsb (v8qi) 32227 v2si __builtin_ia32_pabsd (v2si) 32228 v4hi __builtin_ia32_pabsw (v4hi) 32229 32230 The following built-in functions are available when `-mssse3' is used. 32231All of them generate the machine instruction that is part of the name 32232with SSE registers. 32233 32234 v4si __builtin_ia32_phaddd128 (v4si, v4si) 32235 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 32236 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 32237 v4si __builtin_ia32_phsubd128 (v4si, v4si) 32238 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 32239 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 32240 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 32241 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 32242 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 32243 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 32244 v4si __builtin_ia32_psignd128 (v4si, v4si) 32245 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 32246 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 32247 v16qi __builtin_ia32_pabsb128 (v16qi) 32248 v4si __builtin_ia32_pabsd128 (v4si) 32249 v8hi __builtin_ia32_pabsw128 (v8hi) 32250 32251 The following built-in functions are available when `-msse4.1' is 32252used. All of them generate the machine instruction that is part of the 32253name. 32254 32255 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 32256 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 32257 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 32258 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 32259 v2df __builtin_ia32_dppd (v2df, v2df, const int) 32260 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 32261 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 32262 v2di __builtin_ia32_movntdqa (v2di *); 32263 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 32264 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 32265 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 32266 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 32267 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 32268 v8hi __builtin_ia32_phminposuw128 (v8hi) 32269 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 32270 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 32271 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 32272 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 32273 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 32274 v4si __builtin_ia32_pminsd128 (v4si, v4si) 32275 v4si __builtin_ia32_pminud128 (v4si, v4si) 32276 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 32277 v4si __builtin_ia32_pmovsxbd128 (v16qi) 32278 v2di __builtin_ia32_pmovsxbq128 (v16qi) 32279 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 32280 v2di __builtin_ia32_pmovsxdq128 (v4si) 32281 v4si __builtin_ia32_pmovsxwd128 (v8hi) 32282 v2di __builtin_ia32_pmovsxwq128 (v8hi) 32283 v4si __builtin_ia32_pmovzxbd128 (v16qi) 32284 v2di __builtin_ia32_pmovzxbq128 (v16qi) 32285 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 32286 v2di __builtin_ia32_pmovzxdq128 (v4si) 32287 v4si __builtin_ia32_pmovzxwd128 (v8hi) 32288 v2di __builtin_ia32_pmovzxwq128 (v8hi) 32289 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 32290 v4si __builtin_ia32_pmulld128 (v4si, v4si) 32291 int __builtin_ia32_ptestc128 (v2di, v2di) 32292 int __builtin_ia32_ptestnzc128 (v2di, v2di) 32293 int __builtin_ia32_ptestz128 (v2di, v2di) 32294 v2df __builtin_ia32_roundpd (v2df, const int) 32295 v4sf __builtin_ia32_roundps (v4sf, const int) 32296 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 32297 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 32298 32299 The following built-in functions are available when `-msse4.1' is used. 32300 32301`v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 32302 Generates the `insertps' machine instruction. 32303 32304`int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 32305 Generates the `pextrb' machine instruction. 32306 32307`v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 32308 Generates the `pinsrb' machine instruction. 32309 32310`v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 32311 Generates the `pinsrd' machine instruction. 32312 32313`v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 32314 Generates the `pinsrq' machine instruction in 64bit mode. 32315 32316 The following built-in functions are changed to generate new SSE4.1 32317instructions when `-msse4.1' is used. 32318 32319`float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 32320 Generates the `extractps' machine instruction. 32321 32322`int __builtin_ia32_vec_ext_v4si (v4si, const int)' 32323 Generates the `pextrd' machine instruction. 32324 32325`long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 32326 Generates the `pextrq' machine instruction in 64bit mode. 32327 32328 The following built-in functions are available when `-msse4.2' is 32329used. All of them generate the machine instruction that is part of the 32330name. 32331 32332 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 32333 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 32334 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 32335 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 32336 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 32337 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 32338 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 32339 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 32340 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 32341 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 32342 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 32343 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 32344 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 32345 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 32346 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 32347 32348 The following built-in functions are available when `-msse4.2' is used. 32349 32350`unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 32351 Generates the `crc32b' machine instruction. 32352 32353`unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 32354 Generates the `crc32w' machine instruction. 32355 32356`unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 32357 Generates the `crc32l' machine instruction. 32358 32359`unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 32360 Generates the `crc32q' machine instruction. 32361 32362 The following built-in functions are changed to generate new SSE4.2 32363instructions when `-msse4.2' is used. 32364 32365`int __builtin_popcount (unsigned int)' 32366 Generates the `popcntl' machine instruction. 32367 32368`int __builtin_popcountl (unsigned long)' 32369 Generates the `popcntl' or `popcntq' machine instruction, 32370 depending on the size of `unsigned long'. 32371 32372`int __builtin_popcountll (unsigned long long)' 32373 Generates the `popcntq' machine instruction. 32374 32375 The following built-in functions are available when `-mavx' is used. 32376All of them generate the machine instruction that is part of the name. 32377 32378 v4df __builtin_ia32_addpd256 (v4df,v4df) 32379 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 32380 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 32381 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 32382 v4df __builtin_ia32_andnpd256 (v4df,v4df) 32383 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 32384 v4df __builtin_ia32_andpd256 (v4df,v4df) 32385 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 32386 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 32387 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 32388 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 32389 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 32390 v2df __builtin_ia32_cmppd (v2df,v2df,int) 32391 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 32392 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 32393 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 32394 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 32395 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 32396 v4df __builtin_ia32_cvtdq2pd256 (v4si) 32397 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 32398 v4si __builtin_ia32_cvtpd2dq256 (v4df) 32399 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 32400 v8si __builtin_ia32_cvtps2dq256 (v8sf) 32401 v4df __builtin_ia32_cvtps2pd256 (v4sf) 32402 v4si __builtin_ia32_cvttpd2dq256 (v4df) 32403 v8si __builtin_ia32_cvttps2dq256 (v8sf) 32404 v4df __builtin_ia32_divpd256 (v4df,v4df) 32405 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 32406 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 32407 v4df __builtin_ia32_haddpd256 (v4df,v4df) 32408 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 32409 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 32410 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 32411 v32qi __builtin_ia32_lddqu256 (pcchar) 32412 v32qi __builtin_ia32_loaddqu256 (pcchar) 32413 v4df __builtin_ia32_loadupd256 (pcdouble) 32414 v8sf __builtin_ia32_loadups256 (pcfloat) 32415 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 32416 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 32417 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 32418 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 32419 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 32420 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 32421 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 32422 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 32423 v4df __builtin_ia32_maxpd256 (v4df,v4df) 32424 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 32425 v4df __builtin_ia32_minpd256 (v4df,v4df) 32426 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 32427 v4df __builtin_ia32_movddup256 (v4df) 32428 int __builtin_ia32_movmskpd256 (v4df) 32429 int __builtin_ia32_movmskps256 (v8sf) 32430 v8sf __builtin_ia32_movshdup256 (v8sf) 32431 v8sf __builtin_ia32_movsldup256 (v8sf) 32432 v4df __builtin_ia32_mulpd256 (v4df,v4df) 32433 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 32434 v4df __builtin_ia32_orpd256 (v4df,v4df) 32435 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 32436 v2df __builtin_ia32_pd_pd256 (v4df) 32437 v4df __builtin_ia32_pd256_pd (v2df) 32438 v4sf __builtin_ia32_ps_ps256 (v8sf) 32439 v8sf __builtin_ia32_ps256_ps (v4sf) 32440 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 32441 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 32442 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 32443 v8sf __builtin_ia32_rcpps256 (v8sf) 32444 v4df __builtin_ia32_roundpd256 (v4df,int) 32445 v8sf __builtin_ia32_roundps256 (v8sf,int) 32446 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 32447 v8sf __builtin_ia32_rsqrtps256 (v8sf) 32448 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 32449 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 32450 v4si __builtin_ia32_si_si256 (v8si) 32451 v8si __builtin_ia32_si256_si (v4si) 32452 v4df __builtin_ia32_sqrtpd256 (v4df) 32453 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 32454 v8sf __builtin_ia32_sqrtps256 (v8sf) 32455 void __builtin_ia32_storedqu256 (pchar,v32qi) 32456 void __builtin_ia32_storeupd256 (pdouble,v4df) 32457 void __builtin_ia32_storeups256 (pfloat,v8sf) 32458 v4df __builtin_ia32_subpd256 (v4df,v4df) 32459 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 32460 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 32461 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 32462 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 32463 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 32464 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 32465 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 32466 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 32467 v4sf __builtin_ia32_vbroadcastss (pcfloat) 32468 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 32469 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 32470 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 32471 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 32472 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 32473 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 32474 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 32475 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 32476 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 32477 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 32478 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 32479 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 32480 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 32481 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 32482 v2df __builtin_ia32_vpermilpd (v2df,int) 32483 v4df __builtin_ia32_vpermilpd256 (v4df,int) 32484 v4sf __builtin_ia32_vpermilps (v4sf,int) 32485 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 32486 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 32487 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 32488 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 32489 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 32490 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 32491 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 32492 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 32493 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 32494 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 32495 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 32496 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 32497 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 32498 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 32499 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 32500 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 32501 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 32502 void __builtin_ia32_vzeroall (void) 32503 void __builtin_ia32_vzeroupper (void) 32504 v4df __builtin_ia32_xorpd256 (v4df,v4df) 32505 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 32506 32507 The following built-in functions are available when `-maes' is used. 32508All of them generate the machine instruction that is part of the name. 32509 32510 v2di __builtin_ia32_aesenc128 (v2di, v2di) 32511 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 32512 v2di __builtin_ia32_aesdec128 (v2di, v2di) 32513 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 32514 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 32515 v2di __builtin_ia32_aesimc128 (v2di) 32516 32517 The following built-in function is available when `-mpclmul' is used. 32518 32519`v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 32520 Generates the `pclmulqdq' machine instruction. 32521 32522 The following built-in functions are available when `-msse4a' is used. 32523All of them generate the machine instruction that is part of the name. 32524 32525 void __builtin_ia32_movntsd (double *, v2df) 32526 void __builtin_ia32_movntss (float *, v4sf) 32527 v2di __builtin_ia32_extrq (v2di, v16qi) 32528 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 32529 v2di __builtin_ia32_insertq (v2di, v2di) 32530 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 32531 32532 The following built-in functions are available when `-mxop' is used. 32533 v2df __builtin_ia32_vfrczpd (v2df) 32534 v4sf __builtin_ia32_vfrczps (v4sf) 32535 v2df __builtin_ia32_vfrczsd (v2df, v2df) 32536 v4sf __builtin_ia32_vfrczss (v4sf, v4sf) 32537 v4df __builtin_ia32_vfrczpd256 (v4df) 32538 v8sf __builtin_ia32_vfrczps256 (v8sf) 32539 v2di __builtin_ia32_vpcmov (v2di, v2di, v2di) 32540 v2di __builtin_ia32_vpcmov_v2di (v2di, v2di, v2di) 32541 v4si __builtin_ia32_vpcmov_v4si (v4si, v4si, v4si) 32542 v8hi __builtin_ia32_vpcmov_v8hi (v8hi, v8hi, v8hi) 32543 v16qi __builtin_ia32_vpcmov_v16qi (v16qi, v16qi, v16qi) 32544 v2df __builtin_ia32_vpcmov_v2df (v2df, v2df, v2df) 32545 v4sf __builtin_ia32_vpcmov_v4sf (v4sf, v4sf, v4sf) 32546 v4di __builtin_ia32_vpcmov_v4di256 (v4di, v4di, v4di) 32547 v8si __builtin_ia32_vpcmov_v8si256 (v8si, v8si, v8si) 32548 v16hi __builtin_ia32_vpcmov_v16hi256 (v16hi, v16hi, v16hi) 32549 v32qi __builtin_ia32_vpcmov_v32qi256 (v32qi, v32qi, v32qi) 32550 v4df __builtin_ia32_vpcmov_v4df256 (v4df, v4df, v4df) 32551 v8sf __builtin_ia32_vpcmov_v8sf256 (v8sf, v8sf, v8sf) 32552 v16qi __builtin_ia32_vpcomeqb (v16qi, v16qi) 32553 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 32554 v4si __builtin_ia32_vpcomeqd (v4si, v4si) 32555 v2di __builtin_ia32_vpcomeqq (v2di, v2di) 32556 v16qi __builtin_ia32_vpcomequb (v16qi, v16qi) 32557 v4si __builtin_ia32_vpcomequd (v4si, v4si) 32558 v2di __builtin_ia32_vpcomequq (v2di, v2di) 32559 v8hi __builtin_ia32_vpcomequw (v8hi, v8hi) 32560 v8hi __builtin_ia32_vpcomeqw (v8hi, v8hi) 32561 v16qi __builtin_ia32_vpcomfalseb (v16qi, v16qi) 32562 v4si __builtin_ia32_vpcomfalsed (v4si, v4si) 32563 v2di __builtin_ia32_vpcomfalseq (v2di, v2di) 32564 v16qi __builtin_ia32_vpcomfalseub (v16qi, v16qi) 32565 v4si __builtin_ia32_vpcomfalseud (v4si, v4si) 32566 v2di __builtin_ia32_vpcomfalseuq (v2di, v2di) 32567 v8hi __builtin_ia32_vpcomfalseuw (v8hi, v8hi) 32568 v8hi __builtin_ia32_vpcomfalsew (v8hi, v8hi) 32569 v16qi __builtin_ia32_vpcomgeb (v16qi, v16qi) 32570 v4si __builtin_ia32_vpcomged (v4si, v4si) 32571 v2di __builtin_ia32_vpcomgeq (v2di, v2di) 32572 v16qi __builtin_ia32_vpcomgeub (v16qi, v16qi) 32573 v4si __builtin_ia32_vpcomgeud (v4si, v4si) 32574 v2di __builtin_ia32_vpcomgeuq (v2di, v2di) 32575 v8hi __builtin_ia32_vpcomgeuw (v8hi, v8hi) 32576 v8hi __builtin_ia32_vpcomgew (v8hi, v8hi) 32577 v16qi __builtin_ia32_vpcomgtb (v16qi, v16qi) 32578 v4si __builtin_ia32_vpcomgtd (v4si, v4si) 32579 v2di __builtin_ia32_vpcomgtq (v2di, v2di) 32580 v16qi __builtin_ia32_vpcomgtub (v16qi, v16qi) 32581 v4si __builtin_ia32_vpcomgtud (v4si, v4si) 32582 v2di __builtin_ia32_vpcomgtuq (v2di, v2di) 32583 v8hi __builtin_ia32_vpcomgtuw (v8hi, v8hi) 32584 v8hi __builtin_ia32_vpcomgtw (v8hi, v8hi) 32585 v16qi __builtin_ia32_vpcomleb (v16qi, v16qi) 32586 v4si __builtin_ia32_vpcomled (v4si, v4si) 32587 v2di __builtin_ia32_vpcomleq (v2di, v2di) 32588 v16qi __builtin_ia32_vpcomleub (v16qi, v16qi) 32589 v4si __builtin_ia32_vpcomleud (v4si, v4si) 32590 v2di __builtin_ia32_vpcomleuq (v2di, v2di) 32591 v8hi __builtin_ia32_vpcomleuw (v8hi, v8hi) 32592 v8hi __builtin_ia32_vpcomlew (v8hi, v8hi) 32593 v16qi __builtin_ia32_vpcomltb (v16qi, v16qi) 32594 v4si __builtin_ia32_vpcomltd (v4si, v4si) 32595 v2di __builtin_ia32_vpcomltq (v2di, v2di) 32596 v16qi __builtin_ia32_vpcomltub (v16qi, v16qi) 32597 v4si __builtin_ia32_vpcomltud (v4si, v4si) 32598 v2di __builtin_ia32_vpcomltuq (v2di, v2di) 32599 v8hi __builtin_ia32_vpcomltuw (v8hi, v8hi) 32600 v8hi __builtin_ia32_vpcomltw (v8hi, v8hi) 32601 v16qi __builtin_ia32_vpcomneb (v16qi, v16qi) 32602 v4si __builtin_ia32_vpcomned (v4si, v4si) 32603 v2di __builtin_ia32_vpcomneq (v2di, v2di) 32604 v16qi __builtin_ia32_vpcomneub (v16qi, v16qi) 32605 v4si __builtin_ia32_vpcomneud (v4si, v4si) 32606 v2di __builtin_ia32_vpcomneuq (v2di, v2di) 32607 v8hi __builtin_ia32_vpcomneuw (v8hi, v8hi) 32608 v8hi __builtin_ia32_vpcomnew (v8hi, v8hi) 32609 v16qi __builtin_ia32_vpcomtrueb (v16qi, v16qi) 32610 v4si __builtin_ia32_vpcomtrued (v4si, v4si) 32611 v2di __builtin_ia32_vpcomtrueq (v2di, v2di) 32612 v16qi __builtin_ia32_vpcomtrueub (v16qi, v16qi) 32613 v4si __builtin_ia32_vpcomtrueud (v4si, v4si) 32614 v2di __builtin_ia32_vpcomtrueuq (v2di, v2di) 32615 v8hi __builtin_ia32_vpcomtrueuw (v8hi, v8hi) 32616 v8hi __builtin_ia32_vpcomtruew (v8hi, v8hi) 32617 v4si __builtin_ia32_vphaddbd (v16qi) 32618 v2di __builtin_ia32_vphaddbq (v16qi) 32619 v8hi __builtin_ia32_vphaddbw (v16qi) 32620 v2di __builtin_ia32_vphadddq (v4si) 32621 v4si __builtin_ia32_vphaddubd (v16qi) 32622 v2di __builtin_ia32_vphaddubq (v16qi) 32623 v8hi __builtin_ia32_vphaddubw (v16qi) 32624 v2di __builtin_ia32_vphaddudq (v4si) 32625 v4si __builtin_ia32_vphadduwd (v8hi) 32626 v2di __builtin_ia32_vphadduwq (v8hi) 32627 v4si __builtin_ia32_vphaddwd (v8hi) 32628 v2di __builtin_ia32_vphaddwq (v8hi) 32629 v8hi __builtin_ia32_vphsubbw (v16qi) 32630 v2di __builtin_ia32_vphsubdq (v4si) 32631 v4si __builtin_ia32_vphsubwd (v8hi) 32632 v4si __builtin_ia32_vpmacsdd (v4si, v4si, v4si) 32633 v2di __builtin_ia32_vpmacsdqh (v4si, v4si, v2di) 32634 v2di __builtin_ia32_vpmacsdql (v4si, v4si, v2di) 32635 v4si __builtin_ia32_vpmacssdd (v4si, v4si, v4si) 32636 v2di __builtin_ia32_vpmacssdqh (v4si, v4si, v2di) 32637 v2di __builtin_ia32_vpmacssdql (v4si, v4si, v2di) 32638 v4si __builtin_ia32_vpmacsswd (v8hi, v8hi, v4si) 32639 v8hi __builtin_ia32_vpmacssww (v8hi, v8hi, v8hi) 32640 v4si __builtin_ia32_vpmacswd (v8hi, v8hi, v4si) 32641 v8hi __builtin_ia32_vpmacsww (v8hi, v8hi, v8hi) 32642 v4si __builtin_ia32_vpmadcsswd (v8hi, v8hi, v4si) 32643 v4si __builtin_ia32_vpmadcswd (v8hi, v8hi, v4si) 32644 v16qi __builtin_ia32_vpperm (v16qi, v16qi, v16qi) 32645 v16qi __builtin_ia32_vprotb (v16qi, v16qi) 32646 v4si __builtin_ia32_vprotd (v4si, v4si) 32647 v2di __builtin_ia32_vprotq (v2di, v2di) 32648 v8hi __builtin_ia32_vprotw (v8hi, v8hi) 32649 v16qi __builtin_ia32_vpshab (v16qi, v16qi) 32650 v4si __builtin_ia32_vpshad (v4si, v4si) 32651 v2di __builtin_ia32_vpshaq (v2di, v2di) 32652 v8hi __builtin_ia32_vpshaw (v8hi, v8hi) 32653 v16qi __builtin_ia32_vpshlb (v16qi, v16qi) 32654 v4si __builtin_ia32_vpshld (v4si, v4si) 32655 v2di __builtin_ia32_vpshlq (v2di, v2di) 32656 v8hi __builtin_ia32_vpshlw (v8hi, v8hi) 32657 32658 The following built-in functions are available when `-mfma4' is used. 32659All of them generate the machine instruction that is part of the name 32660with MMX registers. 32661 32662 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 32663 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 32664 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 32665 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 32666 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 32667 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 32668 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 32669 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 32670 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 32671 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 32672 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 32673 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 32674 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 32675 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 32676 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 32677 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 32678 v2df __builtin_ia32_fmaddsubpd (v2df, v2df, v2df) 32679 v4sf __builtin_ia32_fmaddsubps (v4sf, v4sf, v4sf) 32680 v2df __builtin_ia32_fmsubaddpd (v2df, v2df, v2df) 32681 v4sf __builtin_ia32_fmsubaddps (v4sf, v4sf, v4sf) 32682 v4df __builtin_ia32_fmaddpd256 (v4df, v4df, v4df) 32683 v8sf __builtin_ia32_fmaddps256 (v8sf, v8sf, v8sf) 32684 v4df __builtin_ia32_fmsubpd256 (v4df, v4df, v4df) 32685 v8sf __builtin_ia32_fmsubps256 (v8sf, v8sf, v8sf) 32686 v4df __builtin_ia32_fnmaddpd256 (v4df, v4df, v4df) 32687 v8sf __builtin_ia32_fnmaddps256 (v8sf, v8sf, v8sf) 32688 v4df __builtin_ia32_fnmsubpd256 (v4df, v4df, v4df) 32689 v8sf __builtin_ia32_fnmsubps256 (v8sf, v8sf, v8sf) 32690 v4df __builtin_ia32_fmaddsubpd256 (v4df, v4df, v4df) 32691 v8sf __builtin_ia32_fmaddsubps256 (v8sf, v8sf, v8sf) 32692 v4df __builtin_ia32_fmsubaddpd256 (v4df, v4df, v4df) 32693 v8sf __builtin_ia32_fmsubaddps256 (v8sf, v8sf, v8sf) 32694 32695 The following built-in functions are available when `-mlwp' is used. 32696 32697 void __builtin_ia32_llwpcb16 (void *); 32698 void __builtin_ia32_llwpcb32 (void *); 32699 void __builtin_ia32_llwpcb64 (void *); 32700 void * __builtin_ia32_llwpcb16 (void); 32701 void * __builtin_ia32_llwpcb32 (void); 32702 void * __builtin_ia32_llwpcb64 (void); 32703 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 32704 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 32705 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 32706 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 32707 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 32708 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 32709 32710 The following built-in functions are available when `-m3dnow' is used. 32711All of them generate the machine instruction that is part of the name. 32712 32713 void __builtin_ia32_femms (void) 32714 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 32715 v2si __builtin_ia32_pf2id (v2sf) 32716 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 32717 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 32718 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 32719 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 32720 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 32721 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 32722 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 32723 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 32724 v2sf __builtin_ia32_pfrcp (v2sf) 32725 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 32726 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 32727 v2sf __builtin_ia32_pfrsqrt (v2sf) 32728 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 32729 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 32730 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 32731 v2sf __builtin_ia32_pi2fd (v2si) 32732 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 32733 32734 The following built-in functions are available when both `-m3dnow' and 32735`-march=athlon' are used. All of them generate the machine instruction 32736that is part of the name. 32737 32738 v2si __builtin_ia32_pf2iw (v2sf) 32739 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 32740 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 32741 v2sf __builtin_ia32_pi2fw (v2si) 32742 v2sf __builtin_ia32_pswapdsf (v2sf) 32743 v2si __builtin_ia32_pswapdsi (v2si) 32744 32745 32746File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 32747 327486.52.7 MIPS DSP Built-in Functions 32749---------------------------------- 32750 32751The MIPS DSP Application-Specific Extension (ASE) includes new 32752instructions that are designed to improve the performance of DSP and 32753media applications. It provides instructions that operate on packed 327548-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 32755 32756 GCC supports MIPS DSP operations using both the generic vector 32757extensions (*note Vector Extensions::) and a collection of 32758MIPS-specific built-in functions. Both kinds of support are enabled by 32759the `-mdsp' command-line option. 32760 32761 Revision 2 of the ASE was introduced in the second half of 2006. This 32762revision adds extra instructions to the original ASE, but is otherwise 32763backwards-compatible with it. You can select revision 2 using the 32764command-line option `-mdspr2'; this option implies `-mdsp'. 32765 32766 The SCOUNT and POS bits of the DSP control register are global. The 32767WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 32768POS bits. During optimization, the compiler will not delete these 32769instructions and it will not delete calls to functions containing these 32770instructions. 32771 32772 At present, GCC only provides support for operations on 32-bit 32773vectors. The vector type associated with 8-bit integer data is usually 32774called `v4i8', the vector type associated with Q7 is usually called 32775`v4q7', the vector type associated with 16-bit integer data is usually 32776called `v2i16', and the vector type associated with Q15 is usually 32777called `v2q15'. They can be defined in C as follows: 32778 32779 typedef signed char v4i8 __attribute__ ((vector_size(4))); 32780 typedef signed char v4q7 __attribute__ ((vector_size(4))); 32781 typedef short v2i16 __attribute__ ((vector_size(4))); 32782 typedef short v2q15 __attribute__ ((vector_size(4))); 32783 32784 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 32785way as aggregates. For example: 32786 32787 v4i8 a = {1, 2, 3, 4}; 32788 v4i8 b; 32789 b = (v4i8) {5, 6, 7, 8}; 32790 32791 v2q15 c = {0x0fcb, 0x3a75}; 32792 v2q15 d; 32793 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 32794 32795 _Note:_ The CPU's endianness determines the order in which values are 32796packed. On little-endian targets, the first value is the least 32797significant and the last value is the most significant. The opposite 32798order applies to big-endian targets. For example, the code above will 32799set the lowest byte of `a' to `1' on little-endian targets and `4' on 32800big-endian targets. 32801 32802 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 32803representation. As shown in this example, the integer representation 32804of a Q7 value can be obtained by multiplying the fractional value by 32805`0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 32806The equivalent for Q31 values is to multiply by `0x1.0p31'. 32807 32808 The table below lists the `v4i8' and `v2q15' operations for which 32809hardware support exists. `a' and `b' are `v4i8' values, and `c' and 32810`d' are `v2q15' values. 32811 32812C code MIPS instruction 32813`a + b' `addu.qb' 32814`c + d' `addq.ph' 32815`a - b' `subu.qb' 32816`c - d' `subq.ph' 32817 32818 The table below lists the `v2i16' operation for which hardware support 32819exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 32820 32821C code MIPS instruction 32822`e * f' `mul.ph' 32823 32824 It is easier to describe the DSP built-in functions if we first define 32825the following types: 32826 32827 typedef int q31; 32828 typedef int i32; 32829 typedef unsigned int ui32; 32830 typedef long long a64; 32831 32832 `q31' and `i32' are actually the same as `int', but we use `q31' to 32833indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 32834value. Similarly, `a64' is the same as `long long', but we use `a64' 32835to indicate values that will be placed in one of the four DSP 32836accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 32837 32838 Also, some built-in functions prefer or require immediate numbers as 32839parameters, because the corresponding DSP instructions accept both 32840immediate numbers and register operands, or accept immediate numbers 32841only. The immediate parameters are listed as follows. 32842 32843 imm0_3: 0 to 3. 32844 imm0_7: 0 to 7. 32845 imm0_15: 0 to 15. 32846 imm0_31: 0 to 31. 32847 imm0_63: 0 to 63. 32848 imm0_255: 0 to 255. 32849 imm_n32_31: -32 to 31. 32850 imm_n512_511: -512 to 511. 32851 32852 The following built-in functions map directly to a particular MIPS DSP 32853instruction. Please refer to the architecture specification for 32854details on what each instruction does. 32855 32856 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 32857 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 32858 q31 __builtin_mips_addq_s_w (q31, q31) 32859 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 32860 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 32861 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 32862 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 32863 q31 __builtin_mips_subq_s_w (q31, q31) 32864 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 32865 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 32866 i32 __builtin_mips_addsc (i32, i32) 32867 i32 __builtin_mips_addwc (i32, i32) 32868 i32 __builtin_mips_modsub (i32, i32) 32869 i32 __builtin_mips_raddu_w_qb (v4i8) 32870 v2q15 __builtin_mips_absq_s_ph (v2q15) 32871 q31 __builtin_mips_absq_s_w (q31) 32872 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 32873 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 32874 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 32875 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 32876 q31 __builtin_mips_preceq_w_phl (v2q15) 32877 q31 __builtin_mips_preceq_w_phr (v2q15) 32878 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 32879 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 32880 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 32881 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 32882 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 32883 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 32884 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 32885 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 32886 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 32887 v4i8 __builtin_mips_shll_qb (v4i8, i32) 32888 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 32889 v2q15 __builtin_mips_shll_ph (v2q15, i32) 32890 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 32891 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 32892 q31 __builtin_mips_shll_s_w (q31, imm0_31) 32893 q31 __builtin_mips_shll_s_w (q31, i32) 32894 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 32895 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 32896 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 32897 v2q15 __builtin_mips_shra_ph (v2q15, i32) 32898 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 32899 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 32900 q31 __builtin_mips_shra_r_w (q31, imm0_31) 32901 q31 __builtin_mips_shra_r_w (q31, i32) 32902 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 32903 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 32904 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 32905 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 32906 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 32907 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 32908 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 32909 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 32910 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 32911 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 32912 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 32913 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 32914 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 32915 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 32916 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 32917 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 32918 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 32919 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 32920 i32 __builtin_mips_bitrev (i32) 32921 i32 __builtin_mips_insv (i32, i32) 32922 v4i8 __builtin_mips_repl_qb (imm0_255) 32923 v4i8 __builtin_mips_repl_qb (i32) 32924 v2q15 __builtin_mips_repl_ph (imm_n512_511) 32925 v2q15 __builtin_mips_repl_ph (i32) 32926 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 32927 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 32928 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 32929 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 32930 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 32931 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 32932 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 32933 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 32934 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 32935 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 32936 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 32937 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 32938 i32 __builtin_mips_extr_w (a64, imm0_31) 32939 i32 __builtin_mips_extr_w (a64, i32) 32940 i32 __builtin_mips_extr_r_w (a64, imm0_31) 32941 i32 __builtin_mips_extr_s_h (a64, i32) 32942 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 32943 i32 __builtin_mips_extr_rs_w (a64, i32) 32944 i32 __builtin_mips_extr_s_h (a64, imm0_31) 32945 i32 __builtin_mips_extr_r_w (a64, i32) 32946 i32 __builtin_mips_extp (a64, imm0_31) 32947 i32 __builtin_mips_extp (a64, i32) 32948 i32 __builtin_mips_extpdp (a64, imm0_31) 32949 i32 __builtin_mips_extpdp (a64, i32) 32950 a64 __builtin_mips_shilo (a64, imm_n32_31) 32951 a64 __builtin_mips_shilo (a64, i32) 32952 a64 __builtin_mips_mthlip (a64, i32) 32953 void __builtin_mips_wrdsp (i32, imm0_63) 32954 i32 __builtin_mips_rddsp (imm0_63) 32955 i32 __builtin_mips_lbux (void *, i32) 32956 i32 __builtin_mips_lhx (void *, i32) 32957 i32 __builtin_mips_lwx (void *, i32) 32958 i32 __builtin_mips_bposge32 (void) 32959 32960 The following built-in functions map directly to a particular MIPS DSP 32961REV 2 instruction. Please refer to the architecture specification for 32962details on what each instruction does. 32963 32964 v4q7 __builtin_mips_absq_s_qb (v4q7); 32965 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 32966 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 32967 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 32968 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 32969 i32 __builtin_mips_append (i32, i32, imm0_31); 32970 i32 __builtin_mips_balign (i32, i32, imm0_3); 32971 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 32972 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 32973 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 32974 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 32975 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 32976 a64 __builtin_mips_madd (a64, i32, i32); 32977 a64 __builtin_mips_maddu (a64, ui32, ui32); 32978 a64 __builtin_mips_msub (a64, i32, i32); 32979 a64 __builtin_mips_msubu (a64, ui32, ui32); 32980 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 32981 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 32982 q31 __builtin_mips_mulq_rs_w (q31, q31); 32983 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 32984 q31 __builtin_mips_mulq_s_w (q31, q31); 32985 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 32986 a64 __builtin_mips_mult (i32, i32); 32987 a64 __builtin_mips_multu (ui32, ui32); 32988 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 32989 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 32990 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 32991 i32 __builtin_mips_prepend (i32, i32, imm0_31); 32992 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 32993 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 32994 v4i8 __builtin_mips_shra_qb (v4i8, i32); 32995 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 32996 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 32997 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 32998 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 32999 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 33000 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 33001 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 33002 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 33003 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 33004 q31 __builtin_mips_addqh_w (q31, q31); 33005 q31 __builtin_mips_addqh_r_w (q31, q31); 33006 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 33007 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 33008 q31 __builtin_mips_subqh_w (q31, q31); 33009 q31 __builtin_mips_subqh_r_w (q31, q31); 33010 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 33011 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 33012 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 33013 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 33014 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 33015 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 33016 33017 33018File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 33019 330206.52.8 MIPS Paired-Single Support 33021--------------------------------- 33022 33023The MIPS64 architecture includes a number of instructions that operate 33024on pairs of single-precision floating-point values. Each pair is 33025packed into a 64-bit floating-point register, with one element being 33026designated the "upper half" and the other being designated the "lower 33027half". 33028 33029 GCC supports paired-single operations using both the generic vector 33030extensions (*note Vector Extensions::) and a collection of 33031MIPS-specific built-in functions. Both kinds of support are enabled by 33032the `-mpaired-single' command-line option. 33033 33034 The vector type associated with paired-single values is usually called 33035`v2sf'. It can be defined in C as follows: 33036 33037 typedef float v2sf __attribute__ ((vector_size (8))); 33038 33039 `v2sf' values are initialized in the same way as aggregates. For 33040example: 33041 33042 v2sf a = {1.5, 9.1}; 33043 v2sf b; 33044 float e, f; 33045 b = (v2sf) {e, f}; 33046 33047 _Note:_ The CPU's endianness determines which value is stored in the 33048upper half of a register and which value is stored in the lower half. 33049On little-endian targets, the first value is the lower one and the 33050second value is the upper one. The opposite order applies to 33051big-endian targets. For example, the code above will set the lower 33052half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 33053targets. 33054 33055 33056File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 33057 330586.52.9 MIPS Loongson Built-in Functions 33059--------------------------------------- 33060 33061GCC provides intrinsics to access the SIMD instructions provided by the 33062ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 33063available after inclusion of the `loongson.h' header file, operate on 33064the following 64-bit vector types: 33065 33066 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 33067 33068 * `uint16x4_t', a vector of four unsigned 16-bit integers; 33069 33070 * `uint32x2_t', a vector of two unsigned 32-bit integers; 33071 33072 * `int8x8_t', a vector of eight signed 8-bit integers; 33073 33074 * `int16x4_t', a vector of four signed 16-bit integers; 33075 33076 * `int32x2_t', a vector of two signed 32-bit integers. 33077 33078 The intrinsics provided are listed below; each is named after the 33079machine instruction to which it corresponds, with suffixes added as 33080appropriate to distinguish intrinsics that expand to the same machine 33081instruction yet have different argument types. Refer to the 33082architecture documentation for a description of the functionality of 33083each instruction. 33084 33085 int16x4_t packsswh (int32x2_t s, int32x2_t t); 33086 int8x8_t packsshb (int16x4_t s, int16x4_t t); 33087 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 33088 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 33089 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 33090 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 33091 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 33092 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 33093 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 33094 uint64_t paddd_u (uint64_t s, uint64_t t); 33095 int64_t paddd_s (int64_t s, int64_t t); 33096 int16x4_t paddsh (int16x4_t s, int16x4_t t); 33097 int8x8_t paddsb (int8x8_t s, int8x8_t t); 33098 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 33099 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 33100 uint64_t pandn_ud (uint64_t s, uint64_t t); 33101 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 33102 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 33103 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 33104 int64_t pandn_sd (int64_t s, int64_t t); 33105 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 33106 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 33107 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 33108 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 33109 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 33110 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 33111 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 33112 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 33113 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 33114 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 33115 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 33116 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 33117 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 33118 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 33119 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 33120 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 33121 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 33122 uint16x4_t pextrh_u (uint16x4_t s, int field); 33123 int16x4_t pextrh_s (int16x4_t s, int field); 33124 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 33125 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 33126 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 33127 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 33128 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 33129 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 33130 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 33131 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 33132 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 33133 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 33134 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 33135 int16x4_t pminsh (int16x4_t s, int16x4_t t); 33136 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 33137 uint8x8_t pmovmskb_u (uint8x8_t s); 33138 int8x8_t pmovmskb_s (int8x8_t s); 33139 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 33140 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 33141 int16x4_t pmullh (int16x4_t s, int16x4_t t); 33142 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 33143 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 33144 uint16x4_t biadd (uint8x8_t s); 33145 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 33146 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 33147 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 33148 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 33149 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 33150 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 33151 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 33152 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 33153 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 33154 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 33155 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 33156 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 33157 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 33158 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 33159 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 33160 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 33161 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 33162 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 33163 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 33164 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 33165 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 33166 uint64_t psubd_u (uint64_t s, uint64_t t); 33167 int64_t psubd_s (int64_t s, int64_t t); 33168 int16x4_t psubsh (int16x4_t s, int16x4_t t); 33169 int8x8_t psubsb (int8x8_t s, int8x8_t t); 33170 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 33171 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 33172 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 33173 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 33174 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 33175 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 33176 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 33177 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 33178 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 33179 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 33180 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 33181 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 33182 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 33183 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 33184 33185* Menu: 33186 33187* Paired-Single Arithmetic:: 33188* Paired-Single Built-in Functions:: 33189* MIPS-3D Built-in Functions:: 33190 33191 33192File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 33193 331946.52.9.1 Paired-Single Arithmetic 33195................................. 33196 33197The table below lists the `v2sf' operations for which hardware support 33198exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 33199value. 33200 33201C code MIPS instruction 33202`a + b' `add.ps' 33203`a - b' `sub.ps' 33204`-a' `neg.ps' 33205`a * b' `mul.ps' 33206`a * b + c' `madd.ps' 33207`a * b - c' `msub.ps' 33208`-(a * b + c)' `nmadd.ps' 33209`-(a * b - c)' `nmsub.ps' 33210`x ? a : b' `movn.ps'/`movz.ps' 33211 33212 Note that the multiply-accumulate instructions can be disabled using 33213the command-line option `-mno-fused-madd'. 33214 33215 33216File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 33217 332186.52.9.2 Paired-Single Built-in Functions 33219......................................... 33220 33221The following paired-single functions map directly to a particular MIPS 33222instruction. Please refer to the architecture specification for 33223details on what each instruction does. 33224 33225`v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 33226 Pair lower lower (`pll.ps'). 33227 33228`v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 33229 Pair upper lower (`pul.ps'). 33230 33231`v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 33232 Pair lower upper (`plu.ps'). 33233 33234`v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 33235 Pair upper upper (`puu.ps'). 33236 33237`v2sf __builtin_mips_cvt_ps_s (float, float)' 33238 Convert pair to paired single (`cvt.ps.s'). 33239 33240`float __builtin_mips_cvt_s_pl (v2sf)' 33241 Convert pair lower to single (`cvt.s.pl'). 33242 33243`float __builtin_mips_cvt_s_pu (v2sf)' 33244 Convert pair upper to single (`cvt.s.pu'). 33245 33246`v2sf __builtin_mips_abs_ps (v2sf)' 33247 Absolute value (`abs.ps'). 33248 33249`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 33250 Align variable (`alnv.ps'). 33251 33252 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 33253 otherwise the result will be unpredictable. Please read the 33254 instruction description for details. 33255 33256 The following multi-instruction functions are also available. In each 33257case, COND can be any of the 16 floating-point conditions: `f', `un', 33258`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 33259`lt', `nge', `le' or `ngt'. 33260 33261`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 33262`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 33263 Conditional move based on floating point comparison (`c.COND.ps', 33264 `movt.ps'/`movf.ps'). 33265 33266 The `movt' functions return the value X computed by: 33267 33268 c.COND.ps CC,A,B 33269 mov.ps X,C 33270 movt.ps X,D,CC 33271 33272 The `movf' functions are similar but use `movf.ps' instead of 33273 `movt.ps'. 33274 33275`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 33276`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 33277 Comparison of two paired-single values (`c.COND.ps', 33278 `bc1t'/`bc1f'). 33279 33280 These functions compare A and B using `c.COND.ps' and return 33281 either the upper or lower half of the result. For example: 33282 33283 v2sf a, b; 33284 if (__builtin_mips_upper_c_eq_ps (a, b)) 33285 upper_halves_are_equal (); 33286 else 33287 upper_halves_are_unequal (); 33288 33289 if (__builtin_mips_lower_c_eq_ps (a, b)) 33290 lower_halves_are_equal (); 33291 else 33292 lower_halves_are_unequal (); 33293 33294 33295File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 33296 332976.52.9.3 MIPS-3D Built-in Functions 33298................................... 33299 33300The MIPS-3D Application-Specific Extension (ASE) includes additional 33301paired-single instructions that are designed to improve the performance 33302of 3D graphics operations. Support for these instructions is controlled 33303by the `-mips3d' command-line option. 33304 33305 The functions listed below map directly to a particular MIPS-3D 33306instruction. Please refer to the architecture specification for more 33307details on what each instruction does. 33308 33309`v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 33310 Reduction add (`addr.ps'). 33311 33312`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 33313 Reduction multiply (`mulr.ps'). 33314 33315`v2sf __builtin_mips_cvt_pw_ps (v2sf)' 33316 Convert paired single to paired word (`cvt.pw.ps'). 33317 33318`v2sf __builtin_mips_cvt_ps_pw (v2sf)' 33319 Convert paired word to paired single (`cvt.ps.pw'). 33320 33321`float __builtin_mips_recip1_s (float)' 33322`double __builtin_mips_recip1_d (double)' 33323`v2sf __builtin_mips_recip1_ps (v2sf)' 33324 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 33325 33326`float __builtin_mips_recip2_s (float, float)' 33327`double __builtin_mips_recip2_d (double, double)' 33328`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 33329 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 33330 33331`float __builtin_mips_rsqrt1_s (float)' 33332`double __builtin_mips_rsqrt1_d (double)' 33333`v2sf __builtin_mips_rsqrt1_ps (v2sf)' 33334 Reduced precision reciprocal square root (sequence step 1) 33335 (`rsqrt1.FMT'). 33336 33337`float __builtin_mips_rsqrt2_s (float, float)' 33338`double __builtin_mips_rsqrt2_d (double, double)' 33339`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 33340 Reduced precision reciprocal square root (sequence step 2) 33341 (`rsqrt2.FMT'). 33342 33343 The following multi-instruction functions are also available. In each 33344case, COND can be any of the 16 floating-point conditions: `f', `un', 33345`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 33346`lt', `nge', `le' or `ngt'. 33347 33348`int __builtin_mips_cabs_COND_s (float A, float B)' 33349`int __builtin_mips_cabs_COND_d (double A, double B)' 33350 Absolute comparison of two scalar values (`cabs.COND.FMT', 33351 `bc1t'/`bc1f'). 33352 33353 These functions compare A and B using `cabs.COND.s' or 33354 `cabs.COND.d' and return the result as a boolean value. For 33355 example: 33356 33357 float a, b; 33358 if (__builtin_mips_cabs_eq_s (a, b)) 33359 true (); 33360 else 33361 false (); 33362 33363`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 33364`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 33365 Absolute comparison of two paired-single values (`cabs.COND.ps', 33366 `bc1t'/`bc1f'). 33367 33368 These functions compare A and B using `cabs.COND.ps' and return 33369 either the upper or lower half of the result. For example: 33370 33371 v2sf a, b; 33372 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 33373 upper_halves_are_equal (); 33374 else 33375 upper_halves_are_unequal (); 33376 33377 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 33378 lower_halves_are_equal (); 33379 else 33380 lower_halves_are_unequal (); 33381 33382`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 33383`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 33384 Conditional move based on absolute comparison (`cabs.COND.ps', 33385 `movt.ps'/`movf.ps'). 33386 33387 The `movt' functions return the value X computed by: 33388 33389 cabs.COND.ps CC,A,B 33390 mov.ps X,C 33391 movt.ps X,D,CC 33392 33393 The `movf' functions are similar but use `movf.ps' instead of 33394 `movt.ps'. 33395 33396`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 33397`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 33398`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 33399`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 33400 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 33401 `bc1any2t'/`bc1any2f'). 33402 33403 These functions compare A and B using `c.COND.ps' or 33404 `cabs.COND.ps'. The `any' forms return true if either result is 33405 true and the `all' forms return true if both results are true. 33406 For example: 33407 33408 v2sf a, b; 33409 if (__builtin_mips_any_c_eq_ps (a, b)) 33410 one_is_true (); 33411 else 33412 both_are_false (); 33413 33414 if (__builtin_mips_all_c_eq_ps (a, b)) 33415 both_are_true (); 33416 else 33417 one_is_false (); 33418 33419`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 33420`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 33421`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 33422`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 33423 Comparison of four paired-single values 33424 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 33425 33426 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 33427 with B and to compare C with D. The `any' forms return true if 33428 any of the four results are true and the `all' forms return true 33429 if all four results are true. For example: 33430 33431 v2sf a, b, c, d; 33432 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 33433 some_are_true (); 33434 else 33435 all_are_false (); 33436 33437 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 33438 all_are_true (); 33439 else 33440 some_are_false (); 33441 33442 33443File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC AltiVec/VSX Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 33444 334456.52.10 picoChip Built-in Functions 33446----------------------------------- 33447 33448GCC provides an interface to selected machine instructions from the 33449picoChip instruction set. 33450 33451`int __builtin_sbc (int VALUE)' 33452 Sign bit count. Return the number of consecutive bits in VALUE 33453 which have the same value as the sign-bit. The result is the 33454 number of leading sign bits minus one, giving the number of 33455 redundant sign bits in VALUE. 33456 33457`int __builtin_byteswap (int VALUE)' 33458 Byte swap. Return the result of swapping the upper and lower 33459 bytes of VALUE. 33460 33461`int __builtin_brev (int VALUE)' 33462 Bit reversal. Return the result of reversing the bits in VALUE. 33463 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 33464 on. 33465 33466`int __builtin_adds (int X, int Y)' 33467 Saturating addition. Return the result of adding X and Y, storing 33468 the value 32767 if the result overflows. 33469 33470`int __builtin_subs (int X, int Y)' 33471 Saturating subtraction. Return the result of subtracting Y from 33472 X, storing the value -32768 if the result overflows. 33473 33474`void __builtin_halt (void)' 33475 Halt. The processor will stop execution. This built-in is useful 33476 for implementing assertions. 33477 33478 33479 33480File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 33481 334826.52.11 Other MIPS Built-in Functions 33483------------------------------------- 33484 33485GCC provides other MIPS-specific built-in functions: 33486 33487`void __builtin_mips_cache (int OP, const volatile void *ADDR)' 33488 Insert a `cache' instruction with operands OP and ADDR. GCC 33489 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 33490 when this function is available. 33491 33492 33493File: gcc.info, Node: PowerPC AltiVec/VSX Built-in Functions, Next: RX Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 33494 334956.52.12 PowerPC AltiVec Built-in Functions 33496------------------------------------------ 33497 33498GCC provides an interface for the PowerPC family of processors to access 33499the AltiVec operations described in Motorola's AltiVec Programming 33500Interface Manual. The interface is made available by including 33501`<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 33502supports the following vector types. 33503 33504 vector unsigned char 33505 vector signed char 33506 vector bool char 33507 33508 vector unsigned short 33509 vector signed short 33510 vector bool short 33511 vector pixel 33512 33513 vector unsigned int 33514 vector signed int 33515 vector bool int 33516 vector float 33517 33518 If `-mvsx' is used the following additional vector types are 33519implemented. 33520 33521 vector unsigned long 33522 vector signed long 33523 vector double 33524 33525 The long types are only implemented for 64-bit code generation, and 33526the long type is only used in the floating point/integer conversion 33527instructions. 33528 33529 GCC's implementation of the high-level language interface available 33530from C and C++ code differs from Motorola's documentation in several 33531ways. 33532 33533 * A vector constant is a list of constant expressions within curly 33534 braces. 33535 33536 * A vector initializer requires no cast if the vector constant is of 33537 the same type as the variable it is initializing. 33538 33539 * If `signed' or `unsigned' is omitted, the signedness of the vector 33540 type is the default signedness of the base type. The default 33541 varies depending on the operating system, so a portable program 33542 should always specify the signedness. 33543 33544 * Compiling with `-maltivec' adds keywords `__vector', `vector', 33545 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 33546 the context-sensitive substitution of the keywords `vector', 33547 `pixel' and `bool' is disabled. To use them, you must include 33548 `<altivec.h>' instead. 33549 33550 * GCC allows using a `typedef' name as the type specifier for a 33551 vector type. 33552 33553 * For C, overloaded functions are implemented with macros so the 33554 following does not work: 33555 33556 vec_add ((vector signed int){1, 2, 3, 4}, foo); 33557 33558 Since `vec_add' is a macro, the vector constant in the example is 33559 treated as four separate arguments. Wrap the entire argument in 33560 parentheses for this to work. 33561 33562 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 33563GCC uses built-in functions to achieve the functionality in the 33564aforementioned header file, but they are not supported and are subject 33565to change without notice. 33566 33567 The following interfaces are supported for the generic and specific 33568AltiVec operations and the AltiVec predicates. In cases where there is 33569a direct mapping between generic and specific operations, only the 33570generic names are shown here, although the specific operations can also 33571be used. 33572 33573 Arguments that are documented as `const int' require literal integral 33574values within the range required for that operation. 33575 33576 vector signed char vec_abs (vector signed char); 33577 vector signed short vec_abs (vector signed short); 33578 vector signed int vec_abs (vector signed int); 33579 vector float vec_abs (vector float); 33580 33581 vector signed char vec_abss (vector signed char); 33582 vector signed short vec_abss (vector signed short); 33583 vector signed int vec_abss (vector signed int); 33584 33585 vector signed char vec_add (vector bool char, vector signed char); 33586 vector signed char vec_add (vector signed char, vector bool char); 33587 vector signed char vec_add (vector signed char, vector signed char); 33588 vector unsigned char vec_add (vector bool char, vector unsigned char); 33589 vector unsigned char vec_add (vector unsigned char, vector bool char); 33590 vector unsigned char vec_add (vector unsigned char, 33591 vector unsigned char); 33592 vector signed short vec_add (vector bool short, vector signed short); 33593 vector signed short vec_add (vector signed short, vector bool short); 33594 vector signed short vec_add (vector signed short, vector signed short); 33595 vector unsigned short vec_add (vector bool short, 33596 vector unsigned short); 33597 vector unsigned short vec_add (vector unsigned short, 33598 vector bool short); 33599 vector unsigned short vec_add (vector unsigned short, 33600 vector unsigned short); 33601 vector signed int vec_add (vector bool int, vector signed int); 33602 vector signed int vec_add (vector signed int, vector bool int); 33603 vector signed int vec_add (vector signed int, vector signed int); 33604 vector unsigned int vec_add (vector bool int, vector unsigned int); 33605 vector unsigned int vec_add (vector unsigned int, vector bool int); 33606 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 33607 vector float vec_add (vector float, vector float); 33608 33609 vector float vec_vaddfp (vector float, vector float); 33610 33611 vector signed int vec_vadduwm (vector bool int, vector signed int); 33612 vector signed int vec_vadduwm (vector signed int, vector bool int); 33613 vector signed int vec_vadduwm (vector signed int, vector signed int); 33614 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 33615 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 33616 vector unsigned int vec_vadduwm (vector unsigned int, 33617 vector unsigned int); 33618 33619 vector signed short vec_vadduhm (vector bool short, 33620 vector signed short); 33621 vector signed short vec_vadduhm (vector signed short, 33622 vector bool short); 33623 vector signed short vec_vadduhm (vector signed short, 33624 vector signed short); 33625 vector unsigned short vec_vadduhm (vector bool short, 33626 vector unsigned short); 33627 vector unsigned short vec_vadduhm (vector unsigned short, 33628 vector bool short); 33629 vector unsigned short vec_vadduhm (vector unsigned short, 33630 vector unsigned short); 33631 33632 vector signed char vec_vaddubm (vector bool char, vector signed char); 33633 vector signed char vec_vaddubm (vector signed char, vector bool char); 33634 vector signed char vec_vaddubm (vector signed char, vector signed char); 33635 vector unsigned char vec_vaddubm (vector bool char, 33636 vector unsigned char); 33637 vector unsigned char vec_vaddubm (vector unsigned char, 33638 vector bool char); 33639 vector unsigned char vec_vaddubm (vector unsigned char, 33640 vector unsigned char); 33641 33642 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 33643 33644 vector unsigned char vec_adds (vector bool char, vector unsigned char); 33645 vector unsigned char vec_adds (vector unsigned char, vector bool char); 33646 vector unsigned char vec_adds (vector unsigned char, 33647 vector unsigned char); 33648 vector signed char vec_adds (vector bool char, vector signed char); 33649 vector signed char vec_adds (vector signed char, vector bool char); 33650 vector signed char vec_adds (vector signed char, vector signed char); 33651 vector unsigned short vec_adds (vector bool short, 33652 vector unsigned short); 33653 vector unsigned short vec_adds (vector unsigned short, 33654 vector bool short); 33655 vector unsigned short vec_adds (vector unsigned short, 33656 vector unsigned short); 33657 vector signed short vec_adds (vector bool short, vector signed short); 33658 vector signed short vec_adds (vector signed short, vector bool short); 33659 vector signed short vec_adds (vector signed short, vector signed short); 33660 vector unsigned int vec_adds (vector bool int, vector unsigned int); 33661 vector unsigned int vec_adds (vector unsigned int, vector bool int); 33662 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 33663 vector signed int vec_adds (vector bool int, vector signed int); 33664 vector signed int vec_adds (vector signed int, vector bool int); 33665 vector signed int vec_adds (vector signed int, vector signed int); 33666 33667 vector signed int vec_vaddsws (vector bool int, vector signed int); 33668 vector signed int vec_vaddsws (vector signed int, vector bool int); 33669 vector signed int vec_vaddsws (vector signed int, vector signed int); 33670 33671 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 33672 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 33673 vector unsigned int vec_vadduws (vector unsigned int, 33674 vector unsigned int); 33675 33676 vector signed short vec_vaddshs (vector bool short, 33677 vector signed short); 33678 vector signed short vec_vaddshs (vector signed short, 33679 vector bool short); 33680 vector signed short vec_vaddshs (vector signed short, 33681 vector signed short); 33682 33683 vector unsigned short vec_vadduhs (vector bool short, 33684 vector unsigned short); 33685 vector unsigned short vec_vadduhs (vector unsigned short, 33686 vector bool short); 33687 vector unsigned short vec_vadduhs (vector unsigned short, 33688 vector unsigned short); 33689 33690 vector signed char vec_vaddsbs (vector bool char, vector signed char); 33691 vector signed char vec_vaddsbs (vector signed char, vector bool char); 33692 vector signed char vec_vaddsbs (vector signed char, vector signed char); 33693 33694 vector unsigned char vec_vaddubs (vector bool char, 33695 vector unsigned char); 33696 vector unsigned char vec_vaddubs (vector unsigned char, 33697 vector bool char); 33698 vector unsigned char vec_vaddubs (vector unsigned char, 33699 vector unsigned char); 33700 33701 vector float vec_and (vector float, vector float); 33702 vector float vec_and (vector float, vector bool int); 33703 vector float vec_and (vector bool int, vector float); 33704 vector bool int vec_and (vector bool int, vector bool int); 33705 vector signed int vec_and (vector bool int, vector signed int); 33706 vector signed int vec_and (vector signed int, vector bool int); 33707 vector signed int vec_and (vector signed int, vector signed int); 33708 vector unsigned int vec_and (vector bool int, vector unsigned int); 33709 vector unsigned int vec_and (vector unsigned int, vector bool int); 33710 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 33711 vector bool short vec_and (vector bool short, vector bool short); 33712 vector signed short vec_and (vector bool short, vector signed short); 33713 vector signed short vec_and (vector signed short, vector bool short); 33714 vector signed short vec_and (vector signed short, vector signed short); 33715 vector unsigned short vec_and (vector bool short, 33716 vector unsigned short); 33717 vector unsigned short vec_and (vector unsigned short, 33718 vector bool short); 33719 vector unsigned short vec_and (vector unsigned short, 33720 vector unsigned short); 33721 vector signed char vec_and (vector bool char, vector signed char); 33722 vector bool char vec_and (vector bool char, vector bool char); 33723 vector signed char vec_and (vector signed char, vector bool char); 33724 vector signed char vec_and (vector signed char, vector signed char); 33725 vector unsigned char vec_and (vector bool char, vector unsigned char); 33726 vector unsigned char vec_and (vector unsigned char, vector bool char); 33727 vector unsigned char vec_and (vector unsigned char, 33728 vector unsigned char); 33729 33730 vector float vec_andc (vector float, vector float); 33731 vector float vec_andc (vector float, vector bool int); 33732 vector float vec_andc (vector bool int, vector float); 33733 vector bool int vec_andc (vector bool int, vector bool int); 33734 vector signed int vec_andc (vector bool int, vector signed int); 33735 vector signed int vec_andc (vector signed int, vector bool int); 33736 vector signed int vec_andc (vector signed int, vector signed int); 33737 vector unsigned int vec_andc (vector bool int, vector unsigned int); 33738 vector unsigned int vec_andc (vector unsigned int, vector bool int); 33739 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 33740 vector bool short vec_andc (vector bool short, vector bool short); 33741 vector signed short vec_andc (vector bool short, vector signed short); 33742 vector signed short vec_andc (vector signed short, vector bool short); 33743 vector signed short vec_andc (vector signed short, vector signed short); 33744 vector unsigned short vec_andc (vector bool short, 33745 vector unsigned short); 33746 vector unsigned short vec_andc (vector unsigned short, 33747 vector bool short); 33748 vector unsigned short vec_andc (vector unsigned short, 33749 vector unsigned short); 33750 vector signed char vec_andc (vector bool char, vector signed char); 33751 vector bool char vec_andc (vector bool char, vector bool char); 33752 vector signed char vec_andc (vector signed char, vector bool char); 33753 vector signed char vec_andc (vector signed char, vector signed char); 33754 vector unsigned char vec_andc (vector bool char, vector unsigned char); 33755 vector unsigned char vec_andc (vector unsigned char, vector bool char); 33756 vector unsigned char vec_andc (vector unsigned char, 33757 vector unsigned char); 33758 33759 vector unsigned char vec_avg (vector unsigned char, 33760 vector unsigned char); 33761 vector signed char vec_avg (vector signed char, vector signed char); 33762 vector unsigned short vec_avg (vector unsigned short, 33763 vector unsigned short); 33764 vector signed short vec_avg (vector signed short, vector signed short); 33765 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 33766 vector signed int vec_avg (vector signed int, vector signed int); 33767 33768 vector signed int vec_vavgsw (vector signed int, vector signed int); 33769 33770 vector unsigned int vec_vavguw (vector unsigned int, 33771 vector unsigned int); 33772 33773 vector signed short vec_vavgsh (vector signed short, 33774 vector signed short); 33775 33776 vector unsigned short vec_vavguh (vector unsigned short, 33777 vector unsigned short); 33778 33779 vector signed char vec_vavgsb (vector signed char, vector signed char); 33780 33781 vector unsigned char vec_vavgub (vector unsigned char, 33782 vector unsigned char); 33783 33784 vector float vec_copysign (vector float); 33785 33786 vector float vec_ceil (vector float); 33787 33788 vector signed int vec_cmpb (vector float, vector float); 33789 33790 vector bool char vec_cmpeq (vector signed char, vector signed char); 33791 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 33792 vector bool short vec_cmpeq (vector signed short, vector signed short); 33793 vector bool short vec_cmpeq (vector unsigned short, 33794 vector unsigned short); 33795 vector bool int vec_cmpeq (vector signed int, vector signed int); 33796 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 33797 vector bool int vec_cmpeq (vector float, vector float); 33798 33799 vector bool int vec_vcmpeqfp (vector float, vector float); 33800 33801 vector bool int vec_vcmpequw (vector signed int, vector signed int); 33802 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 33803 33804 vector bool short vec_vcmpequh (vector signed short, 33805 vector signed short); 33806 vector bool short vec_vcmpequh (vector unsigned short, 33807 vector unsigned short); 33808 33809 vector bool char vec_vcmpequb (vector signed char, vector signed char); 33810 vector bool char vec_vcmpequb (vector unsigned char, 33811 vector unsigned char); 33812 33813 vector bool int vec_cmpge (vector float, vector float); 33814 33815 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 33816 vector bool char vec_cmpgt (vector signed char, vector signed char); 33817 vector bool short vec_cmpgt (vector unsigned short, 33818 vector unsigned short); 33819 vector bool short vec_cmpgt (vector signed short, vector signed short); 33820 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 33821 vector bool int vec_cmpgt (vector signed int, vector signed int); 33822 vector bool int vec_cmpgt (vector float, vector float); 33823 33824 vector bool int vec_vcmpgtfp (vector float, vector float); 33825 33826 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 33827 33828 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 33829 33830 vector bool short vec_vcmpgtsh (vector signed short, 33831 vector signed short); 33832 33833 vector bool short vec_vcmpgtuh (vector unsigned short, 33834 vector unsigned short); 33835 33836 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 33837 33838 vector bool char vec_vcmpgtub (vector unsigned char, 33839 vector unsigned char); 33840 33841 vector bool int vec_cmple (vector float, vector float); 33842 33843 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 33844 vector bool char vec_cmplt (vector signed char, vector signed char); 33845 vector bool short vec_cmplt (vector unsigned short, 33846 vector unsigned short); 33847 vector bool short vec_cmplt (vector signed short, vector signed short); 33848 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 33849 vector bool int vec_cmplt (vector signed int, vector signed int); 33850 vector bool int vec_cmplt (vector float, vector float); 33851 33852 vector float vec_ctf (vector unsigned int, const int); 33853 vector float vec_ctf (vector signed int, const int); 33854 33855 vector float vec_vcfsx (vector signed int, const int); 33856 33857 vector float vec_vcfux (vector unsigned int, const int); 33858 33859 vector signed int vec_cts (vector float, const int); 33860 33861 vector unsigned int vec_ctu (vector float, const int); 33862 33863 void vec_dss (const int); 33864 33865 void vec_dssall (void); 33866 33867 void vec_dst (const vector unsigned char *, int, const int); 33868 void vec_dst (const vector signed char *, int, const int); 33869 void vec_dst (const vector bool char *, int, const int); 33870 void vec_dst (const vector unsigned short *, int, const int); 33871 void vec_dst (const vector signed short *, int, const int); 33872 void vec_dst (const vector bool short *, int, const int); 33873 void vec_dst (const vector pixel *, int, const int); 33874 void vec_dst (const vector unsigned int *, int, const int); 33875 void vec_dst (const vector signed int *, int, const int); 33876 void vec_dst (const vector bool int *, int, const int); 33877 void vec_dst (const vector float *, int, const int); 33878 void vec_dst (const unsigned char *, int, const int); 33879 void vec_dst (const signed char *, int, const int); 33880 void vec_dst (const unsigned short *, int, const int); 33881 void vec_dst (const short *, int, const int); 33882 void vec_dst (const unsigned int *, int, const int); 33883 void vec_dst (const int *, int, const int); 33884 void vec_dst (const unsigned long *, int, const int); 33885 void vec_dst (const long *, int, const int); 33886 void vec_dst (const float *, int, const int); 33887 33888 void vec_dstst (const vector unsigned char *, int, const int); 33889 void vec_dstst (const vector signed char *, int, const int); 33890 void vec_dstst (const vector bool char *, int, const int); 33891 void vec_dstst (const vector unsigned short *, int, const int); 33892 void vec_dstst (const vector signed short *, int, const int); 33893 void vec_dstst (const vector bool short *, int, const int); 33894 void vec_dstst (const vector pixel *, int, const int); 33895 void vec_dstst (const vector unsigned int *, int, const int); 33896 void vec_dstst (const vector signed int *, int, const int); 33897 void vec_dstst (const vector bool int *, int, const int); 33898 void vec_dstst (const vector float *, int, const int); 33899 void vec_dstst (const unsigned char *, int, const int); 33900 void vec_dstst (const signed char *, int, const int); 33901 void vec_dstst (const unsigned short *, int, const int); 33902 void vec_dstst (const short *, int, const int); 33903 void vec_dstst (const unsigned int *, int, const int); 33904 void vec_dstst (const int *, int, const int); 33905 void vec_dstst (const unsigned long *, int, const int); 33906 void vec_dstst (const long *, int, const int); 33907 void vec_dstst (const float *, int, const int); 33908 33909 void vec_dststt (const vector unsigned char *, int, const int); 33910 void vec_dststt (const vector signed char *, int, const int); 33911 void vec_dststt (const vector bool char *, int, const int); 33912 void vec_dststt (const vector unsigned short *, int, const int); 33913 void vec_dststt (const vector signed short *, int, const int); 33914 void vec_dststt (const vector bool short *, int, const int); 33915 void vec_dststt (const vector pixel *, int, const int); 33916 void vec_dststt (const vector unsigned int *, int, const int); 33917 void vec_dststt (const vector signed int *, int, const int); 33918 void vec_dststt (const vector bool int *, int, const int); 33919 void vec_dststt (const vector float *, int, const int); 33920 void vec_dststt (const unsigned char *, int, const int); 33921 void vec_dststt (const signed char *, int, const int); 33922 void vec_dststt (const unsigned short *, int, const int); 33923 void vec_dststt (const short *, int, const int); 33924 void vec_dststt (const unsigned int *, int, const int); 33925 void vec_dststt (const int *, int, const int); 33926 void vec_dststt (const unsigned long *, int, const int); 33927 void vec_dststt (const long *, int, const int); 33928 void vec_dststt (const float *, int, const int); 33929 33930 void vec_dstt (const vector unsigned char *, int, const int); 33931 void vec_dstt (const vector signed char *, int, const int); 33932 void vec_dstt (const vector bool char *, int, const int); 33933 void vec_dstt (const vector unsigned short *, int, const int); 33934 void vec_dstt (const vector signed short *, int, const int); 33935 void vec_dstt (const vector bool short *, int, const int); 33936 void vec_dstt (const vector pixel *, int, const int); 33937 void vec_dstt (const vector unsigned int *, int, const int); 33938 void vec_dstt (const vector signed int *, int, const int); 33939 void vec_dstt (const vector bool int *, int, const int); 33940 void vec_dstt (const vector float *, int, const int); 33941 void vec_dstt (const unsigned char *, int, const int); 33942 void vec_dstt (const signed char *, int, const int); 33943 void vec_dstt (const unsigned short *, int, const int); 33944 void vec_dstt (const short *, int, const int); 33945 void vec_dstt (const unsigned int *, int, const int); 33946 void vec_dstt (const int *, int, const int); 33947 void vec_dstt (const unsigned long *, int, const int); 33948 void vec_dstt (const long *, int, const int); 33949 void vec_dstt (const float *, int, const int); 33950 33951 vector float vec_expte (vector float); 33952 33953 vector float vec_floor (vector float); 33954 33955 vector float vec_ld (int, const vector float *); 33956 vector float vec_ld (int, const float *); 33957 vector bool int vec_ld (int, const vector bool int *); 33958 vector signed int vec_ld (int, const vector signed int *); 33959 vector signed int vec_ld (int, const int *); 33960 vector signed int vec_ld (int, const long *); 33961 vector unsigned int vec_ld (int, const vector unsigned int *); 33962 vector unsigned int vec_ld (int, const unsigned int *); 33963 vector unsigned int vec_ld (int, const unsigned long *); 33964 vector bool short vec_ld (int, const vector bool short *); 33965 vector pixel vec_ld (int, const vector pixel *); 33966 vector signed short vec_ld (int, const vector signed short *); 33967 vector signed short vec_ld (int, const short *); 33968 vector unsigned short vec_ld (int, const vector unsigned short *); 33969 vector unsigned short vec_ld (int, const unsigned short *); 33970 vector bool char vec_ld (int, const vector bool char *); 33971 vector signed char vec_ld (int, const vector signed char *); 33972 vector signed char vec_ld (int, const signed char *); 33973 vector unsigned char vec_ld (int, const vector unsigned char *); 33974 vector unsigned char vec_ld (int, const unsigned char *); 33975 33976 vector signed char vec_lde (int, const signed char *); 33977 vector unsigned char vec_lde (int, const unsigned char *); 33978 vector signed short vec_lde (int, const short *); 33979 vector unsigned short vec_lde (int, const unsigned short *); 33980 vector float vec_lde (int, const float *); 33981 vector signed int vec_lde (int, const int *); 33982 vector unsigned int vec_lde (int, const unsigned int *); 33983 vector signed int vec_lde (int, const long *); 33984 vector unsigned int vec_lde (int, const unsigned long *); 33985 33986 vector float vec_lvewx (int, float *); 33987 vector signed int vec_lvewx (int, int *); 33988 vector unsigned int vec_lvewx (int, unsigned int *); 33989 vector signed int vec_lvewx (int, long *); 33990 vector unsigned int vec_lvewx (int, unsigned long *); 33991 33992 vector signed short vec_lvehx (int, short *); 33993 vector unsigned short vec_lvehx (int, unsigned short *); 33994 33995 vector signed char vec_lvebx (int, char *); 33996 vector unsigned char vec_lvebx (int, unsigned char *); 33997 33998 vector float vec_ldl (int, const vector float *); 33999 vector float vec_ldl (int, const float *); 34000 vector bool int vec_ldl (int, const vector bool int *); 34001 vector signed int vec_ldl (int, const vector signed int *); 34002 vector signed int vec_ldl (int, const int *); 34003 vector signed int vec_ldl (int, const long *); 34004 vector unsigned int vec_ldl (int, const vector unsigned int *); 34005 vector unsigned int vec_ldl (int, const unsigned int *); 34006 vector unsigned int vec_ldl (int, const unsigned long *); 34007 vector bool short vec_ldl (int, const vector bool short *); 34008 vector pixel vec_ldl (int, const vector pixel *); 34009 vector signed short vec_ldl (int, const vector signed short *); 34010 vector signed short vec_ldl (int, const short *); 34011 vector unsigned short vec_ldl (int, const vector unsigned short *); 34012 vector unsigned short vec_ldl (int, const unsigned short *); 34013 vector bool char vec_ldl (int, const vector bool char *); 34014 vector signed char vec_ldl (int, const vector signed char *); 34015 vector signed char vec_ldl (int, const signed char *); 34016 vector unsigned char vec_ldl (int, const vector unsigned char *); 34017 vector unsigned char vec_ldl (int, const unsigned char *); 34018 34019 vector float vec_loge (vector float); 34020 34021 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 34022 vector unsigned char vec_lvsl (int, const volatile signed char *); 34023 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 34024 vector unsigned char vec_lvsl (int, const volatile short *); 34025 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 34026 vector unsigned char vec_lvsl (int, const volatile int *); 34027 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 34028 vector unsigned char vec_lvsl (int, const volatile long *); 34029 vector unsigned char vec_lvsl (int, const volatile float *); 34030 34031 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 34032 vector unsigned char vec_lvsr (int, const volatile signed char *); 34033 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 34034 vector unsigned char vec_lvsr (int, const volatile short *); 34035 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 34036 vector unsigned char vec_lvsr (int, const volatile int *); 34037 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 34038 vector unsigned char vec_lvsr (int, const volatile long *); 34039 vector unsigned char vec_lvsr (int, const volatile float *); 34040 34041 vector float vec_madd (vector float, vector float, vector float); 34042 34043 vector signed short vec_madds (vector signed short, 34044 vector signed short, 34045 vector signed short); 34046 34047 vector unsigned char vec_max (vector bool char, vector unsigned char); 34048 vector unsigned char vec_max (vector unsigned char, vector bool char); 34049 vector unsigned char vec_max (vector unsigned char, 34050 vector unsigned char); 34051 vector signed char vec_max (vector bool char, vector signed char); 34052 vector signed char vec_max (vector signed char, vector bool char); 34053 vector signed char vec_max (vector signed char, vector signed char); 34054 vector unsigned short vec_max (vector bool short, 34055 vector unsigned short); 34056 vector unsigned short vec_max (vector unsigned short, 34057 vector bool short); 34058 vector unsigned short vec_max (vector unsigned short, 34059 vector unsigned short); 34060 vector signed short vec_max (vector bool short, vector signed short); 34061 vector signed short vec_max (vector signed short, vector bool short); 34062 vector signed short vec_max (vector signed short, vector signed short); 34063 vector unsigned int vec_max (vector bool int, vector unsigned int); 34064 vector unsigned int vec_max (vector unsigned int, vector bool int); 34065 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 34066 vector signed int vec_max (vector bool int, vector signed int); 34067 vector signed int vec_max (vector signed int, vector bool int); 34068 vector signed int vec_max (vector signed int, vector signed int); 34069 vector float vec_max (vector float, vector float); 34070 34071 vector float vec_vmaxfp (vector float, vector float); 34072 34073 vector signed int vec_vmaxsw (vector bool int, vector signed int); 34074 vector signed int vec_vmaxsw (vector signed int, vector bool int); 34075 vector signed int vec_vmaxsw (vector signed int, vector signed int); 34076 34077 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 34078 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 34079 vector unsigned int vec_vmaxuw (vector unsigned int, 34080 vector unsigned int); 34081 34082 vector signed short vec_vmaxsh (vector bool short, vector signed short); 34083 vector signed short vec_vmaxsh (vector signed short, vector bool short); 34084 vector signed short vec_vmaxsh (vector signed short, 34085 vector signed short); 34086 34087 vector unsigned short vec_vmaxuh (vector bool short, 34088 vector unsigned short); 34089 vector unsigned short vec_vmaxuh (vector unsigned short, 34090 vector bool short); 34091 vector unsigned short vec_vmaxuh (vector unsigned short, 34092 vector unsigned short); 34093 34094 vector signed char vec_vmaxsb (vector bool char, vector signed char); 34095 vector signed char vec_vmaxsb (vector signed char, vector bool char); 34096 vector signed char vec_vmaxsb (vector signed char, vector signed char); 34097 34098 vector unsigned char vec_vmaxub (vector bool char, 34099 vector unsigned char); 34100 vector unsigned char vec_vmaxub (vector unsigned char, 34101 vector bool char); 34102 vector unsigned char vec_vmaxub (vector unsigned char, 34103 vector unsigned char); 34104 34105 vector bool char vec_mergeh (vector bool char, vector bool char); 34106 vector signed char vec_mergeh (vector signed char, vector signed char); 34107 vector unsigned char vec_mergeh (vector unsigned char, 34108 vector unsigned char); 34109 vector bool short vec_mergeh (vector bool short, vector bool short); 34110 vector pixel vec_mergeh (vector pixel, vector pixel); 34111 vector signed short vec_mergeh (vector signed short, 34112 vector signed short); 34113 vector unsigned short vec_mergeh (vector unsigned short, 34114 vector unsigned short); 34115 vector float vec_mergeh (vector float, vector float); 34116 vector bool int vec_mergeh (vector bool int, vector bool int); 34117 vector signed int vec_mergeh (vector signed int, vector signed int); 34118 vector unsigned int vec_mergeh (vector unsigned int, 34119 vector unsigned int); 34120 34121 vector float vec_vmrghw (vector float, vector float); 34122 vector bool int vec_vmrghw (vector bool int, vector bool int); 34123 vector signed int vec_vmrghw (vector signed int, vector signed int); 34124 vector unsigned int vec_vmrghw (vector unsigned int, 34125 vector unsigned int); 34126 34127 vector bool short vec_vmrghh (vector bool short, vector bool short); 34128 vector signed short vec_vmrghh (vector signed short, 34129 vector signed short); 34130 vector unsigned short vec_vmrghh (vector unsigned short, 34131 vector unsigned short); 34132 vector pixel vec_vmrghh (vector pixel, vector pixel); 34133 34134 vector bool char vec_vmrghb (vector bool char, vector bool char); 34135 vector signed char vec_vmrghb (vector signed char, vector signed char); 34136 vector unsigned char vec_vmrghb (vector unsigned char, 34137 vector unsigned char); 34138 34139 vector bool char vec_mergel (vector bool char, vector bool char); 34140 vector signed char vec_mergel (vector signed char, vector signed char); 34141 vector unsigned char vec_mergel (vector unsigned char, 34142 vector unsigned char); 34143 vector bool short vec_mergel (vector bool short, vector bool short); 34144 vector pixel vec_mergel (vector pixel, vector pixel); 34145 vector signed short vec_mergel (vector signed short, 34146 vector signed short); 34147 vector unsigned short vec_mergel (vector unsigned short, 34148 vector unsigned short); 34149 vector float vec_mergel (vector float, vector float); 34150 vector bool int vec_mergel (vector bool int, vector bool int); 34151 vector signed int vec_mergel (vector signed int, vector signed int); 34152 vector unsigned int vec_mergel (vector unsigned int, 34153 vector unsigned int); 34154 34155 vector float vec_vmrglw (vector float, vector float); 34156 vector signed int vec_vmrglw (vector signed int, vector signed int); 34157 vector unsigned int vec_vmrglw (vector unsigned int, 34158 vector unsigned int); 34159 vector bool int vec_vmrglw (vector bool int, vector bool int); 34160 34161 vector bool short vec_vmrglh (vector bool short, vector bool short); 34162 vector signed short vec_vmrglh (vector signed short, 34163 vector signed short); 34164 vector unsigned short vec_vmrglh (vector unsigned short, 34165 vector unsigned short); 34166 vector pixel vec_vmrglh (vector pixel, vector pixel); 34167 34168 vector bool char vec_vmrglb (vector bool char, vector bool char); 34169 vector signed char vec_vmrglb (vector signed char, vector signed char); 34170 vector unsigned char vec_vmrglb (vector unsigned char, 34171 vector unsigned char); 34172 34173 vector unsigned short vec_mfvscr (void); 34174 34175 vector unsigned char vec_min (vector bool char, vector unsigned char); 34176 vector unsigned char vec_min (vector unsigned char, vector bool char); 34177 vector unsigned char vec_min (vector unsigned char, 34178 vector unsigned char); 34179 vector signed char vec_min (vector bool char, vector signed char); 34180 vector signed char vec_min (vector signed char, vector bool char); 34181 vector signed char vec_min (vector signed char, vector signed char); 34182 vector unsigned short vec_min (vector bool short, 34183 vector unsigned short); 34184 vector unsigned short vec_min (vector unsigned short, 34185 vector bool short); 34186 vector unsigned short vec_min (vector unsigned short, 34187 vector unsigned short); 34188 vector signed short vec_min (vector bool short, vector signed short); 34189 vector signed short vec_min (vector signed short, vector bool short); 34190 vector signed short vec_min (vector signed short, vector signed short); 34191 vector unsigned int vec_min (vector bool int, vector unsigned int); 34192 vector unsigned int vec_min (vector unsigned int, vector bool int); 34193 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 34194 vector signed int vec_min (vector bool int, vector signed int); 34195 vector signed int vec_min (vector signed int, vector bool int); 34196 vector signed int vec_min (vector signed int, vector signed int); 34197 vector float vec_min (vector float, vector float); 34198 34199 vector float vec_vminfp (vector float, vector float); 34200 34201 vector signed int vec_vminsw (vector bool int, vector signed int); 34202 vector signed int vec_vminsw (vector signed int, vector bool int); 34203 vector signed int vec_vminsw (vector signed int, vector signed int); 34204 34205 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 34206 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 34207 vector unsigned int vec_vminuw (vector unsigned int, 34208 vector unsigned int); 34209 34210 vector signed short vec_vminsh (vector bool short, vector signed short); 34211 vector signed short vec_vminsh (vector signed short, vector bool short); 34212 vector signed short vec_vminsh (vector signed short, 34213 vector signed short); 34214 34215 vector unsigned short vec_vminuh (vector bool short, 34216 vector unsigned short); 34217 vector unsigned short vec_vminuh (vector unsigned short, 34218 vector bool short); 34219 vector unsigned short vec_vminuh (vector unsigned short, 34220 vector unsigned short); 34221 34222 vector signed char vec_vminsb (vector bool char, vector signed char); 34223 vector signed char vec_vminsb (vector signed char, vector bool char); 34224 vector signed char vec_vminsb (vector signed char, vector signed char); 34225 34226 vector unsigned char vec_vminub (vector bool char, 34227 vector unsigned char); 34228 vector unsigned char vec_vminub (vector unsigned char, 34229 vector bool char); 34230 vector unsigned char vec_vminub (vector unsigned char, 34231 vector unsigned char); 34232 34233 vector signed short vec_mladd (vector signed short, 34234 vector signed short, 34235 vector signed short); 34236 vector signed short vec_mladd (vector signed short, 34237 vector unsigned short, 34238 vector unsigned short); 34239 vector signed short vec_mladd (vector unsigned short, 34240 vector signed short, 34241 vector signed short); 34242 vector unsigned short vec_mladd (vector unsigned short, 34243 vector unsigned short, 34244 vector unsigned short); 34245 34246 vector signed short vec_mradds (vector signed short, 34247 vector signed short, 34248 vector signed short); 34249 34250 vector unsigned int vec_msum (vector unsigned char, 34251 vector unsigned char, 34252 vector unsigned int); 34253 vector signed int vec_msum (vector signed char, 34254 vector unsigned char, 34255 vector signed int); 34256 vector unsigned int vec_msum (vector unsigned short, 34257 vector unsigned short, 34258 vector unsigned int); 34259 vector signed int vec_msum (vector signed short, 34260 vector signed short, 34261 vector signed int); 34262 34263 vector signed int vec_vmsumshm (vector signed short, 34264 vector signed short, 34265 vector signed int); 34266 34267 vector unsigned int vec_vmsumuhm (vector unsigned short, 34268 vector unsigned short, 34269 vector unsigned int); 34270 34271 vector signed int vec_vmsummbm (vector signed char, 34272 vector unsigned char, 34273 vector signed int); 34274 34275 vector unsigned int vec_vmsumubm (vector unsigned char, 34276 vector unsigned char, 34277 vector unsigned int); 34278 34279 vector unsigned int vec_msums (vector unsigned short, 34280 vector unsigned short, 34281 vector unsigned int); 34282 vector signed int vec_msums (vector signed short, 34283 vector signed short, 34284 vector signed int); 34285 34286 vector signed int vec_vmsumshs (vector signed short, 34287 vector signed short, 34288 vector signed int); 34289 34290 vector unsigned int vec_vmsumuhs (vector unsigned short, 34291 vector unsigned short, 34292 vector unsigned int); 34293 34294 void vec_mtvscr (vector signed int); 34295 void vec_mtvscr (vector unsigned int); 34296 void vec_mtvscr (vector bool int); 34297 void vec_mtvscr (vector signed short); 34298 void vec_mtvscr (vector unsigned short); 34299 void vec_mtvscr (vector bool short); 34300 void vec_mtvscr (vector pixel); 34301 void vec_mtvscr (vector signed char); 34302 void vec_mtvscr (vector unsigned char); 34303 void vec_mtvscr (vector bool char); 34304 34305 vector unsigned short vec_mule (vector unsigned char, 34306 vector unsigned char); 34307 vector signed short vec_mule (vector signed char, 34308 vector signed char); 34309 vector unsigned int vec_mule (vector unsigned short, 34310 vector unsigned short); 34311 vector signed int vec_mule (vector signed short, vector signed short); 34312 34313 vector signed int vec_vmulesh (vector signed short, 34314 vector signed short); 34315 34316 vector unsigned int vec_vmuleuh (vector unsigned short, 34317 vector unsigned short); 34318 34319 vector signed short vec_vmulesb (vector signed char, 34320 vector signed char); 34321 34322 vector unsigned short vec_vmuleub (vector unsigned char, 34323 vector unsigned char); 34324 34325 vector unsigned short vec_mulo (vector unsigned char, 34326 vector unsigned char); 34327 vector signed short vec_mulo (vector signed char, vector signed char); 34328 vector unsigned int vec_mulo (vector unsigned short, 34329 vector unsigned short); 34330 vector signed int vec_mulo (vector signed short, vector signed short); 34331 34332 vector signed int vec_vmulosh (vector signed short, 34333 vector signed short); 34334 34335 vector unsigned int vec_vmulouh (vector unsigned short, 34336 vector unsigned short); 34337 34338 vector signed short vec_vmulosb (vector signed char, 34339 vector signed char); 34340 34341 vector unsigned short vec_vmuloub (vector unsigned char, 34342 vector unsigned char); 34343 34344 vector float vec_nmsub (vector float, vector float, vector float); 34345 34346 vector float vec_nor (vector float, vector float); 34347 vector signed int vec_nor (vector signed int, vector signed int); 34348 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 34349 vector bool int vec_nor (vector bool int, vector bool int); 34350 vector signed short vec_nor (vector signed short, vector signed short); 34351 vector unsigned short vec_nor (vector unsigned short, 34352 vector unsigned short); 34353 vector bool short vec_nor (vector bool short, vector bool short); 34354 vector signed char vec_nor (vector signed char, vector signed char); 34355 vector unsigned char vec_nor (vector unsigned char, 34356 vector unsigned char); 34357 vector bool char vec_nor (vector bool char, vector bool char); 34358 34359 vector float vec_or (vector float, vector float); 34360 vector float vec_or (vector float, vector bool int); 34361 vector float vec_or (vector bool int, vector float); 34362 vector bool int vec_or (vector bool int, vector bool int); 34363 vector signed int vec_or (vector bool int, vector signed int); 34364 vector signed int vec_or (vector signed int, vector bool int); 34365 vector signed int vec_or (vector signed int, vector signed int); 34366 vector unsigned int vec_or (vector bool int, vector unsigned int); 34367 vector unsigned int vec_or (vector unsigned int, vector bool int); 34368 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 34369 vector bool short vec_or (vector bool short, vector bool short); 34370 vector signed short vec_or (vector bool short, vector signed short); 34371 vector signed short vec_or (vector signed short, vector bool short); 34372 vector signed short vec_or (vector signed short, vector signed short); 34373 vector unsigned short vec_or (vector bool short, vector unsigned short); 34374 vector unsigned short vec_or (vector unsigned short, vector bool short); 34375 vector unsigned short vec_or (vector unsigned short, 34376 vector unsigned short); 34377 vector signed char vec_or (vector bool char, vector signed char); 34378 vector bool char vec_or (vector bool char, vector bool char); 34379 vector signed char vec_or (vector signed char, vector bool char); 34380 vector signed char vec_or (vector signed char, vector signed char); 34381 vector unsigned char vec_or (vector bool char, vector unsigned char); 34382 vector unsigned char vec_or (vector unsigned char, vector bool char); 34383 vector unsigned char vec_or (vector unsigned char, 34384 vector unsigned char); 34385 34386 vector signed char vec_pack (vector signed short, vector signed short); 34387 vector unsigned char vec_pack (vector unsigned short, 34388 vector unsigned short); 34389 vector bool char vec_pack (vector bool short, vector bool short); 34390 vector signed short vec_pack (vector signed int, vector signed int); 34391 vector unsigned short vec_pack (vector unsigned int, 34392 vector unsigned int); 34393 vector bool short vec_pack (vector bool int, vector bool int); 34394 34395 vector bool short vec_vpkuwum (vector bool int, vector bool int); 34396 vector signed short vec_vpkuwum (vector signed int, vector signed int); 34397 vector unsigned short vec_vpkuwum (vector unsigned int, 34398 vector unsigned int); 34399 34400 vector bool char vec_vpkuhum (vector bool short, vector bool short); 34401 vector signed char vec_vpkuhum (vector signed short, 34402 vector signed short); 34403 vector unsigned char vec_vpkuhum (vector unsigned short, 34404 vector unsigned short); 34405 34406 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 34407 34408 vector unsigned char vec_packs (vector unsigned short, 34409 vector unsigned short); 34410 vector signed char vec_packs (vector signed short, vector signed short); 34411 vector unsigned short vec_packs (vector unsigned int, 34412 vector unsigned int); 34413 vector signed short vec_packs (vector signed int, vector signed int); 34414 34415 vector signed short vec_vpkswss (vector signed int, vector signed int); 34416 34417 vector unsigned short vec_vpkuwus (vector unsigned int, 34418 vector unsigned int); 34419 34420 vector signed char vec_vpkshss (vector signed short, 34421 vector signed short); 34422 34423 vector unsigned char vec_vpkuhus (vector unsigned short, 34424 vector unsigned short); 34425 34426 vector unsigned char vec_packsu (vector unsigned short, 34427 vector unsigned short); 34428 vector unsigned char vec_packsu (vector signed short, 34429 vector signed short); 34430 vector unsigned short vec_packsu (vector unsigned int, 34431 vector unsigned int); 34432 vector unsigned short vec_packsu (vector signed int, vector signed int); 34433 34434 vector unsigned short vec_vpkswus (vector signed int, 34435 vector signed int); 34436 34437 vector unsigned char vec_vpkshus (vector signed short, 34438 vector signed short); 34439 34440 vector float vec_perm (vector float, 34441 vector float, 34442 vector unsigned char); 34443 vector signed int vec_perm (vector signed int, 34444 vector signed int, 34445 vector unsigned char); 34446 vector unsigned int vec_perm (vector unsigned int, 34447 vector unsigned int, 34448 vector unsigned char); 34449 vector bool int vec_perm (vector bool int, 34450 vector bool int, 34451 vector unsigned char); 34452 vector signed short vec_perm (vector signed short, 34453 vector signed short, 34454 vector unsigned char); 34455 vector unsigned short vec_perm (vector unsigned short, 34456 vector unsigned short, 34457 vector unsigned char); 34458 vector bool short vec_perm (vector bool short, 34459 vector bool short, 34460 vector unsigned char); 34461 vector pixel vec_perm (vector pixel, 34462 vector pixel, 34463 vector unsigned char); 34464 vector signed char vec_perm (vector signed char, 34465 vector signed char, 34466 vector unsigned char); 34467 vector unsigned char vec_perm (vector unsigned char, 34468 vector unsigned char, 34469 vector unsigned char); 34470 vector bool char vec_perm (vector bool char, 34471 vector bool char, 34472 vector unsigned char); 34473 34474 vector float vec_re (vector float); 34475 34476 vector signed char vec_rl (vector signed char, 34477 vector unsigned char); 34478 vector unsigned char vec_rl (vector unsigned char, 34479 vector unsigned char); 34480 vector signed short vec_rl (vector signed short, vector unsigned short); 34481 vector unsigned short vec_rl (vector unsigned short, 34482 vector unsigned short); 34483 vector signed int vec_rl (vector signed int, vector unsigned int); 34484 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 34485 34486 vector signed int vec_vrlw (vector signed int, vector unsigned int); 34487 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 34488 34489 vector signed short vec_vrlh (vector signed short, 34490 vector unsigned short); 34491 vector unsigned short vec_vrlh (vector unsigned short, 34492 vector unsigned short); 34493 34494 vector signed char vec_vrlb (vector signed char, vector unsigned char); 34495 vector unsigned char vec_vrlb (vector unsigned char, 34496 vector unsigned char); 34497 34498 vector float vec_round (vector float); 34499 34500 vector float vec_rsqrte (vector float); 34501 34502 vector float vec_sel (vector float, vector float, vector bool int); 34503 vector float vec_sel (vector float, vector float, vector unsigned int); 34504 vector signed int vec_sel (vector signed int, 34505 vector signed int, 34506 vector bool int); 34507 vector signed int vec_sel (vector signed int, 34508 vector signed int, 34509 vector unsigned int); 34510 vector unsigned int vec_sel (vector unsigned int, 34511 vector unsigned int, 34512 vector bool int); 34513 vector unsigned int vec_sel (vector unsigned int, 34514 vector unsigned int, 34515 vector unsigned int); 34516 vector bool int vec_sel (vector bool int, 34517 vector bool int, 34518 vector bool int); 34519 vector bool int vec_sel (vector bool int, 34520 vector bool int, 34521 vector unsigned int); 34522 vector signed short vec_sel (vector signed short, 34523 vector signed short, 34524 vector bool short); 34525 vector signed short vec_sel (vector signed short, 34526 vector signed short, 34527 vector unsigned short); 34528 vector unsigned short vec_sel (vector unsigned short, 34529 vector unsigned short, 34530 vector bool short); 34531 vector unsigned short vec_sel (vector unsigned short, 34532 vector unsigned short, 34533 vector unsigned short); 34534 vector bool short vec_sel (vector bool short, 34535 vector bool short, 34536 vector bool short); 34537 vector bool short vec_sel (vector bool short, 34538 vector bool short, 34539 vector unsigned short); 34540 vector signed char vec_sel (vector signed char, 34541 vector signed char, 34542 vector bool char); 34543 vector signed char vec_sel (vector signed char, 34544 vector signed char, 34545 vector unsigned char); 34546 vector unsigned char vec_sel (vector unsigned char, 34547 vector unsigned char, 34548 vector bool char); 34549 vector unsigned char vec_sel (vector unsigned char, 34550 vector unsigned char, 34551 vector unsigned char); 34552 vector bool char vec_sel (vector bool char, 34553 vector bool char, 34554 vector bool char); 34555 vector bool char vec_sel (vector bool char, 34556 vector bool char, 34557 vector unsigned char); 34558 34559 vector signed char vec_sl (vector signed char, 34560 vector unsigned char); 34561 vector unsigned char vec_sl (vector unsigned char, 34562 vector unsigned char); 34563 vector signed short vec_sl (vector signed short, vector unsigned short); 34564 vector unsigned short vec_sl (vector unsigned short, 34565 vector unsigned short); 34566 vector signed int vec_sl (vector signed int, vector unsigned int); 34567 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 34568 34569 vector signed int vec_vslw (vector signed int, vector unsigned int); 34570 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 34571 34572 vector signed short vec_vslh (vector signed short, 34573 vector unsigned short); 34574 vector unsigned short vec_vslh (vector unsigned short, 34575 vector unsigned short); 34576 34577 vector signed char vec_vslb (vector signed char, vector unsigned char); 34578 vector unsigned char vec_vslb (vector unsigned char, 34579 vector unsigned char); 34580 34581 vector float vec_sld (vector float, vector float, const int); 34582 vector signed int vec_sld (vector signed int, 34583 vector signed int, 34584 const int); 34585 vector unsigned int vec_sld (vector unsigned int, 34586 vector unsigned int, 34587 const int); 34588 vector bool int vec_sld (vector bool int, 34589 vector bool int, 34590 const int); 34591 vector signed short vec_sld (vector signed short, 34592 vector signed short, 34593 const int); 34594 vector unsigned short vec_sld (vector unsigned short, 34595 vector unsigned short, 34596 const int); 34597 vector bool short vec_sld (vector bool short, 34598 vector bool short, 34599 const int); 34600 vector pixel vec_sld (vector pixel, 34601 vector pixel, 34602 const int); 34603 vector signed char vec_sld (vector signed char, 34604 vector signed char, 34605 const int); 34606 vector unsigned char vec_sld (vector unsigned char, 34607 vector unsigned char, 34608 const int); 34609 vector bool char vec_sld (vector bool char, 34610 vector bool char, 34611 const int); 34612 34613 vector signed int vec_sll (vector signed int, 34614 vector unsigned int); 34615 vector signed int vec_sll (vector signed int, 34616 vector unsigned short); 34617 vector signed int vec_sll (vector signed int, 34618 vector unsigned char); 34619 vector unsigned int vec_sll (vector unsigned int, 34620 vector unsigned int); 34621 vector unsigned int vec_sll (vector unsigned int, 34622 vector unsigned short); 34623 vector unsigned int vec_sll (vector unsigned int, 34624 vector unsigned char); 34625 vector bool int vec_sll (vector bool int, 34626 vector unsigned int); 34627 vector bool int vec_sll (vector bool int, 34628 vector unsigned short); 34629 vector bool int vec_sll (vector bool int, 34630 vector unsigned char); 34631 vector signed short vec_sll (vector signed short, 34632 vector unsigned int); 34633 vector signed short vec_sll (vector signed short, 34634 vector unsigned short); 34635 vector signed short vec_sll (vector signed short, 34636 vector unsigned char); 34637 vector unsigned short vec_sll (vector unsigned short, 34638 vector unsigned int); 34639 vector unsigned short vec_sll (vector unsigned short, 34640 vector unsigned short); 34641 vector unsigned short vec_sll (vector unsigned short, 34642 vector unsigned char); 34643 vector bool short vec_sll (vector bool short, vector unsigned int); 34644 vector bool short vec_sll (vector bool short, vector unsigned short); 34645 vector bool short vec_sll (vector bool short, vector unsigned char); 34646 vector pixel vec_sll (vector pixel, vector unsigned int); 34647 vector pixel vec_sll (vector pixel, vector unsigned short); 34648 vector pixel vec_sll (vector pixel, vector unsigned char); 34649 vector signed char vec_sll (vector signed char, vector unsigned int); 34650 vector signed char vec_sll (vector signed char, vector unsigned short); 34651 vector signed char vec_sll (vector signed char, vector unsigned char); 34652 vector unsigned char vec_sll (vector unsigned char, 34653 vector unsigned int); 34654 vector unsigned char vec_sll (vector unsigned char, 34655 vector unsigned short); 34656 vector unsigned char vec_sll (vector unsigned char, 34657 vector unsigned char); 34658 vector bool char vec_sll (vector bool char, vector unsigned int); 34659 vector bool char vec_sll (vector bool char, vector unsigned short); 34660 vector bool char vec_sll (vector bool char, vector unsigned char); 34661 34662 vector float vec_slo (vector float, vector signed char); 34663 vector float vec_slo (vector float, vector unsigned char); 34664 vector signed int vec_slo (vector signed int, vector signed char); 34665 vector signed int vec_slo (vector signed int, vector unsigned char); 34666 vector unsigned int vec_slo (vector unsigned int, vector signed char); 34667 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 34668 vector signed short vec_slo (vector signed short, vector signed char); 34669 vector signed short vec_slo (vector signed short, vector unsigned char); 34670 vector unsigned short vec_slo (vector unsigned short, 34671 vector signed char); 34672 vector unsigned short vec_slo (vector unsigned short, 34673 vector unsigned char); 34674 vector pixel vec_slo (vector pixel, vector signed char); 34675 vector pixel vec_slo (vector pixel, vector unsigned char); 34676 vector signed char vec_slo (vector signed char, vector signed char); 34677 vector signed char vec_slo (vector signed char, vector unsigned char); 34678 vector unsigned char vec_slo (vector unsigned char, vector signed char); 34679 vector unsigned char vec_slo (vector unsigned char, 34680 vector unsigned char); 34681 34682 vector signed char vec_splat (vector signed char, const int); 34683 vector unsigned char vec_splat (vector unsigned char, const int); 34684 vector bool char vec_splat (vector bool char, const int); 34685 vector signed short vec_splat (vector signed short, const int); 34686 vector unsigned short vec_splat (vector unsigned short, const int); 34687 vector bool short vec_splat (vector bool short, const int); 34688 vector pixel vec_splat (vector pixel, const int); 34689 vector float vec_splat (vector float, const int); 34690 vector signed int vec_splat (vector signed int, const int); 34691 vector unsigned int vec_splat (vector unsigned int, const int); 34692 vector bool int vec_splat (vector bool int, const int); 34693 34694 vector float vec_vspltw (vector float, const int); 34695 vector signed int vec_vspltw (vector signed int, const int); 34696 vector unsigned int vec_vspltw (vector unsigned int, const int); 34697 vector bool int vec_vspltw (vector bool int, const int); 34698 34699 vector bool short vec_vsplth (vector bool short, const int); 34700 vector signed short vec_vsplth (vector signed short, const int); 34701 vector unsigned short vec_vsplth (vector unsigned short, const int); 34702 vector pixel vec_vsplth (vector pixel, const int); 34703 34704 vector signed char vec_vspltb (vector signed char, const int); 34705 vector unsigned char vec_vspltb (vector unsigned char, const int); 34706 vector bool char vec_vspltb (vector bool char, const int); 34707 34708 vector signed char vec_splat_s8 (const int); 34709 34710 vector signed short vec_splat_s16 (const int); 34711 34712 vector signed int vec_splat_s32 (const int); 34713 34714 vector unsigned char vec_splat_u8 (const int); 34715 34716 vector unsigned short vec_splat_u16 (const int); 34717 34718 vector unsigned int vec_splat_u32 (const int); 34719 34720 vector signed char vec_sr (vector signed char, vector unsigned char); 34721 vector unsigned char vec_sr (vector unsigned char, 34722 vector unsigned char); 34723 vector signed short vec_sr (vector signed short, 34724 vector unsigned short); 34725 vector unsigned short vec_sr (vector unsigned short, 34726 vector unsigned short); 34727 vector signed int vec_sr (vector signed int, vector unsigned int); 34728 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 34729 34730 vector signed int vec_vsrw (vector signed int, vector unsigned int); 34731 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 34732 34733 vector signed short vec_vsrh (vector signed short, 34734 vector unsigned short); 34735 vector unsigned short vec_vsrh (vector unsigned short, 34736 vector unsigned short); 34737 34738 vector signed char vec_vsrb (vector signed char, vector unsigned char); 34739 vector unsigned char vec_vsrb (vector unsigned char, 34740 vector unsigned char); 34741 34742 vector signed char vec_sra (vector signed char, vector unsigned char); 34743 vector unsigned char vec_sra (vector unsigned char, 34744 vector unsigned char); 34745 vector signed short vec_sra (vector signed short, 34746 vector unsigned short); 34747 vector unsigned short vec_sra (vector unsigned short, 34748 vector unsigned short); 34749 vector signed int vec_sra (vector signed int, vector unsigned int); 34750 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 34751 34752 vector signed int vec_vsraw (vector signed int, vector unsigned int); 34753 vector unsigned int vec_vsraw (vector unsigned int, 34754 vector unsigned int); 34755 34756 vector signed short vec_vsrah (vector signed short, 34757 vector unsigned short); 34758 vector unsigned short vec_vsrah (vector unsigned short, 34759 vector unsigned short); 34760 34761 vector signed char vec_vsrab (vector signed char, vector unsigned char); 34762 vector unsigned char vec_vsrab (vector unsigned char, 34763 vector unsigned char); 34764 34765 vector signed int vec_srl (vector signed int, vector unsigned int); 34766 vector signed int vec_srl (vector signed int, vector unsigned short); 34767 vector signed int vec_srl (vector signed int, vector unsigned char); 34768 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 34769 vector unsigned int vec_srl (vector unsigned int, 34770 vector unsigned short); 34771 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 34772 vector bool int vec_srl (vector bool int, vector unsigned int); 34773 vector bool int vec_srl (vector bool int, vector unsigned short); 34774 vector bool int vec_srl (vector bool int, vector unsigned char); 34775 vector signed short vec_srl (vector signed short, vector unsigned int); 34776 vector signed short vec_srl (vector signed short, 34777 vector unsigned short); 34778 vector signed short vec_srl (vector signed short, vector unsigned char); 34779 vector unsigned short vec_srl (vector unsigned short, 34780 vector unsigned int); 34781 vector unsigned short vec_srl (vector unsigned short, 34782 vector unsigned short); 34783 vector unsigned short vec_srl (vector unsigned short, 34784 vector unsigned char); 34785 vector bool short vec_srl (vector bool short, vector unsigned int); 34786 vector bool short vec_srl (vector bool short, vector unsigned short); 34787 vector bool short vec_srl (vector bool short, vector unsigned char); 34788 vector pixel vec_srl (vector pixel, vector unsigned int); 34789 vector pixel vec_srl (vector pixel, vector unsigned short); 34790 vector pixel vec_srl (vector pixel, vector unsigned char); 34791 vector signed char vec_srl (vector signed char, vector unsigned int); 34792 vector signed char vec_srl (vector signed char, vector unsigned short); 34793 vector signed char vec_srl (vector signed char, vector unsigned char); 34794 vector unsigned char vec_srl (vector unsigned char, 34795 vector unsigned int); 34796 vector unsigned char vec_srl (vector unsigned char, 34797 vector unsigned short); 34798 vector unsigned char vec_srl (vector unsigned char, 34799 vector unsigned char); 34800 vector bool char vec_srl (vector bool char, vector unsigned int); 34801 vector bool char vec_srl (vector bool char, vector unsigned short); 34802 vector bool char vec_srl (vector bool char, vector unsigned char); 34803 34804 vector float vec_sro (vector float, vector signed char); 34805 vector float vec_sro (vector float, vector unsigned char); 34806 vector signed int vec_sro (vector signed int, vector signed char); 34807 vector signed int vec_sro (vector signed int, vector unsigned char); 34808 vector unsigned int vec_sro (vector unsigned int, vector signed char); 34809 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 34810 vector signed short vec_sro (vector signed short, vector signed char); 34811 vector signed short vec_sro (vector signed short, vector unsigned char); 34812 vector unsigned short vec_sro (vector unsigned short, 34813 vector signed char); 34814 vector unsigned short vec_sro (vector unsigned short, 34815 vector unsigned char); 34816 vector pixel vec_sro (vector pixel, vector signed char); 34817 vector pixel vec_sro (vector pixel, vector unsigned char); 34818 vector signed char vec_sro (vector signed char, vector signed char); 34819 vector signed char vec_sro (vector signed char, vector unsigned char); 34820 vector unsigned char vec_sro (vector unsigned char, vector signed char); 34821 vector unsigned char vec_sro (vector unsigned char, 34822 vector unsigned char); 34823 34824 void vec_st (vector float, int, vector float *); 34825 void vec_st (vector float, int, float *); 34826 void vec_st (vector signed int, int, vector signed int *); 34827 void vec_st (vector signed int, int, int *); 34828 void vec_st (vector unsigned int, int, vector unsigned int *); 34829 void vec_st (vector unsigned int, int, unsigned int *); 34830 void vec_st (vector bool int, int, vector bool int *); 34831 void vec_st (vector bool int, int, unsigned int *); 34832 void vec_st (vector bool int, int, int *); 34833 void vec_st (vector signed short, int, vector signed short *); 34834 void vec_st (vector signed short, int, short *); 34835 void vec_st (vector unsigned short, int, vector unsigned short *); 34836 void vec_st (vector unsigned short, int, unsigned short *); 34837 void vec_st (vector bool short, int, vector bool short *); 34838 void vec_st (vector bool short, int, unsigned short *); 34839 void vec_st (vector pixel, int, vector pixel *); 34840 void vec_st (vector pixel, int, unsigned short *); 34841 void vec_st (vector pixel, int, short *); 34842 void vec_st (vector bool short, int, short *); 34843 void vec_st (vector signed char, int, vector signed char *); 34844 void vec_st (vector signed char, int, signed char *); 34845 void vec_st (vector unsigned char, int, vector unsigned char *); 34846 void vec_st (vector unsigned char, int, unsigned char *); 34847 void vec_st (vector bool char, int, vector bool char *); 34848 void vec_st (vector bool char, int, unsigned char *); 34849 void vec_st (vector bool char, int, signed char *); 34850 34851 void vec_ste (vector signed char, int, signed char *); 34852 void vec_ste (vector unsigned char, int, unsigned char *); 34853 void vec_ste (vector bool char, int, signed char *); 34854 void vec_ste (vector bool char, int, unsigned char *); 34855 void vec_ste (vector signed short, int, short *); 34856 void vec_ste (vector unsigned short, int, unsigned short *); 34857 void vec_ste (vector bool short, int, short *); 34858 void vec_ste (vector bool short, int, unsigned short *); 34859 void vec_ste (vector pixel, int, short *); 34860 void vec_ste (vector pixel, int, unsigned short *); 34861 void vec_ste (vector float, int, float *); 34862 void vec_ste (vector signed int, int, int *); 34863 void vec_ste (vector unsigned int, int, unsigned int *); 34864 void vec_ste (vector bool int, int, int *); 34865 void vec_ste (vector bool int, int, unsigned int *); 34866 34867 void vec_stvewx (vector float, int, float *); 34868 void vec_stvewx (vector signed int, int, int *); 34869 void vec_stvewx (vector unsigned int, int, unsigned int *); 34870 void vec_stvewx (vector bool int, int, int *); 34871 void vec_stvewx (vector bool int, int, unsigned int *); 34872 34873 void vec_stvehx (vector signed short, int, short *); 34874 void vec_stvehx (vector unsigned short, int, unsigned short *); 34875 void vec_stvehx (vector bool short, int, short *); 34876 void vec_stvehx (vector bool short, int, unsigned short *); 34877 void vec_stvehx (vector pixel, int, short *); 34878 void vec_stvehx (vector pixel, int, unsigned short *); 34879 34880 void vec_stvebx (vector signed char, int, signed char *); 34881 void vec_stvebx (vector unsigned char, int, unsigned char *); 34882 void vec_stvebx (vector bool char, int, signed char *); 34883 void vec_stvebx (vector bool char, int, unsigned char *); 34884 34885 void vec_stl (vector float, int, vector float *); 34886 void vec_stl (vector float, int, float *); 34887 void vec_stl (vector signed int, int, vector signed int *); 34888 void vec_stl (vector signed int, int, int *); 34889 void vec_stl (vector unsigned int, int, vector unsigned int *); 34890 void vec_stl (vector unsigned int, int, unsigned int *); 34891 void vec_stl (vector bool int, int, vector bool int *); 34892 void vec_stl (vector bool int, int, unsigned int *); 34893 void vec_stl (vector bool int, int, int *); 34894 void vec_stl (vector signed short, int, vector signed short *); 34895 void vec_stl (vector signed short, int, short *); 34896 void vec_stl (vector unsigned short, int, vector unsigned short *); 34897 void vec_stl (vector unsigned short, int, unsigned short *); 34898 void vec_stl (vector bool short, int, vector bool short *); 34899 void vec_stl (vector bool short, int, unsigned short *); 34900 void vec_stl (vector bool short, int, short *); 34901 void vec_stl (vector pixel, int, vector pixel *); 34902 void vec_stl (vector pixel, int, unsigned short *); 34903 void vec_stl (vector pixel, int, short *); 34904 void vec_stl (vector signed char, int, vector signed char *); 34905 void vec_stl (vector signed char, int, signed char *); 34906 void vec_stl (vector unsigned char, int, vector unsigned char *); 34907 void vec_stl (vector unsigned char, int, unsigned char *); 34908 void vec_stl (vector bool char, int, vector bool char *); 34909 void vec_stl (vector bool char, int, unsigned char *); 34910 void vec_stl (vector bool char, int, signed char *); 34911 34912 vector signed char vec_sub (vector bool char, vector signed char); 34913 vector signed char vec_sub (vector signed char, vector bool char); 34914 vector signed char vec_sub (vector signed char, vector signed char); 34915 vector unsigned char vec_sub (vector bool char, vector unsigned char); 34916 vector unsigned char vec_sub (vector unsigned char, vector bool char); 34917 vector unsigned char vec_sub (vector unsigned char, 34918 vector unsigned char); 34919 vector signed short vec_sub (vector bool short, vector signed short); 34920 vector signed short vec_sub (vector signed short, vector bool short); 34921 vector signed short vec_sub (vector signed short, vector signed short); 34922 vector unsigned short vec_sub (vector bool short, 34923 vector unsigned short); 34924 vector unsigned short vec_sub (vector unsigned short, 34925 vector bool short); 34926 vector unsigned short vec_sub (vector unsigned short, 34927 vector unsigned short); 34928 vector signed int vec_sub (vector bool int, vector signed int); 34929 vector signed int vec_sub (vector signed int, vector bool int); 34930 vector signed int vec_sub (vector signed int, vector signed int); 34931 vector unsigned int vec_sub (vector bool int, vector unsigned int); 34932 vector unsigned int vec_sub (vector unsigned int, vector bool int); 34933 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 34934 vector float vec_sub (vector float, vector float); 34935 34936 vector float vec_vsubfp (vector float, vector float); 34937 34938 vector signed int vec_vsubuwm (vector bool int, vector signed int); 34939 vector signed int vec_vsubuwm (vector signed int, vector bool int); 34940 vector signed int vec_vsubuwm (vector signed int, vector signed int); 34941 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 34942 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 34943 vector unsigned int vec_vsubuwm (vector unsigned int, 34944 vector unsigned int); 34945 34946 vector signed short vec_vsubuhm (vector bool short, 34947 vector signed short); 34948 vector signed short vec_vsubuhm (vector signed short, 34949 vector bool short); 34950 vector signed short vec_vsubuhm (vector signed short, 34951 vector signed short); 34952 vector unsigned short vec_vsubuhm (vector bool short, 34953 vector unsigned short); 34954 vector unsigned short vec_vsubuhm (vector unsigned short, 34955 vector bool short); 34956 vector unsigned short vec_vsubuhm (vector unsigned short, 34957 vector unsigned short); 34958 34959 vector signed char vec_vsububm (vector bool char, vector signed char); 34960 vector signed char vec_vsububm (vector signed char, vector bool char); 34961 vector signed char vec_vsububm (vector signed char, vector signed char); 34962 vector unsigned char vec_vsububm (vector bool char, 34963 vector unsigned char); 34964 vector unsigned char vec_vsububm (vector unsigned char, 34965 vector bool char); 34966 vector unsigned char vec_vsububm (vector unsigned char, 34967 vector unsigned char); 34968 34969 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 34970 34971 vector unsigned char vec_subs (vector bool char, vector unsigned char); 34972 vector unsigned char vec_subs (vector unsigned char, vector bool char); 34973 vector unsigned char vec_subs (vector unsigned char, 34974 vector unsigned char); 34975 vector signed char vec_subs (vector bool char, vector signed char); 34976 vector signed char vec_subs (vector signed char, vector bool char); 34977 vector signed char vec_subs (vector signed char, vector signed char); 34978 vector unsigned short vec_subs (vector bool short, 34979 vector unsigned short); 34980 vector unsigned short vec_subs (vector unsigned short, 34981 vector bool short); 34982 vector unsigned short vec_subs (vector unsigned short, 34983 vector unsigned short); 34984 vector signed short vec_subs (vector bool short, vector signed short); 34985 vector signed short vec_subs (vector signed short, vector bool short); 34986 vector signed short vec_subs (vector signed short, vector signed short); 34987 vector unsigned int vec_subs (vector bool int, vector unsigned int); 34988 vector unsigned int vec_subs (vector unsigned int, vector bool int); 34989 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 34990 vector signed int vec_subs (vector bool int, vector signed int); 34991 vector signed int vec_subs (vector signed int, vector bool int); 34992 vector signed int vec_subs (vector signed int, vector signed int); 34993 34994 vector signed int vec_vsubsws (vector bool int, vector signed int); 34995 vector signed int vec_vsubsws (vector signed int, vector bool int); 34996 vector signed int vec_vsubsws (vector signed int, vector signed int); 34997 34998 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 34999 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 35000 vector unsigned int vec_vsubuws (vector unsigned int, 35001 vector unsigned int); 35002 35003 vector signed short vec_vsubshs (vector bool short, 35004 vector signed short); 35005 vector signed short vec_vsubshs (vector signed short, 35006 vector bool short); 35007 vector signed short vec_vsubshs (vector signed short, 35008 vector signed short); 35009 35010 vector unsigned short vec_vsubuhs (vector bool short, 35011 vector unsigned short); 35012 vector unsigned short vec_vsubuhs (vector unsigned short, 35013 vector bool short); 35014 vector unsigned short vec_vsubuhs (vector unsigned short, 35015 vector unsigned short); 35016 35017 vector signed char vec_vsubsbs (vector bool char, vector signed char); 35018 vector signed char vec_vsubsbs (vector signed char, vector bool char); 35019 vector signed char vec_vsubsbs (vector signed char, vector signed char); 35020 35021 vector unsigned char vec_vsububs (vector bool char, 35022 vector unsigned char); 35023 vector unsigned char vec_vsububs (vector unsigned char, 35024 vector bool char); 35025 vector unsigned char vec_vsububs (vector unsigned char, 35026 vector unsigned char); 35027 35028 vector unsigned int vec_sum4s (vector unsigned char, 35029 vector unsigned int); 35030 vector signed int vec_sum4s (vector signed char, vector signed int); 35031 vector signed int vec_sum4s (vector signed short, vector signed int); 35032 35033 vector signed int vec_vsum4shs (vector signed short, vector signed int); 35034 35035 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 35036 35037 vector unsigned int vec_vsum4ubs (vector unsigned char, 35038 vector unsigned int); 35039 35040 vector signed int vec_sum2s (vector signed int, vector signed int); 35041 35042 vector signed int vec_sums (vector signed int, vector signed int); 35043 35044 vector float vec_trunc (vector float); 35045 35046 vector signed short vec_unpackh (vector signed char); 35047 vector bool short vec_unpackh (vector bool char); 35048 vector signed int vec_unpackh (vector signed short); 35049 vector bool int vec_unpackh (vector bool short); 35050 vector unsigned int vec_unpackh (vector pixel); 35051 35052 vector bool int vec_vupkhsh (vector bool short); 35053 vector signed int vec_vupkhsh (vector signed short); 35054 35055 vector unsigned int vec_vupkhpx (vector pixel); 35056 35057 vector bool short vec_vupkhsb (vector bool char); 35058 vector signed short vec_vupkhsb (vector signed char); 35059 35060 vector signed short vec_unpackl (vector signed char); 35061 vector bool short vec_unpackl (vector bool char); 35062 vector unsigned int vec_unpackl (vector pixel); 35063 vector signed int vec_unpackl (vector signed short); 35064 vector bool int vec_unpackl (vector bool short); 35065 35066 vector unsigned int vec_vupklpx (vector pixel); 35067 35068 vector bool int vec_vupklsh (vector bool short); 35069 vector signed int vec_vupklsh (vector signed short); 35070 35071 vector bool short vec_vupklsb (vector bool char); 35072 vector signed short vec_vupklsb (vector signed char); 35073 35074 vector float vec_xor (vector float, vector float); 35075 vector float vec_xor (vector float, vector bool int); 35076 vector float vec_xor (vector bool int, vector float); 35077 vector bool int vec_xor (vector bool int, vector bool int); 35078 vector signed int vec_xor (vector bool int, vector signed int); 35079 vector signed int vec_xor (vector signed int, vector bool int); 35080 vector signed int vec_xor (vector signed int, vector signed int); 35081 vector unsigned int vec_xor (vector bool int, vector unsigned int); 35082 vector unsigned int vec_xor (vector unsigned int, vector bool int); 35083 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 35084 vector bool short vec_xor (vector bool short, vector bool short); 35085 vector signed short vec_xor (vector bool short, vector signed short); 35086 vector signed short vec_xor (vector signed short, vector bool short); 35087 vector signed short vec_xor (vector signed short, vector signed short); 35088 vector unsigned short vec_xor (vector bool short, 35089 vector unsigned short); 35090 vector unsigned short vec_xor (vector unsigned short, 35091 vector bool short); 35092 vector unsigned short vec_xor (vector unsigned short, 35093 vector unsigned short); 35094 vector signed char vec_xor (vector bool char, vector signed char); 35095 vector bool char vec_xor (vector bool char, vector bool char); 35096 vector signed char vec_xor (vector signed char, vector bool char); 35097 vector signed char vec_xor (vector signed char, vector signed char); 35098 vector unsigned char vec_xor (vector bool char, vector unsigned char); 35099 vector unsigned char vec_xor (vector unsigned char, vector bool char); 35100 vector unsigned char vec_xor (vector unsigned char, 35101 vector unsigned char); 35102 35103 int vec_all_eq (vector signed char, vector bool char); 35104 int vec_all_eq (vector signed char, vector signed char); 35105 int vec_all_eq (vector unsigned char, vector bool char); 35106 int vec_all_eq (vector unsigned char, vector unsigned char); 35107 int vec_all_eq (vector bool char, vector bool char); 35108 int vec_all_eq (vector bool char, vector unsigned char); 35109 int vec_all_eq (vector bool char, vector signed char); 35110 int vec_all_eq (vector signed short, vector bool short); 35111 int vec_all_eq (vector signed short, vector signed short); 35112 int vec_all_eq (vector unsigned short, vector bool short); 35113 int vec_all_eq (vector unsigned short, vector unsigned short); 35114 int vec_all_eq (vector bool short, vector bool short); 35115 int vec_all_eq (vector bool short, vector unsigned short); 35116 int vec_all_eq (vector bool short, vector signed short); 35117 int vec_all_eq (vector pixel, vector pixel); 35118 int vec_all_eq (vector signed int, vector bool int); 35119 int vec_all_eq (vector signed int, vector signed int); 35120 int vec_all_eq (vector unsigned int, vector bool int); 35121 int vec_all_eq (vector unsigned int, vector unsigned int); 35122 int vec_all_eq (vector bool int, vector bool int); 35123 int vec_all_eq (vector bool int, vector unsigned int); 35124 int vec_all_eq (vector bool int, vector signed int); 35125 int vec_all_eq (vector float, vector float); 35126 35127 int vec_all_ge (vector bool char, vector unsigned char); 35128 int vec_all_ge (vector unsigned char, vector bool char); 35129 int vec_all_ge (vector unsigned char, vector unsigned char); 35130 int vec_all_ge (vector bool char, vector signed char); 35131 int vec_all_ge (vector signed char, vector bool char); 35132 int vec_all_ge (vector signed char, vector signed char); 35133 int vec_all_ge (vector bool short, vector unsigned short); 35134 int vec_all_ge (vector unsigned short, vector bool short); 35135 int vec_all_ge (vector unsigned short, vector unsigned short); 35136 int vec_all_ge (vector signed short, vector signed short); 35137 int vec_all_ge (vector bool short, vector signed short); 35138 int vec_all_ge (vector signed short, vector bool short); 35139 int vec_all_ge (vector bool int, vector unsigned int); 35140 int vec_all_ge (vector unsigned int, vector bool int); 35141 int vec_all_ge (vector unsigned int, vector unsigned int); 35142 int vec_all_ge (vector bool int, vector signed int); 35143 int vec_all_ge (vector signed int, vector bool int); 35144 int vec_all_ge (vector signed int, vector signed int); 35145 int vec_all_ge (vector float, vector float); 35146 35147 int vec_all_gt (vector bool char, vector unsigned char); 35148 int vec_all_gt (vector unsigned char, vector bool char); 35149 int vec_all_gt (vector unsigned char, vector unsigned char); 35150 int vec_all_gt (vector bool char, vector signed char); 35151 int vec_all_gt (vector signed char, vector bool char); 35152 int vec_all_gt (vector signed char, vector signed char); 35153 int vec_all_gt (vector bool short, vector unsigned short); 35154 int vec_all_gt (vector unsigned short, vector bool short); 35155 int vec_all_gt (vector unsigned short, vector unsigned short); 35156 int vec_all_gt (vector bool short, vector signed short); 35157 int vec_all_gt (vector signed short, vector bool short); 35158 int vec_all_gt (vector signed short, vector signed short); 35159 int vec_all_gt (vector bool int, vector unsigned int); 35160 int vec_all_gt (vector unsigned int, vector bool int); 35161 int vec_all_gt (vector unsigned int, vector unsigned int); 35162 int vec_all_gt (vector bool int, vector signed int); 35163 int vec_all_gt (vector signed int, vector bool int); 35164 int vec_all_gt (vector signed int, vector signed int); 35165 int vec_all_gt (vector float, vector float); 35166 35167 int vec_all_in (vector float, vector float); 35168 35169 int vec_all_le (vector bool char, vector unsigned char); 35170 int vec_all_le (vector unsigned char, vector bool char); 35171 int vec_all_le (vector unsigned char, vector unsigned char); 35172 int vec_all_le (vector bool char, vector signed char); 35173 int vec_all_le (vector signed char, vector bool char); 35174 int vec_all_le (vector signed char, vector signed char); 35175 int vec_all_le (vector bool short, vector unsigned short); 35176 int vec_all_le (vector unsigned short, vector bool short); 35177 int vec_all_le (vector unsigned short, vector unsigned short); 35178 int vec_all_le (vector bool short, vector signed short); 35179 int vec_all_le (vector signed short, vector bool short); 35180 int vec_all_le (vector signed short, vector signed short); 35181 int vec_all_le (vector bool int, vector unsigned int); 35182 int vec_all_le (vector unsigned int, vector bool int); 35183 int vec_all_le (vector unsigned int, vector unsigned int); 35184 int vec_all_le (vector bool int, vector signed int); 35185 int vec_all_le (vector signed int, vector bool int); 35186 int vec_all_le (vector signed int, vector signed int); 35187 int vec_all_le (vector float, vector float); 35188 35189 int vec_all_lt (vector bool char, vector unsigned char); 35190 int vec_all_lt (vector unsigned char, vector bool char); 35191 int vec_all_lt (vector unsigned char, vector unsigned char); 35192 int vec_all_lt (vector bool char, vector signed char); 35193 int vec_all_lt (vector signed char, vector bool char); 35194 int vec_all_lt (vector signed char, vector signed char); 35195 int vec_all_lt (vector bool short, vector unsigned short); 35196 int vec_all_lt (vector unsigned short, vector bool short); 35197 int vec_all_lt (vector unsigned short, vector unsigned short); 35198 int vec_all_lt (vector bool short, vector signed short); 35199 int vec_all_lt (vector signed short, vector bool short); 35200 int vec_all_lt (vector signed short, vector signed short); 35201 int vec_all_lt (vector bool int, vector unsigned int); 35202 int vec_all_lt (vector unsigned int, vector bool int); 35203 int vec_all_lt (vector unsigned int, vector unsigned int); 35204 int vec_all_lt (vector bool int, vector signed int); 35205 int vec_all_lt (vector signed int, vector bool int); 35206 int vec_all_lt (vector signed int, vector signed int); 35207 int vec_all_lt (vector float, vector float); 35208 35209 int vec_all_nan (vector float); 35210 35211 int vec_all_ne (vector signed char, vector bool char); 35212 int vec_all_ne (vector signed char, vector signed char); 35213 int vec_all_ne (vector unsigned char, vector bool char); 35214 int vec_all_ne (vector unsigned char, vector unsigned char); 35215 int vec_all_ne (vector bool char, vector bool char); 35216 int vec_all_ne (vector bool char, vector unsigned char); 35217 int vec_all_ne (vector bool char, vector signed char); 35218 int vec_all_ne (vector signed short, vector bool short); 35219 int vec_all_ne (vector signed short, vector signed short); 35220 int vec_all_ne (vector unsigned short, vector bool short); 35221 int vec_all_ne (vector unsigned short, vector unsigned short); 35222 int vec_all_ne (vector bool short, vector bool short); 35223 int vec_all_ne (vector bool short, vector unsigned short); 35224 int vec_all_ne (vector bool short, vector signed short); 35225 int vec_all_ne (vector pixel, vector pixel); 35226 int vec_all_ne (vector signed int, vector bool int); 35227 int vec_all_ne (vector signed int, vector signed int); 35228 int vec_all_ne (vector unsigned int, vector bool int); 35229 int vec_all_ne (vector unsigned int, vector unsigned int); 35230 int vec_all_ne (vector bool int, vector bool int); 35231 int vec_all_ne (vector bool int, vector unsigned int); 35232 int vec_all_ne (vector bool int, vector signed int); 35233 int vec_all_ne (vector float, vector float); 35234 35235 int vec_all_nge (vector float, vector float); 35236 35237 int vec_all_ngt (vector float, vector float); 35238 35239 int vec_all_nle (vector float, vector float); 35240 35241 int vec_all_nlt (vector float, vector float); 35242 35243 int vec_all_numeric (vector float); 35244 35245 int vec_any_eq (vector signed char, vector bool char); 35246 int vec_any_eq (vector signed char, vector signed char); 35247 int vec_any_eq (vector unsigned char, vector bool char); 35248 int vec_any_eq (vector unsigned char, vector unsigned char); 35249 int vec_any_eq (vector bool char, vector bool char); 35250 int vec_any_eq (vector bool char, vector unsigned char); 35251 int vec_any_eq (vector bool char, vector signed char); 35252 int vec_any_eq (vector signed short, vector bool short); 35253 int vec_any_eq (vector signed short, vector signed short); 35254 int vec_any_eq (vector unsigned short, vector bool short); 35255 int vec_any_eq (vector unsigned short, vector unsigned short); 35256 int vec_any_eq (vector bool short, vector bool short); 35257 int vec_any_eq (vector bool short, vector unsigned short); 35258 int vec_any_eq (vector bool short, vector signed short); 35259 int vec_any_eq (vector pixel, vector pixel); 35260 int vec_any_eq (vector signed int, vector bool int); 35261 int vec_any_eq (vector signed int, vector signed int); 35262 int vec_any_eq (vector unsigned int, vector bool int); 35263 int vec_any_eq (vector unsigned int, vector unsigned int); 35264 int vec_any_eq (vector bool int, vector bool int); 35265 int vec_any_eq (vector bool int, vector unsigned int); 35266 int vec_any_eq (vector bool int, vector signed int); 35267 int vec_any_eq (vector float, vector float); 35268 35269 int vec_any_ge (vector signed char, vector bool char); 35270 int vec_any_ge (vector unsigned char, vector bool char); 35271 int vec_any_ge (vector unsigned char, vector unsigned char); 35272 int vec_any_ge (vector signed char, vector signed char); 35273 int vec_any_ge (vector bool char, vector unsigned char); 35274 int vec_any_ge (vector bool char, vector signed char); 35275 int vec_any_ge (vector unsigned short, vector bool short); 35276 int vec_any_ge (vector unsigned short, vector unsigned short); 35277 int vec_any_ge (vector signed short, vector signed short); 35278 int vec_any_ge (vector signed short, vector bool short); 35279 int vec_any_ge (vector bool short, vector unsigned short); 35280 int vec_any_ge (vector bool short, vector signed short); 35281 int vec_any_ge (vector signed int, vector bool int); 35282 int vec_any_ge (vector unsigned int, vector bool int); 35283 int vec_any_ge (vector unsigned int, vector unsigned int); 35284 int vec_any_ge (vector signed int, vector signed int); 35285 int vec_any_ge (vector bool int, vector unsigned int); 35286 int vec_any_ge (vector bool int, vector signed int); 35287 int vec_any_ge (vector float, vector float); 35288 35289 int vec_any_gt (vector bool char, vector unsigned char); 35290 int vec_any_gt (vector unsigned char, vector bool char); 35291 int vec_any_gt (vector unsigned char, vector unsigned char); 35292 int vec_any_gt (vector bool char, vector signed char); 35293 int vec_any_gt (vector signed char, vector bool char); 35294 int vec_any_gt (vector signed char, vector signed char); 35295 int vec_any_gt (vector bool short, vector unsigned short); 35296 int vec_any_gt (vector unsigned short, vector bool short); 35297 int vec_any_gt (vector unsigned short, vector unsigned short); 35298 int vec_any_gt (vector bool short, vector signed short); 35299 int vec_any_gt (vector signed short, vector bool short); 35300 int vec_any_gt (vector signed short, vector signed short); 35301 int vec_any_gt (vector bool int, vector unsigned int); 35302 int vec_any_gt (vector unsigned int, vector bool int); 35303 int vec_any_gt (vector unsigned int, vector unsigned int); 35304 int vec_any_gt (vector bool int, vector signed int); 35305 int vec_any_gt (vector signed int, vector bool int); 35306 int vec_any_gt (vector signed int, vector signed int); 35307 int vec_any_gt (vector float, vector float); 35308 35309 int vec_any_le (vector bool char, vector unsigned char); 35310 int vec_any_le (vector unsigned char, vector bool char); 35311 int vec_any_le (vector unsigned char, vector unsigned char); 35312 int vec_any_le (vector bool char, vector signed char); 35313 int vec_any_le (vector signed char, vector bool char); 35314 int vec_any_le (vector signed char, vector signed char); 35315 int vec_any_le (vector bool short, vector unsigned short); 35316 int vec_any_le (vector unsigned short, vector bool short); 35317 int vec_any_le (vector unsigned short, vector unsigned short); 35318 int vec_any_le (vector bool short, vector signed short); 35319 int vec_any_le (vector signed short, vector bool short); 35320 int vec_any_le (vector signed short, vector signed short); 35321 int vec_any_le (vector bool int, vector unsigned int); 35322 int vec_any_le (vector unsigned int, vector bool int); 35323 int vec_any_le (vector unsigned int, vector unsigned int); 35324 int vec_any_le (vector bool int, vector signed int); 35325 int vec_any_le (vector signed int, vector bool int); 35326 int vec_any_le (vector signed int, vector signed int); 35327 int vec_any_le (vector float, vector float); 35328 35329 int vec_any_lt (vector bool char, vector unsigned char); 35330 int vec_any_lt (vector unsigned char, vector bool char); 35331 int vec_any_lt (vector unsigned char, vector unsigned char); 35332 int vec_any_lt (vector bool char, vector signed char); 35333 int vec_any_lt (vector signed char, vector bool char); 35334 int vec_any_lt (vector signed char, vector signed char); 35335 int vec_any_lt (vector bool short, vector unsigned short); 35336 int vec_any_lt (vector unsigned short, vector bool short); 35337 int vec_any_lt (vector unsigned short, vector unsigned short); 35338 int vec_any_lt (vector bool short, vector signed short); 35339 int vec_any_lt (vector signed short, vector bool short); 35340 int vec_any_lt (vector signed short, vector signed short); 35341 int vec_any_lt (vector bool int, vector unsigned int); 35342 int vec_any_lt (vector unsigned int, vector bool int); 35343 int vec_any_lt (vector unsigned int, vector unsigned int); 35344 int vec_any_lt (vector bool int, vector signed int); 35345 int vec_any_lt (vector signed int, vector bool int); 35346 int vec_any_lt (vector signed int, vector signed int); 35347 int vec_any_lt (vector float, vector float); 35348 35349 int vec_any_nan (vector float); 35350 35351 int vec_any_ne (vector signed char, vector bool char); 35352 int vec_any_ne (vector signed char, vector signed char); 35353 int vec_any_ne (vector unsigned char, vector bool char); 35354 int vec_any_ne (vector unsigned char, vector unsigned char); 35355 int vec_any_ne (vector bool char, vector bool char); 35356 int vec_any_ne (vector bool char, vector unsigned char); 35357 int vec_any_ne (vector bool char, vector signed char); 35358 int vec_any_ne (vector signed short, vector bool short); 35359 int vec_any_ne (vector signed short, vector signed short); 35360 int vec_any_ne (vector unsigned short, vector bool short); 35361 int vec_any_ne (vector unsigned short, vector unsigned short); 35362 int vec_any_ne (vector bool short, vector bool short); 35363 int vec_any_ne (vector bool short, vector unsigned short); 35364 int vec_any_ne (vector bool short, vector signed short); 35365 int vec_any_ne (vector pixel, vector pixel); 35366 int vec_any_ne (vector signed int, vector bool int); 35367 int vec_any_ne (vector signed int, vector signed int); 35368 int vec_any_ne (vector unsigned int, vector bool int); 35369 int vec_any_ne (vector unsigned int, vector unsigned int); 35370 int vec_any_ne (vector bool int, vector bool int); 35371 int vec_any_ne (vector bool int, vector unsigned int); 35372 int vec_any_ne (vector bool int, vector signed int); 35373 int vec_any_ne (vector float, vector float); 35374 35375 int vec_any_nge (vector float, vector float); 35376 35377 int vec_any_ngt (vector float, vector float); 35378 35379 int vec_any_nle (vector float, vector float); 35380 35381 int vec_any_nlt (vector float, vector float); 35382 35383 int vec_any_numeric (vector float); 35384 35385 int vec_any_out (vector float, vector float); 35386 35387 If the vector/scalar (VSX) instruction set is available, the following 35388additional functions are available: 35389 35390 vector double vec_abs (vector double); 35391 vector double vec_add (vector double, vector double); 35392 vector double vec_and (vector double, vector double); 35393 vector double vec_and (vector double, vector bool long); 35394 vector double vec_and (vector bool long, vector double); 35395 vector double vec_andc (vector double, vector double); 35396 vector double vec_andc (vector double, vector bool long); 35397 vector double vec_andc (vector bool long, vector double); 35398 vector double vec_ceil (vector double); 35399 vector bool long vec_cmpeq (vector double, vector double); 35400 vector bool long vec_cmpge (vector double, vector double); 35401 vector bool long vec_cmpgt (vector double, vector double); 35402 vector bool long vec_cmple (vector double, vector double); 35403 vector bool long vec_cmplt (vector double, vector double); 35404 vector float vec_div (vector float, vector float); 35405 vector double vec_div (vector double, vector double); 35406 vector double vec_floor (vector double); 35407 vector double vec_ld (int, const vector double *); 35408 vector double vec_ld (int, const double *); 35409 vector double vec_ldl (int, const vector double *); 35410 vector double vec_ldl (int, const double *); 35411 vector unsigned char vec_lvsl (int, const volatile double *); 35412 vector unsigned char vec_lvsr (int, const volatile double *); 35413 vector double vec_madd (vector double, vector double, vector double); 35414 vector double vec_max (vector double, vector double); 35415 vector double vec_min (vector double, vector double); 35416 vector float vec_msub (vector float, vector float, vector float); 35417 vector double vec_msub (vector double, vector double, vector double); 35418 vector float vec_mul (vector float, vector float); 35419 vector double vec_mul (vector double, vector double); 35420 vector float vec_nearbyint (vector float); 35421 vector double vec_nearbyint (vector double); 35422 vector float vec_nmadd (vector float, vector float, vector float); 35423 vector double vec_nmadd (vector double, vector double, vector double); 35424 vector double vec_nmsub (vector double, vector double, vector double); 35425 vector double vec_nor (vector double, vector double); 35426 vector double vec_or (vector double, vector double); 35427 vector double vec_or (vector double, vector bool long); 35428 vector double vec_or (vector bool long, vector double); 35429 vector double vec_perm (vector double, 35430 vector double, 35431 vector unsigned char); 35432 vector float vec_rint (vector float); 35433 vector double vec_rint (vector double); 35434 vector double vec_sel (vector double, vector double, vector bool long); 35435 vector double vec_sel (vector double, vector double, vector unsigned long); 35436 vector double vec_sub (vector double, vector double); 35437 vector float vec_sqrt (vector float); 35438 vector double vec_sqrt (vector double); 35439 void vec_st (vector double, int, vector double *); 35440 void vec_st (vector double, int, double *); 35441 vector double vec_trunc (vector double); 35442 vector double vec_xor (vector double, vector double); 35443 vector double vec_xor (vector double, vector bool long); 35444 vector double vec_xor (vector bool long, vector double); 35445 int vec_all_eq (vector double, vector double); 35446 int vec_all_ge (vector double, vector double); 35447 int vec_all_gt (vector double, vector double); 35448 int vec_all_le (vector double, vector double); 35449 int vec_all_lt (vector double, vector double); 35450 int vec_all_nan (vector double); 35451 int vec_all_ne (vector double, vector double); 35452 int vec_all_nge (vector double, vector double); 35453 int vec_all_ngt (vector double, vector double); 35454 int vec_all_nle (vector double, vector double); 35455 int vec_all_nlt (vector double, vector double); 35456 int vec_all_numeric (vector double); 35457 int vec_any_eq (vector double, vector double); 35458 int vec_any_ge (vector double, vector double); 35459 int vec_any_gt (vector double, vector double); 35460 int vec_any_le (vector double, vector double); 35461 int vec_any_lt (vector double, vector double); 35462 int vec_any_nan (vector double); 35463 int vec_any_ne (vector double, vector double); 35464 int vec_any_nge (vector double, vector double); 35465 int vec_any_ngt (vector double, vector double); 35466 int vec_any_nle (vector double, vector double); 35467 int vec_any_nlt (vector double, vector double); 35468 int vec_any_numeric (vector double); 35469 35470 vector double vec_vsx_ld (int, const vector double *); 35471 vector double vec_vsx_ld (int, const double *); 35472 vector float vec_vsx_ld (int, const vector float *); 35473 vector float vec_vsx_ld (int, const float *); 35474 vector bool int vec_vsx_ld (int, const vector bool int *); 35475 vector signed int vec_vsx_ld (int, const vector signed int *); 35476 vector signed int vec_vsx_ld (int, const int *); 35477 vector signed int vec_vsx_ld (int, const long *); 35478 vector unsigned int vec_vsx_ld (int, const vector unsigned int *); 35479 vector unsigned int vec_vsx_ld (int, const unsigned int *); 35480 vector unsigned int vec_vsx_ld (int, const unsigned long *); 35481 vector bool short vec_vsx_ld (int, const vector bool short *); 35482 vector pixel vec_vsx_ld (int, const vector pixel *); 35483 vector signed short vec_vsx_ld (int, const vector signed short *); 35484 vector signed short vec_vsx_ld (int, const short *); 35485 vector unsigned short vec_vsx_ld (int, const vector unsigned short *); 35486 vector unsigned short vec_vsx_ld (int, const unsigned short *); 35487 vector bool char vec_vsx_ld (int, const vector bool char *); 35488 vector signed char vec_vsx_ld (int, const vector signed char *); 35489 vector signed char vec_vsx_ld (int, const signed char *); 35490 vector unsigned char vec_vsx_ld (int, const vector unsigned char *); 35491 vector unsigned char vec_vsx_ld (int, const unsigned char *); 35492 35493 void vec_vsx_st (vector double, int, vector double *); 35494 void vec_vsx_st (vector double, int, double *); 35495 void vec_vsx_st (vector float, int, vector float *); 35496 void vec_vsx_st (vector float, int, float *); 35497 void vec_vsx_st (vector signed int, int, vector signed int *); 35498 void vec_vsx_st (vector signed int, int, int *); 35499 void vec_vsx_st (vector unsigned int, int, vector unsigned int *); 35500 void vec_vsx_st (vector unsigned int, int, unsigned int *); 35501 void vec_vsx_st (vector bool int, int, vector bool int *); 35502 void vec_vsx_st (vector bool int, int, unsigned int *); 35503 void vec_vsx_st (vector bool int, int, int *); 35504 void vec_vsx_st (vector signed short, int, vector signed short *); 35505 void vec_vsx_st (vector signed short, int, short *); 35506 void vec_vsx_st (vector unsigned short, int, vector unsigned short *); 35507 void vec_vsx_st (vector unsigned short, int, unsigned short *); 35508 void vec_vsx_st (vector bool short, int, vector bool short *); 35509 void vec_vsx_st (vector bool short, int, unsigned short *); 35510 void vec_vsx_st (vector pixel, int, vector pixel *); 35511 void vec_vsx_st (vector pixel, int, unsigned short *); 35512 void vec_vsx_st (vector pixel, int, short *); 35513 void vec_vsx_st (vector bool short, int, short *); 35514 void vec_vsx_st (vector signed char, int, vector signed char *); 35515 void vec_vsx_st (vector signed char, int, signed char *); 35516 void vec_vsx_st (vector unsigned char, int, vector unsigned char *); 35517 void vec_vsx_st (vector unsigned char, int, unsigned char *); 35518 void vec_vsx_st (vector bool char, int, vector bool char *); 35519 void vec_vsx_st (vector bool char, int, unsigned char *); 35520 void vec_vsx_st (vector bool char, int, signed char *); 35521 35522 Note that the `vec_ld' and `vec_st' builtins will always generate the 35523Altivec `LVX' and `STVX' instructions even if the VSX instruction set 35524is available. The `vec_vsx_ld' and `vec_vsx_st' builtins will always 35525generate the VSX `LXVD2X', `LXVW4X', `STXVD2X', and `STXVW4X' 35526instructions. 35527 35528 GCC provides a few other builtins on Powerpc to access certain 35529instructions: 35530 float __builtin_recipdivf (float, float); 35531 float __builtin_rsqrtf (float); 35532 double __builtin_recipdiv (double, double); 35533 long __builtin_bpermd (long, long); 35534 int __builtin_bswap16 (int); 35535 35536 35537File: gcc.info, Node: RX Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec/VSX Built-in Functions, Up: Target Builtins 35538 355396.52.13 RX Built-in Functions 35540----------------------------- 35541 35542GCC supports some of the RX instructions which cannot be expressed in 35543the C programming language via the use of built-in functions. The 35544following functions are supported: 35545 35546 -- Built-in Function: void __builtin_rx_brk (void) 35547 Generates the `brk' machine instruction. 35548 35549 -- Built-in Function: void __builtin_rx_clrpsw (int) 35550 Generates the `clrpsw' machine instruction to clear the specified 35551 bit in the processor status word. 35552 35553 -- Built-in Function: void __builtin_rx_int (int) 35554 Generates the `int' machine instruction to generate an interrupt 35555 with the specified value. 35556 35557 -- Built-in Function: void __builtin_rx_machi (int, int) 35558 Generates the `machi' machine instruction to add the result of 35559 multiplying the top 16-bits of the two arguments into the 35560 accumulator. 35561 35562 -- Built-in Function: void __builtin_rx_maclo (int, int) 35563 Generates the `maclo' machine instruction to add the result of 35564 multiplying the bottom 16-bits of the two arguments into the 35565 accumulator. 35566 35567 -- Built-in Function: void __builtin_rx_mulhi (int, int) 35568 Generates the `mulhi' machine instruction to place the result of 35569 multiplying the top 16-bits of the two arguments into the 35570 accumulator. 35571 35572 -- Built-in Function: void __builtin_rx_mullo (int, int) 35573 Generates the `mullo' machine instruction to place the result of 35574 multiplying the bottom 16-bits of the two arguments into the 35575 accumulator. 35576 35577 -- Built-in Function: int __builtin_rx_mvfachi (void) 35578 Generates the `mvfachi' machine instruction to read the top 35579 32-bits of the accumulator. 35580 35581 -- Built-in Function: int __builtin_rx_mvfacmi (void) 35582 Generates the `mvfacmi' machine instruction to read the middle 35583 32-bits of the accumulator. 35584 35585 -- Built-in Function: int __builtin_rx_mvfc (int) 35586 Generates the `mvfc' machine instruction which reads the control 35587 register specified in its argument and returns its value. 35588 35589 -- Built-in Function: void __builtin_rx_mvtachi (int) 35590 Generates the `mvtachi' machine instruction to set the top 32-bits 35591 of the accumulator. 35592 35593 -- Built-in Function: void __builtin_rx_mvtaclo (int) 35594 Generates the `mvtaclo' machine instruction to set the bottom 35595 32-bits of the accumulator. 35596 35597 -- Built-in Function: void __builtin_rx_mvtc (int reg, int val) 35598 Generates the `mvtc' machine instruction which sets control 35599 register number `reg' to `val'. 35600 35601 -- Built-in Function: void __builtin_rx_mvtipl (int) 35602 Generates the `mvtipl' machine instruction set the interrupt 35603 priority level. 35604 35605 -- Built-in Function: void __builtin_rx_racw (int) 35606 Generates the `racw' machine instruction to round the accumulator 35607 according to the specified mode. 35608 35609 -- Built-in Function: int __builtin_rx_revw (int) 35610 Generates the `revw' machine instruction which swaps the bytes in 35611 the argument so that bits 0-7 now occupy bits 8-15 and vice versa, 35612 and also bits 16-23 occupy bits 24-31 and vice versa. 35613 35614 -- Built-in Function: void __builtin_rx_rmpa (void) 35615 Generates the `rmpa' machine instruction which initiates a 35616 repeated multiply and accumulate sequence. 35617 35618 -- Built-in Function: void __builtin_rx_round (float) 35619 Generates the `round' machine instruction which returns the 35620 floating point argument rounded according to the current rounding 35621 mode set in the floating point status word register. 35622 35623 -- Built-in Function: int __builtin_rx_sat (int) 35624 Generates the `sat' machine instruction which returns the 35625 saturated value of the argument. 35626 35627 -- Built-in Function: void __builtin_rx_setpsw (int) 35628 Generates the `setpsw' machine instruction to set the specified 35629 bit in the processor status word. 35630 35631 -- Built-in Function: void __builtin_rx_wait (void) 35632 Generates the `wait' machine instruction. 35633 35634 35635File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: RX Built-in Functions, Up: Target Builtins 35636 356376.52.14 SPARC VIS Built-in Functions 35638------------------------------------ 35639 35640GCC supports SIMD operations on the SPARC using both the generic vector 35641extensions (*note Vector Extensions::) as well as built-in functions for 35642the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 35643switch, the VIS extension is exposed as the following built-in 35644functions: 35645 35646 typedef int v2si __attribute__ ((vector_size (8))); 35647 typedef short v4hi __attribute__ ((vector_size (8))); 35648 typedef short v2hi __attribute__ ((vector_size (4))); 35649 typedef char v8qi __attribute__ ((vector_size (8))); 35650 typedef char v4qi __attribute__ ((vector_size (4))); 35651 35652 void * __builtin_vis_alignaddr (void *, long); 35653 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 35654 v2si __builtin_vis_faligndatav2si (v2si, v2si); 35655 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 35656 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 35657 35658 v4hi __builtin_vis_fexpand (v4qi); 35659 35660 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 35661 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 35662 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 35663 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 35664 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 35665 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 35666 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 35667 35668 v4qi __builtin_vis_fpack16 (v4hi); 35669 v8qi __builtin_vis_fpack32 (v2si, v2si); 35670 v2hi __builtin_vis_fpackfix (v2si); 35671 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 35672 35673 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 35674 35675 35676File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 35677 356786.52.15 SPU Built-in Functions 35679------------------------------ 35680 35681GCC provides extensions for the SPU processor as described in the 35682Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 35683found at `http://cell.scei.co.jp/' or 35684`http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 35685differs in several ways. 35686 35687 * The optional extension of specifying vector constants in 35688 parentheses is not supported. 35689 35690 * A vector initializer requires no cast if the vector constant is of 35691 the same type as the variable it is initializing. 35692 35693 * If `signed' or `unsigned' is omitted, the signedness of the vector 35694 type is the default signedness of the base type. The default 35695 varies depending on the operating system, so a portable program 35696 should always specify the signedness. 35697 35698 * By default, the keyword `__vector' is added. The macro `vector' is 35699 defined in `<spu_intrinsics.h>' and can be undefined. 35700 35701 * GCC allows using a `typedef' name as the type specifier for a 35702 vector type. 35703 35704 * For C, overloaded functions are implemented with macros so the 35705 following does not work: 35706 35707 spu_add ((vector signed int){1, 2, 3, 4}, foo); 35708 35709 Since `spu_add' is a macro, the vector constant in the example is 35710 treated as four separate arguments. Wrap the entire argument in 35711 parentheses for this to work. 35712 35713 * The extended version of `__builtin_expect' is not supported. 35714 35715 35716 _Note:_ Only the interface described in the aforementioned 35717specification is supported. Internally, GCC uses built-in functions to 35718implement the required functionality, but these are not supported and 35719are subject to change without notice. 35720 35721 35722File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 35723 357246.53 Format Checks Specific to Particular Target Machines 35725========================================================= 35726 35727For some target machines, GCC supports additional options to the format 35728attribute (*note Declaring Attributes of Functions: Function 35729Attributes.). 35730 35731* Menu: 35732 35733* Solaris Format Checks:: 35734 35735 35736File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 35737 357386.53.1 Solaris Format Checks 35739---------------------------- 35740 35741Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 35742`cmn_err' accepts a subset of the standard `printf' conversions, and 35743the two-argument `%b' conversion for displaying bit-fields. See the 35744Solaris man page for `cmn_err' for more information. 35745 35746 35747File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 35748 357496.54 Pragmas Accepted by GCC 35750============================ 35751 35752GCC supports several types of pragmas, primarily in order to compile 35753code originally written for other compilers. Note that in general we 35754do not recommend the use of pragmas; *Note Function Attributes::, for 35755further explanation. 35756 35757* Menu: 35758 35759* ARM Pragmas:: 35760* M32C Pragmas:: 35761* MeP Pragmas:: 35762* RS/6000 and PowerPC Pragmas:: 35763* Darwin Pragmas:: 35764* Solaris Pragmas:: 35765* Symbol-Renaming Pragmas:: 35766* Structure-Packing Pragmas:: 35767* Weak Pragmas:: 35768* Diagnostic Pragmas:: 35769* Visibility Pragmas:: 35770* Push/Pop Macro Pragmas:: 35771* Function Specific Option Pragmas:: 35772 35773 35774File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 35775 357766.54.1 ARM Pragmas 35777------------------ 35778 35779The ARM target defines pragmas for controlling the default addition of 35780`long_call' and `short_call' attributes to functions. *Note Function 35781Attributes::, for information about the effects of these attributes. 35782 35783`long_calls' 35784 Set all subsequent functions to have the `long_call' attribute. 35785 35786`no_long_calls' 35787 Set all subsequent functions to have the `short_call' attribute. 35788 35789`long_calls_off' 35790 Do not affect the `long_call' or `short_call' attributes of 35791 subsequent functions. 35792 35793 35794File: gcc.info, Node: M32C Pragmas, Next: MeP Pragmas, Prev: ARM Pragmas, Up: Pragmas 35795 357966.54.2 M32C Pragmas 35797------------------- 35798 35799`memregs NUMBER' 35800 Overrides the command line option `-memregs=' for the current 35801 file. Use with care! This pragma must be before any function in 35802 the file, and mixing different memregs values in different objects 35803 may make them incompatible. This pragma is useful when a 35804 performance-critical function uses a memreg for temporary values, 35805 as it may allow you to reduce the number of memregs used. 35806 35807 35808 35809File: gcc.info, Node: MeP Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: M32C Pragmas, Up: Pragmas 35810 358116.54.3 MeP Pragmas 35812------------------ 35813 35814`custom io_volatile (on|off)' 35815 Overrides the command line option `-mio-volatile' for the current 35816 file. Note that for compatibility with future GCC releases, this 35817 option should only be used once before any `io' variables in each 35818 file. 35819 35820`GCC coprocessor available REGISTERS' 35821 Specifies which coprocessor registers are available to the register 35822 allocator. REGISTERS may be a single register, register range 35823 separated by ellipses, or comma-separated list of those. Example: 35824 35825 #pragma GCC coprocessor available $c0...$c10, $c28 35826 35827`GCC coprocessor call_saved REGISTERS' 35828 Specifies which coprocessor registers are to be saved and restored 35829 by any function using them. REGISTERS may be a single register, 35830 register range separated by ellipses, or comma-separated list of 35831 those. Example: 35832 35833 #pragma GCC coprocessor call_saved $c4...$c6, $c31 35834 35835`GCC coprocessor subclass '(A|B|C|D)' = REGISTERS' 35836 Creates and defines a register class. These register classes can 35837 be used by inline `asm' constructs. REGISTERS may be a single 35838 register, register range separated by ellipses, or comma-separated 35839 list of those. Example: 35840 35841 #pragma GCC coprocessor subclass 'B' = $c2, $c4, $c6 35842 35843 asm ("cpfoo %0" : "=B" (x)); 35844 35845`GCC disinterrupt NAME , NAME ...' 35846 For the named functions, the compiler adds code to disable 35847 interrupts for the duration of those functions. Any functions so 35848 named, which are not encountered in the source, cause a warning 35849 that the pragma was not used. Examples: 35850 35851 #pragma disinterrupt foo 35852 #pragma disinterrupt bar, grill 35853 int foo () { ... } 35854 35855`GCC call NAME , NAME ...' 35856 For the named functions, the compiler always uses a 35857 register-indirect call model when calling the named functions. 35858 Examples: 35859 35860 extern int foo (); 35861 #pragma call foo 35862 35863 35864 35865File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: MeP Pragmas, Up: Pragmas 35866 358676.54.4 RS/6000 and PowerPC Pragmas 35868---------------------------------- 35869 35870The RS/6000 and PowerPC targets define one pragma for controlling 35871whether or not the `longcall' attribute is added to function 35872declarations by default. This pragma overrides the `-mlongcall' 35873option, but not the `longcall' and `shortcall' attributes. *Note 35874RS/6000 and PowerPC Options::, for more information about when long 35875calls are and are not necessary. 35876 35877`longcall (1)' 35878 Apply the `longcall' attribute to all subsequent function 35879 declarations. 35880 35881`longcall (0)' 35882 Do not apply the `longcall' attribute to subsequent function 35883 declarations. 35884 35885 35886File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 35887 358886.54.5 Darwin Pragmas 35889--------------------- 35890 35891The following pragmas are available for all architectures running the 35892Darwin operating system. These are useful for compatibility with other 35893Mac OS compilers. 35894 35895`mark TOKENS...' 35896 This pragma is accepted, but has no effect. 35897 35898`options align=ALIGNMENT' 35899 This pragma sets the alignment of fields in structures. The 35900 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 35901 `power', to emulate PowerPC alignment. Uses of this pragma nest 35902 properly; to restore the previous setting, use `reset' for the 35903 ALIGNMENT. 35904 35905`segment TOKENS...' 35906 This pragma is accepted, but has no effect. 35907 35908`unused (VAR [, VAR]...)' 35909 This pragma declares variables to be possibly unused. GCC will not 35910 produce warnings for the listed variables. The effect is similar 35911 to that of the `unused' attribute, except that this pragma may 35912 appear anywhere within the variables' scopes. 35913 35914 35915File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 35916 359176.54.6 Solaris Pragmas 35918---------------------- 35919 35920The Solaris target supports `#pragma redefine_extname' (*note 35921Symbol-Renaming Pragmas::). It also supports additional `#pragma' 35922directives for compatibility with the system compiler. 35923 35924`align ALIGNMENT (VARIABLE [, VARIABLE]...)' 35925 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 35926 This is the same as GCC's `aligned' attribute *note Variable 35927 Attributes::). Macro expansion occurs on the arguments to this 35928 pragma when compiling C and Objective-C. It does not currently 35929 occur when compiling C++, but this is a bug which may be fixed in 35930 a future release. 35931 35932`fini (FUNCTION [, FUNCTION]...)' 35933 This pragma causes each listed FUNCTION to be called after main, 35934 or during shared module unloading, by adding a call to the `.fini' 35935 section. 35936 35937`init (FUNCTION [, FUNCTION]...)' 35938 This pragma causes each listed FUNCTION to be called during 35939 initialization (before `main') or during shared module loading, by 35940 adding a call to the `.init' section. 35941 35942 35943 35944File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 35945 359466.54.7 Symbol-Renaming Pragmas 35947------------------------------ 35948 35949For compatibility with the Solaris and Tru64 UNIX system headers, GCC 35950supports two `#pragma' directives which change the name used in 35951assembly for a given declaration. `#pragma extern_prefix' is only 35952available on platforms whose system headers need it. To get this effect 35953on all platforms supported by GCC, use the asm labels extension (*note 35954Asm Labels::). 35955 35956`redefine_extname OLDNAME NEWNAME' 35957 This pragma gives the C function OLDNAME the assembly symbol 35958 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 35959 be defined if this pragma is available (currently on all 35960 platforms). 35961 35962`extern_prefix STRING' 35963 This pragma causes all subsequent external function and variable 35964 declarations to have STRING prepended to their assembly symbols. 35965 This effect may be terminated with another `extern_prefix' pragma 35966 whose argument is an empty string. The preprocessor macro 35967 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 35968 available (currently only on Tru64 UNIX). 35969 35970 These pragmas and the asm labels extension interact in a complicated 35971manner. Here are some corner cases you may want to be aware of. 35972 35973 1. Both pragmas silently apply only to declarations with external 35974 linkage. Asm labels do not have this restriction. 35975 35976 2. In C++, both pragmas silently apply only to declarations with "C" 35977 linkage. Again, asm labels do not have this restriction. 35978 35979 3. If any of the three ways of changing the assembly name of a 35980 declaration is applied to a declaration whose assembly name has 35981 already been determined (either by a previous use of one of these 35982 features, or because the compiler needed the assembly name in 35983 order to generate code), and the new name is different, a warning 35984 issues and the name does not change. 35985 35986 4. The OLDNAME used by `#pragma redefine_extname' is always the 35987 C-language name. 35988 35989 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 35990 with an asm label attached, the prefix is silently ignored for 35991 that declaration. 35992 35993 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 35994 the same declaration, whichever triggered first wins, and a 35995 warning issues if they contradict each other. (We would like to 35996 have `#pragma redefine_extname' always win, for consistency with 35997 asm labels, but if `#pragma extern_prefix' triggers first we have 35998 no way of knowing that that happened.) 35999 36000 36001File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 36002 360036.54.8 Structure-Packing Pragmas 36004-------------------------------- 36005 36006For compatibility with Microsoft Windows compilers, GCC supports a set 36007of `#pragma' directives which change the maximum alignment of members 36008of structures (other than zero-width bitfields), unions, and classes 36009subsequently defined. The N value below always is required to be a 36010small power of two and specifies the new alignment in bytes. 36011 36012 1. `#pragma pack(N)' simply sets the new alignment. 36013 36014 2. `#pragma pack()' sets the alignment to the one that was in effect 36015 when compilation started (see also command line option 36016 `-fpack-struct[=<n>]' *note Code Gen Options::). 36017 36018 3. `#pragma pack(push[,N])' pushes the current alignment setting on 36019 an internal stack and then optionally sets the new alignment. 36020 36021 4. `#pragma pack(pop)' restores the alignment setting to the one 36022 saved at the top of the internal stack (and removes that stack 36023 entry). Note that `#pragma pack([N])' does not influence this 36024 internal stack; thus it is possible to have `#pragma pack(push)' 36025 followed by multiple `#pragma pack(N)' instances and finalized by 36026 a single `#pragma pack(pop)'. 36027 36028 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 36029which lays out a structure as the documented `__attribute__ 36030((ms_struct))'. 36031 1. `#pragma ms_struct on' turns on the layout for structures declared. 36032 36033 2. `#pragma ms_struct off' turns off the layout for structures 36034 declared. 36035 36036 3. `#pragma ms_struct reset' goes back to the default layout. 36037 36038 36039File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 36040 360416.54.9 Weak Pragmas 36042------------------- 36043 36044For compatibility with SVR4, GCC supports a set of `#pragma' directives 36045for declaring symbols to be weak, and defining weak aliases. 36046 36047`#pragma weak SYMBOL' 36048 This pragma declares SYMBOL to be weak, as if the declaration had 36049 the attribute of the same name. The pragma may appear before or 36050 after the declaration of SYMBOL, but must appear before either its 36051 first use or its definition. It is not an error for SYMBOL to 36052 never be defined at all. 36053 36054`#pragma weak SYMBOL1 = SYMBOL2' 36055 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 36056 an error if SYMBOL2 is not defined in the current translation unit. 36057 36058 36059File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 36060 360616.54.10 Diagnostic Pragmas 36062-------------------------- 36063 36064GCC allows the user to selectively enable or disable certain types of 36065diagnostics, and change the kind of the diagnostic. For example, a 36066project's policy might require that all sources compile with `-Werror' 36067but certain files might have exceptions allowing specific types of 36068warnings. Or, a project might selectively enable diagnostics and treat 36069them as errors depending on which preprocessor macros are defined. 36070 36071`#pragma GCC diagnostic KIND OPTION' 36072 Modifies the disposition of a diagnostic. Note that not all 36073 diagnostics are modifiable; at the moment only warnings (normally 36074 controlled by `-W...') can be controlled, and not all of them. 36075 Use `-fdiagnostics-show-option' to determine which diagnostics are 36076 controllable and which option controls them. 36077 36078 KIND is `error' to treat this diagnostic as an error, `warning' to 36079 treat it like a warning (even if `-Werror' is in effect), or 36080 `ignored' if the diagnostic is to be ignored. OPTION is a double 36081 quoted string which matches the command line option. 36082 36083 #pragma GCC diagnostic warning "-Wformat" 36084 #pragma GCC diagnostic error "-Wformat" 36085 #pragma GCC diagnostic ignored "-Wformat" 36086 36087 Note that these pragmas override any command line options. Also, 36088 while it is syntactically valid to put these pragmas anywhere in 36089 your sources, the only supported location for them is before any 36090 data or functions are defined. Doing otherwise may result in 36091 unpredictable results depending on how the optimizer manages your 36092 sources. If the same option is listed multiple times, the last 36093 one specified is the one that is in effect. This pragma is not 36094 intended to be a general purpose replacement for command line 36095 options, but for implementing strict control over project policies. 36096 36097 36098 GCC also offers a simple mechanism for printing messages during 36099compilation. 36100 36101`#pragma message STRING' 36102 Prints STRING as a compiler message on compilation. The message 36103 is informational only, and is neither a compilation warning nor an 36104 error. 36105 36106 #pragma message "Compiling " __FILE__ "..." 36107 36108 STRING may be parenthesized, and is printed with location 36109 information. For example, 36110 36111 #define DO_PRAGMA(x) _Pragma (#x) 36112 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 36113 36114 TODO(Remember to fix this) 36115 36116 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 36117 fix this'. 36118 36119 36120 36121File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 36122 361236.54.11 Visibility Pragmas 36124-------------------------- 36125 36126`#pragma GCC visibility push(VISIBILITY)' 36127`#pragma GCC visibility pop' 36128 This pragma allows the user to set the visibility for multiple 36129 declarations without having to give each a visibility attribute 36130 *Note Function Attributes::, for more information about visibility 36131 and the attribute syntax. 36132 36133 In C++, `#pragma GCC visibility' affects only namespace-scope 36134 declarations. Class members and template specializations are not 36135 affected; if you want to override the visibility for a particular 36136 member or instantiation, you must use an attribute. 36137 36138 36139 36140File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 36141 361426.54.12 Push/Pop Macro Pragmas 36143------------------------------ 36144 36145For compatibility with Microsoft Windows compilers, GCC supports 36146`#pragma push_macro("MACRO_NAME")' and `#pragma 36147pop_macro("MACRO_NAME")'. 36148 36149`#pragma push_macro("MACRO_NAME")' 36150 This pragma saves the value of the macro named as MACRO_NAME to 36151 the top of the stack for this macro. 36152 36153`#pragma pop_macro("MACRO_NAME")' 36154 This pragma sets the value of the macro named as MACRO_NAME to the 36155 value on top of the stack for this macro. If the stack for 36156 MACRO_NAME is empty, the value of the macro remains unchanged. 36157 36158 For example: 36159 36160 #define X 1 36161 #pragma push_macro("X") 36162 #undef X 36163 #define X -1 36164 #pragma pop_macro("X") 36165 int x [X]; 36166 36167 In this example, the definition of X as 1 is saved by `#pragma 36168push_macro' and restored by `#pragma pop_macro'. 36169 36170 36171File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 36172 361736.54.13 Function Specific Option Pragmas 36174---------------------------------------- 36175 36176`#pragma GCC target ("STRING"...)' 36177 This pragma allows you to set target specific options for functions 36178 defined later in the source file. One or more strings can be 36179 specified. Each function that is defined after this point will be 36180 as if `attribute((target("STRING")))' was specified for that 36181 function. The parenthesis around the options is optional. *Note 36182 Function Attributes::, for more information about the `target' 36183 attribute and the attribute syntax. 36184 36185 The `#pragma GCC target' pragma is not implemented in GCC versions 36186 earlier than 4.4, and is currently only implemented for the 386 36187 and x86_64 backends. 36188 36189`#pragma GCC optimize ("STRING"...)' 36190 This pragma allows you to set global optimization options for 36191 functions defined later in the source file. One or more strings 36192 can be specified. Each function that is defined after this point 36193 will be as if `attribute((optimize("STRING")))' was specified for 36194 that function. The parenthesis around the options is optional. 36195 *Note Function Attributes::, for more information about the 36196 `optimize' attribute and the attribute syntax. 36197 36198 The `#pragma GCC optimize' pragma is not implemented in GCC 36199 versions earlier than 4.4. 36200 36201`#pragma GCC push_options' 36202`#pragma GCC pop_options' 36203 These pragmas maintain a stack of the current target and 36204 optimization options. It is intended for include files where you 36205 temporarily want to switch to using a different `#pragma GCC 36206 target' or `#pragma GCC optimize' and then to pop back to the 36207 previous options. 36208 36209 The `#pragma GCC push_options' and `#pragma GCC pop_options' 36210 pragmas are not implemented in GCC versions earlier than 4.4. 36211 36212`#pragma GCC reset_options' 36213 This pragma clears the current `#pragma GCC target' and `#pragma 36214 GCC optimize' to use the default switches as specified on the 36215 command line. 36216 36217 The `#pragma GCC reset_options' pragma is not implemented in GCC 36218 versions earlier than 4.4. 36219 36220 36221File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 36222 362236.55 Unnamed struct/union fields within structs/unions 36224====================================================== 36225 36226For compatibility with other compilers, GCC allows you to define a 36227structure or union that contains, as fields, structures and unions 36228without names. For example: 36229 36230 struct { 36231 int a; 36232 union { 36233 int b; 36234 float c; 36235 }; 36236 int d; 36237 } foo; 36238 36239 In this example, the user would be able to access members of the 36240unnamed union with code like `foo.b'. Note that only unnamed structs 36241and unions are allowed, you may not have, for example, an unnamed `int'. 36242 36243 You must never create such structures that cause ambiguous field 36244definitions. For example, this structure: 36245 36246 struct { 36247 int a; 36248 struct { 36249 int a; 36250 }; 36251 } foo; 36252 36253 It is ambiguous which `a' is being referred to with `foo.a'. Such 36254constructs are not supported and must be avoided. In the future, such 36255constructs may be detected and treated as compilation errors. 36256 36257 Unless `-fms-extensions' is used, the unnamed field must be a 36258structure or union definition without a tag (for example, `struct { int 36259a; };'). If `-fms-extensions' is used, the field may also be a 36260definition with a tag such as `struct foo { int a; };', a reference to 36261a previously defined structure or union such as `struct foo;', or a 36262reference to a `typedef' name for a previously defined structure or 36263union type. 36264 36265 36266File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 36267 362686.56 Thread-Local Storage 36269========================= 36270 36271Thread-local storage (TLS) is a mechanism by which variables are 36272allocated such that there is one instance of the variable per extant 36273thread. The run-time model GCC uses to implement this originates in 36274the IA-64 processor-specific ABI, but has since been migrated to other 36275processors as well. It requires significant support from the linker 36276(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 36277`libpthread.so'), so it is not available everywhere. 36278 36279 At the user level, the extension is visible with a new storage class 36280keyword: `__thread'. For example: 36281 36282 __thread int i; 36283 extern __thread struct state s; 36284 static __thread char *p; 36285 36286 The `__thread' specifier may be used alone, with the `extern' or 36287`static' specifiers, but with no other storage class specifier. When 36288used with `extern' or `static', `__thread' must appear immediately 36289after the other storage class specifier. 36290 36291 The `__thread' specifier may be applied to any global, file-scoped 36292static, function-scoped static, or static data member of a class. It 36293may not be applied to block-scoped automatic or non-static data member. 36294 36295 When the address-of operator is applied to a thread-local variable, it 36296is evaluated at run-time and returns the address of the current thread's 36297instance of that variable. An address so obtained may be used by any 36298thread. When a thread terminates, any pointers to thread-local 36299variables in that thread become invalid. 36300 36301 No static initialization may refer to the address of a thread-local 36302variable. 36303 36304 In C++, if an initializer is present for a thread-local variable, it 36305must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 36306standard. 36307 36308 See ELF Handling For Thread-Local Storage 36309(http://www.akkadia.org/drepper/tls.pdf) for a detailed explanation of 36310the four thread-local storage addressing models, and how the run-time 36311is expected to function. 36312 36313* Menu: 36314 36315* C99 Thread-Local Edits:: 36316* C++98 Thread-Local Edits:: 36317 36318 36319File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 36320 363216.56.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 36322------------------------------------------------------- 36323 36324The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 36325document the exact semantics of the language extension. 36326 36327 * `5.1.2 Execution environments' 36328 36329 Add new text after paragraph 1 36330 36331 Within either execution environment, a "thread" is a flow of 36332 control within a program. It is implementation defined 36333 whether or not there may be more than one thread associated 36334 with a program. It is implementation defined how threads 36335 beyond the first are created, the name and type of the 36336 function called at thread startup, and how threads may be 36337 terminated. However, objects with thread storage duration 36338 shall be initialized before thread startup. 36339 36340 * `6.2.4 Storage durations of objects' 36341 36342 Add new text before paragraph 3 36343 36344 An object whose identifier is declared with the storage-class 36345 specifier `__thread' has "thread storage duration". Its 36346 lifetime is the entire execution of the thread, and its 36347 stored value is initialized only once, prior to thread 36348 startup. 36349 36350 * `6.4.1 Keywords' 36351 36352 Add `__thread'. 36353 36354 * `6.7.1 Storage-class specifiers' 36355 36356 Add `__thread' to the list of storage class specifiers in 36357 paragraph 1. 36358 36359 Change paragraph 2 to 36360 36361 With the exception of `__thread', at most one storage-class 36362 specifier may be given [...]. The `__thread' specifier may 36363 be used alone, or immediately following `extern' or `static'. 36364 36365 Add new text after paragraph 6 36366 36367 The declaration of an identifier for a variable that has 36368 block scope that specifies `__thread' shall also specify 36369 either `extern' or `static'. 36370 36371 The `__thread' specifier shall be used only with variables. 36372 36373 36374File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 36375 363766.56.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 36377-------------------------------------------------------- 36378 36379The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 36380that document the exact semantics of the language extension. 36381 36382 * [intro.execution] 36383 36384 New text after paragraph 4 36385 36386 A "thread" is a flow of control within the abstract machine. 36387 It is implementation defined whether or not there may be more 36388 than one thread. 36389 36390 New text after paragraph 7 36391 36392 It is unspecified whether additional action must be taken to 36393 ensure when and whether side effects are visible to other 36394 threads. 36395 36396 * [lex.key] 36397 36398 Add `__thread'. 36399 36400 * [basic.start.main] 36401 36402 Add after paragraph 5 36403 36404 The thread that begins execution at the `main' function is 36405 called the "main thread". It is implementation defined how 36406 functions beginning threads other than the main thread are 36407 designated or typed. A function so designated, as well as 36408 the `main' function, is called a "thread startup function". 36409 It is implementation defined what happens if a thread startup 36410 function returns. It is implementation defined what happens 36411 to other threads when any thread calls `exit'. 36412 36413 * [basic.start.init] 36414 36415 Add after paragraph 4 36416 36417 The storage for an object of thread storage duration shall be 36418 statically initialized before the first statement of the 36419 thread startup function. An object of thread storage 36420 duration shall not require dynamic initialization. 36421 36422 * [basic.start.term] 36423 36424 Add after paragraph 3 36425 36426 The type of an object with thread storage duration shall not 36427 have a non-trivial destructor, nor shall it be an array type 36428 whose elements (directly or indirectly) have non-trivial 36429 destructors. 36430 36431 * [basic.stc] 36432 36433 Add "thread storage duration" to the list in paragraph 1. 36434 36435 Change paragraph 2 36436 36437 Thread, static, and automatic storage durations are 36438 associated with objects introduced by declarations [...]. 36439 36440 Add `__thread' to the list of specifiers in paragraph 3. 36441 36442 * [basic.stc.thread] 36443 36444 New section before [basic.stc.static] 36445 36446 The keyword `__thread' applied to a non-local object gives the 36447 object thread storage duration. 36448 36449 A local variable or class data member declared both `static' 36450 and `__thread' gives the variable or member thread storage 36451 duration. 36452 36453 * [basic.stc.static] 36454 36455 Change paragraph 1 36456 36457 All objects which have neither thread storage duration, 36458 dynamic storage duration nor are local [...]. 36459 36460 * [dcl.stc] 36461 36462 Add `__thread' to the list in paragraph 1. 36463 36464 Change paragraph 1 36465 36466 With the exception of `__thread', at most one 36467 STORAGE-CLASS-SPECIFIER shall appear in a given 36468 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 36469 alone, or immediately following the `extern' or `static' 36470 specifiers. [...] 36471 36472 Add after paragraph 5 36473 36474 The `__thread' specifier can be applied only to the names of 36475 objects and to anonymous unions. 36476 36477 * [class.mem] 36478 36479 Add after paragraph 6 36480 36481 Non-`static' members shall not be `__thread'. 36482 36483 36484File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 36485 364866.57 Binary constants using the `0b' prefix 36487=========================================== 36488 36489Integer constants can be written as binary constants, consisting of a 36490sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 36491particularly useful in environments that operate a lot on the bit-level 36492(like microcontrollers). 36493 36494 The following statements are identical: 36495 36496 i = 42; 36497 i = 0x2a; 36498 i = 052; 36499 i = 0b101010; 36500 36501 The type of these constants follows the same rules as for octal or 36502hexadecimal integer constants, so suffixes like `L' or `UL' can be 36503applied. 36504 36505 36506File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C++ Implementation, Up: Top 36507 365087 Extensions to the C++ Language 36509******************************** 36510 36511The GNU compiler provides these extensions to the C++ language (and you 36512can also use most of the C language extensions in your C++ programs). 36513If you want to write code that checks whether these features are 36514available, you can test for the GNU compiler the same way as for C 36515programs: check for a predefined macro `__GNUC__'. You can also use 36516`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 36517(cpp)Common Predefined Macros.). 36518 36519* Menu: 36520 36521* Volatiles:: What constitutes an access to a volatile object. 36522* Restricted Pointers:: C99 restricted pointers and references. 36523* Vague Linkage:: Where G++ puts inlines, vtables and such. 36524* C++ Interface:: You can use a single C++ header file for both 36525 declarations and definitions. 36526* Template Instantiation:: Methods for ensuring that exactly one copy of 36527 each needed template instantiation is emitted. 36528* Bound member functions:: You can extract a function pointer to the 36529 method denoted by a `->*' or `.*' expression. 36530* C++ Attributes:: Variable, function, and type attributes for C++ only. 36531* Namespace Association:: Strong using-directives for namespace association. 36532* Type Traits:: Compiler support for type traits 36533* Java Exceptions:: Tweaking exception handling to work with Java. 36534* Deprecated Features:: Things will disappear from g++. 36535* Backwards Compatibility:: Compatibilities with earlier definitions of C++. 36536 36537 36538File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 36539 365407.1 When is a Volatile Object Accessed? 36541======================================= 36542 36543Both the C and C++ standard have the concept of volatile objects. These 36544are normally accessed by pointers and used for accessing hardware. The 36545standards encourage compilers to refrain from optimizations concerning 36546accesses to volatile objects. The C standard leaves it implementation 36547defined as to what constitutes a volatile access. The C++ standard 36548omits to specify this, except to say that C++ should behave in a 36549similar manner to C with respect to volatiles, where possible. The 36550minimum either standard specifies is that at a sequence point all 36551previous accesses to volatile objects have stabilized and no subsequent 36552accesses have occurred. Thus an implementation is free to reorder and 36553combine volatile accesses which occur between sequence points, but 36554cannot do so for accesses across a sequence point. The use of 36555volatiles does not allow you to violate the restriction on updating 36556objects multiple times within a sequence point. 36557 36558 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 36559 36560 The behavior differs slightly between C and C++ in the non-obvious 36561cases: 36562 36563 volatile int *src = SOMEVALUE; 36564 *src; 36565 36566 With C, such expressions are rvalues, and GCC interprets this either 36567as a read of the volatile object being pointed to or only as request to 36568evaluate the side-effects. The C++ standard specifies that such 36569expressions do not undergo lvalue to rvalue conversion, and that the 36570type of the dereferenced object may be incomplete. The C++ standard 36571does not specify explicitly that it is this lvalue to rvalue conversion 36572which may be responsible for causing an access. However, there is 36573reason to believe that it is, because otherwise certain simple 36574expressions become undefined. However, because it would surprise most 36575programmers, G++ treats dereferencing a pointer to volatile object of 36576complete type when the value is unused as GCC would do for an 36577equivalent type in C. When the object has incomplete type, G++ issues 36578a warning; if you wish to force an error, you must force a conversion 36579to rvalue with, for instance, a static cast. 36580 36581 When using a reference to volatile, G++ does not treat equivalent 36582expressions as accesses to volatiles, but instead issues a warning that 36583no volatile is accessed. The rationale for this is that otherwise it 36584becomes difficult to determine where volatile access occur, and not 36585possible to ignore the return value from functions returning volatile 36586references. Again, if you wish to force a read, cast the reference to 36587an rvalue. 36588 36589 36590File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 36591 365927.2 Restricting Pointer Aliasing 36593================================ 36594 36595As with the C front end, G++ understands the C99 feature of restricted 36596pointers, specified with the `__restrict__', or `__restrict' type 36597qualifier. Because you cannot compile C++ by specifying the `-std=c99' 36598language flag, `restrict' is not a keyword in C++. 36599 36600 In addition to allowing restricted pointers, you can specify restricted 36601references, which indicate that the reference is not aliased in the 36602local context. 36603 36604 void fn (int *__restrict__ rptr, int &__restrict__ rref) 36605 { 36606 /* ... */ 36607 } 36608 36609In the body of `fn', RPTR points to an unaliased integer and RREF 36610refers to a (different) unaliased integer. 36611 36612 You may also specify whether a member function's THIS pointer is 36613unaliased by using `__restrict__' as a member function qualifier. 36614 36615 void T::fn () __restrict__ 36616 { 36617 /* ... */ 36618 } 36619 36620Within the body of `T::fn', THIS will have the effective definition `T 36621*__restrict__ const this'. Notice that the interpretation of a 36622`__restrict__' member function qualifier is different to that of 36623`const' or `volatile' qualifier, in that it is applied to the pointer 36624rather than the object. This is consistent with other compilers which 36625implement restricted pointers. 36626 36627 As with all outermost parameter qualifiers, `__restrict__' is ignored 36628in function definition matching. This means you only need to specify 36629`__restrict__' in a function definition, rather than in a function 36630prototype as well. 36631 36632 36633File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 36634 366357.3 Vague Linkage 36636================= 36637 36638There are several constructs in C++ which require space in the object 36639file but are not clearly tied to a single translation unit. We say that 36640these constructs have "vague linkage". Typically such constructs are 36641emitted wherever they are needed, though sometimes we can be more 36642clever. 36643 36644Inline Functions 36645 Inline functions are typically defined in a header file which can 36646 be included in many different compilations. Hopefully they can 36647 usually be inlined, but sometimes an out-of-line copy is 36648 necessary, if the address of the function is taken or if inlining 36649 fails. In general, we emit an out-of-line copy in all translation 36650 units where one is needed. As an exception, we only emit inline 36651 virtual functions with the vtable, since it will always require a 36652 copy. 36653 36654 Local static variables and string constants used in an inline 36655 function are also considered to have vague linkage, since they 36656 must be shared between all inlined and out-of-line instances of 36657 the function. 36658 36659VTables 36660 C++ virtual functions are implemented in most compilers using a 36661 lookup table, known as a vtable. The vtable contains pointers to 36662 the virtual functions provided by a class, and each object of the 36663 class contains a pointer to its vtable (or vtables, in some 36664 multiple-inheritance situations). If the class declares any 36665 non-inline, non-pure virtual functions, the first one is chosen as 36666 the "key method" for the class, and the vtable is only emitted in 36667 the translation unit where the key method is defined. 36668 36669 _Note:_ If the chosen key method is later defined as inline, the 36670 vtable will still be emitted in every translation unit which 36671 defines it. Make sure that any inline virtuals are declared 36672 inline in the class body, even if they are not defined there. 36673 36674type_info objects 36675 C++ requires information about types to be written out in order to 36676 implement `dynamic_cast', `typeid' and exception handling. For 36677 polymorphic classes (classes with virtual functions), the type_info 36678 object is written out along with the vtable so that `dynamic_cast' 36679 can determine the dynamic type of a class object at runtime. For 36680 all other types, we write out the type_info object when it is 36681 used: when applying `typeid' to an expression, throwing an object, 36682 or referring to a type in a catch clause or exception 36683 specification. 36684 36685Template Instantiations 36686 Most everything in this section also applies to template 36687 instantiations, but there are other options as well. *Note 36688 Where's the Template?: Template Instantiation. 36689 36690 36691 When used with GNU ld version 2.8 or later on an ELF system such as 36692GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 36693these constructs will be discarded at link time. This is known as 36694COMDAT support. 36695 36696 On targets that don't support COMDAT, but do support weak symbols, GCC 36697will use them. This way one copy will override all the others, but the 36698unused copies will still take up space in the executable. 36699 36700 For targets which do not support either COMDAT or weak symbols, most 36701entities with vague linkage will be emitted as local symbols to avoid 36702duplicate definition errors from the linker. This will not happen for 36703local statics in inlines, however, as having multiple copies will 36704almost certainly break things. 36705 36706 *Note Declarations and Definitions in One Header: C++ Interface, for 36707another way to control placement of these constructs. 36708 36709 36710File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 36711 367127.4 #pragma interface and implementation 36713======================================== 36714 36715`#pragma interface' and `#pragma implementation' provide the user with 36716a way of explicitly directing the compiler to emit entities with vague 36717linkage (and debugging information) in a particular translation unit. 36718 36719 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 36720cases, because of COMDAT support and the "key method" heuristic 36721mentioned in *note Vague Linkage::. Using them can actually cause your 36722program to grow due to unnecessary out-of-line copies of inline 36723functions. Currently (3.4) the only benefit of these `#pragma's is 36724reduced duplication of debugging information, and that should be 36725addressed soon on DWARF 2 targets with the use of COMDAT groups. 36726 36727`#pragma interface' 36728`#pragma interface "SUBDIR/OBJECTS.h"' 36729 Use this directive in _header files_ that define object classes, 36730 to save space in most of the object files that use those classes. 36731 Normally, local copies of certain information (backup copies of 36732 inline member functions, debugging information, and the internal 36733 tables that implement virtual functions) must be kept in each 36734 object file that includes class definitions. You can use this 36735 pragma to avoid such duplication. When a header file containing 36736 `#pragma interface' is included in a compilation, this auxiliary 36737 information will not be generated (unless the main input source 36738 file itself uses `#pragma implementation'). Instead, the object 36739 files will contain references to be resolved at link time. 36740 36741 The second form of this directive is useful for the case where you 36742 have multiple headers with the same name in different directories. 36743 If you use this form, you must specify the same string to `#pragma 36744 implementation'. 36745 36746`#pragma implementation' 36747`#pragma implementation "OBJECTS.h"' 36748 Use this pragma in a _main input file_, when you want full output 36749 from included header files to be generated (and made globally 36750 visible). The included header file, in turn, should use `#pragma 36751 interface'. Backup copies of inline member functions, debugging 36752 information, and the internal tables used to implement virtual 36753 functions are all generated in implementation files. 36754 36755 If you use `#pragma implementation' with no argument, it applies to 36756 an include file with the same basename(1) as your source file. 36757 For example, in `allclass.cc', giving just `#pragma implementation' 36758 by itself is equivalent to `#pragma implementation "allclass.h"'. 36759 36760 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 36761 an implementation file whenever you would include it from 36762 `allclass.cc' even if you never specified `#pragma 36763 implementation'. This was deemed to be more trouble than it was 36764 worth, however, and disabled. 36765 36766 Use the string argument if you want a single implementation file to 36767 include code from multiple header files. (You must also use 36768 `#include' to include the header file; `#pragma implementation' 36769 only specifies how to use the file--it doesn't actually include 36770 it.) 36771 36772 There is no way to split up the contents of a single header file 36773 into multiple implementation files. 36774 36775 `#pragma implementation' and `#pragma interface' also have an effect 36776on function inlining. 36777 36778 If you define a class in a header file marked with `#pragma 36779interface', the effect on an inline function defined in that class is 36780similar to an explicit `extern' declaration--the compiler emits no code 36781at all to define an independent version of the function. Its 36782definition is used only for inlining with its callers. 36783 36784 Conversely, when you include the same header file in a main source file 36785that declares it as `#pragma implementation', the compiler emits code 36786for the function itself; this defines a version of the function that 36787can be found via pointers (or by callers compiled without inlining). 36788If all calls to the function can be inlined, you can avoid emitting the 36789function by compiling with `-fno-implement-inlines'. If any calls were 36790not inlined, you will get linker errors. 36791 36792 ---------- Footnotes ---------- 36793 36794 (1) A file's "basename" was the name stripped of all leading path 36795information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 36796 36797 36798File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 36799 368007.5 Where's the Template? 36801========================= 36802 36803C++ templates are the first language feature to require more 36804intelligence from the environment than one usually finds on a UNIX 36805system. Somehow the compiler and linker have to make sure that each 36806template instance occurs exactly once in the executable if it is needed, 36807and not at all otherwise. There are two basic approaches to this 36808problem, which are referred to as the Borland model and the Cfront 36809model. 36810 36811Borland model 36812 Borland C++ solved the template instantiation problem by adding 36813 the code equivalent of common blocks to their linker; the compiler 36814 emits template instances in each translation unit that uses them, 36815 and the linker collapses them together. The advantage of this 36816 model is that the linker only has to consider the object files 36817 themselves; there is no external complexity to worry about. This 36818 disadvantage is that compilation time is increased because the 36819 template code is being compiled repeatedly. Code written for this 36820 model tends to include definitions of all templates in the header 36821 file, since they must be seen to be instantiated. 36822 36823Cfront model 36824 The AT&T C++ translator, Cfront, solved the template instantiation 36825 problem by creating the notion of a template repository, an 36826 automatically maintained place where template instances are 36827 stored. A more modern version of the repository works as follows: 36828 As individual object files are built, the compiler places any 36829 template definitions and instantiations encountered in the 36830 repository. At link time, the link wrapper adds in the objects in 36831 the repository and compiles any needed instances that were not 36832 previously emitted. The advantages of this model are more optimal 36833 compilation speed and the ability to use the system linker; to 36834 implement the Borland model a compiler vendor also needs to 36835 replace the linker. The disadvantages are vastly increased 36836 complexity, and thus potential for error; for some code this can be 36837 just as transparent, but in practice it can been very difficult to 36838 build multiple programs in one directory and one program in 36839 multiple directories. Code written for this model tends to 36840 separate definitions of non-inline member templates into a 36841 separate file, which should be compiled separately. 36842 36843 When used with GNU ld version 2.8 or later on an ELF system such as 36844GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 36845Borland model. On other systems, G++ implements neither automatic 36846model. 36847 36848 A future version of G++ will support a hybrid model whereby the 36849compiler will emit any instantiations for which the template definition 36850is included in the compile, and store template definitions and 36851instantiation context information into the object file for the rest. 36852The link wrapper will extract that information as necessary and invoke 36853the compiler to produce the remaining instantiations. The linker will 36854then combine duplicate instantiations. 36855 36856 In the mean time, you have the following options for dealing with 36857template instantiations: 36858 36859 1. Compile your template-using code with `-frepo'. The compiler will 36860 generate files with the extension `.rpo' listing all of the 36861 template instantiations used in the corresponding object files 36862 which could be instantiated there; the link wrapper, `collect2', 36863 will then update the `.rpo' files to tell the compiler where to 36864 place those instantiations and rebuild any affected object files. 36865 The link-time overhead is negligible after the first pass, as the 36866 compiler will continue to place the instantiations in the same 36867 files. 36868 36869 This is your best option for application code written for the 36870 Borland model, as it will just work. Code written for the Cfront 36871 model will need to be modified so that the template definitions 36872 are available at one or more points of instantiation; usually this 36873 is as simple as adding `#include <tmethods.cc>' to the end of each 36874 template header. 36875 36876 For library code, if you want the library to provide all of the 36877 template instantiations it needs, just try to link all of its 36878 object files together; the link will fail, but cause the 36879 instantiations to be generated as a side effect. Be warned, 36880 however, that this may cause conflicts if multiple libraries try 36881 to provide the same instantiations. For greater control, use 36882 explicit instantiation as described in the next option. 36883 36884 2. Compile your code with `-fno-implicit-templates' to disable the 36885 implicit generation of template instances, and explicitly 36886 instantiate all the ones you use. This approach requires more 36887 knowledge of exactly which instances you need than do the others, 36888 but it's less mysterious and allows greater control. You can 36889 scatter the explicit instantiations throughout your program, 36890 perhaps putting them in the translation units where the instances 36891 are used or the translation units that define the templates 36892 themselves; you can put all of the explicit instantiations you 36893 need into one big file; or you can create small files like 36894 36895 #include "Foo.h" 36896 #include "Foo.cc" 36897 36898 template class Foo<int>; 36899 template ostream& operator << 36900 (ostream&, const Foo<int>&); 36901 36902 for each of the instances you need, and create a template 36903 instantiation library from those. 36904 36905 If you are using Cfront-model code, you can probably get away with 36906 not using `-fno-implicit-templates' when compiling files that don't 36907 `#include' the member template definitions. 36908 36909 If you use one big file to do the instantiations, you may want to 36910 compile it without `-fno-implicit-templates' so you get all of the 36911 instances required by your explicit instantiations (but not by any 36912 other files) without having to specify them as well. 36913 36914 G++ has extended the template instantiation syntax given in the ISO 36915 standard to allow forward declaration of explicit instantiations 36916 (with `extern'), instantiation of the compiler support data for a 36917 template class (i.e. the vtable) without instantiating any of its 36918 members (with `inline'), and instantiation of only the static data 36919 members of a template class, without the support data or member 36920 functions (with (`static'): 36921 36922 extern template int max (int, int); 36923 inline template class Foo<int>; 36924 static template class Foo<int>; 36925 36926 3. Do nothing. Pretend G++ does implement automatic instantiation 36927 management. Code written for the Borland model will work fine, but 36928 each translation unit will contain instances of each of the 36929 templates it uses. In a large program, this can lead to an 36930 unacceptable amount of code duplication. 36931 36932 36933File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 36934 369357.6 Extracting the function pointer from a bound pointer to member function 36936=========================================================================== 36937 36938In C++, pointer to member functions (PMFs) are implemented using a wide 36939pointer of sorts to handle all the possible call mechanisms; the PMF 36940needs to store information about how to adjust the `this' pointer, and 36941if the function pointed to is virtual, where to find the vtable, and 36942where in the vtable to look for the member function. If you are using 36943PMFs in an inner loop, you should really reconsider that decision. If 36944that is not an option, you can extract the pointer to the function that 36945would be called for a given object/PMF pair and call it directly inside 36946the inner loop, to save a bit of time. 36947 36948 Note that you will still be paying the penalty for the call through a 36949function pointer; on most modern architectures, such a call defeats the 36950branch prediction features of the CPU. This is also true of normal 36951virtual function calls. 36952 36953 The syntax for this extension is 36954 36955 extern A a; 36956 extern int (A::*fp)(); 36957 typedef int (*fptr)(A *); 36958 36959 fptr p = (fptr)(a.*fp); 36960 36961 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 36962object is needed to obtain the address of the function. They can be 36963converted to function pointers directly: 36964 36965 fptr p1 = (fptr)(&A::foo); 36966 36967 You must specify `-Wno-pmf-conversions' to use this extension. 36968 36969 36970File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 36971 369727.7 C++-Specific Variable, Function, and Type Attributes 36973======================================================== 36974 36975Some attributes only make sense for C++ programs. 36976 36977`init_priority (PRIORITY)' 36978 In Standard C++, objects defined at namespace scope are guaranteed 36979 to be initialized in an order in strict accordance with that of 36980 their definitions _in a given translation unit_. No guarantee is 36981 made for initializations across translation units. However, GNU 36982 C++ allows users to control the order of initialization of objects 36983 defined at namespace scope with the `init_priority' attribute by 36984 specifying a relative PRIORITY, a constant integral expression 36985 currently bounded between 101 and 65535 inclusive. Lower numbers 36986 indicate a higher priority. 36987 36988 In the following example, `A' would normally be created before 36989 `B', but the `init_priority' attribute has reversed that order: 36990 36991 Some_Class A __attribute__ ((init_priority (2000))); 36992 Some_Class B __attribute__ ((init_priority (543))); 36993 36994 Note that the particular values of PRIORITY do not matter; only 36995 their relative ordering. 36996 36997`java_interface' 36998 This type attribute informs C++ that the class is a Java 36999 interface. It may only be applied to classes declared within an 37000 `extern "Java"' block. Calls to methods declared in this 37001 interface will be dispatched using GCJ's interface table 37002 mechanism, instead of regular virtual table dispatch. 37003 37004 37005 See also *note Namespace Association::. 37006 37007 37008File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 37009 370107.8 Namespace Association 37011========================= 37012 37013*Caution:* The semantics of this extension are not fully defined. 37014Users should refrain from using this extension as its semantics may 37015change subtly over time. It is possible that this extension will be 37016removed in future versions of G++. 37017 37018 A using-directive with `__attribute ((strong))' is stronger than a 37019normal using-directive in two ways: 37020 37021 * Templates from the used namespace can be specialized and explicitly 37022 instantiated as though they were members of the using namespace. 37023 37024 * The using namespace is considered an associated namespace of all 37025 templates in the used namespace for purposes of argument-dependent 37026 name lookup. 37027 37028 The used namespace must be nested within the using namespace so that 37029normal unqualified lookup works properly. 37030 37031 This is useful for composing a namespace transparently from 37032implementation namespaces. For example: 37033 37034 namespace std { 37035 namespace debug { 37036 template <class T> struct A { }; 37037 } 37038 using namespace debug __attribute ((__strong__)); 37039 template <> struct A<int> { }; // ok to specialize 37040 37041 template <class T> void f (A<T>); 37042 } 37043 37044 int main() 37045 { 37046 f (std::A<float>()); // lookup finds std::f 37047 f (std::A<int>()); 37048 } 37049 37050 37051File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 37052 370537.9 Type Traits 37054=============== 37055 37056The C++ front-end implements syntactic extensions that allow to 37057determine at compile time various characteristics of a type (or of a 37058pair of types). 37059 37060`__has_nothrow_assign (type)' 37061 If `type' is const qualified or is a reference type then the trait 37062 is false. Otherwise if `__has_trivial_assign (type)' is true then 37063 the trait is true, else if `type' is a cv class or union type with 37064 copy assignment operators that are known not to throw an exception 37065 then the trait is true, else it is false. Requires: `type' shall 37066 be a complete type, an array type of unknown bound, or is a `void' 37067 type. 37068 37069`__has_nothrow_copy (type)' 37070 If `__has_trivial_copy (type)' is true then the trait is true, 37071 else if `type' is a cv class or union type with copy constructors 37072 that are known not to throw an exception then the trait is true, 37073 else it is false. Requires: `type' shall be a complete type, an 37074 array type of unknown bound, or is a `void' type. 37075 37076`__has_nothrow_constructor (type)' 37077 If `__has_trivial_constructor (type)' is true then the trait is 37078 true, else if `type' is a cv class or union type (or array 37079 thereof) with a default constructor that is known not to throw an 37080 exception then the trait is true, else it is false. Requires: 37081 `type' shall be a complete type, an array type of unknown bound, 37082 or is a `void' type. 37083 37084`__has_trivial_assign (type)' 37085 If `type' is const qualified or is a reference type then the trait 37086 is false. Otherwise if `__is_pod (type)' is true then the trait is 37087 true, else if `type' is a cv class or union type with a trivial 37088 copy assignment ([class.copy]) then the trait is true, else it is 37089 false. Requires: `type' shall be a complete type, an array type 37090 of unknown bound, or is a `void' type. 37091 37092`__has_trivial_copy (type)' 37093 If `__is_pod (type)' is true or `type' is a reference type then 37094 the trait is true, else if `type' is a cv class or union type with 37095 a trivial copy constructor ([class.copy]) then the trait is true, 37096 else it is false. Requires: `type' shall be a complete type, an 37097 array type of unknown bound, or is a `void' type. 37098 37099`__has_trivial_constructor (type)' 37100 If `__is_pod (type)' is true then the trait is true, else if 37101 `type' is a cv class or union type (or array thereof) with a 37102 trivial default constructor ([class.ctor]) then the trait is true, 37103 else it is false. Requires: `type' shall be a complete type, an 37104 array type of unknown bound, or is a `void' type. 37105 37106`__has_trivial_destructor (type)' 37107 If `__is_pod (type)' is true or `type' is a reference type then 37108 the trait is true, else if `type' is a cv class or union type (or 37109 array thereof) with a trivial destructor ([class.dtor]) then the 37110 trait is true, else it is false. Requires: `type' shall be a 37111 complete type, an array type of unknown bound, or is a `void' type. 37112 37113`__has_virtual_destructor (type)' 37114 If `type' is a class type with a virtual destructor ([class.dtor]) 37115 then the trait is true, else it is false. Requires: `type' shall 37116 be a complete type, an array type of unknown bound, or is a `void' 37117 type. 37118 37119`__is_abstract (type)' 37120 If `type' is an abstract class ([class.abstract]) then the trait 37121 is true, else it is false. Requires: `type' shall be a complete 37122 type, an array type of unknown bound, or is a `void' type. 37123 37124`__is_base_of (base_type, derived_type)' 37125 If `base_type' is a base class of `derived_type' ([class.derived]) 37126 then the trait is true, otherwise it is false. Top-level cv 37127 qualifications of `base_type' and `derived_type' are ignored. For 37128 the purposes of this trait, a class type is considered is own 37129 base. Requires: if `__is_class (base_type)' and `__is_class 37130 (derived_type)' are true and `base_type' and `derived_type' are 37131 not the same type (disregarding cv-qualifiers), `derived_type' 37132 shall be a complete type. Diagnostic is produced if this 37133 requirement is not met. 37134 37135`__is_class (type)' 37136 If `type' is a cv class type, and not a union type 37137 ([basic.compound]) the trait is true, else it is false. 37138 37139`__is_empty (type)' 37140 If `__is_class (type)' is false then the trait is false. 37141 Otherwise `type' is considered empty if and only if: `type' has no 37142 non-static data members, or all non-static data members, if any, 37143 are bit-fields of length 0, and `type' has no virtual members, and 37144 `type' has no virtual base classes, and `type' has no base classes 37145 `base_type' for which `__is_empty (base_type)' is false. 37146 Requires: `type' shall be a complete type, an array type of 37147 unknown bound, or is a `void' type. 37148 37149`__is_enum (type)' 37150 If `type' is a cv enumeration type ([basic.compound]) the trait is 37151 true, else it is false. 37152 37153`__is_pod (type)' 37154 If `type' is a cv POD type ([basic.types]) then the trait is true, 37155 else it is false. Requires: `type' shall be a complete type, an 37156 array type of unknown bound, or is a `void' type. 37157 37158`__is_polymorphic (type)' 37159 If `type' is a polymorphic class ([class.virtual]) then the trait 37160 is true, else it is false. Requires: `type' shall be a complete 37161 type, an array type of unknown bound, or is a `void' type. 37162 37163`__is_union (type)' 37164 If `type' is a cv union type ([basic.compound]) the trait is true, 37165 else it is false. 37166 37167 37168 37169File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 37170 371717.10 Java Exceptions 37172==================== 37173 37174The Java language uses a slightly different exception handling model 37175from C++. Normally, GNU C++ will automatically detect when you are 37176writing C++ code that uses Java exceptions, and handle them 37177appropriately. However, if C++ code only needs to execute destructors 37178when Java exceptions are thrown through it, GCC will guess incorrectly. 37179Sample problematic code is: 37180 37181 struct S { ~S(); }; 37182 extern void bar(); // is written in Java, and may throw exceptions 37183 void foo() 37184 { 37185 S s; 37186 bar(); 37187 } 37188 37189The usual effect of an incorrect guess is a link failure, complaining of 37190a missing routine called `__gxx_personality_v0'. 37191 37192 You can inform the compiler that Java exceptions are to be used in a 37193translation unit, irrespective of what it might think, by writing 37194`#pragma GCC java_exceptions' at the head of the file. This `#pragma' 37195must appear before any functions that throw or catch exceptions, or run 37196destructors when exceptions are thrown through them. 37197 37198 You cannot mix Java and C++ exceptions in the same translation unit. 37199It is believed to be safe to throw a C++ exception from one file through 37200another file compiled for the Java exception model, or vice versa, but 37201there may be bugs in this area. 37202 37203 37204File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 37205 372067.11 Deprecated Features 37207======================== 37208 37209In the past, the GNU C++ compiler was extended to experiment with new 37210features, at a time when the C++ language was still evolving. Now that 37211the C++ standard is complete, some of those features are superseded by 37212superior alternatives. Using the old features might cause a warning in 37213some cases that the feature will be dropped in the future. In other 37214cases, the feature might be gone already. 37215 37216 While the list below is not exhaustive, it documents some of the 37217options that are now deprecated: 37218 37219`-fexternal-templates' 37220`-falt-external-templates' 37221 These are two of the many ways for G++ to implement template 37222 instantiation. *Note Template Instantiation::. The C++ standard 37223 clearly defines how template definitions have to be organized 37224 across implementation units. G++ has an implicit instantiation 37225 mechanism that should work just fine for standard-conforming code. 37226 37227`-fstrict-prototype' 37228`-fno-strict-prototype' 37229 Previously it was possible to use an empty prototype parameter 37230 list to indicate an unspecified number of parameters (like C), 37231 rather than no parameters, as C++ demands. This feature has been 37232 removed, except where it is required for backwards compatibility. 37233 *Note Backwards Compatibility::. 37234 37235 G++ allows a virtual function returning `void *' to be overridden by 37236one returning a different pointer type. This extension to the 37237covariant return type rules is now deprecated and will be removed from a 37238future version. 37239 37240 The G++ minimum and maximum operators (`<?' and `>?') and their 37241compound forms (`<?=') and `>?=') have been deprecated and are now 37242removed from G++. Code using these operators should be modified to use 37243`std::min' and `std::max' instead. 37244 37245 The named return value extension has been deprecated, and is now 37246removed from G++. 37247 37248 The use of initializer lists with new expressions has been deprecated, 37249and is now removed from G++. 37250 37251 Floating and complex non-type template parameters have been deprecated, 37252and are now removed from G++. 37253 37254 The implicit typename extension has been deprecated and is now removed 37255from G++. 37256 37257 The use of default arguments in function pointers, function typedefs 37258and other places where they are not permitted by the standard is 37259deprecated and will be removed from a future version of G++. 37260 37261 G++ allows floating-point literals to appear in integral constant 37262expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 37263deprecated and will be removed from a future version. 37264 37265 G++ allows static data members of const floating-point type to be 37266declared with an initializer in a class definition. The standard only 37267allows initializers for static members of const integral types and const 37268enumeration types so this extension has been deprecated and will be 37269removed from a future version. 37270 37271 37272File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 37273 372747.12 Backwards Compatibility 37275============================ 37276 37277Now that there is a definitive ISO standard C++, G++ has a specification 37278to adhere to. The C++ language evolved over time, and features that 37279used to be acceptable in previous drafts of the standard, such as the 37280ARM [Annotated C++ Reference Manual], are no longer accepted. In order 37281to allow compilation of C++ written to such drafts, G++ contains some 37282backwards compatibilities. _All such backwards compatibility features 37283are liable to disappear in future versions of G++._ They should be 37284considered deprecated. *Note Deprecated Features::. 37285 37286`For scope' 37287 If a variable is declared at for scope, it used to remain in scope 37288 until the end of the scope which contained the for statement 37289 (rather than just within the for scope). G++ retains this, but 37290 issues a warning, if such a variable is accessed outside the for 37291 scope. 37292 37293`Implicit C language' 37294 Old C system header files did not contain an `extern "C" {...}' 37295 scope to set the language. On such systems, all header files are 37296 implicitly scoped inside a C language scope. Also, an empty 37297 prototype `()' will be treated as an unspecified number of 37298 arguments, rather than no arguments, as C++ demands. 37299 37300 37301File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 37302 373038 GNU Objective-C runtime features 37304********************************** 37305 37306This document is meant to describe some of the GNU Objective-C runtime 37307features. It is not intended to teach you Objective-C, there are 37308several resources on the Internet that present the language. Questions 37309and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>. 37310 37311* Menu: 37312 37313* Executing code before main:: 37314* Type encoding:: 37315* Garbage Collection:: 37316* Constant string objects:: 37317* compatibility_alias:: 37318 37319 37320File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 37321 373228.1 `+load': Executing code before main 37323======================================= 37324 37325The GNU Objective-C runtime provides a way that allows you to execute 37326code before the execution of the program enters the `main' function. 37327The code is executed on a per-class and a per-category basis, through a 37328special class method `+load'. 37329 37330 This facility is very useful if you want to initialize global variables 37331which can be accessed by the program directly, without sending a message 37332to the class first. The usual way to initialize global variables, in 37333the `+initialize' method, might not be useful because `+initialize' is 37334only called when the first message is sent to a class object, which in 37335some cases could be too late. 37336 37337 Suppose for example you have a `FileStream' class that declares 37338`Stdin', `Stdout' and `Stderr' as global variables, like below: 37339 37340 37341 FileStream *Stdin = nil; 37342 FileStream *Stdout = nil; 37343 FileStream *Stderr = nil; 37344 37345 @implementation FileStream 37346 37347 + (void)initialize 37348 { 37349 Stdin = [[FileStream new] initWithFd:0]; 37350 Stdout = [[FileStream new] initWithFd:1]; 37351 Stderr = [[FileStream new] initWithFd:2]; 37352 } 37353 37354 /* Other methods here */ 37355 @end 37356 37357 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 37358in `+initialize' occurs too late. The programmer can send a message to 37359one of these objects before the variables are actually initialized, 37360thus sending messages to the `nil' object. The `+initialize' method 37361which actually initializes the global variables is not invoked until 37362the first message is sent to the class object. The solution would 37363require these variables to be initialized just before entering `main'. 37364 37365 The correct solution of the above problem is to use the `+load' method 37366instead of `+initialize': 37367 37368 37369 @implementation FileStream 37370 37371 + (void)load 37372 { 37373 Stdin = [[FileStream new] initWithFd:0]; 37374 Stdout = [[FileStream new] initWithFd:1]; 37375 Stderr = [[FileStream new] initWithFd:2]; 37376 } 37377 37378 /* Other methods here */ 37379 @end 37380 37381 The `+load' is a method that is not overridden by categories. If a 37382class and a category of it both implement `+load', both methods are 37383invoked. This allows some additional initializations to be performed in 37384a category. 37385 37386 This mechanism is not intended to be a replacement for `+initialize'. 37387You should be aware of its limitations when you decide to use it 37388instead of `+initialize'. 37389 37390* Menu: 37391 37392* What you can and what you cannot do in +load:: 37393 37394 37395File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 37396 373978.1.1 What you can and what you cannot do in `+load' 37398---------------------------------------------------- 37399 37400The `+load' implementation in the GNU runtime guarantees you the 37401following things: 37402 37403 * you can write whatever C code you like; 37404 37405 * you can send messages to Objective-C constant strings (`@"this is a 37406 constant string"'); 37407 37408 * you can allocate and send messages to objects whose class is 37409 implemented in the same file; 37410 37411 * the `+load' implementation of all super classes of a class are 37412 executed before the `+load' of that class is executed; 37413 37414 * the `+load' implementation of a class is executed before the 37415 `+load' implementation of any category. 37416 37417 37418 In particular, the following things, even if they can work in a 37419particular case, are not guaranteed: 37420 37421 * allocation of or sending messages to arbitrary objects; 37422 37423 * allocation of or sending messages to objects whose classes have a 37424 category implemented in the same file; 37425 37426 37427 You should make no assumptions about receiving `+load' in sibling 37428classes when you write `+load' of a class. The order in which sibling 37429classes receive `+load' is not guaranteed. 37430 37431 The order in which `+load' and `+initialize' are called could be 37432problematic if this matters. If you don't allocate objects inside 37433`+load', it is guaranteed that `+load' is called before `+initialize'. 37434If you create an object inside `+load' the `+initialize' method of 37435object's class is invoked even if `+load' was not invoked. Note if you 37436explicitly call `+load' on a class, `+initialize' will be called first. 37437To avoid possible problems try to implement only one of these methods. 37438 37439 The `+load' method is also invoked when a bundle is dynamically loaded 37440into your running program. This happens automatically without any 37441intervening operation from you. When you write bundles and you need to 37442write `+load' you can safely create and send messages to objects whose 37443classes already exist in the running program. The same restrictions as 37444above apply to classes defined in bundle. 37445 37446 37447File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 37448 374498.2 Type encoding 37450================= 37451 37452The Objective-C compiler generates type encodings for all the types. 37453These type encodings are used at runtime to find out information about 37454selectors and methods and about objects and classes. 37455 37456 The types are encoded in the following way: 37457 37458`_Bool' `B' 37459`char' `c' 37460`unsigned char' `C' 37461`short' `s' 37462`unsigned short' `S' 37463`int' `i' 37464`unsigned int' `I' 37465`long' `l' 37466`unsigned long' `L' 37467`long long' `q' 37468`unsigned long `Q' 37469long' 37470`float' `f' 37471`double' `d' 37472`void' `v' 37473`id' `@' 37474`Class' `#' 37475`SEL' `:' 37476`char*' `*' 37477unknown type `?' 37478Complex types `j' followed by the inner type. For example 37479 `_Complex double' is encoded as "jd". 37480bit-fields `b' followed by the starting position of the 37481 bit-field, the type of the bit-field and the size of 37482 the bit-field (the bit-fields encoding was changed 37483 from the NeXT's compiler encoding, see below) 37484 37485 The encoding of bit-fields has changed to allow bit-fields to be 37486properly handled by the runtime functions that compute sizes and 37487alignments of types that contain bit-fields. The previous encoding 37488contained only the size of the bit-field. Using only this information 37489it is not possible to reliably compute the size occupied by the 37490bit-field. This is very important in the presence of the Boehm's 37491garbage collector because the objects are allocated using the typed 37492memory facility available in this collector. The typed memory 37493allocation requires information about where the pointers are located 37494inside the object. 37495 37496 The position in the bit-field is the position, counting in bits, of the 37497bit closest to the beginning of the structure. 37498 37499 The non-atomic types are encoded as follows: 37500 37501pointers `^' followed by the pointed type. 37502arrays `[' followed by the number of elements in the array 37503 followed by the type of the elements followed by `]' 37504structures `{' followed by the name of the structure (or `?' if the 37505 structure is unnamed), the `=' sign, the type of the 37506 members and by `}' 37507unions `(' followed by the name of the structure (or `?' if the 37508 union is unnamed), the `=' sign, the type of the members 37509 followed by `)' 37510 37511 Here are some types and their encodings, as they are generated by the 37512compiler on an i386 machine: 37513 37514 37515Objective-C type Compiler encoding 37516 int a[10]; `[10i]' 37517 struct { `{?=i[3f]b128i3b131i2c}' 37518 int i; 37519 float f[3]; 37520 int a:3; 37521 int b:2; 37522 char c; 37523 } 37524 37525 37526 In addition to the types the compiler also encodes the type 37527specifiers. The table below describes the encoding of the current 37528Objective-C type specifiers: 37529 37530 37531Specifier Encoding 37532`const' `r' 37533`in' `n' 37534`inout' `N' 37535`out' `o' 37536`bycopy' `O' 37537`oneway' `V' 37538 37539 37540 The type specifiers are encoded just before the type. Unlike types 37541however, the type specifiers are only encoded when they appear in method 37542argument types. 37543 37544 37545File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 37546 375478.3 Garbage Collection 37548====================== 37549 37550Support for a new memory management policy has been added by using a 37551powerful conservative garbage collector, known as the 37552Boehm-Demers-Weiser conservative garbage collector. It is available 37553from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 37554 37555 To enable the support for it you have to configure the compiler using 37556an additional argument, `--enable-objc-gc'. You need to have garbage 37557collector installed before building the compiler. This will build an 37558additional runtime library which has several enhancements to support 37559the garbage collector. The new library has a new name, `libobjc_gc.a' 37560to not conflict with the non-garbage-collected library. 37561 37562 When the garbage collector is used, the objects are allocated using the 37563so-called typed memory allocation mechanism available in the 37564Boehm-Demers-Weiser collector. This mode requires precise information 37565on where pointers are located inside objects. This information is 37566computed once per class, immediately after the class has been 37567initialized. 37568 37569 There is a new runtime function `class_ivar_set_gcinvisible()' which 37570can be used to declare a so-called "weak pointer" reference. Such a 37571pointer is basically hidden for the garbage collector; this can be 37572useful in certain situations, especially when you want to keep track of 37573the allocated objects, yet allow them to be collected. This kind of 37574pointers can only be members of objects, you cannot declare a global 37575pointer as a weak reference. Every type which is a pointer type can be 37576declared a weak pointer, including `id', `Class' and `SEL'. 37577 37578 Here is an example of how to use this feature. Suppose you want to 37579implement a class whose instances hold a weak pointer reference; the 37580following class does this: 37581 37582 37583 @interface WeakPointer : Object 37584 { 37585 const void* weakPointer; 37586 } 37587 37588 - initWithPointer:(const void*)p; 37589 - (const void*)weakPointer; 37590 @end 37591 37592 37593 @implementation WeakPointer 37594 37595 + (void)initialize 37596 { 37597 class_ivar_set_gcinvisible (self, "weakPointer", YES); 37598 } 37599 37600 - initWithPointer:(const void*)p 37601 { 37602 weakPointer = p; 37603 return self; 37604 } 37605 37606 - (const void*)weakPointer 37607 { 37608 return weakPointer; 37609 } 37610 37611 @end 37612 37613 Weak pointers are supported through a new type character specifier 37614represented by the `!' character. The `class_ivar_set_gcinvisible()' 37615function adds or removes this specifier to the string type description 37616of the instance variable named as argument. 37617 37618 37619File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 37620 376218.4 Constant string objects 37622=========================== 37623 37624GNU Objective-C provides constant string objects that are generated 37625directly by the compiler. You declare a constant string object by 37626prefixing a C constant string with the character `@': 37627 37628 id myString = @"this is a constant string object"; 37629 37630 The constant string objects are by default instances of the 37631`NXConstantString' class which is provided by the GNU Objective-C 37632runtime. To get the definition of this class you must include the 37633`objc/NXConstStr.h' header file. 37634 37635 User defined libraries may want to implement their own constant string 37636class. To be able to support them, the GNU Objective-C compiler 37637provides a new command line options 37638`-fconstant-string-class=CLASS-NAME'. The provided class should adhere 37639to a strict structure, the same as `NXConstantString''s structure: 37640 37641 37642 @interface MyConstantStringClass 37643 { 37644 Class isa; 37645 char *c_string; 37646 unsigned int len; 37647 } 37648 @end 37649 37650 `NXConstantString' inherits from `Object'; user class libraries may 37651choose to inherit the customized constant string class from a different 37652class than `Object'. There is no requirement in the methods the 37653constant string class has to implement, but the final ivar layout of 37654the class must be the compatible with the given structure. 37655 37656 When the compiler creates the statically allocated constant string 37657object, the `c_string' field will be filled by the compiler with the 37658string; the `length' field will be filled by the compiler with the 37659string length; the `isa' pointer will be filled with `NULL' by the 37660compiler, and it will later be fixed up automatically at runtime by the 37661GNU Objective-C runtime library to point to the class which was set by 37662the `-fconstant-string-class' option when the object file is loaded (if 37663you wonder how it works behind the scenes, the name of the class to 37664use, and the list of static objects to fixup, are stored by the 37665compiler in the object file in a place where the GNU runtime library 37666will find them at runtime). 37667 37668 As a result, when a file is compiled with the 37669`-fconstant-string-class' option, all the constant string objects will 37670be instances of the class specified as argument to this option. It is 37671possible to have multiple compilation units referring to different 37672constant string classes, neither the compiler nor the linker impose any 37673restrictions in doing this. 37674 37675 37676File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 37677 376788.5 compatibility_alias 37679======================= 37680 37681This is a feature of the Objective-C compiler rather than of the 37682runtime, anyway since it is documented nowhere and its existence was 37683forgotten, we are documenting it here. 37684 37685 The keyword `@compatibility_alias' allows you to define a class name 37686as equivalent to another class name. For example: 37687 37688 @compatibility_alias WOApplication GSWApplication; 37689 37690 tells the compiler that each time it encounters `WOApplication' as a 37691class name, it should replace it with `GSWApplication' (that is, 37692`WOApplication' is just an alias for `GSWApplication'). 37693 37694 There are some constraints on how this can be used-- 37695 37696 * `WOApplication' (the alias) must not be an existing class; 37697 37698 * `GSWApplication' (the real class) must be an existing class. 37699 37700 37701 37702File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 37703 377049 Binary Compatibility 37705********************** 37706 37707Binary compatibility encompasses several related concepts: 37708 37709"application binary interface (ABI)" 37710 The set of runtime conventions followed by all of the tools that 37711 deal with binary representations of a program, including 37712 compilers, assemblers, linkers, and language runtime support. 37713 Some ABIs are formal with a written specification, possibly 37714 designed by multiple interested parties. Others are simply the 37715 way things are actually done by a particular set of tools. 37716 37717"ABI conformance" 37718 A compiler conforms to an ABI if it generates code that follows 37719 all of the specifications enumerated by that ABI. A library 37720 conforms to an ABI if it is implemented according to that ABI. An 37721 application conforms to an ABI if it is built using tools that 37722 conform to that ABI and does not contain source code that 37723 specifically changes behavior specified by the ABI. 37724 37725"calling conventions" 37726 Calling conventions are a subset of an ABI that specify of how 37727 arguments are passed and function results are returned. 37728 37729"interoperability" 37730 Different sets of tools are interoperable if they generate files 37731 that can be used in the same program. The set of tools includes 37732 compilers, assemblers, linkers, libraries, header files, startup 37733 files, and debuggers. Binaries produced by different sets of 37734 tools are not interoperable unless they implement the same ABI. 37735 This applies to different versions of the same tools as well as 37736 tools from different vendors. 37737 37738"intercallability" 37739 Whether a function in a binary built by one set of tools can call a 37740 function in a binary built by a different set of tools is a subset 37741 of interoperability. 37742 37743"implementation-defined features" 37744 Language standards include lists of implementation-defined 37745 features whose behavior can vary from one implementation to 37746 another. Some of these features are normally covered by a 37747 platform's ABI and others are not. The features that are not 37748 covered by an ABI generally affect how a program behaves, but not 37749 intercallability. 37750 37751"compatibility" 37752 Conformance to the same ABI and the same behavior of 37753 implementation-defined features are both relevant for 37754 compatibility. 37755 37756 The application binary interface implemented by a C or C++ compiler 37757affects code generation and runtime support for: 37758 37759 * size and alignment of data types 37760 37761 * layout of structured types 37762 37763 * calling conventions 37764 37765 * register usage conventions 37766 37767 * interfaces for runtime arithmetic support 37768 37769 * object file formats 37770 37771 In addition, the application binary interface implemented by a C++ 37772compiler affects code generation and runtime support for: 37773 * name mangling 37774 37775 * exception handling 37776 37777 * invoking constructors and destructors 37778 37779 * layout, alignment, and padding of classes 37780 37781 * layout and alignment of virtual tables 37782 37783 Some GCC compilation options cause the compiler to generate code that 37784does not conform to the platform's default ABI. Other options cause 37785different program behavior for implementation-defined features that are 37786not covered by an ABI. These options are provided for consistency with 37787other compilers that do not follow the platform's default ABI or the 37788usual behavior of implementation-defined features for the platform. Be 37789very careful about using such options. 37790 37791 Most platforms have a well-defined ABI that covers C code, but ABIs 37792that cover C++ functionality are not yet common. 37793 37794 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 37795written, vendor-neutral C++ ABI that was designed to be specific to 3779664-bit Itanium but also includes generic specifications that apply to 37797any platform. This C++ ABI is also implemented by other compiler 37798vendors on some platforms, notably GNU/Linux and BSD systems. We have 37799tried hard to provide a stable ABI that will be compatible with future 37800GCC releases, but it is possible that we will encounter problems that 37801make this difficult. Such problems could include different 37802interpretations of the C++ ABI by different vendors, bugs in the ABI, or 37803bugs in the implementation of the ABI in different compilers. GCC's 37804`-Wabi' switch warns when G++ generates code that is probably not 37805compatible with the C++ ABI. 37806 37807 The C++ library used with a C++ compiler includes the Standard C++ 37808Library, with functionality defined in the C++ Standard, plus language 37809runtime support. The runtime support is included in a C++ ABI, but 37810there is no formal ABI for the Standard C++ Library. Two 37811implementations of that library are interoperable if one follows the 37812de-facto ABI of the other and if they are both built with the same 37813compiler, or with compilers that conform to the same ABI for C++ 37814compiler and runtime support. 37815 37816 When G++ and another C++ compiler conform to the same C++ ABI, but the 37817implementations of the Standard C++ Library that they normally use do 37818not follow the same ABI for the Standard C++ Library, object files 37819built with those compilers can be used in the same program only if they 37820use the same C++ library. This requires specifying the location of the 37821C++ library header files when invoking the compiler whose usual library 37822is not being used. The location of GCC's C++ header files depends on 37823how the GCC build was configured, but can be seen by using the G++ `-v' 37824option. With default configuration options for G++ 3.3 the compile 37825line for a different C++ compiler needs to include 37826 37827 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 37828 37829 Similarly, compiling code with G++ that must use a C++ library other 37830than the GNU C++ library requires specifying the location of the header 37831files for that other library. 37832 37833 The most straightforward way to link a program to use a particular C++ 37834library is to use a C++ driver that specifies that C++ library by 37835default. The `g++' driver, for example, tells the linker where to find 37836GCC's C++ library (`libstdc++') plus the other libraries and startup 37837files it needs, in the proper order. 37838 37839 If a program must use a different C++ library and it's not possible to 37840do the final link using a C++ driver that uses that library by default, 37841it is necessary to tell `g++' the location and name of that library. 37842It might also be necessary to specify different startup files and other 37843runtime support libraries, and to suppress the use of GCC's support 37844libraries with one or more of the options `-nostdlib', `-nostartfiles', 37845and `-nodefaultlibs'. 37846 37847 37848File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 37849 3785010 `gcov'--a Test Coverage Program 37851********************************** 37852 37853`gcov' is a tool you can use in conjunction with GCC to test code 37854coverage in your programs. 37855 37856* Menu: 37857 37858* Gcov Intro:: Introduction to gcov. 37859* Invoking Gcov:: How to use gcov. 37860* Gcov and Optimization:: Using gcov with GCC optimization. 37861* Gcov Data Files:: The files used by gcov. 37862* Cross-profiling:: Data file relocation. 37863 37864 37865File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 37866 3786710.1 Introduction to `gcov' 37868=========================== 37869 37870`gcov' is a test coverage program. Use it in concert with GCC to 37871analyze your programs to help create more efficient, faster running 37872code and to discover untested parts of your program. You can use 37873`gcov' as a profiling tool to help discover where your optimization 37874efforts will best affect your code. You can also use `gcov' along with 37875the other profiling tool, `gprof', to assess which parts of your code 37876use the greatest amount of computing time. 37877 37878 Profiling tools help you analyze your code's performance. Using a 37879profiler such as `gcov' or `gprof', you can find out some basic 37880performance statistics, such as: 37881 37882 * how often each line of code executes 37883 37884 * what lines of code are actually executed 37885 37886 * how much computing time each section of code uses 37887 37888 Once you know these things about how your code works when compiled, you 37889can look at each module to see which modules should be optimized. 37890`gcov' helps you determine where to work on optimization. 37891 37892 Software developers also use coverage testing in concert with 37893testsuites, to make sure software is actually good enough for a release. 37894Testsuites can verify that a program works as expected; a coverage 37895program tests to see how much of the program is exercised by the 37896testsuite. Developers can then determine what kinds of test cases need 37897to be added to the testsuites to create both better testing and a better 37898final product. 37899 37900 You should compile your code without optimization if you plan to use 37901`gcov' because the optimization, by combining some lines of code into 37902one function, may not give you as much information as you need to look 37903for `hot spots' where the code is using a great deal of computer time. 37904Likewise, because `gcov' accumulates statistics by line (at the lowest 37905resolution), it works best with a programming style that places only 37906one statement on each line. If you use complicated macros that expand 37907to loops or to other control structures, the statistics are less 37908helpful--they only report on the line where the macro call appears. If 37909your complex macros behave like functions, you can replace them with 37910inline functions to solve this problem. 37911 37912 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 37913many times each line of a source file `SOURCEFILE.c' has executed. You 37914can use these logfiles along with `gprof' to aid in fine-tuning the 37915performance of your programs. `gprof' gives timing information you can 37916use along with the information you get from `gcov'. 37917 37918 `gcov' works only on code compiled with GCC. It is not compatible 37919with any other profiling or test coverage mechanism. 37920 37921 37922File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 37923 3792410.2 Invoking `gcov' 37925==================== 37926 37927 gcov [OPTIONS] SOURCEFILES 37928 37929 `gcov' accepts the following options: 37930 37931`-h' 37932`--help' 37933 Display help about using `gcov' (on the standard output), and exit 37934 without doing any further processing. 37935 37936`-v' 37937`--version' 37938 Display the `gcov' version number (on the standard output), and 37939 exit without doing any further processing. 37940 37941`-a' 37942`--all-blocks' 37943 Write individual execution counts for every basic block. Normally 37944 gcov outputs execution counts only for the main blocks of a line. 37945 With this option you can determine if blocks within a single line 37946 are not being executed. 37947 37948`-b' 37949`--branch-probabilities' 37950 Write branch frequencies to the output file, and write branch 37951 summary info to the standard output. This option allows you to 37952 see how often each branch in your program was taken. 37953 Unconditional branches will not be shown, unless the `-u' option 37954 is given. 37955 37956`-c' 37957`--branch-counts' 37958 Write branch frequencies as the number of branches taken, rather 37959 than the percentage of branches taken. 37960 37961`-n' 37962`--no-output' 37963 Do not create the `gcov' output file. 37964 37965`-l' 37966`--long-file-names' 37967 Create long file names for included source files. For example, if 37968 the header file `x.h' contains code, and was included in the file 37969 `a.c', then running `gcov' on the file `a.c' will produce an 37970 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 37971 can be useful if `x.h' is included in multiple source files. If 37972 you use the `-p' option, both the including and included file 37973 names will be complete path names. 37974 37975`-p' 37976`--preserve-paths' 37977 Preserve complete path information in the names of generated 37978 `.gcov' files. Without this option, just the filename component is 37979 used. With this option, all directories are used, with `/' 37980 characters translated to `#' characters, `.' directory components 37981 removed and `..' components renamed to `^'. This is useful if 37982 sourcefiles are in several different directories. It also affects 37983 the `-l' option. 37984 37985`-f' 37986`--function-summaries' 37987 Output summaries for each function in addition to the file level 37988 summary. 37989 37990`-o DIRECTORY|FILE' 37991`--object-directory DIRECTORY' 37992`--object-file FILE' 37993 Specify either the directory containing the gcov data files, or the 37994 object path name. The `.gcno', and `.gcda' data files are 37995 searched for using this option. If a directory is specified, the 37996 data files are in that directory and named after the source file 37997 name, without its extension. If a file is specified here, the 37998 data files are named after that file, without its extension. If 37999 this option is not supplied, it defaults to the current directory. 38000 38001`-u' 38002`--unconditional-branches' 38003 When branch probabilities are given, include those of 38004 unconditional branches. Unconditional branches are normally not 38005 interesting. 38006 38007 38008 `gcov' should be run with the current directory the same as that when 38009you invoked the compiler. Otherwise it will not be able to locate the 38010source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 38011current directory. These contain the coverage information of the 38012source file they correspond to. One `.gcov' file is produced for each 38013source file containing code, which was compiled to produce the data 38014files. The MANGLEDNAME part of the output file name is usually simply 38015the source file name, but can be something more complicated if the `-l' 38016or `-p' options are given. Refer to those options for details. 38017 38018 The `.gcov' files contain the `:' separated fields along with program 38019source code. The format is 38020 38021 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 38022 38023 Additional block information may succeed each line, when requested by 38024command line option. The EXECUTION_COUNT is `-' for lines containing 38025no code and `#####' for lines which were never executed. Some lines of 38026information at the start have LINE_NUMBER of zero. 38027 38028 The preamble lines are of the form 38029 38030 -:0:TAG:VALUE 38031 38032 The ordering and number of these preamble lines will be augmented as 38033`gcov' development progresses -- do not rely on them remaining 38034unchanged. Use TAG to locate a particular preamble line. 38035 38036 The additional block information is of the form 38037 38038 TAG INFORMATION 38039 38040 The INFORMATION is human readable, but designed to be simple enough 38041for machine parsing too. 38042 38043 When printing percentages, 0% and 100% are only printed when the values 38044are _exactly_ 0% and 100% respectively. Other values which would 38045conventionally be rounded to 0% or 100% are instead printed as the 38046nearest non-boundary value. 38047 38048 When using `gcov', you must first compile your program with two 38049special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 38050compiler to generate additional information needed by gcov (basically a 38051flow graph of the program) and also includes additional code in the 38052object files for generating the extra profiling information needed by 38053gcov. These additional files are placed in the directory where the 38054object file is located. 38055 38056 Running the program will cause profile output to be generated. For 38057each source file compiled with `-fprofile-arcs', an accompanying 38058`.gcda' file will be placed in the object file directory. 38059 38060 Running `gcov' with your program's source file names as arguments will 38061now produce a listing of the code along with frequency of execution for 38062each line. For example, if your program is called `tmp.c', this is 38063what you see when you use the basic `gcov' facility: 38064 38065 $ gcc -fprofile-arcs -ftest-coverage tmp.c 38066 $ a.out 38067 $ gcov tmp.c 38068 90.00% of 10 source lines executed in file tmp.c 38069 Creating tmp.c.gcov. 38070 38071 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 38072 38073 -: 0:Source:tmp.c 38074 -: 0:Graph:tmp.gcno 38075 -: 0:Data:tmp.gcda 38076 -: 0:Runs:1 38077 -: 0:Programs:1 38078 -: 1:#include <stdio.h> 38079 -: 2: 38080 -: 3:int main (void) 38081 1: 4:{ 38082 1: 5: int i, total; 38083 -: 6: 38084 1: 7: total = 0; 38085 -: 8: 38086 11: 9: for (i = 0; i < 10; i++) 38087 10: 10: total += i; 38088 -: 11: 38089 1: 12: if (total != 45) 38090 #####: 13: printf ("Failure\n"); 38091 -: 14: else 38092 1: 15: printf ("Success\n"); 38093 1: 16: return 0; 38094 -: 17:} 38095 38096 When you use the `-a' option, you will get individual block counts, 38097and the output looks like this: 38098 38099 -: 0:Source:tmp.c 38100 -: 0:Graph:tmp.gcno 38101 -: 0:Data:tmp.gcda 38102 -: 0:Runs:1 38103 -: 0:Programs:1 38104 -: 1:#include <stdio.h> 38105 -: 2: 38106 -: 3:int main (void) 38107 1: 4:{ 38108 1: 4-block 0 38109 1: 5: int i, total; 38110 -: 6: 38111 1: 7: total = 0; 38112 -: 8: 38113 11: 9: for (i = 0; i < 10; i++) 38114 11: 9-block 0 38115 10: 10: total += i; 38116 10: 10-block 0 38117 -: 11: 38118 1: 12: if (total != 45) 38119 1: 12-block 0 38120 #####: 13: printf ("Failure\n"); 38121 $$$$$: 13-block 0 38122 -: 14: else 38123 1: 15: printf ("Success\n"); 38124 1: 15-block 0 38125 1: 16: return 0; 38126 1: 16-block 0 38127 -: 17:} 38128 38129 In this mode, each basic block is only shown on one line - the last 38130line of the block. A multi-line block will only contribute to the 38131execution count of that last line, and other lines will not be shown to 38132contain code, unless previous blocks end on those lines. The total 38133execution count of a line is shown and subsequent lines show the 38134execution counts for individual blocks that end on that line. After 38135each block, the branch and call counts of the block will be shown, if 38136the `-b' option is given. 38137 38138 Because of the way GCC instruments calls, a call count can be shown 38139after a line with no individual blocks. As you can see, line 13 38140contains a basic block that was not executed. 38141 38142 When you use the `-b' option, your output looks like this: 38143 38144 $ gcov -b tmp.c 38145 90.00% of 10 source lines executed in file tmp.c 38146 80.00% of 5 branches executed in file tmp.c 38147 80.00% of 5 branches taken at least once in file tmp.c 38148 50.00% of 2 calls executed in file tmp.c 38149 Creating tmp.c.gcov. 38150 38151 Here is a sample of a resulting `tmp.c.gcov' file: 38152 38153 -: 0:Source:tmp.c 38154 -: 0:Graph:tmp.gcno 38155 -: 0:Data:tmp.gcda 38156 -: 0:Runs:1 38157 -: 0:Programs:1 38158 -: 1:#include <stdio.h> 38159 -: 2: 38160 -: 3:int main (void) 38161 function main called 1 returned 1 blocks executed 75% 38162 1: 4:{ 38163 1: 5: int i, total; 38164 -: 6: 38165 1: 7: total = 0; 38166 -: 8: 38167 11: 9: for (i = 0; i < 10; i++) 38168 branch 0 taken 91% (fallthrough) 38169 branch 1 taken 9% 38170 10: 10: total += i; 38171 -: 11: 38172 1: 12: if (total != 45) 38173 branch 0 taken 0% (fallthrough) 38174 branch 1 taken 100% 38175 #####: 13: printf ("Failure\n"); 38176 call 0 never executed 38177 -: 14: else 38178 1: 15: printf ("Success\n"); 38179 call 0 called 1 returned 100% 38180 1: 16: return 0; 38181 -: 17:} 38182 38183 For each function, a line is printed showing how many times the 38184function is called, how many times it returns and what percentage of the 38185function's blocks were executed. 38186 38187 For each basic block, a line is printed after the last line of the 38188basic block describing the branch or call that ends the basic block. 38189There can be multiple branches and calls listed for a single source 38190line if there are multiple basic blocks that end on that line. In this 38191case, the branches and calls are each given a number. There is no 38192simple way to map these branches and calls back to source constructs. 38193In general, though, the lowest numbered branch or call will correspond 38194to the leftmost construct on the source line. 38195 38196 For a branch, if it was executed at least once, then a percentage 38197indicating the number of times the branch was taken divided by the 38198number of times the branch was executed will be printed. Otherwise, the 38199message "never executed" is printed. 38200 38201 For a call, if it was executed at least once, then a percentage 38202indicating the number of times the call returned divided by the number 38203of times the call was executed will be printed. This will usually be 38204100%, but may be less for functions that call `exit' or `longjmp', and 38205thus may not return every time they are called. 38206 38207 The execution counts are cumulative. If the example program were 38208executed again without removing the `.gcda' file, the count for the 38209number of times each line in the source was executed would be added to 38210the results of the previous run(s). This is potentially useful in 38211several ways. For example, it could be used to accumulate data over a 38212number of program runs as part of a test verification suite, or to 38213provide more accurate long-term information over a large number of 38214program runs. 38215 38216 The data in the `.gcda' files is saved immediately before the program 38217exits. For each source file compiled with `-fprofile-arcs', the 38218profiling code first attempts to read in an existing `.gcda' file; if 38219the file doesn't match the executable (differing number of basic block 38220counts) it will ignore the contents of the file. It then adds in the 38221new execution counts and finally writes the data to the file. 38222 38223 38224File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 38225 3822610.3 Using `gcov' with GCC Optimization 38227======================================= 38228 38229If you plan to use `gcov' to help optimize your code, you must first 38230compile your program with two special GCC options: `-fprofile-arcs 38231-ftest-coverage'. Aside from that, you can use any other GCC options; 38232but if you want to prove that every single line in your program was 38233executed, you should not compile with optimization at the same time. 38234On some machines the optimizer can eliminate some simple code lines by 38235combining them with other lines. For example, code like this: 38236 38237 if (a != b) 38238 c = 1; 38239 else 38240 c = 0; 38241 38242can be compiled into one instruction on some machines. In this case, 38243there is no way for `gcov' to calculate separate execution counts for 38244each line because there isn't separate code for each line. Hence the 38245`gcov' output looks like this if you compiled the program with 38246optimization: 38247 38248 100: 12:if (a != b) 38249 100: 13: c = 1; 38250 100: 14:else 38251 100: 15: c = 0; 38252 38253 The output shows that this block of code, combined by optimization, 38254executed 100 times. In one sense this result is correct, because there 38255was only one instruction representing all four of these lines. However, 38256the output does not indicate how many times the result was 0 and how 38257many times the result was 1. 38258 38259 Inlineable functions can create unexpected line counts. Line counts 38260are shown for the source code of the inlineable function, but what is 38261shown depends on where the function is inlined, or if it is not inlined 38262at all. 38263 38264 If the function is not inlined, the compiler must emit an out of line 38265copy of the function, in any object file that needs it. If `fileA.o' 38266and `fileB.o' both contain out of line bodies of a particular 38267inlineable function, they will also both contain coverage counts for 38268that function. When `fileA.o' and `fileB.o' are linked together, the 38269linker will, on many systems, select one of those out of line bodies 38270for all calls to that function, and remove or ignore the other. 38271Unfortunately, it will not remove the coverage counters for the unused 38272function body. Hence when instrumented, all but one use of that 38273function will show zero counts. 38274 38275 If the function is inlined in several places, the block structure in 38276each location might not be the same. For instance, a condition might 38277now be calculable at compile time in some instances. Because the 38278coverage of all the uses of the inline function will be shown for the 38279same source lines, the line counts themselves might seem inconsistent. 38280 38281 38282File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 38283 3828410.4 Brief description of `gcov' data files 38285=========================================== 38286 38287`gcov' uses two files for profiling. The names of these files are 38288derived from the original _object_ file by substituting the file suffix 38289with either `.gcno', or `.gcda'. All of these files are placed in the 38290same directory as the object file, and contain data stored in a 38291platform-independent format. 38292 38293 The `.gcno' file is generated when the source file is compiled with 38294the GCC `-ftest-coverage' option. It contains information to 38295reconstruct the basic block graphs and assign source line numbers to 38296blocks. 38297 38298 The `.gcda' file is generated when a program containing object files 38299built with the GCC `-fprofile-arcs' option is executed. A separate 38300`.gcda' file is created for each object file compiled with this option. 38301It contains arc transition counts, and some summary information. 38302 38303 The full details of the file format is specified in `gcov-io.h', and 38304functions provided in that header file should be used to access the 38305coverage files. 38306 38307 38308File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 38309 3831010.5 Data file relocation to support cross-profiling 38311==================================================== 38312 38313Running the program will cause profile output to be generated. For each 38314source file compiled with `-fprofile-arcs', an accompanying `.gcda' 38315file will be placed in the object file directory. That implicitly 38316requires running the program on the same system as it was built or 38317having the same absolute directory structure on the target system. The 38318program will try to create the needed directory structure, if it is not 38319already present. 38320 38321 To support cross-profiling, a program compiled with `-fprofile-arcs' 38322can relocate the data files based on two environment variables: 38323 38324 * GCOV_PREFIX contains the prefix to add to the absolute paths in 38325 the object file. Prefix must be absolute as well, otherwise its 38326 value is ignored. The default is no prefix. 38327 38328 * GCOV_PREFIX_STRIP indicates the how many initial directory names 38329 to strip off the hardwired absolute paths. Default value is 0. 38330 38331 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 38332 undefined, empty or non-absolute. 38333 38334 For example, if the object file `/user/build/foo.o' was built with 38335`-fprofile-arcs', the final executable will try to create the data file 38336`/user/build/foo.gcda' when running on the target system. This will 38337fail if the corresponding directory does not exist and it is unable to 38338create it. This can be overcome by, for example, setting the 38339environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 38340Such a setting will name the data file `/target/run/build/foo.gcda'. 38341 38342 You must move the data files to the expected directory tree in order to 38343use them for profile directed optimizations (`--use-profile'), or to 38344use the `gcov' tool. 38345 38346 38347File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 38348 3834911 Known Causes of Trouble with GCC 38350*********************************** 38351 38352This section describes known problems that affect users of GCC. Most 38353of these are not GCC bugs per se--if they were, we would fix them. But 38354the result for a user may be like the result of a bug. 38355 38356 Some of these problems are due to bugs in other software, some are 38357missing features that are too much work to add, and some are places 38358where people's opinions differ as to what is best. 38359 38360* Menu: 38361 38362* Actual Bugs:: Bugs we will fix later. 38363* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 38364* Interoperation:: Problems using GCC with other compilers, 38365 and with certain linkers, assemblers and debuggers. 38366* Incompatibilities:: GCC is incompatible with traditional C. 38367* Fixed Headers:: GCC uses corrected versions of system header files. 38368 This is necessary, but doesn't always work smoothly. 38369* Standard Libraries:: GCC uses the system C library, which might not be 38370 compliant with the ISO C standard. 38371* Disappointments:: Regrettable things we can't change, but not quite bugs. 38372* C++ Misunderstandings:: Common misunderstandings with GNU C++. 38373* Non-bugs:: Things we think are right, but some others disagree. 38374* Warnings and Errors:: Which problems in your code get warnings, 38375 and which get errors. 38376 38377 38378File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 38379 3838011.1 Actual Bugs We Haven't Fixed Yet 38381===================================== 38382 38383 * The `fixincludes' script interacts badly with automounters; if the 38384 directory of system header files is automounted, it tends to be 38385 unmounted while `fixincludes' is running. This would seem to be a 38386 bug in the automounter. We don't know any good way to work around 38387 it. 38388 38389 38390File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 38391 3839211.2 Cross-Compiler Problems 38393============================ 38394 38395You may run into problems with cross compilation on certain machines, 38396for several reasons. 38397 38398 * At present, the program `mips-tfile' which adds debug support to 38399 object files on MIPS systems does not work in a cross compile 38400 environment. 38401 38402 38403File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 38404 3840511.3 Interoperation 38406=================== 38407 38408This section lists various difficulties encountered in using GCC 38409together with other compilers or with the assemblers, linkers, 38410libraries and debuggers on certain systems. 38411 38412 * On many platforms, GCC supports a different ABI for C++ than do 38413 other compilers, so the object files compiled by GCC cannot be 38414 used with object files generated by another C++ compiler. 38415 38416 An area where the difference is most apparent is name mangling. 38417 The use of different name mangling is intentional, to protect you 38418 from more subtle problems. Compilers differ as to many internal 38419 details of C++ implementation, including: how class instances are 38420 laid out, how multiple inheritance is implemented, and how virtual 38421 function calls are handled. If the name encoding were made the 38422 same, your programs would link against libraries provided from 38423 other compilers--but the programs would then crash when run. 38424 Incompatible libraries are then detected at link time, rather than 38425 at run time. 38426 38427 * On some BSD systems, including some versions of Ultrix, use of 38428 profiling causes static variable destructors (currently used only 38429 in C++) not to be run. 38430 38431 * On some SGI systems, when you use `-lgl_s' as an option, it gets 38432 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 38433 does not happen when you use GCC. You must specify all three 38434 options explicitly. 38435 38436 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 38437 boundary, and it expects every `double' to be so aligned. The Sun 38438 compiler usually gives `double' values 8-byte alignment, with one 38439 exception: function arguments of type `double' may not be aligned. 38440 38441 As a result, if a function compiled with Sun CC takes the address 38442 of an argument of type `double' and passes this pointer of type 38443 `double *' to a function compiled with GCC, dereferencing the 38444 pointer may cause a fatal signal. 38445 38446 One way to solve this problem is to compile your entire program 38447 with GCC. Another solution is to modify the function that is 38448 compiled with Sun CC to copy the argument into a local variable; 38449 local variables are always properly aligned. A third solution is 38450 to modify the function that uses the pointer to dereference it via 38451 the following function `access_double' instead of directly with 38452 `*': 38453 38454 inline double 38455 access_double (double *unaligned_ptr) 38456 { 38457 union d2i { double d; int i[2]; }; 38458 38459 union d2i *p = (union d2i *) unaligned_ptr; 38460 union d2i u; 38461 38462 u.i[0] = p->i[0]; 38463 u.i[1] = p->i[1]; 38464 38465 return u.d; 38466 } 38467 38468 Storing into the pointer can be done likewise with the same union. 38469 38470 * On Solaris, the `malloc' function in the `libmalloc.a' library may 38471 allocate memory that is only 4 byte aligned. Since GCC on the 38472 SPARC assumes that doubles are 8 byte aligned, this may result in a 38473 fatal signal if doubles are stored in memory allocated by the 38474 `libmalloc.a' library. 38475 38476 The solution is to not use the `libmalloc.a' library. Use instead 38477 `malloc' and related functions from `libc.a'; they do not have 38478 this problem. 38479 38480 * On the HP PA machine, ADB sometimes fails to work on functions 38481 compiled with GCC. Specifically, it fails to work on functions 38482 that use `alloca' or variable-size arrays. This is because GCC 38483 doesn't generate HP-UX unwind descriptors for such functions. It 38484 may even be impossible to generate them. 38485 38486 * Debugging (`-g') is not supported on the HP PA machine, unless you 38487 use the preliminary GNU tools. 38488 38489 * Taking the address of a label may generate errors from the HP-UX 38490 PA assembler. GAS for the PA does not have this problem. 38491 38492 * Using floating point parameters for indirect calls to static 38493 functions will not work when using the HP assembler. There simply 38494 is no way for GCC to specify what registers hold arguments for 38495 static functions when using the HP assembler. GAS for the PA does 38496 not have this problem. 38497 38498 * In extremely rare cases involving some very large functions you may 38499 receive errors from the HP linker complaining about an out of 38500 bounds unconditional branch offset. This used to occur more often 38501 in previous versions of GCC, but is now exceptionally rare. If 38502 you should run into it, you can work around by making your 38503 function smaller. 38504 38505 * GCC compiled code sometimes emits warnings from the HP-UX 38506 assembler of the form: 38507 38508 (warning) Use of GR3 when 38509 frame >= 8192 may cause conflict. 38510 38511 These warnings are harmless and can be safely ignored. 38512 38513 * In extremely rare cases involving some very large functions you may 38514 receive errors from the AIX Assembler complaining about a 38515 displacement that is too large. If you should run into it, you 38516 can work around by making your function smaller. 38517 38518 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 38519 semantics which merges global symbols between libraries and 38520 applications, especially necessary for C++ streams functionality. 38521 This is not the default behavior of AIX shared libraries and 38522 dynamic linking. `libstdc++.a' is built on AIX with 38523 "runtime-linking" enabled so that symbol merging can occur. To 38524 utilize this feature, the application linked with `libstdc++.a' 38525 must include the `-Wl,-brtl' flag on the link line. G++ cannot 38526 impose this because this option may interfere with the semantics 38527 of the user program and users may not always use `g++' to link his 38528 or her application. Applications are not required to use the 38529 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 38530 library which is not dependent on the symbol merging semantics 38531 will continue to function correctly. 38532 38533 * An application can interpose its own definition of functions for 38534 functions invoked by `libstdc++.a' with "runtime-linking" enabled 38535 on AIX. To accomplish this the application must be linked with 38536 "runtime-linking" option and the functions explicitly must be 38537 exported by the application (`-Wl,-brtl,-bE:exportfile'). 38538 38539 * AIX on the RS/6000 provides support (NLS) for environments outside 38540 of the United States. Compilers and assemblers use NLS to support 38541 locale-specific representations of various objects including 38542 floating-point numbers (`.' vs `,' for separating decimal 38543 fractions). There have been problems reported where the library 38544 linked with GCC does not produce the same floating-point formats 38545 that the assembler accepts. If you have this problem, set the 38546 `LANG' environment variable to `C' or `En_US'. 38547 38548 * Even if you specify `-fdollars-in-identifiers', you cannot 38549 successfully use `$' in identifiers on the RS/6000 due to a 38550 restriction in the IBM assembler. GAS supports these identifiers. 38551 38552 38553 38554File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 38555 3855611.4 Incompatibilities of GCC 38557============================= 38558 38559There are several noteworthy incompatibilities between GNU C and K&R 38560(non-ISO) versions of C. 38561 38562 * GCC normally makes string constants read-only. If several 38563 identical-looking string constants are used, GCC stores only one 38564 copy of the string. 38565 38566 One consequence is that you cannot call `mktemp' with a string 38567 constant argument. The function `mktemp' always alters the string 38568 its argument points to. 38569 38570 Another consequence is that `sscanf' does not work on some very 38571 old systems when passed a string constant as its format control 38572 string or input. This is because `sscanf' incorrectly tries to 38573 write into the string constant. Likewise `fscanf' and `scanf'. 38574 38575 The solution to these problems is to change the program to use 38576 `char'-array variables with initialization strings for these 38577 purposes instead of string constants. 38578 38579 * `-2147483648' is positive. 38580 38581 This is because 2147483648 cannot fit in the type `int', so 38582 (following the ISO C rules) its data type is `unsigned long int'. 38583 Negating this value yields 2147483648 again. 38584 38585 * GCC does not substitute macro arguments when they appear inside of 38586 string constants. For example, the following macro in GCC 38587 38588 #define foo(a) "a" 38589 38590 will produce output `"a"' regardless of what the argument A is. 38591 38592 * When you use `setjmp' and `longjmp', the only automatic variables 38593 guaranteed to remain valid are those declared `volatile'. This is 38594 a consequence of automatic register allocation. Consider this 38595 function: 38596 38597 jmp_buf j; 38598 38599 foo () 38600 { 38601 int a, b; 38602 38603 a = fun1 (); 38604 if (setjmp (j)) 38605 return a; 38606 38607 a = fun2 (); 38608 /* `longjmp (j)' may occur in `fun3'. */ 38609 return a + fun3 (); 38610 } 38611 38612 Here `a' may or may not be restored to its first value when the 38613 `longjmp' occurs. If `a' is allocated in a register, then its 38614 first value is restored; otherwise, it keeps the last value stored 38615 in it. 38616 38617 If you use the `-W' option with the `-O' option, you will get a 38618 warning when GCC thinks such a problem might be possible. 38619 38620 * Programs that use preprocessing directives in the middle of macro 38621 arguments do not work with GCC. For example, a program like this 38622 will not work: 38623 38624 foobar ( 38625 #define luser 38626 hack) 38627 38628 ISO C does not permit such a construct. 38629 38630 * K&R compilers allow comments to cross over an inclusion boundary 38631 (i.e. started in an include file and ended in the including file). 38632 38633 * Declarations of external variables and functions within a block 38634 apply only to the block containing the declaration. In other 38635 words, they have the same scope as any other declaration in the 38636 same place. 38637 38638 In some other C compilers, an `extern' declaration affects all the 38639 rest of the file even if it happens within a block. 38640 38641 * In traditional C, you can combine `long', etc., with a typedef 38642 name, as shown here: 38643 38644 typedef int foo; 38645 typedef long foo bar; 38646 38647 In ISO C, this is not allowed: `long' and other type modifiers 38648 require an explicit `int'. 38649 38650 * PCC allows typedef names to be used as function parameters. 38651 38652 * Traditional C allows the following erroneous pair of declarations 38653 to appear together in a given scope: 38654 38655 typedef int foo; 38656 typedef foo foo; 38657 38658 * GCC treats all characters of identifiers as significant. 38659 According to K&R-1 (2.2), "No more than the first eight characters 38660 are significant, although more may be used.". Also according to 38661 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 38662 the first character must be a letter. The underscore _ counts as 38663 a letter.", but GCC also allows dollar signs in identifiers. 38664 38665 * PCC allows whitespace in the middle of compound assignment 38666 operators such as `+='. GCC, following the ISO standard, does not 38667 allow this. 38668 38669 * GCC complains about unterminated character constants inside of 38670 preprocessing conditionals that fail. Some programs have English 38671 comments enclosed in conditionals that are guaranteed to fail; if 38672 these comments contain apostrophes, GCC will probably report an 38673 error. For example, this code would produce an error: 38674 38675 #if 0 38676 You can't expect this to work. 38677 #endif 38678 38679 The best solution to such a problem is to put the text into an 38680 actual C comment delimited by `/*...*/'. 38681 38682 * Many user programs contain the declaration `long time ();'. In the 38683 past, the system header files on many systems did not actually 38684 declare `time', so it did not matter what type your program 38685 declared it to return. But in systems with ISO C headers, `time' 38686 is declared to return `time_t', and if that is not the same as 38687 `long', then `long time ();' is erroneous. 38688 38689 The solution is to change your program to use appropriate system 38690 headers (`<time.h>' on systems with ISO C headers) and not to 38691 declare `time' if the system header files declare it, or failing 38692 that to use `time_t' as the return type of `time'. 38693 38694 * When compiling functions that return `float', PCC converts it to a 38695 double. GCC actually returns a `float'. If you are concerned 38696 with PCC compatibility, you should declare your functions to return 38697 `double'; you might as well say what you mean. 38698 38699 * When compiling functions that return structures or unions, GCC 38700 output code normally uses a method different from that used on most 38701 versions of Unix. As a result, code compiled with GCC cannot call 38702 a structure-returning function compiled with PCC, and vice versa. 38703 38704 The method used by GCC is as follows: a structure or union which is 38705 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 38706 union with any other size is stored into an address supplied by 38707 the caller (usually in a special, fixed register, but on some 38708 machines it is passed on the stack). The target hook 38709 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 38710 38711 By contrast, PCC on most target machines returns structures and 38712 unions of any size by copying the data into an area of static 38713 storage, and then returning the address of that storage as if it 38714 were a pointer value. The caller must copy the data from that 38715 memory area to the place where the value is wanted. GCC does not 38716 use this method because it is slower and nonreentrant. 38717 38718 On some newer machines, PCC uses a reentrant convention for all 38719 structure and union returning. GCC on most of these machines uses 38720 a compatible convention when returning structures and unions in 38721 memory, but still returns small structures and unions in registers. 38722 38723 You can tell GCC to use a compatible convention for all structure 38724 and union returning with the option `-fpcc-struct-return'. 38725 38726 * GCC complains about program fragments such as `0x74ae-0x4000' 38727 which appear to be two hexadecimal constants separated by the minus 38728 operator. Actually, this string is a single "preprocessing token". 38729 Each such token must correspond to one token in C. Since this 38730 does not, GCC prints an error message. Although it may appear 38731 obvious that what is meant is an operator and two values, the ISO 38732 C standard specifically requires that this be treated as erroneous. 38733 38734 A "preprocessing token" is a "preprocessing number" if it begins 38735 with a digit and is followed by letters, underscores, digits, 38736 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 38737 character sequences. (In strict C90 mode, the sequences `p+', 38738 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 38739 38740 To make the above program fragment valid, place whitespace in 38741 front of the minus sign. This whitespace will end the 38742 preprocessing number. 38743 38744 38745File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 38746 3874711.5 Fixed Header Files 38748======================= 38749 38750GCC needs to install corrected versions of some system header files. 38751This is because most target systems have some header files that won't 38752work with GCC unless they are changed. Some have bugs, some are 38753incompatible with ISO C, and some depend on special features of other 38754compilers. 38755 38756 Installing GCC automatically creates and installs the fixed header 38757files, by running a program called `fixincludes'. Normally, you don't 38758need to pay attention to this. But there are cases where it doesn't do 38759the right thing automatically. 38760 38761 * If you update the system's header files, such as by installing a 38762 new system version, the fixed header files of GCC are not 38763 automatically updated. They can be updated using the `mkheaders' 38764 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 38765 38766 * On some systems, header file directories contain machine-specific 38767 symbolic links in certain places. This makes it possible to share 38768 most of the header files among hosts running the same version of 38769 the system on different machine models. 38770 38771 The programs that fix the header files do not understand this 38772 special way of using symbolic links; therefore, the directory of 38773 fixed header files is good only for the machine model used to 38774 build it. 38775 38776 It is possible to make separate sets of fixed header files for the 38777 different machine models, and arrange a structure of symbolic 38778 links so as to use the proper set, but you'll have to do this by 38779 hand. 38780 38781 38782File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 38783 3878411.6 Standard Libraries 38785======================= 38786 38787GCC by itself attempts to be a conforming freestanding implementation. 38788*Note Language Standards Supported by GCC: Standards, for details of 38789what this means. Beyond the library facilities required of such an 38790implementation, the rest of the C library is supplied by the vendor of 38791the operating system. If that C library doesn't conform to the C 38792standards, then your programs might get warnings (especially when using 38793`-Wall') that you don't expect. 38794 38795 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 38796while the C standard says that `sprintf' returns an `int'. The 38797`fixincludes' program could make the prototype for this function match 38798the Standard, but that would be wrong, since the function will still 38799return `char *'. 38800 38801 If you need a Standard compliant library, then you need to find one, as 38802GCC does not provide one. The GNU C library (called `glibc') provides 38803ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 38804HURD-based GNU systems; no recent version of it supports other systems, 38805though some very old versions did. Version 2.2 of the GNU C library 38806includes nearly complete C99 support. You could also ask your 38807operating system vendor if newer libraries are available. 38808 38809 38810File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 38811 3881211.7 Disappointments and Misunderstandings 38813========================================== 38814 38815These problems are perhaps regrettable, but we don't know any practical 38816way around them. 38817 38818 * Certain local variables aren't recognized by debuggers when you 38819 compile with optimization. 38820 38821 This occurs because sometimes GCC optimizes the variable out of 38822 existence. There is no way to tell the debugger how to compute the 38823 value such a variable "would have had", and it is not clear that 38824 would be desirable anyway. So GCC simply does not mention the 38825 eliminated variable when it writes debugging information. 38826 38827 You have to expect a certain amount of disagreement between the 38828 executable and your source code, when you use optimization. 38829 38830 * Users often think it is a bug when GCC reports an error for code 38831 like this: 38832 38833 int foo (struct mumble *); 38834 38835 struct mumble { ... }; 38836 38837 int foo (struct mumble *x) 38838 { ... } 38839 38840 This code really is erroneous, because the scope of `struct 38841 mumble' in the prototype is limited to the argument list 38842 containing it. It does not refer to the `struct mumble' defined 38843 with file scope immediately below--they are two unrelated types 38844 with similar names in different scopes. 38845 38846 But in the definition of `foo', the file-scope type is used 38847 because that is available to be inherited. Thus, the definition 38848 and the prototype do not match, and you get an error. 38849 38850 This behavior may seem silly, but it's what the ISO standard 38851 specifies. It is easy enough for you to make your code work by 38852 moving the definition of `struct mumble' above the prototype. 38853 It's not worth being incompatible with ISO C just to avoid an 38854 error for the example shown above. 38855 38856 * Accesses to bit-fields even in volatile objects works by accessing 38857 larger objects, such as a byte or a word. You cannot rely on what 38858 size of object is accessed in order to read or write the 38859 bit-field; it may even vary for a given bit-field according to the 38860 precise usage. 38861 38862 If you care about controlling the amount of memory that is 38863 accessed, use volatile but do not use bit-fields. 38864 38865 * GCC comes with shell scripts to fix certain known problems in 38866 system header files. They install corrected copies of various 38867 header files in a special directory where only GCC will normally 38868 look for them. The scripts adapt to various systems by searching 38869 all the system header files for the problem cases that we know 38870 about. 38871 38872 If new system header files are installed, nothing automatically 38873 arranges to update the corrected header files. They can be 38874 updated using the `mkheaders' script installed in 38875 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 38876 38877 * On 68000 and x86 systems, for instance, you can get paradoxical 38878 results if you test the precise values of floating point numbers. 38879 For example, you can find that a floating point value which is not 38880 a NaN is not equal to itself. This results from the fact that the 38881 floating point registers hold a few more bits of precision than 38882 fit in a `double' in memory. Compiled code moves values between 38883 memory and floating point registers at its convenience, and moving 38884 them into memory truncates them. 38885 38886 You can partially avoid this problem by using the `-ffloat-store' 38887 option (*note Optimize Options::). 38888 38889 * On AIX and other platforms without weak symbol support, templates 38890 need to be instantiated explicitly and symbols for static members 38891 of templates will not be generated. 38892 38893 * On AIX, GCC scans object files and library archives for static 38894 constructors and destructors when linking an application before the 38895 linker prunes unreferenced symbols. This is necessary to prevent 38896 the AIX linker from mistakenly assuming that static constructor or 38897 destructor are unused and removing them before the scanning can 38898 occur. All static constructors and destructors found will be 38899 referenced even though the modules in which they occur may not be 38900 used by the program. This may lead to both increased executable 38901 size and unexpected symbol references. 38902 38903 38904File: gcc.info, Node: C++ Misunderstandings, Next: Non-bugs, Prev: Disappointments, Up: Trouble 38905 3890611.8 Common Misunderstandings with GNU C++ 38907========================================== 38908 38909C++ is a complex language and an evolving one, and its standard 38910definition (the ISO C++ standard) was only recently completed. As a 38911result, your C++ compiler may occasionally surprise you, even when its 38912behavior is correct. This section discusses some areas that frequently 38913give rise to questions of this sort. 38914 38915* Menu: 38916 38917* Static Definitions:: Static member declarations are not definitions 38918* Name lookup:: Name lookup, templates, and accessing members of base classes 38919* Temporaries:: Temporaries may vanish before you expect 38920* Copy Assignment:: Copy Assignment operators copy virtual bases twice 38921 38922 38923File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 38924 3892511.8.1 Declare _and_ Define Static Members 38926------------------------------------------ 38927 38928When a class has static data members, it is not enough to _declare_ the 38929static member; you must also _define_ it. For example: 38930 38931 class Foo 38932 { 38933 ... 38934 void method(); 38935 static int bar; 38936 }; 38937 38938 This declaration only establishes that the class `Foo' has an `int' 38939named `Foo::bar', and a member function named `Foo::method'. But you 38940still need to define _both_ `method' and `bar' elsewhere. According to 38941the ISO standard, you must supply an initializer in one (and only one) 38942source file, such as: 38943 38944 int Foo::bar = 0; 38945 38946 Other C++ compilers may not correctly implement the standard behavior. 38947As a result, when you switch to `g++' from one of these compilers, you 38948may discover that a program that appeared to work correctly in fact 38949does not conform to the standard: `g++' reports as undefined symbols 38950any static data members that lack definitions. 38951 38952 38953File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 38954 3895511.8.2 Name lookup, templates, and accessing members of base classes 38956-------------------------------------------------------------------- 38957 38958The C++ standard prescribes that all names that are not dependent on 38959template parameters are bound to their present definitions when parsing 38960a template function or class.(1) Only names that are dependent are 38961looked up at the point of instantiation. For example, consider 38962 38963 void foo(double); 38964 38965 struct A { 38966 template <typename T> 38967 void f () { 38968 foo (1); // 1 38969 int i = N; // 2 38970 T t; 38971 t.bar(); // 3 38972 foo (t); // 4 38973 } 38974 38975 static const int N; 38976 }; 38977 38978 Here, the names `foo' and `N' appear in a context that does not depend 38979on the type of `T'. The compiler will thus require that they are 38980defined in the context of use in the template, not only before the 38981point of instantiation, and will here use `::foo(double)' and `A::N', 38982respectively. In particular, it will convert the integer value to a 38983`double' when passing it to `::foo(double)'. 38984 38985 Conversely, `bar' and the call to `foo' in the fourth marked line are 38986used in contexts that do depend on the type of `T', so they are only 38987looked up at the point of instantiation, and you can provide 38988declarations for them after declaring the template, but before 38989instantiating it. In particular, if you instantiate `A::f<int>', the 38990last line will call an overloaded `::foo(int)' if one was provided, 38991even if after the declaration of `struct A'. 38992 38993 This distinction between lookup of dependent and non-dependent names is 38994called two-stage (or dependent) name lookup. G++ implements it since 38995version 3.4. 38996 38997 Two-stage name lookup sometimes leads to situations with behavior 38998different from non-template codes. The most common is probably this: 38999 39000 template <typename T> struct Base { 39001 int i; 39002 }; 39003 39004 template <typename T> struct Derived : public Base<T> { 39005 int get_i() { return i; } 39006 }; 39007 39008 In `get_i()', `i' is not used in a dependent context, so the compiler 39009will look for a name declared at the enclosing namespace scope (which 39010is the global scope here). It will not look into the base class, since 39011that is dependent and you may declare specializations of `Base' even 39012after declaring `Derived', so the compiler can't really know what `i' 39013would refer to. If there is no global variable `i', then you will get 39014an error message. 39015 39016 In order to make it clear that you want the member of the base class, 39017you need to defer lookup until instantiation time, at which the base 39018class is known. For this, you need to access `i' in a dependent 39019context, by either using `this->i' (remember that `this' is of type 39020`Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 39021Alternatively, `Base<T>::i' might be brought into scope by a 39022`using'-declaration. 39023 39024 Another, similar example involves calling member functions of a base 39025class: 39026 39027 template <typename T> struct Base { 39028 int f(); 39029 }; 39030 39031 template <typename T> struct Derived : Base<T> { 39032 int g() { return f(); }; 39033 }; 39034 39035 Again, the call to `f()' is not dependent on template arguments (there 39036are no arguments that depend on the type `T', and it is also not 39037otherwise specified that the call should be in a dependent context). 39038Thus a global declaration of such a function must be available, since 39039the one in the base class is not visible until instantiation time. The 39040compiler will consequently produce the following error message: 39041 39042 x.cc: In member function `int Derived<T>::g()': 39043 x.cc:6: error: there are no arguments to `f' that depend on a template 39044 parameter, so a declaration of `f' must be available 39045 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 39046 allowing the use of an undeclared name is deprecated) 39047 39048 To make the code valid either use `this->f()', or `Base<T>::f()'. 39049Using the `-fpermissive' flag will also let the compiler accept the 39050code, by marking all function calls for which no declaration is visible 39051at the time of definition of the template for later lookup at 39052instantiation time, as if it were a dependent call. We do not 39053recommend using `-fpermissive' to work around invalid code, and it will 39054also only catch cases where functions in base classes are called, not 39055where variables in base classes are used (as in the example above). 39056 39057 Note that some compilers (including G++ versions prior to 3.4) get 39058these examples wrong and accept above code without an error. Those 39059compilers do not implement two-stage name lookup correctly. 39060 39061 ---------- Footnotes ---------- 39062 39063 (1) The C++ standard just uses the term "dependent" for names that 39064depend on the type or value of template parameters. This shorter term 39065will also be used in the rest of this section. 39066 39067 39068File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 39069 3907011.8.3 Temporaries May Vanish Before You Expect 39071----------------------------------------------- 39072 39073It is dangerous to use pointers or references to _portions_ of a 39074temporary object. The compiler may very well delete the object before 39075you expect it to, leaving a pointer to garbage. The most common place 39076where this problem crops up is in classes like string classes, 39077especially ones that define a conversion function to type `char *' or 39078`const char *'--which is one reason why the standard `string' class 39079requires you to call the `c_str' member function. However, any class 39080that returns a pointer to some internal structure is potentially 39081subject to this problem. 39082 39083 For example, a program may use a function `strfunc' that returns 39084`string' objects, and another function `charfunc' that operates on 39085pointers to `char': 39086 39087 string strfunc (); 39088 void charfunc (const char *); 39089 39090 void 39091 f () 39092 { 39093 const char *p = strfunc().c_str(); 39094 ... 39095 charfunc (p); 39096 ... 39097 charfunc (p); 39098 } 39099 39100In this situation, it may seem reasonable to save a pointer to the C 39101string returned by the `c_str' member function and use that rather than 39102call `c_str' repeatedly. However, the temporary string created by the 39103call to `strfunc' is destroyed after `p' is initialized, at which point 39104`p' is left pointing to freed memory. 39105 39106 Code like this may run successfully under some other compilers, 39107particularly obsolete cfront-based compilers that delete temporaries 39108along with normal local variables. However, the GNU C++ behavior is 39109standard-conforming, so if your program depends on late destruction of 39110temporaries it is not portable. 39111 39112 The safe way to write such code is to give the temporary a name, which 39113forces it to remain until the end of the scope of the name. For 39114example: 39115 39116 const string& tmp = strfunc (); 39117 charfunc (tmp.c_str ()); 39118 39119 39120File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 39121 3912211.8.4 Implicit Copy-Assignment for Virtual Bases 39123------------------------------------------------- 39124 39125When a base class is virtual, only one subobject of the base class 39126belongs to each full object. Also, the constructors and destructors are 39127invoked only once, and called from the most-derived class. However, 39128such objects behave unspecified when being assigned. For example: 39129 39130 struct Base{ 39131 char *name; 39132 Base(char *n) : name(strdup(n)){} 39133 Base& operator= (const Base& other){ 39134 free (name); 39135 name = strdup (other.name); 39136 } 39137 }; 39138 39139 struct A:virtual Base{ 39140 int val; 39141 A():Base("A"){} 39142 }; 39143 39144 struct B:virtual Base{ 39145 int bval; 39146 B():Base("B"){} 39147 }; 39148 39149 struct Derived:public A, public B{ 39150 Derived():Base("Derived"){} 39151 }; 39152 39153 void func(Derived &d1, Derived &d2) 39154 { 39155 d1 = d2; 39156 } 39157 39158 The C++ standard specifies that `Base::Base' is only called once when 39159constructing or copy-constructing a Derived object. It is unspecified 39160whether `Base::operator=' is called more than once when the implicit 39161copy-assignment for Derived objects is invoked (as it is inside `func' 39162in the example). 39163 39164 G++ implements the "intuitive" algorithm for copy-assignment: assign 39165all direct bases, then assign all members. In that algorithm, the 39166virtual base subobject can be encountered more than once. In the 39167example, copying proceeds in the following order: `val', `name' (via 39168`strdup'), `bval', and `name' again. 39169 39170 If application code relies on copy-assignment, a user-defined 39171copy-assignment operator removes any uncertainties. With such an 39172operator, the application can define whether and how the virtual base 39173subobject is assigned. 39174 39175 39176File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: C++ Misunderstandings, Up: Trouble 39177 3917811.9 Certain Changes We Don't Want to Make 39179========================================== 39180 39181This section lists changes that people frequently request, but which we 39182do not make because we think GCC is better without them. 39183 39184 * Checking the number and type of arguments to a function which has 39185 an old-fashioned definition and no prototype. 39186 39187 Such a feature would work only occasionally--only for calls that 39188 appear in the same file as the called function, following the 39189 definition. The only way to check all calls reliably is to add a 39190 prototype for the function. But adding a prototype eliminates the 39191 motivation for this feature. So the feature is not worthwhile. 39192 39193 * Warning about using an expression whose type is signed as a shift 39194 count. 39195 39196 Shift count operands are probably signed more often than unsigned. 39197 Warning about this would cause far more annoyance than good. 39198 39199 * Warning about assigning a signed value to an unsigned variable. 39200 39201 Such assignments must be very common; warning about them would 39202 cause more annoyance than good. 39203 39204 * Warning when a non-void function value is ignored. 39205 39206 C contains many standard functions that return a value that most 39207 programs choose to ignore. One obvious example is `printf'. 39208 Warning about this practice only leads the defensive programmer to 39209 clutter programs with dozens of casts to `void'. Such casts are 39210 required so frequently that they become visual noise. Writing 39211 those casts becomes so automatic that they no longer convey useful 39212 information about the intentions of the programmer. For functions 39213 where the return value should never be ignored, use the 39214 `warn_unused_result' function attribute (*note Function 39215 Attributes::). 39216 39217 * Making `-fshort-enums' the default. 39218 39219 This would cause storage layout to be incompatible with most other 39220 C compilers. And it doesn't seem very important, given that you 39221 can get the same result in other ways. The case where it matters 39222 most is when the enumeration-valued object is inside a structure, 39223 and in that case you can specify a field width explicitly. 39224 39225 * Making bit-fields unsigned by default on particular machines where 39226 "the ABI standard" says to do so. 39227 39228 The ISO C standard leaves it up to the implementation whether a 39229 bit-field declared plain `int' is signed or not. This in effect 39230 creates two alternative dialects of C. 39231 39232 The GNU C compiler supports both dialects; you can specify the 39233 signed dialect with `-fsigned-bitfields' and the unsigned dialect 39234 with `-funsigned-bitfields'. However, this leaves open the 39235 question of which dialect to use by default. 39236 39237 Currently, the preferred dialect makes plain bit-fields signed, 39238 because this is simplest. Since `int' is the same as `signed int' 39239 in every other context, it is cleanest for them to be the same in 39240 bit-fields as well. 39241 39242 Some computer manufacturers have published Application Binary 39243 Interface standards which specify that plain bit-fields should be 39244 unsigned. It is a mistake, however, to say anything about this 39245 issue in an ABI. This is because the handling of plain bit-fields 39246 distinguishes two dialects of C. Both dialects are meaningful on 39247 every type of machine. Whether a particular object file was 39248 compiled using signed bit-fields or unsigned is of no concern to 39249 other object files, even if they access the same bit-fields in the 39250 same data structures. 39251 39252 A given program is written in one or the other of these two 39253 dialects. The program stands a chance to work on most any machine 39254 if it is compiled with the proper dialect. It is unlikely to work 39255 at all if compiled with the wrong dialect. 39256 39257 Many users appreciate the GNU C compiler because it provides an 39258 environment that is uniform across machines. These users would be 39259 inconvenienced if the compiler treated plain bit-fields 39260 differently on certain machines. 39261 39262 Occasionally users write programs intended only for a particular 39263 machine type. On these occasions, the users would benefit if the 39264 GNU C compiler were to support by default the same dialect as the 39265 other compilers on that machine. But such applications are rare. 39266 And users writing a program to run on more than one type of 39267 machine cannot possibly benefit from this kind of compatibility. 39268 39269 This is why GCC does and will treat plain bit-fields in the same 39270 fashion on all types of machines (by default). 39271 39272 There are some arguments for making bit-fields unsigned by default 39273 on all machines. If, for example, this becomes a universal de 39274 facto standard, it would make sense for GCC to go along with it. 39275 This is something to be considered in the future. 39276 39277 (Of course, users strongly concerned about portability should 39278 indicate explicitly in each bit-field whether it is signed or not. 39279 In this way, they write programs which have the same meaning in 39280 both C dialects.) 39281 39282 * Undefining `__STDC__' when `-ansi' is not used. 39283 39284 Currently, GCC defines `__STDC__' unconditionally. This provides 39285 good results in practice. 39286 39287 Programmers normally use conditionals on `__STDC__' to ask whether 39288 it is safe to use certain features of ISO C, such as function 39289 prototypes or ISO token concatenation. Since plain `gcc' supports 39290 all the features of ISO C, the correct answer to these questions is 39291 "yes". 39292 39293 Some users try to use `__STDC__' to check for the availability of 39294 certain library facilities. This is actually incorrect usage in 39295 an ISO C program, because the ISO C standard says that a conforming 39296 freestanding implementation should define `__STDC__' even though it 39297 does not have the library facilities. `gcc -ansi -pedantic' is a 39298 conforming freestanding implementation, and it is therefore 39299 required to define `__STDC__', even though it does not come with 39300 an ISO C library. 39301 39302 Sometimes people say that defining `__STDC__' in a compiler that 39303 does not completely conform to the ISO C standard somehow violates 39304 the standard. This is illogical. The standard is a standard for 39305 compilers that claim to support ISO C, such as `gcc -ansi'--not 39306 for other compilers such as plain `gcc'. Whatever the ISO C 39307 standard says is relevant to the design of plain `gcc' without 39308 `-ansi' only for pragmatic reasons, not as a requirement. 39309 39310 GCC normally defines `__STDC__' to be 1, and in addition defines 39311 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 39312 option for strict conformance to some version of ISO C. On some 39313 hosts, system include files use a different convention, where 39314 `__STDC__' is normally 0, but is 1 if the user specifies strict 39315 conformance to the C Standard. GCC follows the host convention 39316 when processing system include files, but when processing user 39317 files it follows the usual GNU C convention. 39318 39319 * Undefining `__STDC__' in C++. 39320 39321 Programs written to compile with C++-to-C translators get the 39322 value of `__STDC__' that goes with the C compiler that is 39323 subsequently used. These programs must test `__STDC__' to 39324 determine what kind of C preprocessor that compiler uses: whether 39325 they should concatenate tokens in the ISO C fashion or in the 39326 traditional fashion. 39327 39328 These programs work properly with GNU C++ if `__STDC__' is defined. 39329 They would not work otherwise. 39330 39331 In addition, many header files are written to provide prototypes 39332 in ISO C but not in traditional C. Many of these header files can 39333 work without change in C++ provided `__STDC__' is defined. If 39334 `__STDC__' is not defined, they will all fail, and will all need 39335 to be changed to test explicitly for C++ as well. 39336 39337 * Deleting "empty" loops. 39338 39339 Historically, GCC has not deleted "empty" loops under the 39340 assumption that the most likely reason you would put one in a 39341 program is to have a delay, so deleting them will not make real 39342 programs run any faster. 39343 39344 However, the rationale here is that optimization of a nonempty loop 39345 cannot produce an empty one. This held for carefully written C 39346 compiled with less powerful optimizers but is not always the case 39347 for carefully written C++ or with more powerful optimizers. Thus 39348 GCC will remove operations from loops whenever it can determine 39349 those operations are not externally visible (apart from the time 39350 taken to execute them, of course). In case the loop can be proved 39351 to be finite, GCC will also remove the loop itself. 39352 39353 Be aware of this when performing timing tests, for instance the 39354 following loop can be completely removed, provided 39355 `some_expression' can provably not change any global state. 39356 39357 { 39358 int sum = 0; 39359 int ix; 39360 39361 for (ix = 0; ix != 10000; ix++) 39362 sum += some_expression; 39363 } 39364 39365 Even though `sum' is accumulated in the loop, no use is made of 39366 that summation, so the accumulation can be removed. 39367 39368 * Making side effects happen in the same order as in some other 39369 compiler. 39370 39371 It is never safe to depend on the order of evaluation of side 39372 effects. For example, a function call like this may very well 39373 behave differently from one compiler to another: 39374 39375 void func (int, int); 39376 39377 int i = 2; 39378 func (i++, i++); 39379 39380 There is no guarantee (in either the C or the C++ standard language 39381 definitions) that the increments will be evaluated in any 39382 particular order. Either increment might happen first. `func' 39383 might get the arguments `2, 3', or it might get `3, 2', or even 39384 `2, 2'. 39385 39386 * Making certain warnings into errors by default. 39387 39388 Some ISO C testsuites report failure when the compiler does not 39389 produce an error message for a certain program. 39390 39391 ISO C requires a "diagnostic" message for certain kinds of invalid 39392 programs, but a warning is defined by GCC to count as a 39393 diagnostic. If GCC produces a warning but not an error, that is 39394 correct ISO C support. If testsuites call this "failure", they 39395 should be run with the GCC option `-pedantic-errors', which will 39396 turn these warnings into errors. 39397 39398 39399 39400File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 39401 3940211.10 Warning Messages and Error Messages 39403========================================= 39404 39405The GNU compiler can produce two kinds of diagnostics: errors and 39406warnings. Each kind has a different purpose: 39407 39408 "Errors" report problems that make it impossible to compile your 39409 program. GCC reports errors with the source file name and line 39410 number where the problem is apparent. 39411 39412 "Warnings" report other unusual conditions in your code that _may_ 39413 indicate a problem, although compilation can (and does) proceed. 39414 Warning messages also report the source file name and line number, 39415 but include the text `warning:' to distinguish them from error 39416 messages. 39417 39418 Warnings may indicate danger points where you should check to make sure 39419that your program really does what you intend; or the use of obsolete 39420features; or the use of nonstandard features of GNU C or C++. Many 39421warnings are issued only if you ask for them, with one of the `-W' 39422options (for instance, `-Wall' requests a variety of useful warnings). 39423 39424 GCC always tries to compile your program if possible; it never 39425gratuitously rejects a program whose meaning is clear merely because 39426(for instance) it fails to conform to a standard. In some cases, 39427however, the C and C++ standards specify that certain extensions are 39428forbidden, and a diagnostic _must_ be issued by a conforming compiler. 39429The `-pedantic' option tells GCC to issue warnings in such cases; 39430`-pedantic-errors' says to make them errors instead. This does not 39431mean that _all_ non-ISO constructs get warnings or errors. 39432 39433 *Note Options to Request or Suppress Warnings: Warning Options, for 39434more detail on these and related command-line options. 39435 39436 39437File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 39438 3943912 Reporting Bugs 39440***************** 39441 39442Your bug reports play an essential role in making GCC reliable. 39443 39444 When you encounter a problem, the first thing to do is to see if it is 39445already known. *Note Trouble::. If it isn't known, then you should 39446report the problem. 39447 39448* Menu: 39449 39450* Criteria: Bug Criteria. Have you really found a bug? 39451* Reporting: Bug Reporting. How to report a bug effectively. 39452* Known: Trouble. Known problems. 39453* Help: Service. Where to ask for help. 39454 39455 39456File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 39457 3945812.1 Have You Found a Bug? 39459========================== 39460 39461If you are not sure whether you have found a bug, here are some 39462guidelines: 39463 39464 * If the compiler gets a fatal signal, for any input whatever, that 39465 is a compiler bug. Reliable compilers never crash. 39466 39467 * If the compiler produces invalid assembly code, for any input 39468 whatever (except an `asm' statement), that is a compiler bug, 39469 unless the compiler reports errors (not just warnings) which would 39470 ordinarily prevent the assembler from being run. 39471 39472 * If the compiler produces valid assembly code that does not 39473 correctly execute the input source code, that is a compiler bug. 39474 39475 However, you must double-check to make sure, because you may have a 39476 program whose behavior is undefined, which happened by chance to 39477 give the desired results with another C or C++ compiler. 39478 39479 For example, in many nonoptimizing compilers, you can write `x;' 39480 at the end of a function instead of `return x;', with the same 39481 results. But the value of the function is undefined if `return' 39482 is omitted; it is not a bug when GCC produces different results. 39483 39484 Problems often result from expressions with two increment 39485 operators, as in `f (*p++, *p++)'. Your previous compiler might 39486 have interpreted that expression the way you intended; GCC might 39487 interpret it another way. Neither compiler is wrong. The bug is 39488 in your code. 39489 39490 After you have localized the error to a single source line, it 39491 should be easy to check for these things. If your program is 39492 correct and well defined, you have found a compiler bug. 39493 39494 * If the compiler produces an error message for valid input, that is 39495 a compiler bug. 39496 39497 * If the compiler does not produce an error message for invalid 39498 input, that is a compiler bug. However, you should note that your 39499 idea of "invalid input" might be someone else's idea of "an 39500 extension" or "support for traditional practice". 39501 39502 * If you are an experienced user of one of the languages GCC 39503 supports, your suggestions for improvement of GCC are welcome in 39504 any case. 39505 39506 39507File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 39508 3950912.2 How and where to Report Bugs 39510================================= 39511 39512Bugs should be reported to the bug database at 39513`http://gcc.gnu.org/bugs.html'. 39514 39515 39516File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 39517 3951813 How To Get Help with GCC 39519*************************** 39520 39521If you need help installing, using or changing GCC, there are two ways 39522to find it: 39523 39524 * Send a message to a suitable network mailing list. First try 39525 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if 39526 that brings no response, try <gcc@gcc.gnu.org>. For help changing 39527 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in 39528 GCC, please report it following the instructions at *note Bug 39529 Reporting::. 39530 39531 * Look in the service directory for someone who might help you for a 39532 fee. The service directory is found at 39533 `http://www.fsf.org/resources/service'. 39534 39535 For further information, see `http://gcc.gnu.org/faq.html#support'. 39536 39537 39538File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 39539 3954014 Contributing to GCC Development 39541********************************** 39542 39543If you would like to help pretest GCC releases to assure they work well, 39544current development sources are available by SVN (see 39545`http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 39546available for FTP; see `http://gcc.gnu.org/snapshots.html'. 39547 39548 If you would like to work on improvements to GCC, please read the 39549advice at these URLs: 39550 39551 `http://gcc.gnu.org/contribute.html' 39552 `http://gcc.gnu.org/contributewhy.html' 39553 39554for information on how to make useful contributions and avoid 39555duplication of effort. Suggested projects are listed at 39556`http://gcc.gnu.org/projects/'. 39557 39558 39559File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 39560 39561Funding Free Software 39562********************* 39563 39564If you want to have more free software a few years from now, it makes 39565sense for you to help encourage people to contribute funds for its 39566development. The most effective approach known is to encourage 39567commercial redistributors to donate. 39568 39569 Users of free software systems can boost the pace of development by 39570encouraging for-a-fee distributors to donate part of their selling price 39571to free software developers--the Free Software Foundation, and others. 39572 39573 The way to convince distributors to do this is to demand it and expect 39574it from them. So when you compare distributors, judge them partly by 39575how much they give to free software development. Show distributors 39576they must compete to be the one who gives the most. 39577 39578 To make this approach work, you must insist on numbers that you can 39579compare, such as, "We will donate ten dollars to the Frobnitz project 39580for each disk sold." Don't be satisfied with a vague promise, such as 39581"A portion of the profits are donated," since it doesn't give a basis 39582for comparison. 39583 39584 Even a precise fraction "of the profits from this disk" is not very 39585meaningful, since creative accounting and unrelated business decisions 39586can greatly alter what fraction of the sales price counts as profit. 39587If the price you pay is $50, ten percent of the profit is probably less 39588than a dollar; it might be a few cents, or nothing at all. 39589 39590 Some redistributors do development work themselves. This is useful 39591too; but to keep everyone honest, you need to inquire how much they do, 39592and what kind. Some kinds of development make much more long-term 39593difference than others. For example, maintaining a separate version of 39594a program contributes very little; maintaining the standard version of a 39595program for the whole community contributes much. Easy new ports 39596contribute little, since someone else would surely do them; difficult 39597ports such as adding a new CPU to the GNU Compiler Collection 39598contribute more; major new features or packages contribute the most. 39599 39600 By establishing the idea that supporting further development is "the 39601proper thing to do" when distributing free software for a fee, we can 39602assure a steady flow of resources into making more free software. 39603 39604 Copyright (C) 1994 Free Software Foundation, Inc. 39605 Verbatim copying and redistribution of this section is permitted 39606 without royalty; alteration is not permitted. 39607 39608 39609File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 39610 39611The GNU Project and GNU/Linux 39612***************************** 39613 39614The GNU Project was launched in 1984 to develop a complete Unix-like 39615operating system which is free software: the GNU system. (GNU is a 39616recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 39617Variants of the GNU operating system, which use the kernel Linux, are 39618now widely used; though these systems are often referred to as "Linux", 39619they are more accurately called GNU/Linux systems. 39620 39621 For more information, see: 39622 `http://www.gnu.org/' 39623 `http://www.gnu.org/gnu/linux-and-gnu.html' 39624 39625 39626File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 39627 39628GNU General Public License 39629************************** 39630 39631 Version 3, 29 June 2007 39632 39633 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 39634 39635 Everyone is permitted to copy and distribute verbatim copies of this 39636 license document, but changing it is not allowed. 39637 39638Preamble 39639======== 39640 39641The GNU General Public License is a free, copyleft license for software 39642and other kinds of works. 39643 39644 The licenses for most software and other practical works are designed 39645to take away your freedom to share and change the works. By contrast, 39646the GNU General Public License is intended to guarantee your freedom to 39647share and change all versions of a program-to make sure it remains free 39648software for all its users. We, the Free Software Foundation, use the 39649GNU General Public License for most of our software; it applies also to 39650any other work released this way by its authors. You can apply it to 39651your programs, too. 39652 39653 When we speak of free software, we are referring to freedom, not 39654price. Our General Public Licenses are designed to make sure that you 39655have the freedom to distribute copies of free software (and charge for 39656them if you wish), that you receive source code or can get it if you 39657want it, that you can change the software or use pieces of it in new 39658free programs, and that you know you can do these things. 39659 39660 To protect your rights, we need to prevent others from denying you 39661these rights or asking you to surrender the rights. Therefore, you 39662have certain responsibilities if you distribute copies of the software, 39663or if you modify it: responsibilities to respect the freedom of others. 39664 39665 For example, if you distribute copies of such a program, whether 39666gratis or for a fee, you must pass on to the recipients the same 39667freedoms that you received. You must make sure that they, too, receive 39668or can get the source code. And you must show them these terms so they 39669know their rights. 39670 39671 Developers that use the GNU GPL protect your rights with two steps: 39672(1) assert copyright on the software, and (2) offer you this License 39673giving you legal permission to copy, distribute and/or modify it. 39674 39675 For the developers' and authors' protection, the GPL clearly explains 39676that there is no warranty for this free software. For both users' and 39677authors' sake, the GPL requires that modified versions be marked as 39678changed, so that their problems will not be attributed erroneously to 39679authors of previous versions. 39680 39681 Some devices are designed to deny users access to install or run 39682modified versions of the software inside them, although the 39683manufacturer can do so. This is fundamentally incompatible with the 39684aim of protecting users' freedom to change the software. The 39685systematic pattern of such abuse occurs in the area of products for 39686individuals to use, which is precisely where it is most unacceptable. 39687Therefore, we have designed this version of the GPL to prohibit the 39688practice for those products. If such problems arise substantially in 39689other domains, we stand ready to extend this provision to those domains 39690in future versions of the GPL, as needed to protect the freedom of 39691users. 39692 39693 Finally, every program is threatened constantly by software patents. 39694States should not allow patents to restrict development and use of 39695software on general-purpose computers, but in those that do, we wish to 39696avoid the special danger that patents applied to a free program could 39697make it effectively proprietary. To prevent this, the GPL assures that 39698patents cannot be used to render the program non-free. 39699 39700 The precise terms and conditions for copying, distribution and 39701modification follow. 39702 39703TERMS AND CONDITIONS 39704==================== 39705 39706 0. Definitions. 39707 39708 "This License" refers to version 3 of the GNU General Public 39709 License. 39710 39711 "Copyright" also means copyright-like laws that apply to other 39712 kinds of works, such as semiconductor masks. 39713 39714 "The Program" refers to any copyrightable work licensed under this 39715 License. Each licensee is addressed as "you". "Licensees" and 39716 "recipients" may be individuals or organizations. 39717 39718 To "modify" a work means to copy from or adapt all or part of the 39719 work in a fashion requiring copyright permission, other than the 39720 making of an exact copy. The resulting work is called a "modified 39721 version" of the earlier work or a work "based on" the earlier work. 39722 39723 A "covered work" means either the unmodified Program or a work 39724 based on the Program. 39725 39726 To "propagate" a work means to do anything with it that, without 39727 permission, would make you directly or secondarily liable for 39728 infringement under applicable copyright law, except executing it 39729 on a computer or modifying a private copy. Propagation includes 39730 copying, distribution (with or without modification), making 39731 available to the public, and in some countries other activities as 39732 well. 39733 39734 To "convey" a work means any kind of propagation that enables other 39735 parties to make or receive copies. Mere interaction with a user 39736 through a computer network, with no transfer of a copy, is not 39737 conveying. 39738 39739 An interactive user interface displays "Appropriate Legal Notices" 39740 to the extent that it includes a convenient and prominently visible 39741 feature that (1) displays an appropriate copyright notice, and (2) 39742 tells the user that there is no warranty for the work (except to 39743 the extent that warranties are provided), that licensees may 39744 convey the work under this License, and how to view a copy of this 39745 License. If the interface presents a list of user commands or 39746 options, such as a menu, a prominent item in the list meets this 39747 criterion. 39748 39749 1. Source Code. 39750 39751 The "source code" for a work means the preferred form of the work 39752 for making modifications to it. "Object code" means any 39753 non-source form of a work. 39754 39755 A "Standard Interface" means an interface that either is an 39756 official standard defined by a recognized standards body, or, in 39757 the case of interfaces specified for a particular programming 39758 language, one that is widely used among developers working in that 39759 language. 39760 39761 The "System Libraries" of an executable work include anything, 39762 other than the work as a whole, that (a) is included in the normal 39763 form of packaging a Major Component, but which is not part of that 39764 Major Component, and (b) serves only to enable use of the work 39765 with that Major Component, or to implement a Standard Interface 39766 for which an implementation is available to the public in source 39767 code form. A "Major Component", in this context, means a major 39768 essential component (kernel, window system, and so on) of the 39769 specific operating system (if any) on which the executable work 39770 runs, or a compiler used to produce the work, or an object code 39771 interpreter used to run it. 39772 39773 The "Corresponding Source" for a work in object code form means all 39774 the source code needed to generate, install, and (for an executable 39775 work) run the object code and to modify the work, including 39776 scripts to control those activities. However, it does not include 39777 the work's System Libraries, or general-purpose tools or generally 39778 available free programs which are used unmodified in performing 39779 those activities but which are not part of the work. For example, 39780 Corresponding Source includes interface definition files 39781 associated with source files for the work, and the source code for 39782 shared libraries and dynamically linked subprograms that the work 39783 is specifically designed to require, such as by intimate data 39784 communication or control flow between those subprograms and other 39785 parts of the work. 39786 39787 The Corresponding Source need not include anything that users can 39788 regenerate automatically from other parts of the Corresponding 39789 Source. 39790 39791 The Corresponding Source for a work in source code form is that 39792 same work. 39793 39794 2. Basic Permissions. 39795 39796 All rights granted under this License are granted for the term of 39797 copyright on the Program, and are irrevocable provided the stated 39798 conditions are met. This License explicitly affirms your unlimited 39799 permission to run the unmodified Program. The output from running 39800 a covered work is covered by this License only if the output, 39801 given its content, constitutes a covered work. This License 39802 acknowledges your rights of fair use or other equivalent, as 39803 provided by copyright law. 39804 39805 You may make, run and propagate covered works that you do not 39806 convey, without conditions so long as your license otherwise 39807 remains in force. You may convey covered works to others for the 39808 sole purpose of having them make modifications exclusively for 39809 you, or provide you with facilities for running those works, 39810 provided that you comply with the terms of this License in 39811 conveying all material for which you do not control copyright. 39812 Those thus making or running the covered works for you must do so 39813 exclusively on your behalf, under your direction and control, on 39814 terms that prohibit them from making any copies of your 39815 copyrighted material outside their relationship with you. 39816 39817 Conveying under any other circumstances is permitted solely under 39818 the conditions stated below. Sublicensing is not allowed; section 39819 10 makes it unnecessary. 39820 39821 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 39822 39823 No covered work shall be deemed part of an effective technological 39824 measure under any applicable law fulfilling obligations under 39825 article 11 of the WIPO copyright treaty adopted on 20 December 39826 1996, or similar laws prohibiting or restricting circumvention of 39827 such measures. 39828 39829 When you convey a covered work, you waive any legal power to forbid 39830 circumvention of technological measures to the extent such 39831 circumvention is effected by exercising rights under this License 39832 with respect to the covered work, and you disclaim any intention 39833 to limit operation or modification of the work as a means of 39834 enforcing, against the work's users, your or third parties' legal 39835 rights to forbid circumvention of technological measures. 39836 39837 4. Conveying Verbatim Copies. 39838 39839 You may convey verbatim copies of the Program's source code as you 39840 receive it, in any medium, provided that you conspicuously and 39841 appropriately publish on each copy an appropriate copyright notice; 39842 keep intact all notices stating that this License and any 39843 non-permissive terms added in accord with section 7 apply to the 39844 code; keep intact all notices of the absence of any warranty; and 39845 give all recipients a copy of this License along with the Program. 39846 39847 You may charge any price or no price for each copy that you convey, 39848 and you may offer support or warranty protection for a fee. 39849 39850 5. Conveying Modified Source Versions. 39851 39852 You may convey a work based on the Program, or the modifications to 39853 produce it from the Program, in the form of source code under the 39854 terms of section 4, provided that you also meet all of these 39855 conditions: 39856 39857 a. The work must carry prominent notices stating that you 39858 modified it, and giving a relevant date. 39859 39860 b. The work must carry prominent notices stating that it is 39861 released under this License and any conditions added under 39862 section 7. This requirement modifies the requirement in 39863 section 4 to "keep intact all notices". 39864 39865 c. You must license the entire work, as a whole, under this 39866 License to anyone who comes into possession of a copy. This 39867 License will therefore apply, along with any applicable 39868 section 7 additional terms, to the whole of the work, and all 39869 its parts, regardless of how they are packaged. This License 39870 gives no permission to license the work in any other way, but 39871 it does not invalidate such permission if you have separately 39872 received it. 39873 39874 d. If the work has interactive user interfaces, each must display 39875 Appropriate Legal Notices; however, if the Program has 39876 interactive interfaces that do not display Appropriate Legal 39877 Notices, your work need not make them do so. 39878 39879 A compilation of a covered work with other separate and independent 39880 works, which are not by their nature extensions of the covered 39881 work, and which are not combined with it such as to form a larger 39882 program, in or on a volume of a storage or distribution medium, is 39883 called an "aggregate" if the compilation and its resulting 39884 copyright are not used to limit the access or legal rights of the 39885 compilation's users beyond what the individual works permit. 39886 Inclusion of a covered work in an aggregate does not cause this 39887 License to apply to the other parts of the aggregate. 39888 39889 6. Conveying Non-Source Forms. 39890 39891 You may convey a covered work in object code form under the terms 39892 of sections 4 and 5, provided that you also convey the 39893 machine-readable Corresponding Source under the terms of this 39894 License, in one of these ways: 39895 39896 a. Convey the object code in, or embodied in, a physical product 39897 (including a physical distribution medium), accompanied by the 39898 Corresponding Source fixed on a durable physical medium 39899 customarily used for software interchange. 39900 39901 b. Convey the object code in, or embodied in, a physical product 39902 (including a physical distribution medium), accompanied by a 39903 written offer, valid for at least three years and valid for 39904 as long as you offer spare parts or customer support for that 39905 product model, to give anyone who possesses the object code 39906 either (1) a copy of the Corresponding Source for all the 39907 software in the product that is covered by this License, on a 39908 durable physical medium customarily used for software 39909 interchange, for a price no more than your reasonable cost of 39910 physically performing this conveying of source, or (2) access 39911 to copy the Corresponding Source from a network server at no 39912 charge. 39913 39914 c. Convey individual copies of the object code with a copy of 39915 the written offer to provide the Corresponding Source. This 39916 alternative is allowed only occasionally and noncommercially, 39917 and only if you received the object code with such an offer, 39918 in accord with subsection 6b. 39919 39920 d. Convey the object code by offering access from a designated 39921 place (gratis or for a charge), and offer equivalent access 39922 to the Corresponding Source in the same way through the same 39923 place at no further charge. You need not require recipients 39924 to copy the Corresponding Source along with the object code. 39925 If the place to copy the object code is a network server, the 39926 Corresponding Source may be on a different server (operated 39927 by you or a third party) that supports equivalent copying 39928 facilities, provided you maintain clear directions next to 39929 the object code saying where to find the Corresponding Source. 39930 Regardless of what server hosts the Corresponding Source, you 39931 remain obligated to ensure that it is available for as long 39932 as needed to satisfy these requirements. 39933 39934 e. Convey the object code using peer-to-peer transmission, 39935 provided you inform other peers where the object code and 39936 Corresponding Source of the work are being offered to the 39937 general public at no charge under subsection 6d. 39938 39939 39940 A separable portion of the object code, whose source code is 39941 excluded from the Corresponding Source as a System Library, need 39942 not be included in conveying the object code work. 39943 39944 A "User Product" is either (1) a "consumer product", which means 39945 any tangible personal property which is normally used for personal, 39946 family, or household purposes, or (2) anything designed or sold for 39947 incorporation into a dwelling. In determining whether a product 39948 is a consumer product, doubtful cases shall be resolved in favor of 39949 coverage. For a particular product received by a particular user, 39950 "normally used" refers to a typical or common use of that class of 39951 product, regardless of the status of the particular user or of the 39952 way in which the particular user actually uses, or expects or is 39953 expected to use, the product. A product is a consumer product 39954 regardless of whether the product has substantial commercial, 39955 industrial or non-consumer uses, unless such uses represent the 39956 only significant mode of use of the product. 39957 39958 "Installation Information" for a User Product means any methods, 39959 procedures, authorization keys, or other information required to 39960 install and execute modified versions of a covered work in that 39961 User Product from a modified version of its Corresponding Source. 39962 The information must suffice to ensure that the continued 39963 functioning of the modified object code is in no case prevented or 39964 interfered with solely because modification has been made. 39965 39966 If you convey an object code work under this section in, or with, 39967 or specifically for use in, a User Product, and the conveying 39968 occurs as part of a transaction in which the right of possession 39969 and use of the User Product is transferred to the recipient in 39970 perpetuity or for a fixed term (regardless of how the transaction 39971 is characterized), the Corresponding Source conveyed under this 39972 section must be accompanied by the Installation Information. But 39973 this requirement does not apply if neither you nor any third party 39974 retains the ability to install modified object code on the User 39975 Product (for example, the work has been installed in ROM). 39976 39977 The requirement to provide Installation Information does not 39978 include a requirement to continue to provide support service, 39979 warranty, or updates for a work that has been modified or 39980 installed by the recipient, or for the User Product in which it 39981 has been modified or installed. Access to a network may be denied 39982 when the modification itself materially and adversely affects the 39983 operation of the network or violates the rules and protocols for 39984 communication across the network. 39985 39986 Corresponding Source conveyed, and Installation Information 39987 provided, in accord with this section must be in a format that is 39988 publicly documented (and with an implementation available to the 39989 public in source code form), and must require no special password 39990 or key for unpacking, reading or copying. 39991 39992 7. Additional Terms. 39993 39994 "Additional permissions" are terms that supplement the terms of 39995 this License by making exceptions from one or more of its 39996 conditions. Additional permissions that are applicable to the 39997 entire Program shall be treated as though they were included in 39998 this License, to the extent that they are valid under applicable 39999 law. If additional permissions apply only to part of the Program, 40000 that part may be used separately under those permissions, but the 40001 entire Program remains governed by this License without regard to 40002 the additional permissions. 40003 40004 When you convey a copy of a covered work, you may at your option 40005 remove any additional permissions from that copy, or from any part 40006 of it. (Additional permissions may be written to require their own 40007 removal in certain cases when you modify the work.) You may place 40008 additional permissions on material, added by you to a covered work, 40009 for which you have or can give appropriate copyright permission. 40010 40011 Notwithstanding any other provision of this License, for material 40012 you add to a covered work, you may (if authorized by the copyright 40013 holders of that material) supplement the terms of this License 40014 with terms: 40015 40016 a. Disclaiming warranty or limiting liability differently from 40017 the terms of sections 15 and 16 of this License; or 40018 40019 b. Requiring preservation of specified reasonable legal notices 40020 or author attributions in that material or in the Appropriate 40021 Legal Notices displayed by works containing it; or 40022 40023 c. Prohibiting misrepresentation of the origin of that material, 40024 or requiring that modified versions of such material be 40025 marked in reasonable ways as different from the original 40026 version; or 40027 40028 d. Limiting the use for publicity purposes of names of licensors 40029 or authors of the material; or 40030 40031 e. Declining to grant rights under trademark law for use of some 40032 trade names, trademarks, or service marks; or 40033 40034 f. Requiring indemnification of licensors and authors of that 40035 material by anyone who conveys the material (or modified 40036 versions of it) with contractual assumptions of liability to 40037 the recipient, for any liability that these contractual 40038 assumptions directly impose on those licensors and authors. 40039 40040 All other non-permissive additional terms are considered "further 40041 restrictions" within the meaning of section 10. If the Program as 40042 you received it, or any part of it, contains a notice stating that 40043 it is governed by this License along with a term that is a further 40044 restriction, you may remove that term. If a license document 40045 contains a further restriction but permits relicensing or 40046 conveying under this License, you may add to a covered work 40047 material governed by the terms of that license document, provided 40048 that the further restriction does not survive such relicensing or 40049 conveying. 40050 40051 If you add terms to a covered work in accord with this section, you 40052 must place, in the relevant source files, a statement of the 40053 additional terms that apply to those files, or a notice indicating 40054 where to find the applicable terms. 40055 40056 Additional terms, permissive or non-permissive, may be stated in 40057 the form of a separately written license, or stated as exceptions; 40058 the above requirements apply either way. 40059 40060 8. Termination. 40061 40062 You may not propagate or modify a covered work except as expressly 40063 provided under this License. Any attempt otherwise to propagate or 40064 modify it is void, and will automatically terminate your rights 40065 under this License (including any patent licenses granted under 40066 the third paragraph of section 11). 40067 40068 However, if you cease all violation of this License, then your 40069 license from a particular copyright holder is reinstated (a) 40070 provisionally, unless and until the copyright holder explicitly 40071 and finally terminates your license, and (b) permanently, if the 40072 copyright holder fails to notify you of the violation by some 40073 reasonable means prior to 60 days after the cessation. 40074 40075 Moreover, your license from a particular copyright holder is 40076 reinstated permanently if the copyright holder notifies you of the 40077 violation by some reasonable means, this is the first time you have 40078 received notice of violation of this License (for any work) from 40079 that copyright holder, and you cure the violation prior to 30 days 40080 after your receipt of the notice. 40081 40082 Termination of your rights under this section does not terminate 40083 the licenses of parties who have received copies or rights from 40084 you under this License. If your rights have been terminated and 40085 not permanently reinstated, you do not qualify to receive new 40086 licenses for the same material under section 10. 40087 40088 9. Acceptance Not Required for Having Copies. 40089 40090 You are not required to accept this License in order to receive or 40091 run a copy of the Program. Ancillary propagation of a covered work 40092 occurring solely as a consequence of using peer-to-peer 40093 transmission to receive a copy likewise does not require 40094 acceptance. However, nothing other than this License grants you 40095 permission to propagate or modify any covered work. These actions 40096 infringe copyright if you do not accept this License. Therefore, 40097 by modifying or propagating a covered work, you indicate your 40098 acceptance of this License to do so. 40099 40100 10. Automatic Licensing of Downstream Recipients. 40101 40102 Each time you convey a covered work, the recipient automatically 40103 receives a license from the original licensors, to run, modify and 40104 propagate that work, subject to this License. You are not 40105 responsible for enforcing compliance by third parties with this 40106 License. 40107 40108 An "entity transaction" is a transaction transferring control of an 40109 organization, or substantially all assets of one, or subdividing an 40110 organization, or merging organizations. If propagation of a 40111 covered work results from an entity transaction, each party to that 40112 transaction who receives a copy of the work also receives whatever 40113 licenses to the work the party's predecessor in interest had or 40114 could give under the previous paragraph, plus a right to 40115 possession of the Corresponding Source of the work from the 40116 predecessor in interest, if the predecessor has it or can get it 40117 with reasonable efforts. 40118 40119 You may not impose any further restrictions on the exercise of the 40120 rights granted or affirmed under this License. For example, you 40121 may not impose a license fee, royalty, or other charge for 40122 exercise of rights granted under this License, and you may not 40123 initiate litigation (including a cross-claim or counterclaim in a 40124 lawsuit) alleging that any patent claim is infringed by making, 40125 using, selling, offering for sale, or importing the Program or any 40126 portion of it. 40127 40128 11. Patents. 40129 40130 A "contributor" is a copyright holder who authorizes use under this 40131 License of the Program or a work on which the Program is based. 40132 The work thus licensed is called the contributor's "contributor 40133 version". 40134 40135 A contributor's "essential patent claims" are all patent claims 40136 owned or controlled by the contributor, whether already acquired or 40137 hereafter acquired, that would be infringed by some manner, 40138 permitted by this License, of making, using, or selling its 40139 contributor version, but do not include claims that would be 40140 infringed only as a consequence of further modification of the 40141 contributor version. For purposes of this definition, "control" 40142 includes the right to grant patent sublicenses in a manner 40143 consistent with the requirements of this License. 40144 40145 Each contributor grants you a non-exclusive, worldwide, 40146 royalty-free patent license under the contributor's essential 40147 patent claims, to make, use, sell, offer for sale, import and 40148 otherwise run, modify and propagate the contents of its 40149 contributor version. 40150 40151 In the following three paragraphs, a "patent license" is any 40152 express agreement or commitment, however denominated, not to 40153 enforce a patent (such as an express permission to practice a 40154 patent or covenant not to sue for patent infringement). To 40155 "grant" such a patent license to a party means to make such an 40156 agreement or commitment not to enforce a patent against the party. 40157 40158 If you convey a covered work, knowingly relying on a patent 40159 license, and the Corresponding Source of the work is not available 40160 for anyone to copy, free of charge and under the terms of this 40161 License, through a publicly available network server or other 40162 readily accessible means, then you must either (1) cause the 40163 Corresponding Source to be so available, or (2) arrange to deprive 40164 yourself of the benefit of the patent license for this particular 40165 work, or (3) arrange, in a manner consistent with the requirements 40166 of this License, to extend the patent license to downstream 40167 recipients. "Knowingly relying" means you have actual knowledge 40168 that, but for the patent license, your conveying the covered work 40169 in a country, or your recipient's use of the covered work in a 40170 country, would infringe one or more identifiable patents in that 40171 country that you have reason to believe are valid. 40172 40173 If, pursuant to or in connection with a single transaction or 40174 arrangement, you convey, or propagate by procuring conveyance of, a 40175 covered work, and grant a patent license to some of the parties 40176 receiving the covered work authorizing them to use, propagate, 40177 modify or convey a specific copy of the covered work, then the 40178 patent license you grant is automatically extended to all 40179 recipients of the covered work and works based on it. 40180 40181 A patent license is "discriminatory" if it does not include within 40182 the scope of its coverage, prohibits the exercise of, or is 40183 conditioned on the non-exercise of one or more of the rights that 40184 are specifically granted under this License. You may not convey a 40185 covered work if you are a party to an arrangement with a third 40186 party that is in the business of distributing software, under 40187 which you make payment to the third party based on the extent of 40188 your activity of conveying the work, and under which the third 40189 party grants, to any of the parties who would receive the covered 40190 work from you, a discriminatory patent license (a) in connection 40191 with copies of the covered work conveyed by you (or copies made 40192 from those copies), or (b) primarily for and in connection with 40193 specific products or compilations that contain the covered work, 40194 unless you entered into that arrangement, or that patent license 40195 was granted, prior to 28 March 2007. 40196 40197 Nothing in this License shall be construed as excluding or limiting 40198 any implied license or other defenses to infringement that may 40199 otherwise be available to you under applicable patent law. 40200 40201 12. No Surrender of Others' Freedom. 40202 40203 If conditions are imposed on you (whether by court order, 40204 agreement or otherwise) that contradict the conditions of this 40205 License, they do not excuse you from the conditions of this 40206 License. If you cannot convey a covered work so as to satisfy 40207 simultaneously your obligations under this License and any other 40208 pertinent obligations, then as a consequence you may not convey it 40209 at all. For example, if you agree to terms that obligate you to 40210 collect a royalty for further conveying from those to whom you 40211 convey the Program, the only way you could satisfy both those 40212 terms and this License would be to refrain entirely from conveying 40213 the Program. 40214 40215 13. Use with the GNU Affero General Public License. 40216 40217 Notwithstanding any other provision of this License, you have 40218 permission to link or combine any covered work with a work licensed 40219 under version 3 of the GNU Affero General Public License into a 40220 single combined work, and to convey the resulting work. The terms 40221 of this License will continue to apply to the part which is the 40222 covered work, but the special requirements of the GNU Affero 40223 General Public License, section 13, concerning interaction through 40224 a network will apply to the combination as such. 40225 40226 14. Revised Versions of this License. 40227 40228 The Free Software Foundation may publish revised and/or new 40229 versions of the GNU General Public License from time to time. 40230 Such new versions will be similar in spirit to the present 40231 version, but may differ in detail to address new problems or 40232 concerns. 40233 40234 Each version is given a distinguishing version number. If the 40235 Program specifies that a certain numbered version of the GNU 40236 General Public License "or any later version" applies to it, you 40237 have the option of following the terms and conditions either of 40238 that numbered version or of any later version published by the 40239 Free Software Foundation. If the Program does not specify a 40240 version number of the GNU General Public License, you may choose 40241 any version ever published by the Free Software Foundation. 40242 40243 If the Program specifies that a proxy can decide which future 40244 versions of the GNU General Public License can be used, that 40245 proxy's public statement of acceptance of a version permanently 40246 authorizes you to choose that version for the Program. 40247 40248 Later license versions may give you additional or different 40249 permissions. However, no additional obligations are imposed on any 40250 author or copyright holder as a result of your choosing to follow a 40251 later version. 40252 40253 15. Disclaimer of Warranty. 40254 40255 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 40256 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 40257 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 40258 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 40259 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 40260 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 40261 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 40262 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 40263 NECESSARY SERVICING, REPAIR OR CORRECTION. 40264 40265 16. Limitation of Liability. 40266 40267 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 40268 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 40269 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 40270 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 40271 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 40272 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 40273 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 40274 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 40275 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 40276 THE POSSIBILITY OF SUCH DAMAGES. 40277 40278 17. Interpretation of Sections 15 and 16. 40279 40280 If the disclaimer of warranty and limitation of liability provided 40281 above cannot be given local legal effect according to their terms, 40282 reviewing courts shall apply local law that most closely 40283 approximates an absolute waiver of all civil liability in 40284 connection with the Program, unless a warranty or assumption of 40285 liability accompanies a copy of the Program in return for a fee. 40286 40287 40288END OF TERMS AND CONDITIONS 40289=========================== 40290 40291How to Apply These Terms to Your New Programs 40292============================================= 40293 40294If you develop a new program, and you want it to be of the greatest 40295possible use to the public, the best way to achieve this is to make it 40296free software which everyone can redistribute and change under these 40297terms. 40298 40299 To do so, attach the following notices to the program. It is safest 40300to attach them to the start of each source file to most effectively 40301state the exclusion of warranty; and each file should have at least the 40302"copyright" line and a pointer to where the full notice is found. 40303 40304 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 40305 Copyright (C) YEAR NAME OF AUTHOR 40306 40307 This program is free software: you can redistribute it and/or modify 40308 it under the terms of the GNU General Public License as published by 40309 the Free Software Foundation, either version 3 of the License, or (at 40310 your option) any later version. 40311 40312 This program is distributed in the hope that it will be useful, but 40313 WITHOUT ANY WARRANTY; without even the implied warranty of 40314 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 40315 General Public License for more details. 40316 40317 You should have received a copy of the GNU General Public License 40318 along with this program. If not, see `http://www.gnu.org/licenses/'. 40319 40320 Also add information on how to contact you by electronic and paper 40321mail. 40322 40323 If the program does terminal interaction, make it output a short 40324notice like this when it starts in an interactive mode: 40325 40326 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 40327 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 40328 This is free software, and you are welcome to redistribute it 40329 under certain conditions; type `show c' for details. 40330 40331 The hypothetical commands `show w' and `show c' should show the 40332appropriate parts of the General Public License. Of course, your 40333program's commands might be different; for a GUI interface, you would 40334use an "about box". 40335 40336 You should also get your employer (if you work as a programmer) or 40337school, if any, to sign a "copyright disclaimer" for the program, if 40338necessary. For more information on this, and how to apply and follow 40339the GNU GPL, see `http://www.gnu.org/licenses/'. 40340 40341 The GNU General Public License does not permit incorporating your 40342program into proprietary programs. If your program is a subroutine 40343library, you may consider it more useful to permit linking proprietary 40344applications with the library. If this is what you want to do, use the 40345GNU Lesser General Public License instead of this License. But first, 40346please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 40347 40348 40349File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 40350 40351GNU Free Documentation License 40352****************************** 40353 40354 Version 1.2, November 2002 40355 40356 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 40357 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 40358 40359 Everyone is permitted to copy and distribute verbatim copies 40360 of this license document, but changing it is not allowed. 40361 40362 0. PREAMBLE 40363 40364 The purpose of this License is to make a manual, textbook, or other 40365 functional and useful document "free" in the sense of freedom: to 40366 assure everyone the effective freedom to copy and redistribute it, 40367 with or without modifying it, either commercially or 40368 noncommercially. Secondarily, this License preserves for the 40369 author and publisher a way to get credit for their work, while not 40370 being considered responsible for modifications made by others. 40371 40372 This License is a kind of "copyleft", which means that derivative 40373 works of the document must themselves be free in the same sense. 40374 It complements the GNU General Public License, which is a copyleft 40375 license designed for free software. 40376 40377 We have designed this License in order to use it for manuals for 40378 free software, because free software needs free documentation: a 40379 free program should come with manuals providing the same freedoms 40380 that the software does. But this License is not limited to 40381 software manuals; it can be used for any textual work, regardless 40382 of subject matter or whether it is published as a printed book. 40383 We recommend this License principally for works whose purpose is 40384 instruction or reference. 40385 40386 1. APPLICABILITY AND DEFINITIONS 40387 40388 This License applies to any manual or other work, in any medium, 40389 that contains a notice placed by the copyright holder saying it 40390 can be distributed under the terms of this License. Such a notice 40391 grants a world-wide, royalty-free license, unlimited in duration, 40392 to use that work under the conditions stated herein. The 40393 "Document", below, refers to any such manual or work. Any member 40394 of the public is a licensee, and is addressed as "you". You 40395 accept the license if you copy, modify or distribute the work in a 40396 way requiring permission under copyright law. 40397 40398 A "Modified Version" of the Document means any work containing the 40399 Document or a portion of it, either copied verbatim, or with 40400 modifications and/or translated into another language. 40401 40402 A "Secondary Section" is a named appendix or a front-matter section 40403 of the Document that deals exclusively with the relationship of the 40404 publishers or authors of the Document to the Document's overall 40405 subject (or to related matters) and contains nothing that could 40406 fall directly within that overall subject. (Thus, if the Document 40407 is in part a textbook of mathematics, a Secondary Section may not 40408 explain any mathematics.) The relationship could be a matter of 40409 historical connection with the subject or with related matters, or 40410 of legal, commercial, philosophical, ethical or political position 40411 regarding them. 40412 40413 The "Invariant Sections" are certain Secondary Sections whose 40414 titles are designated, as being those of Invariant Sections, in 40415 the notice that says that the Document is released under this 40416 License. If a section does not fit the above definition of 40417 Secondary then it is not allowed to be designated as Invariant. 40418 The Document may contain zero Invariant Sections. If the Document 40419 does not identify any Invariant Sections then there are none. 40420 40421 The "Cover Texts" are certain short passages of text that are 40422 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 40423 that says that the Document is released under this License. A 40424 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 40425 be at most 25 words. 40426 40427 A "Transparent" copy of the Document means a machine-readable copy, 40428 represented in a format whose specification is available to the 40429 general public, that is suitable for revising the document 40430 straightforwardly with generic text editors or (for images 40431 composed of pixels) generic paint programs or (for drawings) some 40432 widely available drawing editor, and that is suitable for input to 40433 text formatters or for automatic translation to a variety of 40434 formats suitable for input to text formatters. A copy made in an 40435 otherwise Transparent file format whose markup, or absence of 40436 markup, has been arranged to thwart or discourage subsequent 40437 modification by readers is not Transparent. An image format is 40438 not Transparent if used for any substantial amount of text. A 40439 copy that is not "Transparent" is called "Opaque". 40440 40441 Examples of suitable formats for Transparent copies include plain 40442 ASCII without markup, Texinfo input format, LaTeX input format, 40443 SGML or XML using a publicly available DTD, and 40444 standard-conforming simple HTML, PostScript or PDF designed for 40445 human modification. Examples of transparent image formats include 40446 PNG, XCF and JPG. Opaque formats include proprietary formats that 40447 can be read and edited only by proprietary word processors, SGML or 40448 XML for which the DTD and/or processing tools are not generally 40449 available, and the machine-generated HTML, PostScript or PDF 40450 produced by some word processors for output purposes only. 40451 40452 The "Title Page" means, for a printed book, the title page itself, 40453 plus such following pages as are needed to hold, legibly, the 40454 material this License requires to appear in the title page. For 40455 works in formats which do not have any title page as such, "Title 40456 Page" means the text near the most prominent appearance of the 40457 work's title, preceding the beginning of the body of the text. 40458 40459 A section "Entitled XYZ" means a named subunit of the Document 40460 whose title either is precisely XYZ or contains XYZ in parentheses 40461 following text that translates XYZ in another language. (Here XYZ 40462 stands for a specific section name mentioned below, such as 40463 "Acknowledgements", "Dedications", "Endorsements", or "History".) 40464 To "Preserve the Title" of such a section when you modify the 40465 Document means that it remains a section "Entitled XYZ" according 40466 to this definition. 40467 40468 The Document may include Warranty Disclaimers next to the notice 40469 which states that this License applies to the Document. These 40470 Warranty Disclaimers are considered to be included by reference in 40471 this License, but only as regards disclaiming warranties: any other 40472 implication that these Warranty Disclaimers may have is void and 40473 has no effect on the meaning of this License. 40474 40475 2. VERBATIM COPYING 40476 40477 You may copy and distribute the Document in any medium, either 40478 commercially or noncommercially, provided that this License, the 40479 copyright notices, and the license notice saying this License 40480 applies to the Document are reproduced in all copies, and that you 40481 add no other conditions whatsoever to those of this License. You 40482 may not use technical measures to obstruct or control the reading 40483 or further copying of the copies you make or distribute. However, 40484 you may accept compensation in exchange for copies. If you 40485 distribute a large enough number of copies you must also follow 40486 the conditions in section 3. 40487 40488 You may also lend copies, under the same conditions stated above, 40489 and you may publicly display copies. 40490 40491 3. COPYING IN QUANTITY 40492 40493 If you publish printed copies (or copies in media that commonly 40494 have printed covers) of the Document, numbering more than 100, and 40495 the Document's license notice requires Cover Texts, you must 40496 enclose the copies in covers that carry, clearly and legibly, all 40497 these Cover Texts: Front-Cover Texts on the front cover, and 40498 Back-Cover Texts on the back cover. Both covers must also clearly 40499 and legibly identify you as the publisher of these copies. The 40500 front cover must present the full title with all words of the 40501 title equally prominent and visible. You may add other material 40502 on the covers in addition. Copying with changes limited to the 40503 covers, as long as they preserve the title of the Document and 40504 satisfy these conditions, can be treated as verbatim copying in 40505 other respects. 40506 40507 If the required texts for either cover are too voluminous to fit 40508 legibly, you should put the first ones listed (as many as fit 40509 reasonably) on the actual cover, and continue the rest onto 40510 adjacent pages. 40511 40512 If you publish or distribute Opaque copies of the Document 40513 numbering more than 100, you must either include a 40514 machine-readable Transparent copy along with each Opaque copy, or 40515 state in or with each Opaque copy a computer-network location from 40516 which the general network-using public has access to download 40517 using public-standard network protocols a complete Transparent 40518 copy of the Document, free of added material. If you use the 40519 latter option, you must take reasonably prudent steps, when you 40520 begin distribution of Opaque copies in quantity, to ensure that 40521 this Transparent copy will remain thus accessible at the stated 40522 location until at least one year after the last time you 40523 distribute an Opaque copy (directly or through your agents or 40524 retailers) of that edition to the public. 40525 40526 It is requested, but not required, that you contact the authors of 40527 the Document well before redistributing any large number of 40528 copies, to give them a chance to provide you with an updated 40529 version of the Document. 40530 40531 4. MODIFICATIONS 40532 40533 You may copy and distribute a Modified Version of the Document 40534 under the conditions of sections 2 and 3 above, provided that you 40535 release the Modified Version under precisely this License, with 40536 the Modified Version filling the role of the Document, thus 40537 licensing distribution and modification of the Modified Version to 40538 whoever possesses a copy of it. In addition, you must do these 40539 things in the Modified Version: 40540 40541 A. Use in the Title Page (and on the covers, if any) a title 40542 distinct from that of the Document, and from those of 40543 previous versions (which should, if there were any, be listed 40544 in the History section of the Document). You may use the 40545 same title as a previous version if the original publisher of 40546 that version gives permission. 40547 40548 B. List on the Title Page, as authors, one or more persons or 40549 entities responsible for authorship of the modifications in 40550 the Modified Version, together with at least five of the 40551 principal authors of the Document (all of its principal 40552 authors, if it has fewer than five), unless they release you 40553 from this requirement. 40554 40555 C. State on the Title page the name of the publisher of the 40556 Modified Version, as the publisher. 40557 40558 D. Preserve all the copyright notices of the Document. 40559 40560 E. Add an appropriate copyright notice for your modifications 40561 adjacent to the other copyright notices. 40562 40563 F. Include, immediately after the copyright notices, a license 40564 notice giving the public permission to use the Modified 40565 Version under the terms of this License, in the form shown in 40566 the Addendum below. 40567 40568 G. Preserve in that license notice the full lists of Invariant 40569 Sections and required Cover Texts given in the Document's 40570 license notice. 40571 40572 H. Include an unaltered copy of this License. 40573 40574 I. Preserve the section Entitled "History", Preserve its Title, 40575 and add to it an item stating at least the title, year, new 40576 authors, and publisher of the Modified Version as given on 40577 the Title Page. If there is no section Entitled "History" in 40578 the Document, create one stating the title, year, authors, 40579 and publisher of the Document as given on its Title Page, 40580 then add an item describing the Modified Version as stated in 40581 the previous sentence. 40582 40583 J. Preserve the network location, if any, given in the Document 40584 for public access to a Transparent copy of the Document, and 40585 likewise the network locations given in the Document for 40586 previous versions it was based on. These may be placed in 40587 the "History" section. You may omit a network location for a 40588 work that was published at least four years before the 40589 Document itself, or if the original publisher of the version 40590 it refers to gives permission. 40591 40592 K. For any section Entitled "Acknowledgements" or "Dedications", 40593 Preserve the Title of the section, and preserve in the 40594 section all the substance and tone of each of the contributor 40595 acknowledgements and/or dedications given therein. 40596 40597 L. Preserve all the Invariant Sections of the Document, 40598 unaltered in their text and in their titles. Section numbers 40599 or the equivalent are not considered part of the section 40600 titles. 40601 40602 M. Delete any section Entitled "Endorsements". Such a section 40603 may not be included in the Modified Version. 40604 40605 N. Do not retitle any existing section to be Entitled 40606 "Endorsements" or to conflict in title with any Invariant 40607 Section. 40608 40609 O. Preserve any Warranty Disclaimers. 40610 40611 If the Modified Version includes new front-matter sections or 40612 appendices that qualify as Secondary Sections and contain no 40613 material copied from the Document, you may at your option 40614 designate some or all of these sections as invariant. To do this, 40615 add their titles to the list of Invariant Sections in the Modified 40616 Version's license notice. These titles must be distinct from any 40617 other section titles. 40618 40619 You may add a section Entitled "Endorsements", provided it contains 40620 nothing but endorsements of your Modified Version by various 40621 parties--for example, statements of peer review or that the text 40622 has been approved by an organization as the authoritative 40623 definition of a standard. 40624 40625 You may add a passage of up to five words as a Front-Cover Text, 40626 and a passage of up to 25 words as a Back-Cover Text, to the end 40627 of the list of Cover Texts in the Modified Version. Only one 40628 passage of Front-Cover Text and one of Back-Cover Text may be 40629 added by (or through arrangements made by) any one entity. If the 40630 Document already includes a cover text for the same cover, 40631 previously added by you or by arrangement made by the same entity 40632 you are acting on behalf of, you may not add another; but you may 40633 replace the old one, on explicit permission from the previous 40634 publisher that added the old one. 40635 40636 The author(s) and publisher(s) of the Document do not by this 40637 License give permission to use their names for publicity for or to 40638 assert or imply endorsement of any Modified Version. 40639 40640 5. COMBINING DOCUMENTS 40641 40642 You may combine the Document with other documents released under 40643 this License, under the terms defined in section 4 above for 40644 modified versions, provided that you include in the combination 40645 all of the Invariant Sections of all of the original documents, 40646 unmodified, and list them all as Invariant Sections of your 40647 combined work in its license notice, and that you preserve all 40648 their Warranty Disclaimers. 40649 40650 The combined work need only contain one copy of this License, and 40651 multiple identical Invariant Sections may be replaced with a single 40652 copy. If there are multiple Invariant Sections with the same name 40653 but different contents, make the title of each such section unique 40654 by adding at the end of it, in parentheses, the name of the 40655 original author or publisher of that section if known, or else a 40656 unique number. Make the same adjustment to the section titles in 40657 the list of Invariant Sections in the license notice of the 40658 combined work. 40659 40660 In the combination, you must combine any sections Entitled 40661 "History" in the various original documents, forming one section 40662 Entitled "History"; likewise combine any sections Entitled 40663 "Acknowledgements", and any sections Entitled "Dedications". You 40664 must delete all sections Entitled "Endorsements." 40665 40666 6. COLLECTIONS OF DOCUMENTS 40667 40668 You may make a collection consisting of the Document and other 40669 documents released under this License, and replace the individual 40670 copies of this License in the various documents with a single copy 40671 that is included in the collection, provided that you follow the 40672 rules of this License for verbatim copying of each of the 40673 documents in all other respects. 40674 40675 You may extract a single document from such a collection, and 40676 distribute it individually under this License, provided you insert 40677 a copy of this License into the extracted document, and follow 40678 this License in all other respects regarding verbatim copying of 40679 that document. 40680 40681 7. AGGREGATION WITH INDEPENDENT WORKS 40682 40683 A compilation of the Document or its derivatives with other 40684 separate and independent documents or works, in or on a volume of 40685 a storage or distribution medium, is called an "aggregate" if the 40686 copyright resulting from the compilation is not used to limit the 40687 legal rights of the compilation's users beyond what the individual 40688 works permit. When the Document is included in an aggregate, this 40689 License does not apply to the other works in the aggregate which 40690 are not themselves derivative works of the Document. 40691 40692 If the Cover Text requirement of section 3 is applicable to these 40693 copies of the Document, then if the Document is less than one half 40694 of the entire aggregate, the Document's Cover Texts may be placed 40695 on covers that bracket the Document within the aggregate, or the 40696 electronic equivalent of covers if the Document is in electronic 40697 form. Otherwise they must appear on printed covers that bracket 40698 the whole aggregate. 40699 40700 8. TRANSLATION 40701 40702 Translation is considered a kind of modification, so you may 40703 distribute translations of the Document under the terms of section 40704 4. Replacing Invariant Sections with translations requires special 40705 permission from their copyright holders, but you may include 40706 translations of some or all Invariant Sections in addition to the 40707 original versions of these Invariant Sections. You may include a 40708 translation of this License, and all the license notices in the 40709 Document, and any Warranty Disclaimers, provided that you also 40710 include the original English version of this License and the 40711 original versions of those notices and disclaimers. In case of a 40712 disagreement between the translation and the original version of 40713 this License or a notice or disclaimer, the original version will 40714 prevail. 40715 40716 If a section in the Document is Entitled "Acknowledgements", 40717 "Dedications", or "History", the requirement (section 4) to 40718 Preserve its Title (section 1) will typically require changing the 40719 actual title. 40720 40721 9. TERMINATION 40722 40723 You may not copy, modify, sublicense, or distribute the Document 40724 except as expressly provided for under this License. Any other 40725 attempt to copy, modify, sublicense or distribute the Document is 40726 void, and will automatically terminate your rights under this 40727 License. However, parties who have received copies, or rights, 40728 from you under this License will not have their licenses 40729 terminated so long as such parties remain in full compliance. 40730 40731 10. FUTURE REVISIONS OF THIS LICENSE 40732 40733 The Free Software Foundation may publish new, revised versions of 40734 the GNU Free Documentation License from time to time. Such new 40735 versions will be similar in spirit to the present version, but may 40736 differ in detail to address new problems or concerns. See 40737 `http://www.gnu.org/copyleft/'. 40738 40739 Each version of the License is given a distinguishing version 40740 number. If the Document specifies that a particular numbered 40741 version of this License "or any later version" applies to it, you 40742 have the option of following the terms and conditions either of 40743 that specified version or of any later version that has been 40744 published (not as a draft) by the Free Software Foundation. If 40745 the Document does not specify a version number of this License, 40746 you may choose any version ever published (not as a draft) by the 40747 Free Software Foundation. 40748 40749ADDENDUM: How to use this License for your documents 40750==================================================== 40751 40752To use this License in a document you have written, include a copy of 40753the License in the document and put the following copyright and license 40754notices just after the title page: 40755 40756 Copyright (C) YEAR YOUR NAME. 40757 Permission is granted to copy, distribute and/or modify this document 40758 under the terms of the GNU Free Documentation License, Version 1.2 40759 or any later version published by the Free Software Foundation; 40760 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 40761 Texts. A copy of the license is included in the section entitled ``GNU 40762 Free Documentation License''. 40763 40764 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 40765replace the "with...Texts." line with this: 40766 40767 with the Invariant Sections being LIST THEIR TITLES, with 40768 the Front-Cover Texts being LIST, and with the Back-Cover Texts 40769 being LIST. 40770 40771 If you have Invariant Sections without Cover Texts, or some other 40772combination of the three, merge those two alternatives to suit the 40773situation. 40774 40775 If your document contains nontrivial examples of program code, we 40776recommend releasing these examples in parallel under your choice of 40777free software license, such as the GNU General Public License, to 40778permit their use in free software. 40779 40780 40781File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 40782 40783Contributors to GCC 40784******************* 40785 40786The GCC project would like to thank its many contributors. Without 40787them the project would not have been nearly as successful as it has 40788been. Any omissions in this list are accidental. Feel free to contact 40789<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 40790some of your contributions are not listed. Please keep this list in 40791alphabetical order. 40792 40793 * Analog Devices helped implement the support for complex data types 40794 and iterators. 40795 40796 * John David Anglin for threading-related fixes and improvements to 40797 libstdc++-v3, and the HP-UX port. 40798 40799 * James van Artsdalen wrote the code that makes efficient use of the 40800 Intel 80387 register stack. 40801 40802 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 40803 Series port. 40804 40805 * Alasdair Baird for various bug fixes. 40806 40807 * Giovanni Bajo for analyzing lots of complicated C++ problem 40808 reports. 40809 40810 * Peter Barada for his work to improve code generation for new 40811 ColdFire cores. 40812 40813 * Gerald Baumgartner added the signature extension to the C++ front 40814 end. 40815 40816 * Godmar Back for his Java improvements and encouragement. 40817 40818 * Scott Bambrough for help porting the Java compiler. 40819 40820 * Wolfgang Bangerth for processing tons of bug reports. 40821 40822 * Jon Beniston for his Microsoft Windows port of Java and port to 40823 Lattice Mico32. 40824 40825 * Daniel Berlin for better DWARF2 support, faster/better 40826 optimizations, improved alias analysis, plus migrating GCC to 40827 Bugzilla. 40828 40829 * Geoff Berry for his Java object serialization work and various 40830 patches. 40831 40832 * Uros Bizjak for the implementation of x87 math built-in functions 40833 and for various middle end and i386 back end improvements and bug 40834 fixes. 40835 40836 * Eric Blake for helping to make GCJ and libgcj conform to the 40837 specifications. 40838 40839 * Janne Blomqvist for contributions to GNU Fortran. 40840 40841 * Segher Boessenkool for various fixes. 40842 40843 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 40844 other Java work. 40845 40846 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 40847 miscellaneous clean-ups. 40848 40849 * Steven Bosscher for integrating the GNU Fortran front end into GCC 40850 and for contributing to the tree-ssa branch. 40851 40852 * Eric Botcazou for fixing middle- and backend bugs left and right. 40853 40854 * Per Bothner for his direction via the steering committee and 40855 various improvements to the infrastructure for supporting new 40856 languages. Chill front end implementation. Initial 40857 implementations of cpplib, fix-header, config.guess, libio, and 40858 past C++ library (libg++) maintainer. Dreaming up, designing and 40859 implementing much of GCJ. 40860 40861 * Devon Bowen helped port GCC to the Tahoe. 40862 40863 * Don Bowman for mips-vxworks contributions. 40864 40865 * Dave Brolley for work on cpplib and Chill. 40866 40867 * Paul Brook for work on the ARM architecture and maintaining GNU 40868 Fortran. 40869 40870 * Robert Brown implemented the support for Encore 32000 systems. 40871 40872 * Christian Bruel for improvements to local store elimination. 40873 40874 * Herman A.J. ten Brugge for various fixes. 40875 40876 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 40877 FAQ. 40878 40879 * Joe Buck for his direction via the steering committee. 40880 40881 * Craig Burley for leadership of the G77 Fortran effort. 40882 40883 * Stephan Buys for contributing Doxygen notes for libstdc++. 40884 40885 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 40886 to the C++ strings, streambufs and formatted I/O, hard detective 40887 work on the frustrating localization issues, and keeping up with 40888 the problem reports. 40889 40890 * John Carr for his alias work, SPARC hacking, infrastructure 40891 improvements, previous contributions to the steering committee, 40892 loop optimizations, etc. 40893 40894 * Stephane Carrez for 68HC11 and 68HC12 ports. 40895 40896 * Steve Chamberlain for support for the Renesas SH and H8 processors 40897 and the PicoJava processor, and for GCJ config fixes. 40898 40899 * Glenn Chambers for help with the GCJ FAQ. 40900 40901 * John-Marc Chandonia for various libgcj patches. 40902 40903 * Denis Chertykov for contributing and maintaining the AVR port, the 40904 first GCC port for an 8-bit architecture. 40905 40906 * Scott Christley for his Objective-C contributions. 40907 40908 * Eric Christopher for his Java porting help and clean-ups. 40909 40910 * Branko Cibej for more warning contributions. 40911 40912 * The GNU Classpath project for all of their merged runtime code. 40913 40914 * Nick Clifton for arm, mcore, fr30, v850, m32r, rx work, `--help', 40915 and other random hacking. 40916 40917 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 40918 40919 * R. Kelley Cook for making GCC buildable from a read-only directory 40920 as well as other miscellaneous build process and documentation 40921 clean-ups. 40922 40923 * Ralf Corsepius for SH testing and minor bug fixing. 40924 40925 * Stan Cox for care and feeding of the x86 port and lots of behind 40926 the scenes hacking. 40927 40928 * Alex Crain provided changes for the 3b1. 40929 40930 * Ian Dall for major improvements to the NS32k port. 40931 40932 * Paul Dale for his work to add uClinux platform support to the m68k 40933 backend. 40934 40935 * Dario Dariol contributed the four varieties of sample programs 40936 that print a copy of their source. 40937 40938 * Russell Davidson for fstream and stringstream fixes in libstdc++. 40939 40940 * Bud Davis for work on the G77 and GNU Fortran compilers. 40941 40942 * Mo DeJong for GCJ and libgcj bug fixes. 40943 40944 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 40945 various bug fixes, and the M32C and MeP ports. 40946 40947 * Arnaud Desitter for helping to debug GNU Fortran. 40948 40949 * Gabriel Dos Reis for contributions to G++, contributions and 40950 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 40951 including `valarray<>', `complex<>', maintaining the numerics 40952 library (including that pesky `<limits>' :-) and keeping 40953 up-to-date anything to do with numbers. 40954 40955 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 40956 ISO C99 support, CFG dumping support, etc., plus support of the 40957 C++ runtime libraries including for all kinds of C interface 40958 issues, contributing and maintaining `complex<>', sanity checking 40959 and disbursement, configuration architecture, libio maintenance, 40960 and early math work. 40961 40962 * Zdenek Dvorak for a new loop unroller and various fixes. 40963 40964 * Richard Earnshaw for his ongoing work with the ARM. 40965 40966 * David Edelsohn for his direction via the steering committee, 40967 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 40968 loop changes, doing the entire AIX port of libstdc++ with his bare 40969 hands, and for ensuring GCC properly keeps working on AIX. 40970 40971 * Kevin Ediger for the floating point formatting of num_put::do_put 40972 in libstdc++. 40973 40974 * Phil Edwards for libstdc++ work including configuration hackery, 40975 documentation maintainer, chief breaker of the web pages, the 40976 occasional iostream bug fix, and work on shared library symbol 40977 versioning. 40978 40979 * Paul Eggert for random hacking all over GCC. 40980 40981 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 40982 configuration support for locales and fstream-related fixes. 40983 40984 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 40985 iostreams. 40986 40987 * Christian Ehrhardt for dealing with bug reports. 40988 40989 * Ben Elliston for his work to move the Objective-C runtime into its 40990 own subdirectory and for his work on autoconf. 40991 40992 * Revital Eres for work on the PowerPC 750CL port. 40993 40994 * Marc Espie for OpenBSD support. 40995 40996 * Doug Evans for much of the global optimization framework, arc, 40997 m32r, and SPARC work. 40998 40999 * Christopher Faylor for his work on the Cygwin port and for caring 41000 and feeding the gcc.gnu.org box and saving its users tons of spam. 41001 41002 * Fred Fish for BeOS support and Ada fixes. 41003 41004 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 41005 41006 * Peter Gerwinski for various bug fixes and the Pascal front end. 41007 41008 * Kaveh R. Ghazi for his direction via the steering committee, 41009 amazing work to make `-W -Wall -W* -Werror' useful, and 41010 continuously testing GCC on a plethora of platforms. Kaveh 41011 extends his gratitude to the CAIP Center at Rutgers University for 41012 providing him with computing resources to work on Free Software 41013 since the late 1980s. 41014 41015 * John Gilmore for a donation to the FSF earmarked improving GNU 41016 Java. 41017 41018 * Judy Goldberg for c++ contributions. 41019 41020 * Torbjorn Granlund for various fixes and the c-torture testsuite, 41021 multiply- and divide-by-constant optimization, improved long long 41022 support, improved leaf function register allocation, and his 41023 direction via the steering committee. 41024 41025 * Anthony Green for his `-Os' contributions, the moxie port, and 41026 Java front end work. 41027 41028 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 41029 Java code. 41030 41031 * Michael K. Gschwind contributed the port to the PDP-11. 41032 41033 * Richard Guenther for his ongoing middle-end contributions and bug 41034 fixes and for release management. 41035 41036 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 41037 the support for Dwarf symbolic debugging information, and much of 41038 the support for System V Release 4. He has also worked heavily on 41039 the Intel 386 and 860 support. 41040 41041 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 41042 GCSE. 41043 41044 * Bruno Haible for improvements in the runtime overhead for EH, new 41045 warnings and assorted bug fixes. 41046 41047 * Andrew Haley for his amazing Java compiler and library efforts. 41048 41049 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 41050 series 300. 41051 41052 * Michael Hayes for various thankless work he's done trying to get 41053 the c30/c40 ports functional. Lots of loop and unroll 41054 improvements and fixes. 41055 41056 * Dara Hazeghi for wading through myriads of target-specific bug 41057 reports. 41058 41059 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 41060 41061 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 41062 work, loop opts, and generally fixing lots of old problems we've 41063 ignored for years, flow rewrite and lots of further stuff, 41064 including reviewing tons of patches. 41065 41066 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 41067 various fixes. 41068 41069 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 41070 contributed the support for the Sony NEWS machine. 41071 41072 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 41073 various fixes. 41074 41075 * Katherine Holcomb for work on GNU Fortran. 41076 41077 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 41078 of testing and bug fixing, particularly of GCC configury code. 41079 41080 * Steve Holmgren for MachTen patches. 41081 41082 * Jan Hubicka for his x86 port improvements. 41083 41084 * Falk Hueffner for working on C and optimization bug reports. 41085 41086 * Bernardo Innocenti for his m68k work, including merging of 41087 ColdFire improvements and uClinux support. 41088 41089 * Christian Iseli for various bug fixes. 41090 41091 * Kamil Iskra for general m68k hacking. 41092 41093 * Lee Iverson for random fixes and MIPS testing. 41094 41095 * Andreas Jaeger for testing and benchmarking of GCC and various bug 41096 fixes. 41097 41098 * Jakub Jelinek for his SPARC work and sibling call optimizations as 41099 well as lots of bug fixes and test cases, and for improving the 41100 Java build system. 41101 41102 * Janis Johnson for ia64 testing and fixes, her quality improvement 41103 sidetracks, and web page maintenance. 41104 41105 * Kean Johnston for SCO OpenServer support and various fixes. 41106 41107 * Tim Josling for the sample language treelang based originally on 41108 Richard Kenner's "toy" language. 41109 41110 * Nicolai Josuttis for additional libstdc++ documentation. 41111 41112 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 41113 target. 41114 41115 * Steven G. Kargl for work on GNU Fortran. 41116 41117 * David Kashtan of SRI adapted GCC to VMS. 41118 41119 * Ryszard Kabatek for many, many libstdc++ bug fixes and 41120 optimizations of strings, especially member functions, and for 41121 auto_ptr fixes. 41122 41123 * Geoffrey Keating for his ongoing work to make the PPC work for 41124 GNU/Linux and his automatic regression tester. 41125 41126 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 41127 work in just about every part of libstdc++. 41128 41129 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 41130 MIL-STD-1750A. 41131 41132 * Richard Kenner of the New York University Ultracomputer Research 41133 Laboratory wrote the machine descriptions for the AMD 29000, the 41134 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 41135 support for instruction attributes. He also made changes to 41136 better support RISC processors including changes to common 41137 subexpression elimination, strength reduction, function calling 41138 sequence handling, and condition code support, in addition to 41139 generalizing the code for frame pointer elimination and delay slot 41140 scheduling. Richard Kenner was also the head maintainer of GCC 41141 for several years. 41142 41143 * Mumit Khan for various contributions to the Cygwin and Mingw32 41144 ports and maintaining binary releases for Microsoft Windows hosts, 41145 and for massive libstdc++ porting work to Cygwin/Mingw32. 41146 41147 * Robin Kirkham for cpu32 support. 41148 41149 * Mark Klein for PA improvements. 41150 41151 * Thomas Koenig for various bug fixes. 41152 41153 * Bruce Korb for the new and improved fixincludes code. 41154 41155 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 41156 effort. 41157 41158 * Charles LaBrec contributed the support for the Integrated Solutions 41159 68020 system. 41160 41161 * Asher Langton and Mike Kumbera for contributing Cray pointer 41162 support to GNU Fortran, and for other GNU Fortran improvements. 41163 41164 * Jeff Law for his direction via the steering committee, 41165 coordinating the entire egcs project and GCC 2.95, rolling out 41166 snapshots and releases, handling merges from GCC2, reviewing tons 41167 of patches that might have fallen through the cracks else, and 41168 random but extensive hacking. 41169 41170 * Marc Lehmann for his direction via the steering committee and 41171 helping with analysis and improvements of x86 performance. 41172 41173 * Victor Leikehman for work on GNU Fortran. 41174 41175 * Ted Lemon wrote parts of the RTL reader and printer. 41176 41177 * Kriang Lerdsuwanakij for C++ improvements including template as 41178 template parameter support, and many C++ fixes. 41179 41180 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 41181 and random work on the Java front end. 41182 41183 * Alain Lichnewsky ported GCC to the MIPS CPU. 41184 41185 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 41186 and patches. 41187 41188 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 41189 41190 * Chen Liqin for various S+core related fixes/improvement, and for 41191 maintaining the S+core port. 41192 41193 * Weiwen Liu for testing and various bug fixes. 41194 41195 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 41196 diagnostics fixes and improvements. 41197 41198 * Dave Love for his ongoing work with the Fortran front end and 41199 runtime libraries. 41200 41201 * Martin von Lo"wis for internal consistency checking infrastructure, 41202 various C++ improvements including namespace support, and tons of 41203 assistance with libstdc++/compiler merges. 41204 41205 * H.J. Lu for his previous contributions to the steering committee, 41206 many x86 bug reports, prototype patches, and keeping the GNU/Linux 41207 ports working. 41208 41209 * Greg McGary for random fixes and (someday) bounded pointers. 41210 41211 * Andrew MacLeod for his ongoing work in building a real EH system, 41212 various code generation improvements, work on the global 41213 optimizer, etc. 41214 41215 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 41216 hacking improvements to compile-time performance, overall 41217 knowledge and direction in the area of instruction scheduling, and 41218 design and implementation of the automaton based instruction 41219 scheduler. 41220 41221 * Bob Manson for his behind the scenes work on dejagnu. 41222 41223 * Philip Martin for lots of libstdc++ string and vector iterator 41224 fixes and improvements, and string clean up and testsuites. 41225 41226 * All of the Mauve project contributors, for Java test code. 41227 41228 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 41229 41230 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 41231 41232 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 41233 powerpc, haifa, ECOFF debug support, and other assorted hacking. 41234 41235 * Jason Merrill for his direction via the steering committee and 41236 leading the G++ effort. 41237 41238 * Martin Michlmayr for testing GCC on several architectures using the 41239 entire Debian archive. 41240 41241 * David Miller for his direction via the steering committee, lots of 41242 SPARC work, improvements in jump.c and interfacing with the Linux 41243 kernel developers. 41244 41245 * Gary Miller ported GCC to Charles River Data Systems machines. 41246 41247 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 41248 the entire libstdc++ testsuite namespace-compatible. 41249 41250 * Mark Mitchell for his direction via the steering committee, 41251 mountains of C++ work, load/store hoisting out of loops, alias 41252 analysis improvements, ISO C `restrict' support, and serving as 41253 release manager for GCC 3.x. 41254 41255 * Alan Modra for various GNU/Linux bits and testing. 41256 41257 * Toon Moene for his direction via the steering committee, Fortran 41258 maintenance, and his ongoing work to make us make Fortran run fast. 41259 41260 * Jason Molenda for major help in the care and feeding of all the 41261 services on the gcc.gnu.org (formerly egcs.cygnus.com) 41262 machine--mail, web services, ftp services, etc etc. Doing all 41263 this work on scrap paper and the backs of envelopes would have 41264 been... difficult. 41265 41266 * Catherine Moore for fixing various ugly problems we have sent her 41267 way, including the haifa bug which was killing the Alpha & PowerPC 41268 Linux kernels. 41269 41270 * Mike Moreton for his various Java patches. 41271 41272 * David Mosberger-Tang for various Alpha improvements, and for the 41273 initial IA-64 port. 41274 41275 * Stephen Moshier contributed the floating point emulator that 41276 assists in cross-compilation and permits support for floating 41277 point numbers wider than 64 bits and for ISO C99 support. 41278 41279 * Bill Moyer for his behind the scenes work on various issues. 41280 41281 * Philippe De Muyter for his work on the m68k port. 41282 41283 * Joseph S. Myers for his work on the PDP-11 port, format checking 41284 and ISO C99 support, and continuous emphasis on (and contributions 41285 to) documentation. 41286 41287 * Nathan Myers for his work on libstdc++-v3: architecture and 41288 authorship through the first three snapshots, including 41289 implementation of locale infrastructure, string, shadow C headers, 41290 and the initial project documentation (DESIGN, CHECKLIST, and so 41291 forth). Later, more work on MT-safe string and shadow headers. 41292 41293 * Felix Natter for documentation on porting libstdc++. 41294 41295 * Nathanael Nerode for cleaning up the configuration/build process. 41296 41297 * NeXT, Inc. donated the front end that supports the Objective-C 41298 language. 41299 41300 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 41301 the search engine setup, various documentation fixes and other 41302 small fixes. 41303 41304 * Geoff Noer for his work on getting cygwin native builds working. 41305 41306 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 41307 tracking web pages, GIMPLE tuples, and assorted fixes. 41308 41309 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 41310 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 41311 related infrastructure improvements. 41312 41313 * Alexandre Oliva for various build infrastructure improvements, 41314 scripts and amazing testing work, including keeping libtool issues 41315 sane and happy. 41316 41317 * Stefan Olsson for work on mt_alloc. 41318 41319 * Melissa O'Neill for various NeXT fixes. 41320 41321 * Rainer Orth for random MIPS work, including improvements to GCC's 41322 o32 ABI support, improvements to dejagnu's MIPS support, Java 41323 configuration clean-ups and porting work, and maintaining the 41324 IRIX, Solaris 2, and Tru64 UNIX ports. 41325 41326 * Hartmut Penner for work on the s390 port. 41327 41328 * Paul Petersen wrote the machine description for the Alliant FX/8. 41329 41330 * Alexandre Petit-Bianco for implementing much of the Java compiler 41331 and continued Java maintainership. 41332 41333 * Matthias Pfaller for major improvements to the NS32k port. 41334 41335 * Gerald Pfeifer for his direction via the steering committee, 41336 pointing out lots of problems we need to solve, maintenance of the 41337 web pages, and taking care of documentation maintenance in general. 41338 41339 * Andrew Pinski for processing bug reports by the dozen. 41340 41341 * Ovidiu Predescu for his work on the Objective-C front end and 41342 runtime libraries. 41343 41344 * Jerry Quinn for major performance improvements in C++ formatted 41345 I/O. 41346 41347 * Ken Raeburn for various improvements to checker, MIPS ports and 41348 various cleanups in the compiler. 41349 41350 * Rolf W. Rasmussen for hacking on AWT. 41351 41352 * David Reese of Sun Microsystems contributed to the Solaris on 41353 PowerPC port. 41354 41355 * Volker Reichelt for keeping up with the problem reports. 41356 41357 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 41358 hacking. 41359 41360 * Loren J. Rittle for improvements to libstdc++-v3 including the 41361 FreeBSD port, threading fixes, thread-related configury changes, 41362 critical threading documentation, and solutions to really tricky 41363 I/O problems, as well as keeping GCC properly working on FreeBSD 41364 and continuous testing. 41365 41366 * Craig Rodrigues for processing tons of bug reports. 41367 41368 * Ola Ro"nnerup for work on mt_alloc. 41369 41370 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 41371 41372 * David Ronis inspired and encouraged Craig to rewrite the G77 41373 documentation in texinfo format by contributing a first pass at a 41374 translation of the old `g77-0.5.16/f/DOC' file. 41375 41376 * Ken Rose for fixes to GCC's delay slot filling code. 41377 41378 * Paul Rubin wrote most of the preprocessor. 41379 41380 * Pe'tur Runo'lfsson for major performance improvements in C++ 41381 formatted I/O and large file support in C++ filebuf. 41382 41383 * Chip Salzenberg for libstdc++ patches and improvements to locales, 41384 traits, Makefiles, libio, libtool hackery, and "long long" support. 41385 41386 * Juha Sarlin for improvements to the H8 code generator. 41387 41388 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 41389 300. 41390 41391 * Roger Sayle for improvements to constant folding and GCC's RTL 41392 optimizers as well as for fixing numerous bugs. 41393 41394 * Bradley Schatz for his work on the GCJ FAQ. 41395 41396 * Peter Schauer wrote the code to allow debugging to work on the 41397 Alpha. 41398 41399 * William Schelter did most of the work on the Intel 80386 support. 41400 41401 * Tobias Schlu"ter for work on GNU Fortran. 41402 41403 * Bernd Schmidt for various code generation improvements and major 41404 work in the reload pass as well a serving as release manager for 41405 GCC 2.95.3. 41406 41407 * Peter Schmid for constant testing of libstdc++--especially 41408 application testing, going above and beyond what was requested for 41409 the release criteria--and libstdc++ header file tweaks. 41410 41411 * Jason Schroeder for jcf-dump patches. 41412 41413 * Andreas Schwab for his work on the m68k port. 41414 41415 * Lars Segerlund for work on GNU Fortran. 41416 41417 * Joel Sherrill for his direction via the steering committee, RTEMS 41418 contributions and RTEMS testing. 41419 41420 * Nathan Sidwell for many C++ fixes/improvements. 41421 41422 * Jeffrey Siegal for helping RMS with the original design of GCC, 41423 some code which handles the parse tree and RTL data structures, 41424 constant folding and help with the original VAX & m68k ports. 41425 41426 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 41427 from the LWG (thereby keeping GCC in line with updates from the 41428 ISO). 41429 41430 * Franz Sirl for his ongoing work with making the PPC port stable 41431 for GNU/Linux. 41432 41433 * Andrey Slepuhin for assorted AIX hacking. 41434 41435 * Trevor Smigiel for contributing the SPU port. 41436 41437 * Christopher Smith did the port for Convex machines. 41438 41439 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 41440 41441 * Randy Smith finished the Sun FPA support. 41442 41443 * Scott Snyder for queue, iterator, istream, and string fixes and 41444 libstdc++ testsuite entries. Also for providing the patch to G77 41445 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 41446 `LOGICAL*1'. 41447 41448 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 41449 41450 * Richard Stallman, for writing the original GCC and launching the 41451 GNU project. 41452 41453 * Jan Stein of the Chalmers Computer Society provided support for 41454 Genix, as well as part of the 32000 machine description. 41455 41456 * Nigel Stephens for various mips16 related fixes/improvements. 41457 41458 * Jonathan Stone wrote the machine description for the Pyramid 41459 computer. 41460 41461 * Graham Stott for various infrastructure improvements. 41462 41463 * John Stracke for his Java HTTP protocol fixes. 41464 41465 * Mike Stump for his Elxsi port, G++ contributions over the years 41466 and more recently his vxworks contributions 41467 41468 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 41469 41470 * Shigeya Suzuki for this fixes for the bsdi platforms. 41471 41472 * Ian Lance Taylor for his mips16 work, general configury hacking, 41473 fixincludes, etc. 41474 41475 * Holger Teutsch provided the support for the Clipper CPU. 41476 41477 * Gary Thomas for his ongoing work to make the PPC work for 41478 GNU/Linux. 41479 41480 * Philipp Thomas for random bug fixes throughout the compiler 41481 41482 * Jason Thorpe for thread support in libstdc++ on NetBSD. 41483 41484 * Kresten Krab Thorup wrote the run time support for the Objective-C 41485 language and the fantastic Java bytecode interpreter. 41486 41487 * Michael Tiemann for random bug fixes, the first instruction 41488 scheduler, initial C++ support, function integration, NS32k, SPARC 41489 and M88k machine description work, delay slot scheduling. 41490 41491 * Andreas Tobler for his work porting libgcj to Darwin. 41492 41493 * Teemu Torma for thread safe exception handling support. 41494 41495 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 41496 definitions, and of the VAX machine description. 41497 41498 * Daniel Towner and Hariharan Sandanagobalane contributed and 41499 maintain the picoChip port. 41500 41501 * Tom Tromey for internationalization support and for his many Java 41502 contributions and libgcj maintainership. 41503 41504 * Lassi Tuura for improvements to config.guess to determine HP 41505 processor types. 41506 41507 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 41508 41509 * Andy Vaught for the design and initial implementation of the GNU 41510 Fortran front end. 41511 41512 * Brent Verner for work with the libstdc++ cshadow files and their 41513 associated configure steps. 41514 41515 * Todd Vierling for contributions for NetBSD ports. 41516 41517 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 41518 guidance. 41519 41520 * Dean Wakerley for converting the install documentation from HTML 41521 to texinfo in time for GCC 3.0. 41522 41523 * Krister Walfridsson for random bug fixes. 41524 41525 * Feng Wang for contributions to GNU Fortran. 41526 41527 * Stephen M. Webb for time and effort on making libstdc++ shadow 41528 files work with the tricky Solaris 8+ headers, and for pushing the 41529 build-time header tree. 41530 41531 * John Wehle for various improvements for the x86 code generator, 41532 related infrastructure improvements to help x86 code generation, 41533 value range propagation and other work, WE32k port. 41534 41535 * Ulrich Weigand for work on the s390 port. 41536 41537 * Zack Weinberg for major work on cpplib and various other bug fixes. 41538 41539 * Matt Welsh for help with Linux Threads support in GCJ. 41540 41541 * Urban Widmark for help fixing java.io. 41542 41543 * Mark Wielaard for new Java library code and his work integrating 41544 with Classpath. 41545 41546 * Dale Wiles helped port GCC to the Tahoe. 41547 41548 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 41549 41550 * Jim Wilson for his direction via the steering committee, tackling 41551 hard problems in various places that nobody else wanted to work 41552 on, strength reduction and other loop optimizations. 41553 41554 * Paul Woegerer and Tal Agmon for the CRX port. 41555 41556 * Carlo Wood for various fixes. 41557 41558 * Tom Wood for work on the m88k port. 41559 41560 * Canqun Yang for work on GNU Fortran. 41561 41562 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 41563 description for the Tron architecture (specifically, the Gmicro). 41564 41565 * Kevin Zachmann helped port GCC to the Tahoe. 41566 41567 * Ayal Zaks for Swing Modulo Scheduling (SMS). 41568 41569 * Xiaoqiang Zhang for work on GNU Fortran. 41570 41571 * Gilles Zunino for help porting Java to Irix. 41572 41573 41574 The following people are recognized for their contributions to GNAT, 41575the Ada front end of GCC: 41576 * Bernard Banner 41577 41578 * Romain Berrendonner 41579 41580 * Geert Bosch 41581 41582 * Emmanuel Briot 41583 41584 * Joel Brobecker 41585 41586 * Ben Brosgol 41587 41588 * Vincent Celier 41589 41590 * Arnaud Charlet 41591 41592 * Chien Chieng 41593 41594 * Cyrille Comar 41595 41596 * Cyrille Crozes 41597 41598 * Robert Dewar 41599 41600 * Gary Dismukes 41601 41602 * Robert Duff 41603 41604 * Ed Falis 41605 41606 * Ramon Fernandez 41607 41608 * Sam Figueroa 41609 41610 * Vasiliy Fofanov 41611 41612 * Michael Friess 41613 41614 * Franco Gasperoni 41615 41616 * Ted Giering 41617 41618 * Matthew Gingell 41619 41620 * Laurent Guerby 41621 41622 * Jerome Guitton 41623 41624 * Olivier Hainque 41625 41626 * Jerome Hugues 41627 41628 * Hristian Kirtchev 41629 41630 * Jerome Lambourg 41631 41632 * Bruno Leclerc 41633 41634 * Albert Lee 41635 41636 * Sean McNeil 41637 41638 * Javier Miranda 41639 41640 * Laurent Nana 41641 41642 * Pascal Obry 41643 41644 * Dong-Ik Oh 41645 41646 * Laurent Pautet 41647 41648 * Brett Porter 41649 41650 * Thomas Quinot 41651 41652 * Nicolas Roche 41653 41654 * Pat Rogers 41655 41656 * Jose Ruiz 41657 41658 * Douglas Rupp 41659 41660 * Sergey Rybin 41661 41662 * Gail Schenker 41663 41664 * Ed Schonberg 41665 41666 * Nicolas Setton 41667 41668 * Samuel Tardieu 41669 41670 41671 The following people are recognized for their contributions of new 41672features, bug reports, testing and integration of classpath/libgcj for 41673GCC version 4.1: 41674 * Lillian Angel for `JTree' implementation and lots Free Swing 41675 additions and bug fixes. 41676 41677 * Wolfgang Baer for `GapContent' bug fixes. 41678 41679 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 41680 event fixes, lots of Free Swing work including `JTable' editing. 41681 41682 * Stuart Ballard for RMI constant fixes. 41683 41684 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 41685 41686 * Gary Benson for `MessageFormat' fixes. 41687 41688 * Daniel Bonniot for `Serialization' fixes. 41689 41690 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 41691 and `DOM xml:id' support. 41692 41693 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 41694 41695 * Archie Cobbs for build fixes, VM interface updates, 41696 `URLClassLoader' updates. 41697 41698 * Kelley Cook for build fixes. 41699 41700 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 41701 41702 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 41703 and improvements. 41704 41705 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 41706 2D support. Lots of imageio framework additions, lots of AWT and 41707 Free Swing bug fixes. 41708 41709 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 41710 fixes, better `Proxy' support, bug fixes and IKVM integration. 41711 41712 * Santiago Gala for `AccessControlContext' fixes. 41713 41714 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 41715 improvements. 41716 41717 * David Gilbert for `basic' and `metal' icon and plaf support and 41718 lots of documenting, Lots of Free Swing and metal theme additions. 41719 `MetalIconFactory' implementation. 41720 41721 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 41722 41723 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 41724 build speedups. 41725 41726 * Kim Ho for `JFileChooser' implementation. 41727 41728 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 41729 updates, `Serialization' fixes, `Properties' XML support and 41730 generic branch work, VMIntegration guide update. 41731 41732 * Bastiaan Huisman for `TimeZone' bug fixing. 41733 41734 * Andreas Jaeger for mprec updates. 41735 41736 * Paul Jenner for better `-Werror' support. 41737 41738 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 41739 41740 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 41741 bug fixes all over. Lots of Free Swing work including styled text. 41742 41743 * Simon Kitching for `String' cleanups and optimization suggestions. 41744 41745 * Michael Koch for configuration fixes, `Locale' updates, bug and 41746 build fixes. 41747 41748 * Guilhem Lavaux for configuration, thread and channel fixes and 41749 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 41750 41751 * David Lichteblau for JCL support library global/local reference 41752 cleanups. 41753 41754 * Aaron Luchko for JDWP updates and documentation fixes. 41755 41756 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 41757 features. 41758 41759 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 41760 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 41761 and implementing the Qt4 peers. 41762 41763 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 41764 `SystemLogger' and `FileHandler' rotate implementations, NIO 41765 `FileChannel.map' support, security and policy updates. 41766 41767 * Bryce McKinlay for RMI work. 41768 41769 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 41770 testing and documenting. 41771 41772 * Kalle Olavi Niemitalo for build fixes. 41773 41774 * Rainer Orth for build fixes. 41775 41776 * Andrew Overholt for `File' locking fixes. 41777 41778 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 41779 41780 * Olga Rodimina for `MenuSelectionManager' implementation. 41781 41782 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 41783 41784 * Julian Scheid for documentation updates and gjdoc support. 41785 41786 * Christian Schlichtherle for zip fixes and cleanups. 41787 41788 * Robert Schuster for documentation updates and beans fixes, 41789 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 41790 and URL, AWT and Free Swing bug fixes. 41791 41792 * Keith Seitz for lots of JDWP work. 41793 41794 * Christian Thalinger for 64-bit cleanups, Configuration and VM 41795 interface fixes and `CACAO' integration, `fdlibm' updates. 41796 41797 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 41798 41799 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 41800 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 41801 41802 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 41803 integration. `Qt4' build infrastructure, `SHA1PRNG' and 41804 `GdkPixbugDecoder' updates. 41805 41806 * Tom Tromey for Eclipse integration, generics work, lots of bug 41807 fixes and gcj integration including coordinating The Big Merge. 41808 41809 * Mark Wielaard for bug fixes, packaging and release management, 41810 `Clipboard' implementation, system call interrupts and network 41811 timeouts and `GdkPixpufDecoder' fixes. 41812 41813 41814 In addition to the above, all of which also contributed time and 41815energy in testing GCC, we would like to thank the following for their 41816contributions to testing: 41817 41818 * Michael Abd-El-Malek 41819 41820 * Thomas Arend 41821 41822 * Bonzo Armstrong 41823 41824 * Steven Ashe 41825 41826 * Chris Baldwin 41827 41828 * David Billinghurst 41829 41830 * Jim Blandy 41831 41832 * Stephane Bortzmeyer 41833 41834 * Horst von Brand 41835 41836 * Frank Braun 41837 41838 * Rodney Brown 41839 41840 * Sidney Cadot 41841 41842 * Bradford Castalia 41843 41844 * Robert Clark 41845 41846 * Jonathan Corbet 41847 41848 * Ralph Doncaster 41849 41850 * Richard Emberson 41851 41852 * Levente Farkas 41853 41854 * Graham Fawcett 41855 41856 * Mark Fernyhough 41857 41858 * Robert A. French 41859 41860 * Jo"rgen Freyh 41861 41862 * Mark K. Gardner 41863 41864 * Charles-Antoine Gauthier 41865 41866 * Yung Shing Gene 41867 41868 * David Gilbert 41869 41870 * Simon Gornall 41871 41872 * Fred Gray 41873 41874 * John Griffin 41875 41876 * Patrik Hagglund 41877 41878 * Phil Hargett 41879 41880 * Amancio Hasty 41881 41882 * Takafumi Hayashi 41883 41884 * Bryan W. Headley 41885 41886 * Kevin B. Hendricks 41887 41888 * Joep Jansen 41889 41890 * Christian Joensson 41891 41892 * Michel Kern 41893 41894 * David Kidd 41895 41896 * Tobias Kuipers 41897 41898 * Anand Krishnaswamy 41899 41900 * A. O. V. Le Blanc 41901 41902 * llewelly 41903 41904 * Damon Love 41905 41906 * Brad Lucier 41907 41908 * Matthias Klose 41909 41910 * Martin Knoblauch 41911 41912 * Rick Lutowski 41913 41914 * Jesse Macnish 41915 41916 * Stefan Morrell 41917 41918 * Anon A. Mous 41919 41920 * Matthias Mueller 41921 41922 * Pekka Nikander 41923 41924 * Rick Niles 41925 41926 * Jon Olson 41927 41928 * Magnus Persson 41929 41930 * Chris Pollard 41931 41932 * Richard Polton 41933 41934 * Derk Reefman 41935 41936 * David Rees 41937 41938 * Paul Reilly 41939 41940 * Tom Reilly 41941 41942 * Torsten Rueger 41943 41944 * Danny Sadinoff 41945 41946 * Marc Schifer 41947 41948 * Erik Schnetter 41949 41950 * Wayne K. Schroll 41951 41952 * David Schuler 41953 41954 * Vin Shelton 41955 41956 * Tim Souder 41957 41958 * Adam Sulmicki 41959 41960 * Bill Thorson 41961 41962 * George Talbot 41963 41964 * Pedro A. M. Vazquez 41965 41966 * Gregory Warnes 41967 41968 * Ian Watson 41969 41970 * David E. Young 41971 41972 * And many others 41973 41974 And finally we'd like to thank everyone who uses the compiler, provides 41975feedback and generally reminds us why we're doing this work in the first 41976place. 41977 41978 41979File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 41980 41981Option Index 41982************ 41983 41984GCC's command line options are indexed here without any initial `-' or 41985`--'. Where an option has both positive and negative forms (such as 41986`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 41987indexed under the most appropriate form; it may sometimes be useful to 41988look up both forms. 41989 41990[index] 41991* Menu: 41992 41993* ###: Overall Options. (line 204) 41994* -mcpu: RX Options. (line 31) 41995* -patch: RX Options. (line 31) 41996* A: Preprocessor Options. 41997 (line 541) 41998* all_load: Darwin Options. (line 112) 41999* allowable_client: Darwin Options. (line 199) 42000* ansi <1>: Non-bugs. (line 107) 42001* ansi <2>: Other Builtins. (line 22) 42002* ansi <3>: Preprocessor Options. 42003 (line 326) 42004* ansi <4>: C Dialect Options. (line 11) 42005* ansi: Standards. (line 16) 42006* arch_errors_fatal: Darwin Options. (line 116) 42007* aux-info: C Dialect Options. (line 143) 42008* b: Target Options. (line 13) 42009* B: Directory Options. (line 41) 42010* Bdynamic: VxWorks Options. (line 22) 42011* bind_at_load: Darwin Options. (line 120) 42012* Bstatic: VxWorks Options. (line 22) 42013* bundle: Darwin Options. (line 125) 42014* bundle_loader: Darwin Options. (line 129) 42015* c: Link Options. (line 20) 42016* C: Preprocessor Options. 42017 (line 599) 42018* c: Overall Options. (line 159) 42019* client_name: Darwin Options. (line 199) 42020* combine: Overall Options. (line 215) 42021* compatibility_version: Darwin Options. (line 199) 42022* coverage: Debugging Options. (line 336) 42023* current_version: Darwin Options. (line 199) 42024* D: Preprocessor Options. 42025 (line 34) 42026* d: Debugging Options. (line 400) 42027* dA: Debugging Options. (line 603) 42028* dD <1>: Preprocessor Options. 42029 (line 573) 42030* dD: Debugging Options. (line 607) 42031* dead_strip: Darwin Options. (line 199) 42032* dependency-file: Darwin Options. (line 199) 42033* dH: Debugging Options. (line 611) 42034* dI: Preprocessor Options. 42035 (line 582) 42036* dM: Preprocessor Options. 42037 (line 557) 42038* dm: Debugging Options. (line 614) 42039* dN: Preprocessor Options. 42040 (line 579) 42041* dP: Debugging Options. (line 623) 42042* dp: Debugging Options. (line 618) 42043* dU: Preprocessor Options. 42044 (line 586) 42045* dumpmachine: Debugging Options. (line 1101) 42046* dumpspecs: Debugging Options. (line 1109) 42047* dumpversion: Debugging Options. (line 1105) 42048* dv: Debugging Options. (line 627) 42049* dx: Debugging Options. (line 632) 42050* dy: Debugging Options. (line 636) 42051* dylib_file: Darwin Options. (line 199) 42052* dylinker_install_name: Darwin Options. (line 199) 42053* dynamic: Darwin Options. (line 199) 42054* dynamiclib: Darwin Options. (line 133) 42055* E <1>: Link Options. (line 20) 42056* E: Overall Options. (line 180) 42057* EB <1>: MIPS Options. (line 7) 42058* EB: ARC Options. (line 12) 42059* EL <1>: MIPS Options. (line 10) 42060* EL: ARC Options. (line 9) 42061* exported_symbols_list: Darwin Options. (line 199) 42062* F: Darwin Options. (line 32) 42063* fabi-version: C++ Dialect Options. 42064 (line 20) 42065* falign-functions: Optimize Options. (line 1284) 42066* falign-jumps: Optimize Options. (line 1334) 42067* falign-labels: Optimize Options. (line 1302) 42068* falign-loops: Optimize Options. (line 1320) 42069* fargument-alias: Code Gen Options. (line 415) 42070* fargument-noalias: Code Gen Options. (line 415) 42071* fargument-noalias-anything: Code Gen Options. (line 415) 42072* fargument-noalias-global: Code Gen Options. (line 415) 42073* fassociative-math: Optimize Options. (line 1759) 42074* fasynchronous-unwind-tables: Code Gen Options. (line 64) 42075* fauto-inc-dec: Optimize Options. (line 477) 42076* fbounds-check: Code Gen Options. (line 15) 42077* fbranch-probabilities: Optimize Options. (line 1887) 42078* fbranch-target-load-optimize: Optimize Options. (line 1995) 42079* fbranch-target-load-optimize2: Optimize Options. (line 2001) 42080* fbtr-bb-exclusive: Optimize Options. (line 2005) 42081* fcall-saved: Code Gen Options. (line 262) 42082* fcall-used: Code Gen Options. (line 248) 42083* fcaller-saves: Optimize Options. (line 743) 42084* fcheck-data-deps: Optimize Options. (line 989) 42085* fcheck-new: C++ Dialect Options. 42086 (line 41) 42087* fcommon: Variable Attributes. 42088 (line 105) 42089* fcompare-debug: Debugging Options. (line 156) 42090* fcompare-debug-second: Debugging Options. (line 182) 42091* fcond-mismatch: C Dialect Options. (line 261) 42092* fconserve-space: C++ Dialect Options. 42093 (line 51) 42094* fconserve-stack: Optimize Options. (line 756) 42095* fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 42096 (line 30) 42097* fcprop-registers: Optimize Options. (line 1617) 42098* fcrossjumping: Optimize Options. (line 470) 42099* fcse-follow-jumps: Optimize Options. (line 398) 42100* fcse-skip-blocks: Optimize Options. (line 407) 42101* fcx-fortran-rules: Optimize Options. (line 1873) 42102* fcx-limited-range: Optimize Options. (line 1861) 42103* fdata-sections: Optimize Options. (line 1976) 42104* fdbg-cnt: Debugging Options. (line 389) 42105* fdbg-cnt-list: Debugging Options. (line 386) 42106* fdce: Optimize Options. (line 483) 42107* fdebug-prefix-map: Debugging Options. (line 283) 42108* fdelayed-branch: Optimize Options. (line 592) 42109* fdelete-null-pointer-checks: Optimize Options. (line 506) 42110* fdiagnostics-show-location: Language Independent Options. 42111 (line 21) 42112* fdiagnostics-show-option: Language Independent Options. 42113 (line 36) 42114* fdirectives-only: Preprocessor Options. 42115 (line 449) 42116* fdollars-in-identifiers <1>: Interoperation. (line 146) 42117* fdollars-in-identifiers: Preprocessor Options. 42118 (line 471) 42119* fdse: Optimize Options. (line 487) 42120* fdump-class-hierarchy: Debugging Options. (line 666) 42121* fdump-final-insns: Debugging Options. (line 150) 42122* fdump-ipa: Debugging Options. (line 674) 42123* fdump-noaddr: Debugging Options. (line 639) 42124* fdump-rtl-alignments: Debugging Options. (line 415) 42125* fdump-rtl-all: Debugging Options. (line 600) 42126* fdump-rtl-asmcons: Debugging Options. (line 418) 42127* fdump-rtl-auto_inc_dec: Debugging Options. (line 422) 42128* fdump-rtl-barriers: Debugging Options. (line 426) 42129* fdump-rtl-bbpart: Debugging Options. (line 429) 42130* fdump-rtl-bbro: Debugging Options. (line 432) 42131* fdump-rtl-btl2: Debugging Options. (line 436) 42132* fdump-rtl-bypass: Debugging Options. (line 440) 42133* fdump-rtl-ce1: Debugging Options. (line 451) 42134* fdump-rtl-ce2: Debugging Options. (line 451) 42135* fdump-rtl-ce3: Debugging Options. (line 451) 42136* fdump-rtl-combine: Debugging Options. (line 443) 42137* fdump-rtl-compgotos: Debugging Options. (line 446) 42138* fdump-rtl-cprop_hardreg: Debugging Options. (line 455) 42139* fdump-rtl-csa: Debugging Options. (line 458) 42140* fdump-rtl-cse1: Debugging Options. (line 462) 42141* fdump-rtl-cse2: Debugging Options. (line 462) 42142* fdump-rtl-dbr: Debugging Options. (line 469) 42143* fdump-rtl-dce: Debugging Options. (line 466) 42144* fdump-rtl-dce1: Debugging Options. (line 473) 42145* fdump-rtl-dce2: Debugging Options. (line 473) 42146* fdump-rtl-dfinish: Debugging Options. (line 597) 42147* fdump-rtl-dfinit: Debugging Options. (line 597) 42148* fdump-rtl-eh: Debugging Options. (line 477) 42149* fdump-rtl-eh_ranges: Debugging Options. (line 480) 42150* fdump-rtl-expand: Debugging Options. (line 483) 42151* fdump-rtl-fwprop1: Debugging Options. (line 487) 42152* fdump-rtl-fwprop2: Debugging Options. (line 487) 42153* fdump-rtl-gcse1: Debugging Options. (line 492) 42154* fdump-rtl-gcse2: Debugging Options. (line 492) 42155* fdump-rtl-init-regs: Debugging Options. (line 496) 42156* fdump-rtl-initvals: Debugging Options. (line 499) 42157* fdump-rtl-into_cfglayout: Debugging Options. (line 502) 42158* fdump-rtl-ira: Debugging Options. (line 505) 42159* fdump-rtl-jump: Debugging Options. (line 508) 42160* fdump-rtl-loop2: Debugging Options. (line 511) 42161* fdump-rtl-mach: Debugging Options. (line 515) 42162* fdump-rtl-mode_sw: Debugging Options. (line 519) 42163* fdump-rtl-outof_cfglayout: Debugging Options. (line 525) 42164* fdump-rtl-peephole2: Debugging Options. (line 528) 42165* fdump-rtl-postreload: Debugging Options. (line 531) 42166* fdump-rtl-pro_and_epilogue: Debugging Options. (line 534) 42167* fdump-rtl-regclass: Debugging Options. (line 597) 42168* fdump-rtl-regmove: Debugging Options. (line 537) 42169* fdump-rtl-rnreg: Debugging Options. (line 522) 42170* fdump-rtl-sched1: Debugging Options. (line 541) 42171* fdump-rtl-sched2: Debugging Options. (line 541) 42172* fdump-rtl-see: Debugging Options. (line 545) 42173* fdump-rtl-seqabstr: Debugging Options. (line 548) 42174* fdump-rtl-shorten: Debugging Options. (line 551) 42175* fdump-rtl-sibling: Debugging Options. (line 554) 42176* fdump-rtl-sms: Debugging Options. (line 567) 42177* fdump-rtl-split1: Debugging Options. (line 561) 42178* fdump-rtl-split2: Debugging Options. (line 561) 42179* fdump-rtl-split3: Debugging Options. (line 561) 42180* fdump-rtl-split4: Debugging Options. (line 561) 42181* fdump-rtl-split5: Debugging Options. (line 561) 42182* fdump-rtl-stack: Debugging Options. (line 571) 42183* fdump-rtl-subreg1: Debugging Options. (line 577) 42184* fdump-rtl-subreg2: Debugging Options. (line 577) 42185* fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 597) 42186* fdump-rtl-subregs_of_mode_init: Debugging Options. (line 597) 42187* fdump-rtl-unshare: Debugging Options. (line 581) 42188* fdump-rtl-vartrack: Debugging Options. (line 584) 42189* fdump-rtl-vregs: Debugging Options. (line 587) 42190* fdump-rtl-web: Debugging Options. (line 590) 42191* fdump-statistics: Debugging Options. (line 692) 42192* fdump-translation-unit: Debugging Options. (line 657) 42193* fdump-tree: Debugging Options. (line 703) 42194* fdump-tree-alias: Debugging Options. (line 797) 42195* fdump-tree-all: Debugging Options. (line 887) 42196* fdump-tree-ccp: Debugging Options. (line 801) 42197* fdump-tree-cfg: Debugging Options. (line 777) 42198* fdump-tree-ch: Debugging Options. (line 789) 42199* fdump-tree-copyprop: Debugging Options. (line 817) 42200* fdump-tree-copyrename: Debugging Options. (line 863) 42201* fdump-tree-dce: Debugging Options. (line 825) 42202* fdump-tree-dom: Debugging Options. (line 843) 42203* fdump-tree-dse: Debugging Options. (line 848) 42204* fdump-tree-forwprop: Debugging Options. (line 858) 42205* fdump-tree-fre: Debugging Options. (line 813) 42206* fdump-tree-gimple: Debugging Options. (line 772) 42207* fdump-tree-mudflap: Debugging Options. (line 829) 42208* fdump-tree-nrv: Debugging Options. (line 868) 42209* fdump-tree-optimized: Debugging Options. (line 769) 42210* fdump-tree-original: Debugging Options. (line 766) 42211* fdump-tree-phiopt: Debugging Options. (line 853) 42212* fdump-tree-pre: Debugging Options. (line 809) 42213* fdump-tree-sink: Debugging Options. (line 839) 42214* fdump-tree-slp: Debugging Options. (line 878) 42215* fdump-tree-sra: Debugging Options. (line 834) 42216* fdump-tree-ssa: Debugging Options. (line 793) 42217* fdump-tree-store_copyprop: Debugging Options. (line 821) 42218* fdump-tree-storeccp: Debugging Options. (line 805) 42219* fdump-tree-vcg: Debugging Options. (line 781) 42220* fdump-tree-vect: Debugging Options. (line 873) 42221* fdump-tree-vrp: Debugging Options. (line 883) 42222* fdump-unnumbered: Debugging Options. (line 645) 42223* fdump-unnumbered-links: Debugging Options. (line 651) 42224* fdwarf2-cfi-asm: Debugging Options. (line 287) 42225* fearly-inlining: Optimize Options. (line 235) 42226* feliminate-dwarf2-dups: Debugging Options. (line 195) 42227* feliminate-unused-debug-symbols: Debugging Options. (line 52) 42228* feliminate-unused-debug-types: Debugging Options. (line 1113) 42229* fenable-icf-debug: Debugging Options. (line 270) 42230* fexceptions: Code Gen Options. (line 34) 42231* fexcess-precision: Optimize Options. (line 1687) 42232* fexec-charset: Preprocessor Options. 42233 (line 498) 42234* fexpensive-optimizations: Optimize Options. (line 524) 42235* fextended-identifiers: Preprocessor Options. 42236 (line 474) 42237* ffast-math: Optimize Options. (line 1710) 42238* ffinite-math-only: Optimize Options. (line 1785) 42239* ffix-and-continue: Darwin Options. (line 106) 42240* ffixed: Code Gen Options. (line 236) 42241* ffloat-store <1>: Disappointments. (line 77) 42242* ffloat-store: Optimize Options. (line 1673) 42243* ffor-scope: C++ Dialect Options. 42244 (line 111) 42245* fforward-propagate: Optimize Options. (line 164) 42246* ffreestanding <1>: Function Attributes. 42247 (line 437) 42248* ffreestanding <2>: Warning Options. (line 195) 42249* ffreestanding <3>: C Dialect Options. (line 214) 42250* ffreestanding: Standards. (line 84) 42251* ffriend-injection: C++ Dialect Options. 42252 (line 81) 42253* ffunction-sections: Optimize Options. (line 1976) 42254* fgcse: Optimize Options. (line 421) 42255* fgcse-after-reload: Optimize Options. (line 457) 42256* fgcse-las: Optimize Options. (line 450) 42257* fgcse-lm: Optimize Options. (line 432) 42258* fgcse-sm: Optimize Options. (line 441) 42259* fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 42260 (line 39) 42261* fgnu89-inline: C Dialect Options. (line 122) 42262* fgraphite-identity: Optimize Options. (line 975) 42263* fhosted: C Dialect Options. (line 207) 42264* fif-conversion: Optimize Options. (line 491) 42265* fif-conversion2: Optimize Options. (line 500) 42266* filelist: Darwin Options. (line 199) 42267* findirect-data: Darwin Options. (line 106) 42268* findirect-inlining: Optimize Options. (line 208) 42269* finhibit-size-directive: Code Gen Options. (line 158) 42270* finline-functions: Optimize Options. (line 216) 42271* finline-functions-called-once: Optimize Options. (line 227) 42272* finline-limit: Optimize Options. (line 252) 42273* finline-small-functions: Optimize Options. (line 200) 42274* finput-charset: Preprocessor Options. 42275 (line 511) 42276* finstrument-functions <1>: Function Attributes. 42277 (line 785) 42278* finstrument-functions: Code Gen Options. (line 292) 42279* finstrument-functions-exclude-file-list: Code Gen Options. (line 329) 42280* finstrument-functions-exclude-function-list: Code Gen Options. 42281 (line 347) 42282* fipa-cp: Optimize Options. (line 817) 42283* fipa-cp-clone: Optimize Options. (line 825) 42284* fipa-matrix-reorg: Optimize Options. (line 835) 42285* fipa-pta: Optimize Options. (line 813) 42286* fipa-pure-const: Optimize Options. (line 790) 42287* fipa-reference: Optimize Options. (line 794) 42288* fipa-sra: Optimize Options. (line 245) 42289* fipa-struct-reorg: Optimize Options. (line 798) 42290* fira-coalesce: Optimize Options. (line 563) 42291* fira-loop-pressure: Optimize Options. (line 567) 42292* fira-verbose: Optimize Options. (line 587) 42293* fivopts: Optimize Options. (line 1025) 42294* fkeep-inline-functions <1>: Inline. (line 51) 42295* fkeep-inline-functions: Optimize Options. (line 278) 42296* fkeep-static-consts: Optimize Options. (line 285) 42297* flat_namespace: Darwin Options. (line 199) 42298* flax-vector-conversions: C Dialect Options. (line 266) 42299* fleading-underscore: Code Gen Options. (line 432) 42300* flto: Optimize Options. (line 1392) 42301* fltrans: Optimize Options. (line 1569) 42302* fltrans-output-list: Optimize Options. (line 1580) 42303* fmem-report: Debugging Options. (line 311) 42304* fmerge-all-constants: Optimize Options. (line 304) 42305* fmerge-constants: Optimize Options. (line 294) 42306* fmerge-debug-strings: Debugging Options. (line 275) 42307* fmessage-length: Language Independent Options. 42308 (line 15) 42309* fmodulo-sched: Optimize Options. (line 315) 42310* fmodulo-sched-allow-regmoves: Optimize Options. (line 320) 42311* fmove-loop-invariants: Optimize Options. (line 1966) 42312* fms-extensions <1>: Unnamed Fields. (line 37) 42313* fms-extensions <2>: C++ Dialect Options. 42314 (line 146) 42315* fms-extensions: C Dialect Options. (line 232) 42316* fmudflap: Optimize Options. (line 360) 42317* fmudflapir: Optimize Options. (line 360) 42318* fmudflapth: Optimize Options. (line 360) 42319* fnext-runtime: Objective-C and Objective-C++ Dialect Options. 42320 (line 43) 42321* fno-access-control: C++ Dialect Options. 42322 (line 37) 42323* fno-asm: C Dialect Options. (line 159) 42324* fno-branch-count-reg: Optimize Options. (line 327) 42325* fno-builtin <1>: Other Builtins. (line 14) 42326* fno-builtin <2>: Function Attributes. 42327 (line 437) 42328* fno-builtin <3>: Warning Options. (line 195) 42329* fno-builtin: C Dialect Options. (line 173) 42330* fno-common <1>: Variable Attributes. 42331 (line 105) 42332* fno-common: Code Gen Options. (line 135) 42333* fno-compare-debug: Debugging Options. (line 156) 42334* fno-deduce-init-list: C++ Dialect Options. 42335 (line 63) 42336* fno-default-inline <1>: Inline. (line 71) 42337* fno-default-inline <2>: Optimize Options. (line 149) 42338* fno-default-inline: C++ Dialect Options. 42339 (line 300) 42340* fno-defer-pop: Optimize Options. (line 156) 42341* fno-dwarf2-cfi-asm: Debugging Options. (line 287) 42342* fno-elide-constructors: C++ Dialect Options. 42343 (line 94) 42344* fno-enforce-eh-specs: C++ Dialect Options. 42345 (line 100) 42346* fno-for-scope: C++ Dialect Options. 42347 (line 111) 42348* fno-function-cse: Optimize Options. (line 337) 42349* fno-gnu-keywords: C++ Dialect Options. 42350 (line 123) 42351* fno-guess-branch-probability: Optimize Options. (line 1156) 42352* fno-ident: Code Gen Options. (line 155) 42353* fno-implement-inlines <1>: C++ Interface. (line 75) 42354* fno-implement-inlines: C++ Dialect Options. 42355 (line 140) 42356* fno-implicit-inline-templates: C++ Dialect Options. 42357 (line 134) 42358* fno-implicit-templates <1>: Template Instantiation. 42359 (line 87) 42360* fno-implicit-templates: C++ Dialect Options. 42361 (line 128) 42362* fno-inline: Optimize Options. (line 194) 42363* fno-ira-share-save-slots: Optimize Options. (line 575) 42364* fno-ira-share-spill-slots: Optimize Options. (line 581) 42365* fno-jump-tables: Code Gen Options. (line 228) 42366* fno-math-errno: Optimize Options. (line 1724) 42367* fno-merge-debug-strings: Debugging Options. (line 275) 42368* fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 42369 (line 49) 42370* fno-nonansi-builtins: C++ Dialect Options. 42371 (line 151) 42372* fno-operator-names: C++ Dialect Options. 42373 (line 156) 42374* fno-optional-diags: C++ Dialect Options. 42375 (line 160) 42376* fno-peephole: Optimize Options. (line 1147) 42377* fno-peephole2: Optimize Options. (line 1147) 42378* fno-pretty-templates: C++ Dialect Options. 42379 (line 170) 42380* fno-rtti: C++ Dialect Options. 42381 (line 188) 42382* fno-sched-interblock: Optimize Options. (line 618) 42383* fno-sched-spec: Optimize Options. (line 623) 42384* fno-set-stack-executable: i386 and x86-64 Windows Options. 42385 (line 60) 42386* fno-show-column: Preprocessor Options. 42387 (line 536) 42388* fno-signed-bitfields: C Dialect Options. (line 299) 42389* fno-signed-zeros: Optimize Options. (line 1797) 42390* fno-stack-limit: Code Gen Options. (line 398) 42391* fno-threadsafe-statics: C++ Dialect Options. 42392 (line 210) 42393* fno-toplevel-reorder: Optimize Options. (line 1354) 42394* fno-trapping-math: Optimize Options. (line 1807) 42395* fno-unsigned-bitfields: C Dialect Options. (line 299) 42396* fno-use-cxa-get-exception-ptr: C++ Dialect Options. 42397 (line 223) 42398* fno-var-tracking-assignments: Debugging Options. (line 1024) 42399* fno-var-tracking-assignments-toggle: Debugging Options. (line 1034) 42400* fno-weak: C++ Dialect Options. 42401 (line 285) 42402* fno-working-directory: Preprocessor Options. 42403 (line 521) 42404* fno-zero-initialized-in-bss: Optimize Options. (line 348) 42405* fnon-call-exceptions: Code Gen Options. (line 48) 42406* fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 42407 (line 56) 42408* fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 42409 (line 81) 42410* fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 42411 (line 85) 42412* fobjc-gc: Objective-C and Objective-C++ Dialect Options. 42413 (line 170) 42414* fomit-frame-pointer: Optimize Options. (line 173) 42415* fopenmp: C Dialect Options. (line 224) 42416* foptimize-register-move: Optimize Options. (line 531) 42417* foptimize-sibling-calls: Optimize Options. (line 189) 42418* force_cpusubtype_ALL: Darwin Options. (line 138) 42419* force_flat_namespace: Darwin Options. (line 199) 42420* fpack-struct: Code Gen Options. (line 279) 42421* fpcc-struct-return <1>: Incompatibilities. (line 170) 42422* fpcc-struct-return: Code Gen Options. (line 70) 42423* fpch-deps: Preprocessor Options. 42424 (line 282) 42425* fpch-preprocess: Preprocessor Options. 42426 (line 290) 42427* fpeel-loops: Optimize Options. (line 1958) 42428* fpermissive: C++ Dialect Options. 42429 (line 165) 42430* fPIC: Code Gen Options. (line 205) 42431* fpic: Code Gen Options. (line 184) 42432* fPIE: Code Gen Options. (line 218) 42433* fpie: Code Gen Options. (line 218) 42434* fpost-ipa-mem-report: Debugging Options. (line 317) 42435* fpre-ipa-mem-report: Debugging Options. (line 315) 42436* fpredictive-commoning: Optimize Options. (line 1129) 42437* fprefetch-loop-arrays: Optimize Options. (line 1136) 42438* fpreprocessed: Preprocessor Options. 42439 (line 479) 42440* fprofile-arcs <1>: Other Builtins. (line 245) 42441* fprofile-arcs: Debugging Options. (line 321) 42442* fprofile-correction: Optimize Options. (line 1624) 42443* fprofile-dir: Optimize Options. (line 1631) 42444* fprofile-generate: Optimize Options. (line 1641) 42445* fprofile-use: Optimize Options. (line 1654) 42446* fprofile-values: Optimize Options. (line 1906) 42447* fpu: RX Options. (line 17) 42448* frandom-seed: Debugging Options. (line 918) 42449* freciprocal-math: Optimize Options. (line 1776) 42450* frecord-gcc-switches: Code Gen Options. (line 174) 42451* freg-struct-return: Code Gen Options. (line 88) 42452* fregmove: Optimize Options. (line 531) 42453* frename-registers: Optimize Options. (line 1925) 42454* freorder-blocks: Optimize Options. (line 1173) 42455* freorder-blocks-and-partition: Optimize Options. (line 1179) 42456* freorder-functions: Optimize Options. (line 1190) 42457* freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 42458 (line 174) 42459* frepo <1>: Template Instantiation. 42460 (line 62) 42461* frepo: C++ Dialect Options. 42462 (line 183) 42463* frerun-cse-after-loop: Optimize Options. (line 415) 42464* freschedule-modulo-scheduled-loops: Optimize Options. (line 719) 42465* frounding-math: Optimize Options. (line 1822) 42466* fsched-critical-path-heuristic: Optimize Options. (line 685) 42467* fsched-dep-count-heuristic: Optimize Options. (line 712) 42468* fsched-group-heuristic: Optimize Options. (line 679) 42469* fsched-last-insn-heuristic: Optimize Options. (line 705) 42470* fsched-pressure: Optimize Options. (line 628) 42471* fsched-rank-heuristic: Optimize Options. (line 698) 42472* fsched-spec-insn-heuristic: Optimize Options. (line 691) 42473* fsched-spec-load: Optimize Options. (line 637) 42474* fsched-spec-load-dangerous: Optimize Options. (line 642) 42475* fsched-stalled-insns: Optimize Options. (line 648) 42476* fsched-stalled-insns-dep: Optimize Options. (line 658) 42477* fsched-verbose: Debugging Options. (line 928) 42478* fsched2-use-superblocks: Optimize Options. (line 668) 42479* fschedule-insns: Optimize Options. (line 599) 42480* fschedule-insns2: Optimize Options. (line 609) 42481* fsection-anchors: Optimize Options. (line 2021) 42482* fsel-sched-pipelining: Optimize Options. (line 733) 42483* fsel-sched-pipelining-outer-loops: Optimize Options. (line 738) 42484* fselective-scheduling: Optimize Options. (line 725) 42485* fselective-scheduling2: Optimize Options. (line 729) 42486* fshort-double: Code Gen Options. (line 117) 42487* fshort-enums <1>: Non-bugs. (line 42) 42488* fshort-enums <2>: Type Attributes. (line 113) 42489* fshort-enums <3>: Structures unions enumerations and bit-fields implementation. 42490 (line 43) 42491* fshort-enums: Code Gen Options. (line 106) 42492* fshort-wchar: Code Gen Options. (line 125) 42493* fsignaling-nans: Optimize Options. (line 1842) 42494* fsigned-bitfields <1>: Non-bugs. (line 57) 42495* fsigned-bitfields: C Dialect Options. (line 299) 42496* fsigned-char <1>: Characters implementation. 42497 (line 31) 42498* fsigned-char: C Dialect Options. (line 289) 42499* fsingle-precision-constant: Optimize Options. (line 1857) 42500* fsplit-ivs-in-unroller: Optimize Options. (line 1110) 42501* fsplit-wide-types: Optimize Options. (line 390) 42502* fstack-check: Code Gen Options. (line 359) 42503* fstack-limit-register: Code Gen Options. (line 398) 42504* fstack-limit-symbol: Code Gen Options. (line 398) 42505* fstack-protector: Optimize Options. (line 2009) 42506* fstack-protector-all: Optimize Options. (line 2018) 42507* fstats: C++ Dialect Options. 42508 (line 198) 42509* fstrict-aliasing: Optimize Options. (line 1203) 42510* fstrict-overflow: Optimize Options. (line 1249) 42511* fsyntax-only: Warning Options. (line 14) 42512* ftabstop: Preprocessor Options. 42513 (line 492) 42514* ftemplate-depth: C++ Dialect Options. 42515 (line 203) 42516* ftest-coverage: Debugging Options. (line 377) 42517* fthread-jumps: Optimize Options. (line 381) 42518* ftime-report: Debugging Options. (line 307) 42519* ftls-model: Code Gen Options. (line 443) 42520* ftracer: Optimize Options. (line 1093) 42521* ftrapv: Code Gen Options. (line 22) 42522* ftree-builtin-call-dce: Optimize Options. (line 863) 42523* ftree-ccp: Optimize Options. (line 849) 42524* ftree-ch: Optimize Options. (line 883) 42525* ftree-copy-prop: Optimize Options. (line 785) 42526* ftree-copyrename: Optimize Options. (line 1049) 42527* ftree-dce: Optimize Options. (line 859) 42528* ftree-dominator-opts: Optimize Options. (line 869) 42529* ftree-dse: Optimize Options. (line 876) 42530* ftree-forwprop: Optimize Options. (line 770) 42531* ftree-fre: Optimize Options. (line 774) 42532* ftree-loop-im: Optimize Options. (line 1010) 42533* ftree-loop-ivcanon: Optimize Options. (line 1019) 42534* ftree-loop-linear: Optimize Options. (line 894) 42535* ftree-loop-optimize: Optimize Options. (line 890) 42536* ftree-parallelize-loops: Optimize Options. (line 1030) 42537* ftree-phiprop: Optimize Options. (line 781) 42538* ftree-pre: Optimize Options. (line 766) 42539* ftree-pta: Optimize Options. (line 1039) 42540* ftree-reassoc: Optimize Options. (line 762) 42541* ftree-sink: Optimize Options. (line 845) 42542* ftree-slp-vectorize: Optimize Options. (line 1068) 42543* ftree-sra: Optimize Options. (line 1043) 42544* ftree-ter: Optimize Options. (line 1056) 42545* ftree-vect-loop-version: Optimize Options. (line 1072) 42546* ftree-vectorize: Optimize Options. (line 1064) 42547* ftree-vectorizer-verbose: Debugging Options. (line 891) 42548* ftree-vrp: Optimize Options. (line 1084) 42549* funit-at-a-time: Optimize Options. (line 1347) 42550* funroll-all-loops: Optimize Options. (line 1104) 42551* funroll-loops: Optimize Options. (line 1098) 42552* funsafe-loop-optimizations: Optimize Options. (line 462) 42553* funsafe-math-optimizations: Optimize Options. (line 1742) 42554* funsigned-bitfields <1>: Non-bugs. (line 57) 42555* funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 42556 (line 17) 42557* funsigned-bitfields: C Dialect Options. (line 299) 42558* funsigned-char <1>: Characters implementation. 42559 (line 31) 42560* funsigned-char: C Dialect Options. (line 271) 42561* funswitch-loops: Optimize Options. (line 1970) 42562* funwind-tables: Code Gen Options. (line 57) 42563* fuse-cxa-atexit: C++ Dialect Options. 42564 (line 216) 42565* fvar-tracking: Debugging Options. (line 1014) 42566* fvar-tracking-assignments: Debugging Options. (line 1024) 42567* fvar-tracking-assignments-toggle: Debugging Options. (line 1034) 42568* fvariable-expansion-in-unroller: Optimize Options. (line 1124) 42569* fvect-cost-model: Optimize Options. (line 1081) 42570* fverbose-asm: Code Gen Options. (line 165) 42571* fvisibility: Code Gen Options. (line 451) 42572* fvisibility-inlines-hidden: C++ Dialect Options. 42573 (line 228) 42574* fvisibility-ms-compat: C++ Dialect Options. 42575 (line 256) 42576* fvpt: Optimize Options. (line 1916) 42577* fweb: Optimize Options. (line 1366) 42578* fwhole-program: Optimize Options. (line 1377) 42579* fwhopr: Optimize Options. (line 1538) 42580* fwide-exec-charset: Preprocessor Options. 42581 (line 503) 42582* fworking-directory: Preprocessor Options. 42583 (line 521) 42584* fwpa: Optimize Options. (line 1554) 42585* fwrapv: Code Gen Options. (line 26) 42586* fzero-link: Objective-C and Objective-C++ Dialect Options. 42587 (line 184) 42588* G <1>: System V Options. (line 10) 42589* G <2>: RS/6000 and PowerPC Options. 42590 (line 682) 42591* G <3>: MIPS Options. (line 315) 42592* G: M32R/D Options. (line 57) 42593* g: Debugging Options. (line 10) 42594* gcoff: Debugging Options. (line 70) 42595* gdwarf-VERSION: Debugging Options. (line 88) 42596* gen-decls: Objective-C and Objective-C++ Dialect Options. 42597 (line 194) 42598* gfull: Darwin Options. (line 71) 42599* ggdb: Debugging Options. (line 38) 42600* gno-strict-dwarf: Debugging Options. (line 105) 42601* gstabs: Debugging Options. (line 44) 42602* gstabs+: Debugging Options. (line 64) 42603* gstrict-dwarf: Debugging Options. (line 99) 42604* gtoggle: Debugging Options. (line 142) 42605* gused: Darwin Options. (line 66) 42606* gvms: Debugging Options. (line 109) 42607* gxcoff: Debugging Options. (line 75) 42608* gxcoff+: Debugging Options. (line 80) 42609* H: Preprocessor Options. 42610 (line 654) 42611* headerpad_max_install_names: Darwin Options. (line 199) 42612* help <1>: Preprocessor Options. 42613 (line 646) 42614* help: Overall Options. (line 231) 42615* I <1>: Directory Options. (line 10) 42616* I: Preprocessor Options. 42617 (line 65) 42618* I- <1>: Directory Options. (line 107) 42619* I-: Preprocessor Options. 42620 (line 365) 42621* idirafter: Preprocessor Options. 42622 (line 407) 42623* iframework: Darwin Options. (line 59) 42624* imacros: Preprocessor Options. 42625 (line 398) 42626* image_base: Darwin Options. (line 199) 42627* imultilib: Preprocessor Options. 42628 (line 430) 42629* include: Preprocessor Options. 42630 (line 387) 42631* init: Darwin Options. (line 199) 42632* install_name: Darwin Options. (line 199) 42633* iprefix: Preprocessor Options. 42634 (line 414) 42635* iquote <1>: Directory Options. (line 31) 42636* iquote: Preprocessor Options. 42637 (line 442) 42638* isysroot: Preprocessor Options. 42639 (line 426) 42640* isystem: Preprocessor Options. 42641 (line 434) 42642* iwithprefix: Preprocessor Options. 42643 (line 420) 42644* iwithprefixbefore: Preprocessor Options. 42645 (line 420) 42646* keep_private_externs: Darwin Options. (line 199) 42647* L: Directory Options. (line 37) 42648* l: Link Options. (line 26) 42649* lobjc: Link Options. (line 53) 42650* m: RS/6000 and PowerPC Options. 42651 (line 537) 42652* M: Preprocessor Options. 42653 (line 173) 42654* m1: SH Options. (line 9) 42655* m10: PDP-11 Options. (line 29) 42656* m128bit-long-double: i386 and x86-64 Options. 42657 (line 269) 42658* m16-bit: CRIS Options. (line 64) 42659* m2: SH Options. (line 12) 42660* m210: MCore Options. (line 43) 42661* m2a: SH Options. (line 30) 42662* m2a-nofpu: SH Options. (line 18) 42663* m2a-single: SH Options. (line 26) 42664* m2a-single-only: SH Options. (line 22) 42665* m3: SH Options. (line 34) 42666* m31: S/390 and zSeries Options. 42667 (line 87) 42668* m32 <1>: SPARC Options. (line 191) 42669* m32 <2>: RS/6000 and PowerPC Options. 42670 (line 263) 42671* m32: i386 and x86-64 Options. 42672 (line 636) 42673* m32-bit: CRIS Options. (line 64) 42674* m32bit-doubles: RX Options. (line 10) 42675* m32r: M32R/D Options. (line 15) 42676* m32r2: M32R/D Options. (line 9) 42677* m32rx: M32R/D Options. (line 12) 42678* m340: MCore Options. (line 43) 42679* m3dnow: i386 and x86-64 Options. 42680 (line 443) 42681* m3e: SH Options. (line 37) 42682* m4: SH Options. (line 51) 42683* m4-nofpu: SH Options. (line 40) 42684* m4-single: SH Options. (line 47) 42685* m4-single-only: SH Options. (line 43) 42686* m40: PDP-11 Options. (line 23) 42687* m45: PDP-11 Options. (line 26) 42688* m4a: SH Options. (line 66) 42689* m4a-nofpu: SH Options. (line 54) 42690* m4a-single: SH Options. (line 62) 42691* m4a-single-only: SH Options. (line 58) 42692* m4al: SH Options. (line 69) 42693* m4byte-functions: MCore Options. (line 27) 42694* m5200: M680x0 Options. (line 146) 42695* m5206e: M680x0 Options. (line 155) 42696* m528x: M680x0 Options. (line 159) 42697* m5307: M680x0 Options. (line 163) 42698* m5407: M680x0 Options. (line 167) 42699* m64 <1>: SPARC Options. (line 191) 42700* m64 <2>: S/390 and zSeries Options. 42701 (line 87) 42702* m64 <3>: RS/6000 and PowerPC Options. 42703 (line 263) 42704* m64: i386 and x86-64 Options. 42705 (line 636) 42706* m64bit-doubles: RX Options. (line 10) 42707* m68000: M680x0 Options. (line 94) 42708* m68010: M680x0 Options. (line 102) 42709* m68020: M680x0 Options. (line 108) 42710* m68020-40: M680x0 Options. (line 177) 42711* m68020-60: M680x0 Options. (line 186) 42712* m68030: M680x0 Options. (line 113) 42713* m68040: M680x0 Options. (line 118) 42714* m68060: M680x0 Options. (line 127) 42715* m6811: M68hc1x Options. (line 13) 42716* m6812: M68hc1x Options. (line 18) 42717* m68881: M680x0 Options. (line 196) 42718* m68hc11: M68hc1x Options. (line 13) 42719* m68hc12: M68hc1x Options. (line 18) 42720* m68hcs12: M68hc1x Options. (line 23) 42721* m68S12: M68hc1x Options. (line 23) 42722* m8-bit: CRIS Options. (line 64) 42723* m96bit-long-double: i386 and x86-64 Options. 42724 (line 269) 42725* mabi <1>: RS/6000 and PowerPC Options. 42726 (line 568) 42727* mabi <2>: i386 and x86-64 Options. 42728 (line 552) 42729* mabi: ARM Options. (line 10) 42730* mabi=32: MIPS Options. (line 130) 42731* mabi=64: MIPS Options. (line 130) 42732* mabi=eabi: MIPS Options. (line 130) 42733* mabi=gnu: MMIX Options. (line 20) 42734* mabi=ibmlongdouble: RS/6000 and PowerPC Options. 42735 (line 581) 42736* mabi=ieeelongdouble: RS/6000 and PowerPC Options. 42737 (line 585) 42738* mabi=mmixware: MMIX Options. (line 20) 42739* mabi=n32: MIPS Options. (line 130) 42740* mabi=no-spe: RS/6000 and PowerPC Options. 42741 (line 578) 42742* mabi=o64: MIPS Options. (line 130) 42743* mabi=spe: RS/6000 and PowerPC Options. 42744 (line 573) 42745* mabicalls: MIPS Options. (line 154) 42746* mabort-on-noreturn: ARM Options. (line 152) 42747* mabsdiff: MeP Options. (line 7) 42748* mabshi: PDP-11 Options. (line 55) 42749* mac0: PDP-11 Options. (line 16) 42750* macc-4: FRV Options. (line 113) 42751* macc-8: FRV Options. (line 116) 42752* maccumulate-outgoing-args: i386 and x86-64 Options. 42753 (line 569) 42754* maddress-space-conversion: SPU Options. (line 63) 42755* madjust-unroll: SH Options. (line 213) 42756* mads: RS/6000 and PowerPC Options. 42757 (line 611) 42758* maix-struct-return: RS/6000 and PowerPC Options. 42759 (line 561) 42760* maix32: RS/6000 and PowerPC Options. 42761 (line 301) 42762* maix64: RS/6000 and PowerPC Options. 42763 (line 301) 42764* malign-300: H8/300 Options. (line 31) 42765* malign-double: i386 and x86-64 Options. 42766 (line 253) 42767* malign-int: M680x0 Options. (line 266) 42768* malign-labels: FRV Options. (line 104) 42769* malign-loops: M32R/D Options. (line 73) 42770* malign-natural: RS/6000 and PowerPC Options. 42771 (line 340) 42772* malign-power: RS/6000 and PowerPC Options. 42773 (line 340) 42774* mall-opts: MeP Options. (line 11) 42775* malloc-cc: FRV Options. (line 25) 42776* malpha-as: DEC Alpha Options. (line 159) 42777* maltivec: RS/6000 and PowerPC Options. 42778 (line 188) 42779* mam33: MN10300 Options. (line 17) 42780* mapcs: ARM Options. (line 22) 42781* mapcs-frame: ARM Options. (line 14) 42782* mapp-regs <1>: V850 Options. (line 57) 42783* mapp-regs: SPARC Options. (line 10) 42784* march <1>: S/390 and zSeries Options. 42785 (line 116) 42786* march <2>: MIPS Options. (line 14) 42787* march <3>: M680x0 Options. (line 12) 42788* march <4>: i386 and x86-64 Options. 42789 (line 152) 42790* march <5>: HPPA Options. (line 9) 42791* march <6>: CRIS Options. (line 10) 42792* march: ARM Options. (line 107) 42793* mas100-syntax: RX Options. (line 76) 42794* masm=DIALECT: i386 and x86-64 Options. 42795 (line 209) 42796* matomic-updates: SPU Options. (line 78) 42797* mauto-incdec: M68hc1x Options. (line 26) 42798* mauto-pic: IA-64 Options. (line 50) 42799* maverage: MeP Options. (line 16) 42800* mavoid-indexed-addresses: RS/6000 and PowerPC Options. 42801 (line 409) 42802* mb: SH Options. (line 74) 42803* mbackchain: S/390 and zSeries Options. 42804 (line 35) 42805* mbarrel-shift-enabled: LM32 Options. (line 9) 42806* mbase-addresses: MMIX Options. (line 54) 42807* mbased=: MeP Options. (line 20) 42808* mbcopy: PDP-11 Options. (line 36) 42809* mbcopy-builtin: PDP-11 Options. (line 32) 42810* mbig: RS/6000 and PowerPC Options. 42811 (line 484) 42812* mbig-endian <1>: RS/6000 and PowerPC Options. 42813 (line 484) 42814* mbig-endian <2>: MCore Options. (line 39) 42815* mbig-endian <3>: IA-64 Options. (line 9) 42816* mbig-endian: ARM Options. (line 67) 42817* mbig-endian-data: RX Options. (line 43) 42818* mbig-switch <1>: V850 Options. (line 52) 42819* mbig-switch: HPPA Options. (line 23) 42820* mbigtable: SH Options. (line 90) 42821* mbit-align: RS/6000 and PowerPC Options. 42822 (line 438) 42823* mbitfield: M680x0 Options. (line 234) 42824* mbitops <1>: SH Options. (line 94) 42825* mbitops: MeP Options. (line 26) 42826* mbranch-cheap: PDP-11 Options. (line 65) 42827* mbranch-cost: MIPS Options. (line 611) 42828* mbranch-cost=NUMBER: M32R/D Options. (line 82) 42829* mbranch-expensive: PDP-11 Options. (line 61) 42830* mbranch-hints: SPU Options. (line 27) 42831* mbranch-likely: MIPS Options. (line 618) 42832* mbranch-predict: MMIX Options. (line 49) 42833* mbss-plt: RS/6000 and PowerPC Options. 42834 (line 211) 42835* mbuild-constants: DEC Alpha Options. (line 142) 42836* mbwx: DEC Alpha Options. (line 171) 42837* mc68000: M680x0 Options. (line 94) 42838* mc68020: M680x0 Options. (line 108) 42839* mc=: MeP Options. (line 31) 42840* mcache-size: SPU Options. (line 70) 42841* mcall-eabi: RS/6000 and PowerPC Options. 42842 (line 531) 42843* mcall-freebsd: RS/6000 and PowerPC Options. 42844 (line 549) 42845* mcall-gnu: RS/6000 and PowerPC Options. 42846 (line 545) 42847* mcall-linux: RS/6000 and PowerPC Options. 42848 (line 541) 42849* mcall-netbsd: RS/6000 and PowerPC Options. 42850 (line 553) 42851* mcall-prologues: AVR Options. (line 36) 42852* mcall-sysv: RS/6000 and PowerPC Options. 42853 (line 523) 42854* mcall-sysv-eabi: RS/6000 and PowerPC Options. 42855 (line 531) 42856* mcall-sysv-noeabi: RS/6000 and PowerPC Options. 42857 (line 534) 42858* mcallee-super-interworking: ARM Options. (line 245) 42859* mcaller-super-interworking: ARM Options. (line 252) 42860* mcallgraph-data: MCore Options. (line 31) 42861* mcc-init: CRIS Options. (line 41) 42862* mcfv4e: M680x0 Options. (line 171) 42863* mcheck-zero-division: MIPS Options. (line 426) 42864* mcirrus-fix-invalid-insns: ARM Options. (line 192) 42865* mcix: DEC Alpha Options. (line 171) 42866* mcld: i386 and x86-64 Options. 42867 (line 472) 42868* mclip: MeP Options. (line 35) 42869* mcmodel=embmedany: SPARC Options. (line 213) 42870* mcmodel=kernel: i386 and x86-64 Options. 42871 (line 658) 42872* mcmodel=large: i386 and x86-64 Options. 42873 (line 670) 42874* mcmodel=medany: SPARC Options. (line 207) 42875* mcmodel=medium: i386 and x86-64 Options. 42876 (line 663) 42877* mcmodel=medlow: SPARC Options. (line 196) 42878* mcmodel=medmid: SPARC Options. (line 201) 42879* mcmodel=small: i386 and x86-64 Options. 42880 (line 652) 42881* mcmpb: RS/6000 and PowerPC Options. 42882 (line 33) 42883* mcode-readable: MIPS Options. (line 386) 42884* mcond-exec: FRV Options. (line 152) 42885* mcond-move: FRV Options. (line 128) 42886* mconfig=: MeP Options. (line 39) 42887* mconsole: i386 and x86-64 Windows Options. 42888 (line 9) 42889* mconst-align: CRIS Options. (line 55) 42890* mconst16: Xtensa Options. (line 10) 42891* mconstant-gp: IA-64 Options. (line 46) 42892* mcop: MeP Options. (line 48) 42893* mcop32: MeP Options. (line 53) 42894* mcop64: MeP Options. (line 56) 42895* mcorea: Blackfin Options. (line 150) 42896* mcoreb: Blackfin Options. (line 156) 42897* mcpu <1>: SPARC Options. (line 96) 42898* mcpu <2>: RS/6000 and PowerPC Options. 42899 (line 119) 42900* mcpu <3>: picoChip Options. (line 9) 42901* mcpu <4>: M680x0 Options. (line 28) 42902* mcpu <5>: i386 and x86-64 Options. 42903 (line 157) 42904* mcpu <6>: FRV Options. (line 212) 42905* mcpu <7>: DEC Alpha Options. (line 223) 42906* mcpu <8>: CRIS Options. (line 10) 42907* mcpu <9>: ARM Options. (line 79) 42908* mcpu: ARC Options. (line 23) 42909* mcpu32: M680x0 Options. (line 137) 42910* mcpu= <1>: M32C Options. (line 7) 42911* mcpu=: Blackfin Options. (line 7) 42912* mcrc32: i386 and x86-64 Options. 42913 (line 508) 42914* mcsync-anomaly: Blackfin Options. (line 56) 42915* mcx16: i386 and x86-64 Options. 42916 (line 486) 42917* mcygwin: i386 and x86-64 Windows Options. 42918 (line 16) 42919* MD: Preprocessor Options. 42920 (line 262) 42921* mdalign: SH Options. (line 80) 42922* mdata: ARC Options. (line 30) 42923* mdata-align: CRIS Options. (line 55) 42924* mdc: MeP Options. (line 62) 42925* mdebug <1>: S/390 and zSeries Options. 42926 (line 112) 42927* mdebug: M32R/D Options. (line 69) 42928* mdebug-main=PREFIX <1>: IA-64/VMS Options. (line 13) 42929* mdebug-main=PREFIX: DEC Alpha/VMS Options. 42930 (line 13) 42931* mdec-asm: PDP-11 Options. (line 78) 42932* mdisable-callt: V850 Options. (line 80) 42933* mdisable-fpregs: HPPA Options. (line 33) 42934* mdisable-indexing: HPPA Options. (line 40) 42935* mdiv <1>: MeP Options. (line 65) 42936* mdiv <2>: MCore Options. (line 15) 42937* mdiv: M680x0 Options. (line 208) 42938* mdiv=STRATEGY: SH Options. (line 158) 42939* mdivide-breaks: MIPS Options. (line 432) 42940* mdivide-enabled: LM32 Options. (line 12) 42941* mdivide-traps: MIPS Options. (line 432) 42942* mdivsi3_libfunc=NAME: SH Options. (line 199) 42943* mdll: i386 and x86-64 Windows Options. 42944 (line 30) 42945* mdlmzb: RS/6000 and PowerPC Options. 42946 (line 431) 42947* mdmx: MIPS Options. (line 279) 42948* mdouble: FRV Options. (line 38) 42949* mdouble-float <1>: RS/6000 and PowerPC Options. 42950 (line 358) 42951* mdouble-float: MIPS Options. (line 237) 42952* mdsp: MIPS Options. (line 256) 42953* mdspr2: MIPS Options. (line 262) 42954* mdual-nops: SPU Options. (line 90) 42955* mdwarf2-asm: IA-64 Options. (line 94) 42956* mdword: FRV Options. (line 32) 42957* mdynamic-no-pic: RS/6000 and PowerPC Options. 42958 (line 489) 42959* mea32: SPU Options. (line 55) 42960* mea64: SPU Options. (line 55) 42961* meabi: RS/6000 and PowerPC Options. 42962 (line 630) 42963* mearly-stop-bits: IA-64 Options. (line 100) 42964* meb <1>: Score Options. (line 9) 42965* meb: MeP Options. (line 68) 42966* mel <1>: Score Options. (line 12) 42967* mel: MeP Options. (line 71) 42968* melf <1>: MMIX Options. (line 44) 42969* melf: CRIS Options. (line 87) 42970* memb: RS/6000 and PowerPC Options. 42971 (line 625) 42972* membedded-data: MIPS Options. (line 373) 42973* memregs=: M32C Options. (line 21) 42974* mep: V850 Options. (line 16) 42975* mepsilon: MMIX Options. (line 15) 42976* merror-reloc: SPU Options. (line 10) 42977* mesa: S/390 and zSeries Options. 42978 (line 95) 42979* metrax100: CRIS Options. (line 26) 42980* metrax4: CRIS Options. (line 26) 42981* mexplicit-relocs <1>: MIPS Options. (line 417) 42982* mexplicit-relocs: DEC Alpha Options. (line 184) 42983* mextern-sdata: MIPS Options. (line 335) 42984* MF: Preprocessor Options. 42985 (line 208) 42986* mfast-fp: Blackfin Options. (line 129) 42987* mfast-indirect-calls: HPPA Options. (line 52) 42988* mfaster-structs: SPARC Options. (line 71) 42989* mfdpic: FRV Options. (line 56) 42990* mfix: DEC Alpha Options. (line 171) 42991* mfix-and-continue: Darwin Options. (line 106) 42992* mfix-cortex-m3-ldrd: ARC Options. (line 36) 42993* mfix-r10000: MIPS Options. (line 503) 42994* mfix-r4000: MIPS Options. (line 482) 42995* mfix-r4400: MIPS Options. (line 496) 42996* mfix-sb1: MIPS Options. (line 535) 42997* mfix-vr4120: MIPS Options. (line 514) 42998* mfix-vr4130: MIPS Options. (line 528) 42999* mfixed-cc: FRV Options. (line 28) 43000* mfixed-range <1>: SPU Options. (line 47) 43001* mfixed-range <2>: SH Options. (line 206) 43002* mfixed-range <3>: IA-64 Options. (line 105) 43003* mfixed-range: HPPA Options. (line 59) 43004* mflip-mips16: MIPS Options. (line 110) 43005* mfloat-abi: ARM Options. (line 41) 43006* mfloat-gprs: RS/6000 and PowerPC Options. 43007 (line 246) 43008* mfloat-ieee: DEC Alpha Options. (line 179) 43009* mfloat-vax: DEC Alpha Options. (line 179) 43010* mfloat32: PDP-11 Options. (line 52) 43011* mfloat64: PDP-11 Options. (line 48) 43012* mflush-func: MIPS Options. (line 602) 43013* mflush-func=NAME: M32R/D Options. (line 94) 43014* mflush-trap=NUMBER: M32R/D Options. (line 87) 43015* mfmovd: SH Options. (line 97) 43016* mfp: ARM Options. (line 119) 43017* mfp-exceptions: MIPS Options. (line 629) 43018* mfp-reg: DEC Alpha Options. (line 25) 43019* mfp-rounding-mode: DEC Alpha Options. (line 85) 43020* mfp-trap-mode: DEC Alpha Options. (line 63) 43021* mfp16-format: ARM Options. (line 131) 43022* mfp32: MIPS Options. (line 220) 43023* mfp64: MIPS Options. (line 223) 43024* mfpe: ARM Options. (line 119) 43025* mfpmath <1>: i386 and x86-64 Options. 43026 (line 160) 43027* mfpmath: Optimize Options. (line 1702) 43028* mfpr-32: FRV Options. (line 13) 43029* mfpr-64: FRV Options. (line 16) 43030* mfprnd: RS/6000 and PowerPC Options. 43031 (line 33) 43032* mfpu <1>: SPARC Options. (line 20) 43033* mfpu <2>: RS/6000 and PowerPC Options. 43034 (line 366) 43035* mfpu <3>: PDP-11 Options. (line 9) 43036* mfpu: ARM Options. (line 119) 43037* mfull-toc: RS/6000 and PowerPC Options. 43038 (line 274) 43039* mfused-madd <1>: Xtensa Options. (line 19) 43040* mfused-madd <2>: S/390 and zSeries Options. 43041 (line 137) 43042* mfused-madd <3>: RS/6000 and PowerPC Options. 43043 (line 418) 43044* mfused-madd <4>: MIPS Options. (line 467) 43045* mfused-madd <5>: IA-64 Options. (line 88) 43046* mfused-madd: i386 and x86-64 Options. 43047 (line 467) 43048* mg: VAX Options. (line 17) 43049* MG: Preprocessor Options. 43050 (line 217) 43051* mgas <1>: HPPA Options. (line 75) 43052* mgas: DEC Alpha Options. (line 159) 43053* mgen-cell-microcode: RS/6000 and PowerPC Options. 43054 (line 199) 43055* mgettrcost=NUMBER: SH Options. (line 228) 43056* mglibc: GNU/Linux Options. (line 9) 43057* mgnu: VAX Options. (line 13) 43058* mgnu-as: IA-64 Options. (line 18) 43059* mgnu-ld <1>: IA-64 Options. (line 23) 43060* mgnu-ld: HPPA Options. (line 111) 43061* mgotplt: CRIS Options. (line 81) 43062* mgp32: MIPS Options. (line 214) 43063* mgp64: MIPS Options. (line 217) 43064* mgpopt: MIPS Options. (line 358) 43065* mgpr-32: FRV Options. (line 7) 43066* mgpr-64: FRV Options. (line 10) 43067* mgprel-ro: FRV Options. (line 79) 43068* mh: H8/300 Options. (line 14) 43069* mhard-dfp <1>: S/390 and zSeries Options. 43070 (line 20) 43071* mhard-dfp: RS/6000 and PowerPC Options. 43072 (line 33) 43073* mhard-float <1>: SPARC Options. (line 20) 43074* mhard-float <2>: S/390 and zSeries Options. 43075 (line 11) 43076* mhard-float <3>: RS/6000 and PowerPC Options. 43077 (line 352) 43078* mhard-float <4>: MIPS Options. (line 226) 43079* mhard-float <5>: M680x0 Options. (line 196) 43080* mhard-float <6>: FRV Options. (line 19) 43081* mhard-float: ARM Options. (line 57) 43082* mhard-quad-float: SPARC Options. (line 41) 43083* mhardlit: MCore Options. (line 10) 43084* mhint-max-distance: SPU Options. (line 102) 43085* mhint-max-nops: SPU Options. (line 96) 43086* mhitachi: SH Options. (line 101) 43087* mhp-ld: HPPA Options. (line 123) 43088* micplb: Blackfin Options. (line 169) 43089* mid-shared-library: Blackfin Options. (line 77) 43090* mieee <1>: SH Options. (line 116) 43091* mieee: DEC Alpha Options. (line 39) 43092* mieee-conformant: DEC Alpha Options. (line 134) 43093* mieee-fp: i386 and x86-64 Options. 43094 (line 215) 43095* mieee-with-inexact: DEC Alpha Options. (line 52) 43096* milp32: IA-64 Options. (line 121) 43097* mimpure-text: SPARC Options. (line 81) 43098* mincoming-stack-boundary: i386 and x86-64 Options. 43099 (line 383) 43100* mindexed-addressing: SH Options. (line 218) 43101* minline-all-stringops: i386 and x86-64 Options. 43102 (line 590) 43103* minline-float-divide-max-throughput: IA-64 Options. (line 58) 43104* minline-float-divide-min-latency: IA-64 Options. (line 54) 43105* minline-ic_invalidate: SH Options. (line 123) 43106* minline-int-divide-max-throughput: IA-64 Options. (line 69) 43107* minline-int-divide-min-latency: IA-64 Options. (line 65) 43108* minline-plt <1>: FRV Options. (line 64) 43109* minline-plt: Blackfin Options. (line 134) 43110* minline-sqrt-max-throughput: IA-64 Options. (line 80) 43111* minline-sqrt-min-latency: IA-64 Options. (line 76) 43112* minline-stringops-dynamically: i386 and x86-64 Options. 43113 (line 597) 43114* minmax: M68hc1x Options. (line 31) 43115* minsert-sched-nops: RS/6000 and PowerPC Options. 43116 (line 511) 43117* mint-register: RX Options. (line 100) 43118* mint16: PDP-11 Options. (line 40) 43119* mint32 <1>: PDP-11 Options. (line 44) 43120* mint32: H8/300 Options. (line 28) 43121* mint8: AVR Options. (line 43) 43122* minterlink-mips16: MIPS Options. (line 117) 43123* minvalid-symbols: SH Options. (line 251) 43124* mio-volatile: MeP Options. (line 74) 43125* mips1: MIPS Options. (line 77) 43126* mips16: MIPS Options. (line 102) 43127* mips2: MIPS Options. (line 80) 43128* mips3: MIPS Options. (line 83) 43129* mips32: MIPS Options. (line 89) 43130* mips32r2: MIPS Options. (line 92) 43131* mips3d: MIPS Options. (line 285) 43132* mips4: MIPS Options. (line 86) 43133* mips64: MIPS Options. (line 95) 43134* mips64r2: MIPS Options. (line 98) 43135* misel: RS/6000 and PowerPC Options. 43136 (line 217) 43137* misize: SH Options. (line 135) 43138* missue-rate=NUMBER: M32R/D Options. (line 79) 43139* mivc2: MeP Options. (line 59) 43140* mjump-in-delay: HPPA Options. (line 28) 43141* mkernel: Darwin Options. (line 84) 43142* mknuthdiv: MMIX Options. (line 33) 43143* ml <1>: SH Options. (line 77) 43144* ml: MeP Options. (line 78) 43145* mlarge-data: DEC Alpha Options. (line 195) 43146* mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 43147 (line 295) 43148* mlarge-mem: SPU Options. (line 35) 43149* mlarge-text: DEC Alpha Options. (line 213) 43150* mleadz: MeP Options. (line 81) 43151* mleaf-id-shared-library: Blackfin Options. (line 88) 43152* mlibfuncs: MMIX Options. (line 10) 43153* mlibrary-pic: FRV Options. (line 110) 43154* mlinked-fp: FRV Options. (line 94) 43155* mlinker-opt: HPPA Options. (line 85) 43156* mlinux: CRIS Options. (line 91) 43157* mlittle: RS/6000 and PowerPC Options. 43158 (line 478) 43159* mlittle-endian <1>: SPARC Options. (line 185) 43160* mlittle-endian <2>: RS/6000 and PowerPC Options. 43161 (line 478) 43162* mlittle-endian <3>: MCore Options. (line 39) 43163* mlittle-endian <4>: IA-64 Options. (line 13) 43164* mlittle-endian: ARM Options. (line 63) 43165* mlittle-endian-data: RX Options. (line 43) 43166* mllsc: MIPS Options. (line 242) 43167* mlocal-sdata: MIPS Options. (line 323) 43168* mlong-calls <1>: V850 Options. (line 10) 43169* mlong-calls <2>: MIPS Options. (line 453) 43170* mlong-calls <3>: M68hc1x Options. (line 35) 43171* mlong-calls <4>: FRV Options. (line 99) 43172* mlong-calls <5>: Blackfin Options. (line 117) 43173* mlong-calls: ARM Options. (line 157) 43174* mlong-double-128: S/390 and zSeries Options. 43175 (line 29) 43176* mlong-double-64: S/390 and zSeries Options. 43177 (line 29) 43178* mlong-load-store: HPPA Options. (line 66) 43179* mlong32: MIPS Options. (line 298) 43180* mlong64: MIPS Options. (line 293) 43181* mlongcall: RS/6000 and PowerPC Options. 43182 (line 696) 43183* mlongcalls: Xtensa Options. (line 67) 43184* mlow-64k: Blackfin Options. (line 66) 43185* mlp64: IA-64 Options. (line 121) 43186* mm: MeP Options. (line 84) 43187* MM: Preprocessor Options. 43188 (line 198) 43189* mmac <1>: Score Options. (line 21) 43190* mmac: CRX Options. (line 9) 43191* mmad: MIPS Options. (line 462) 43192* mmalloc64 <1>: IA-64/VMS Options. (line 17) 43193* mmalloc64: DEC Alpha/VMS Options. 43194 (line 17) 43195* mmangle-cpu: ARC Options. (line 15) 43196* mmax: DEC Alpha Options. (line 171) 43197* mmax-constant-size: RX Options. (line 82) 43198* mmax-stack-frame: CRIS Options. (line 22) 43199* mmcount-ra-address: MIPS Options. (line 678) 43200* mmcu: AVR Options. (line 9) 43201* MMD: Preprocessor Options. 43202 (line 278) 43203* mmedia: FRV Options. (line 44) 43204* mmemcpy: MIPS Options. (line 447) 43205* mmemory-latency: DEC Alpha Options. (line 276) 43206* mmfcrf: RS/6000 and PowerPC Options. 43207 (line 33) 43208* mmfpgpr: RS/6000 and PowerPC Options. 43209 (line 33) 43210* mminimal-toc: RS/6000 and PowerPC Options. 43211 (line 274) 43212* mminmax: MeP Options. (line 87) 43213* mmmx: i386 and x86-64 Options. 43214 (line 443) 43215* mmodel=large: M32R/D Options. (line 33) 43216* mmodel=medium: M32R/D Options. (line 27) 43217* mmodel=small: M32R/D Options. (line 18) 43218* mmovbe: i386 and x86-64 Options. 43219 (line 504) 43220* mmt: MIPS Options. (line 290) 43221* mmul-bug-workaround: CRIS Options. (line 31) 43222* mmuladd: FRV Options. (line 50) 43223* mmulhw: RS/6000 and PowerPC Options. 43224 (line 424) 43225* mmult: MeP Options. (line 90) 43226* mmult-bug: MN10300 Options. (line 9) 43227* mmulti-cond-exec: FRV Options. (line 176) 43228* mmulticore: Blackfin Options. (line 138) 43229* mmultiple: RS/6000 and PowerPC Options. 43230 (line 377) 43231* mmvcle: S/390 and zSeries Options. 43232 (line 105) 43233* mmvme: RS/6000 and PowerPC Options. 43234 (line 606) 43235* mn: H8/300 Options. (line 20) 43236* mnested-cond-exec: FRV Options. (line 189) 43237* mnew-mnemonics: RS/6000 and PowerPC Options. 43238 (line 104) 43239* mnhwloop: Score Options. (line 15) 43240* mno-3dnow: i386 and x86-64 Options. 43241 (line 443) 43242* mno-4byte-functions: MCore Options. (line 27) 43243* mno-abicalls: MIPS Options. (line 154) 43244* mno-abshi: PDP-11 Options. (line 58) 43245* mno-ac0: PDP-11 Options. (line 20) 43246* mno-address-space-conversion: SPU Options. (line 63) 43247* mno-align-double: i386 and x86-64 Options. 43248 (line 253) 43249* mno-align-int: M680x0 Options. (line 266) 43250* mno-align-loops: M32R/D Options. (line 76) 43251* mno-align-stringops: i386 and x86-64 Options. 43252 (line 585) 43253* mno-altivec: RS/6000 and PowerPC Options. 43254 (line 188) 43255* mno-am33: MN10300 Options. (line 20) 43256* mno-app-regs <1>: V850 Options. (line 61) 43257* mno-app-regs: SPARC Options. (line 10) 43258* mno-as100-syntax: RX Options. (line 76) 43259* mno-atomic-updates: SPU Options. (line 78) 43260* mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 43261 (line 409) 43262* mno-backchain: S/390 and zSeries Options. 43263 (line 35) 43264* mno-base-addresses: MMIX Options. (line 54) 43265* mno-bit-align: RS/6000 and PowerPC Options. 43266 (line 438) 43267* mno-bitfield: M680x0 Options. (line 230) 43268* mno-branch-likely: MIPS Options. (line 618) 43269* mno-branch-predict: MMIX Options. (line 49) 43270* mno-bwx: DEC Alpha Options. (line 171) 43271* mno-callgraph-data: MCore Options. (line 31) 43272* mno-check-zero-division: MIPS Options. (line 426) 43273* mno-cirrus-fix-invalid-insns: ARM Options. (line 192) 43274* mno-cix: DEC Alpha Options. (line 171) 43275* mno-cmpb: RS/6000 and PowerPC Options. 43276 (line 33) 43277* mno-cond-exec: FRV Options. (line 158) 43278* mno-cond-move: FRV Options. (line 134) 43279* mno-const-align: CRIS Options. (line 55) 43280* mno-const16: Xtensa Options. (line 10) 43281* mno-crt0: MN10300 Options. (line 31) 43282* mno-csync-anomaly: Blackfin Options. (line 62) 43283* mno-cygwin: i386 and x86-64 Windows Options. 43284 (line 23) 43285* mno-data-align: CRIS Options. (line 55) 43286* mno-debug: S/390 and zSeries Options. 43287 (line 112) 43288* mno-div <1>: MCore Options. (line 15) 43289* mno-div: M680x0 Options. (line 208) 43290* mno-dlmzb: RS/6000 and PowerPC Options. 43291 (line 431) 43292* mno-double: FRV Options. (line 41) 43293* mno-dsp: MIPS Options. (line 256) 43294* mno-dspr2: MIPS Options. (line 262) 43295* mno-dwarf2-asm: IA-64 Options. (line 94) 43296* mno-dword: FRV Options. (line 35) 43297* mno-eabi: RS/6000 and PowerPC Options. 43298 (line 630) 43299* mno-early-stop-bits: IA-64 Options. (line 100) 43300* mno-eflags: FRV Options. (line 125) 43301* mno-embedded-data: MIPS Options. (line 373) 43302* mno-ep: V850 Options. (line 16) 43303* mno-epsilon: MMIX Options. (line 15) 43304* mno-explicit-relocs <1>: MIPS Options. (line 417) 43305* mno-explicit-relocs: DEC Alpha Options. (line 184) 43306* mno-extern-sdata: MIPS Options. (line 335) 43307* mno-fancy-math-387: i386 and x86-64 Options. 43308 (line 242) 43309* mno-faster-structs: SPARC Options. (line 71) 43310* mno-fix: DEC Alpha Options. (line 171) 43311* mno-fix-r10000: MIPS Options. (line 503) 43312* mno-fix-r4000: MIPS Options. (line 482) 43313* mno-fix-r4400: MIPS Options. (line 496) 43314* mno-float32: PDP-11 Options. (line 48) 43315* mno-float64: PDP-11 Options. (line 52) 43316* mno-flush-func: M32R/D Options. (line 99) 43317* mno-flush-trap: M32R/D Options. (line 91) 43318* mno-fp-in-toc: RS/6000 and PowerPC Options. 43319 (line 274) 43320* mno-fp-regs: DEC Alpha Options. (line 25) 43321* mno-fp-ret-in-387: i386 and x86-64 Options. 43322 (line 232) 43323* mno-fprnd: RS/6000 and PowerPC Options. 43324 (line 33) 43325* mno-fpu: SPARC Options. (line 25) 43326* mno-fused-madd <1>: Xtensa Options. (line 19) 43327* mno-fused-madd <2>: S/390 and zSeries Options. 43328 (line 137) 43329* mno-fused-madd <3>: RS/6000 and PowerPC Options. 43330 (line 418) 43331* mno-fused-madd <4>: MIPS Options. (line 467) 43332* mno-fused-madd <5>: IA-64 Options. (line 88) 43333* mno-fused-madd: i386 and x86-64 Options. 43334 (line 467) 43335* mno-gnu-as: IA-64 Options. (line 18) 43336* mno-gnu-ld: IA-64 Options. (line 23) 43337* mno-gotplt: CRIS Options. (line 81) 43338* mno-gpopt: MIPS Options. (line 358) 43339* mno-hard-dfp <1>: S/390 and zSeries Options. 43340 (line 20) 43341* mno-hard-dfp: RS/6000 and PowerPC Options. 43342 (line 33) 43343* mno-hardlit: MCore Options. (line 10) 43344* mno-id-shared-library: Blackfin Options. (line 84) 43345* mno-ieee-fp: i386 and x86-64 Options. 43346 (line 215) 43347* mno-inline-float-divide: IA-64 Options. (line 62) 43348* mno-inline-int-divide: IA-64 Options. (line 73) 43349* mno-inline-sqrt: IA-64 Options. (line 84) 43350* mno-int16: PDP-11 Options. (line 44) 43351* mno-int32: PDP-11 Options. (line 40) 43352* mno-interlink-mips16: MIPS Options. (line 117) 43353* mno-interrupts: AVR Options. (line 32) 43354* mno-isel: RS/6000 and PowerPC Options. 43355 (line 217) 43356* mno-knuthdiv: MMIX Options. (line 33) 43357* mno-leaf-id-shared-library: Blackfin Options. (line 94) 43358* mno-libfuncs: MMIX Options. (line 10) 43359* mno-llsc: MIPS Options. (line 242) 43360* mno-local-sdata: MIPS Options. (line 323) 43361* mno-long-calls <1>: V850 Options. (line 10) 43362* mno-long-calls <2>: MIPS Options. (line 453) 43363* mno-long-calls <3>: M68hc1x Options. (line 35) 43364* mno-long-calls <4>: HPPA Options. (line 136) 43365* mno-long-calls <5>: Blackfin Options. (line 117) 43366* mno-long-calls: ARM Options. (line 157) 43367* mno-longcall: RS/6000 and PowerPC Options. 43368 (line 696) 43369* mno-longcalls: Xtensa Options. (line 67) 43370* mno-low-64k: Blackfin Options. (line 70) 43371* mno-lsim <1>: MCore Options. (line 46) 43372* mno-lsim: FR30 Options. (line 14) 43373* mno-mad: MIPS Options. (line 462) 43374* mno-max: DEC Alpha Options. (line 171) 43375* mno-mcount-ra-address: MIPS Options. (line 678) 43376* mno-mdmx: MIPS Options. (line 279) 43377* mno-media: FRV Options. (line 47) 43378* mno-memcpy: MIPS Options. (line 447) 43379* mno-mfcrf: RS/6000 and PowerPC Options. 43380 (line 33) 43381* mno-mfpgpr: RS/6000 and PowerPC Options. 43382 (line 33) 43383* mno-mips16: MIPS Options. (line 102) 43384* mno-mips3d: MIPS Options. (line 285) 43385* mno-mmx: i386 and x86-64 Options. 43386 (line 443) 43387* mno-mt: MIPS Options. (line 290) 43388* mno-mul-bug-workaround: CRIS Options. (line 31) 43389* mno-muladd: FRV Options. (line 53) 43390* mno-mulhw: RS/6000 and PowerPC Options. 43391 (line 424) 43392* mno-mult-bug: MN10300 Options. (line 13) 43393* mno-multi-cond-exec: FRV Options. (line 183) 43394* mno-multiple: RS/6000 and PowerPC Options. 43395 (line 377) 43396* mno-mvcle: S/390 and zSeries Options. 43397 (line 105) 43398* mno-nested-cond-exec: FRV Options. (line 195) 43399* mno-optimize-membar: FRV Options. (line 205) 43400* mno-opts: MeP Options. (line 93) 43401* mno-pack: FRV Options. (line 122) 43402* mno-packed-stack: S/390 and zSeries Options. 43403 (line 54) 43404* mno-paired: RS/6000 and PowerPC Options. 43405 (line 231) 43406* mno-paired-single: MIPS Options. (line 273) 43407* mno-pic: IA-64 Options. (line 26) 43408* mno-plt: MIPS Options. (line 181) 43409* mno-popcntb: RS/6000 and PowerPC Options. 43410 (line 33) 43411* mno-popcntd: RS/6000 and PowerPC Options. 43412 (line 33) 43413* mno-power: RS/6000 and PowerPC Options. 43414 (line 33) 43415* mno-power2: RS/6000 and PowerPC Options. 43416 (line 33) 43417* mno-powerpc: RS/6000 and PowerPC Options. 43418 (line 33) 43419* mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 43420 (line 33) 43421* mno-powerpc-gpopt: RS/6000 and PowerPC Options. 43422 (line 33) 43423* mno-powerpc64: RS/6000 and PowerPC Options. 43424 (line 33) 43425* mno-prolog-function: V850 Options. (line 23) 43426* mno-prologue-epilogue: CRIS Options. (line 71) 43427* mno-prototype: RS/6000 and PowerPC Options. 43428 (line 590) 43429* mno-push-args: i386 and x86-64 Options. 43430 (line 562) 43431* mno-red-zone: i386 and x86-64 Options. 43432 (line 644) 43433* mno-register-names: IA-64 Options. (line 37) 43434* mno-regnames: RS/6000 and PowerPC Options. 43435 (line 690) 43436* mno-relax-immediate: MCore Options. (line 19) 43437* mno-relocatable: RS/6000 and PowerPC Options. 43438 (line 455) 43439* mno-relocatable-lib: RS/6000 and PowerPC Options. 43440 (line 463) 43441* mno-rtd: M680x0 Options. (line 261) 43442* mno-scc: FRV Options. (line 146) 43443* mno-sched-ar-data-spec: IA-64 Options. (line 135) 43444* mno-sched-ar-in-data-spec: IA-64 Options. (line 156) 43445* mno-sched-br-data-spec: IA-64 Options. (line 128) 43446* mno-sched-br-in-data-spec: IA-64 Options. (line 149) 43447* mno-sched-control-spec: IA-64 Options. (line 142) 43448* mno-sched-count-spec-in-critical-path: IA-64 Options. (line 183) 43449* mno-sched-in-control-spec: IA-64 Options. (line 163) 43450* mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 43451* mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 43452* mno-sched-prolog: ARM Options. (line 32) 43453* mno-sdata <1>: RS/6000 and PowerPC Options. 43454 (line 677) 43455* mno-sdata: IA-64 Options. (line 42) 43456* mno-sep-data: Blackfin Options. (line 112) 43457* mno-serialize-volatile: Xtensa Options. (line 35) 43458* mno-short: M680x0 Options. (line 225) 43459* mno-side-effects: CRIS Options. (line 46) 43460* mno-sim: RX Options. (line 71) 43461* mno-single-exit: MMIX Options. (line 66) 43462* mno-slow-bytes: MCore Options. (line 35) 43463* mno-small-exec: S/390 and zSeries Options. 43464 (line 80) 43465* mno-smartmips: MIPS Options. (line 269) 43466* mno-soft-float: DEC Alpha Options. (line 10) 43467* mno-space-regs: HPPA Options. (line 45) 43468* mno-spe: RS/6000 and PowerPC Options. 43469 (line 226) 43470* mno-specld-anomaly: Blackfin Options. (line 52) 43471* mno-split: PDP-11 Options. (line 71) 43472* mno-split-addresses: MIPS Options. (line 411) 43473* mno-sse: i386 and x86-64 Options. 43474 (line 443) 43475* mno-stack-align: CRIS Options. (line 55) 43476* mno-stack-bias: SPARC Options. (line 222) 43477* mno-strict-align <1>: RS/6000 and PowerPC Options. 43478 (line 450) 43479* mno-strict-align: M680x0 Options. (line 286) 43480* mno-string: RS/6000 and PowerPC Options. 43481 (line 388) 43482* mno-sum-in-toc: RS/6000 and PowerPC Options. 43483 (line 274) 43484* mno-swdiv: RS/6000 and PowerPC Options. 43485 (line 178) 43486* mno-sym32: MIPS Options. (line 308) 43487* mno-target-align: Xtensa Options. (line 54) 43488* mno-text-section-literals: Xtensa Options. (line 42) 43489* mno-tls-markers: RS/6000 and PowerPC Options. 43490 (line 729) 43491* mno-toc: RS/6000 and PowerPC Options. 43492 (line 472) 43493* mno-toplevel-symbols: MMIX Options. (line 40) 43494* mno-tpf-trace: S/390 and zSeries Options. 43495 (line 131) 43496* mno-unaligned-doubles: SPARC Options. (line 59) 43497* mno-uninit-const-in-rodata: MIPS Options. (line 381) 43498* mno-update: RS/6000 and PowerPC Options. 43499 (line 399) 43500* mno-v8plus: SPARC Options. (line 170) 43501* mno-vis: SPARC Options. (line 177) 43502* mno-vliw-branch: FRV Options. (line 170) 43503* mno-volatile-asm-stop: IA-64 Options. (line 32) 43504* mno-vrsave: RS/6000 and PowerPC Options. 43505 (line 196) 43506* mno-vsx: RS/6000 and PowerPC Options. 43507 (line 240) 43508* mno-wide-bitfields: MCore Options. (line 23) 43509* mno-xgot <1>: MIPS Options. (line 191) 43510* mno-xgot: M680x0 Options. (line 318) 43511* mno-xl-compat: RS/6000 and PowerPC Options. 43512 (line 309) 43513* mno-zero-extend: MMIX Options. (line 27) 43514* mnobitfield: M680x0 Options. (line 230) 43515* mnomacsave: SH Options. (line 112) 43516* mnominmax: M68hc1x Options. (line 31) 43517* mnop-fun-dllimport: i386 and x86-64 Windows Options. 43518 (line 36) 43519* mold-mnemonics: RS/6000 and PowerPC Options. 43520 (line 104) 43521* momit-leaf-frame-pointer <1>: i386 and x86-64 Options. 43522 (line 610) 43523* momit-leaf-frame-pointer: Blackfin Options. (line 40) 43524* mone-byte-bool: Darwin Options. (line 92) 43525* moptimize-membar: FRV Options. (line 201) 43526* MP: Preprocessor Options. 43527 (line 227) 43528* mpa-risc-1-0: HPPA Options. (line 19) 43529* mpa-risc-1-1: HPPA Options. (line 19) 43530* mpa-risc-2-0: HPPA Options. (line 19) 43531* mpack: FRV Options. (line 119) 43532* mpacked-stack: S/390 and zSeries Options. 43533 (line 54) 43534* mpadstruct: SH Options. (line 138) 43535* mpaired: RS/6000 and PowerPC Options. 43536 (line 231) 43537* mpaired-single: MIPS Options. (line 273) 43538* mpc32: i386 and x86-64 Options. 43539 (line 348) 43540* mpc64: i386 and x86-64 Options. 43541 (line 348) 43542* mpc80: i386 and x86-64 Options. 43543 (line 348) 43544* mpcrel: M680x0 Options. (line 278) 43545* mpdebug: CRIS Options. (line 35) 43546* mpe: RS/6000 and PowerPC Options. 43547 (line 329) 43548* mpe-aligned-commons: i386 and x86-64 Windows Options. 43549 (line 67) 43550* mpic-register: ARM Options. (line 188) 43551* mplt: MIPS Options. (line 181) 43552* mpoke-function-name: ARM Options. (line 202) 43553* mpopcntb: RS/6000 and PowerPC Options. 43554 (line 33) 43555* mpopcntd: RS/6000 and PowerPC Options. 43556 (line 33) 43557* mportable-runtime: HPPA Options. (line 71) 43558* mpower: RS/6000 and PowerPC Options. 43559 (line 33) 43560* mpower2: RS/6000 and PowerPC Options. 43561 (line 33) 43562* mpowerpc: RS/6000 and PowerPC Options. 43563 (line 33) 43564* mpowerpc-gfxopt: RS/6000 and PowerPC Options. 43565 (line 33) 43566* mpowerpc-gpopt: RS/6000 and PowerPC Options. 43567 (line 33) 43568* mpowerpc64: RS/6000 and PowerPC Options. 43569 (line 33) 43570* mprefergot: SH Options. (line 145) 43571* mpreferred-stack-boundary: i386 and x86-64 Options. 43572 (line 378) 43573* mprioritize-restricted-insns: RS/6000 and PowerPC Options. 43574 (line 495) 43575* mprolog-function: V850 Options. (line 23) 43576* mprologue-epilogue: CRIS Options. (line 71) 43577* mprototype: RS/6000 and PowerPC Options. 43578 (line 590) 43579* mpt-fixed: SH Options. (line 232) 43580* mpush-args <1>: i386 and x86-64 Options. 43581 (line 562) 43582* mpush-args: CRX Options. (line 13) 43583* MQ: Preprocessor Options. 43584 (line 253) 43585* mr10k-cache-barrier: MIPS Options. (line 540) 43586* mrecip: i386 and x86-64 Options. 43587 (line 514) 43588* mregister-names: IA-64 Options. (line 37) 43589* mregnames: RS/6000 and PowerPC Options. 43590 (line 690) 43591* mregparm: i386 and x86-64 Options. 43592 (line 325) 43593* mrelax <1>: SH Options. (line 86) 43594* mrelax <2>: RX Options. (line 95) 43595* mrelax <3>: MN10300 Options. (line 34) 43596* mrelax: H8/300 Options. (line 9) 43597* mrelax-immediate: MCore Options. (line 19) 43598* mrelax-pic-calls: MIPS Options. (line 665) 43599* mrelocatable: RS/6000 and PowerPC Options. 43600 (line 455) 43601* mrelocatable-lib: RS/6000 and PowerPC Options. 43602 (line 463) 43603* mrepeat: MeP Options. (line 96) 43604* mreturn-pointer-on-d0: MN10300 Options. (line 24) 43605* mrodata: ARC Options. (line 30) 43606* mrtd <1>: Function Attributes. 43607 (line 177) 43608* mrtd <2>: M680x0 Options. (line 239) 43609* mrtd: i386 and x86-64 Options. 43610 (line 301) 43611* mrtp: VxWorks Options. (line 11) 43612* ms <1>: MeP Options. (line 100) 43613* ms: H8/300 Options. (line 17) 43614* ms2600: H8/300 Options. (line 24) 43615* msafe-dma: SPU Options. (line 17) 43616* msafe-hints: SPU Options. (line 107) 43617* msahf: i386 and x86-64 Options. 43618 (line 494) 43619* msatur: MeP Options. (line 105) 43620* msave-acc-in-interrupts: RX Options. (line 109) 43621* mscc: FRV Options. (line 140) 43622* msched-ar-data-spec: IA-64 Options. (line 135) 43623* msched-ar-in-data-spec: IA-64 Options. (line 156) 43624* msched-br-data-spec: IA-64 Options. (line 128) 43625* msched-br-in-data-spec: IA-64 Options. (line 149) 43626* msched-control-spec: IA-64 Options. (line 142) 43627* msched-costly-dep: RS/6000 and PowerPC Options. 43628 (line 502) 43629* msched-count-spec-in-critical-path: IA-64 Options. (line 183) 43630* msched-fp-mem-deps-zero-cost: IA-64 Options. (line 200) 43631* msched-in-control-spec: IA-64 Options. (line 163) 43632* msched-max-memory-insns: IA-64 Options. (line 209) 43633* msched-max-memory-insns-hard-limit: IA-64 Options. (line 215) 43634* msched-prefer-non-control-spec-insns: IA-64 Options. (line 176) 43635* msched-prefer-non-data-spec-insns: IA-64 Options. (line 169) 43636* msched-spec-ldc: IA-64 Options. (line 189) 43637* msched-stop-bits-after-every-cycle: IA-64 Options. (line 196) 43638* mschedule: HPPA Options. (line 78) 43639* mscore5: Score Options. (line 25) 43640* mscore5u: Score Options. (line 28) 43641* mscore7: Score Options. (line 31) 43642* mscore7d: Score Options. (line 34) 43643* msda: V850 Options. (line 40) 43644* msdata <1>: RS/6000 and PowerPC Options. 43645 (line 664) 43646* msdata: IA-64 Options. (line 42) 43647* msdata=data: RS/6000 and PowerPC Options. 43648 (line 669) 43649* msdata=default: RS/6000 and PowerPC Options. 43650 (line 664) 43651* msdata=eabi: RS/6000 and PowerPC Options. 43652 (line 644) 43653* msdata=none <1>: RS/6000 and PowerPC Options. 43654 (line 677) 43655* msdata=none: M32R/D Options. (line 40) 43656* msdata=sdata: M32R/D Options. (line 49) 43657* msdata=sysv: RS/6000 and PowerPC Options. 43658 (line 655) 43659* msdata=use: M32R/D Options. (line 53) 43660* msdram <1>: MeP Options. (line 110) 43661* msdram: Blackfin Options. (line 163) 43662* msecure-plt: RS/6000 and PowerPC Options. 43663 (line 206) 43664* msel-sched-dont-check-control-spec: IA-64 Options. (line 205) 43665* msep-data: Blackfin Options. (line 106) 43666* mserialize-volatile: Xtensa Options. (line 35) 43667* mshared-library-id: Blackfin Options. (line 99) 43668* mshort <1>: M68hc1x Options. (line 40) 43669* mshort: M680x0 Options. (line 219) 43670* msign-extend-enabled: LM32 Options. (line 18) 43671* msim <1>: Xstormy16 Options. (line 9) 43672* msim <2>: RX Options. (line 71) 43673* msim <3>: RS/6000 and PowerPC Options. 43674 (line 600) 43675* msim <4>: MeP Options. (line 114) 43676* msim <5>: M32C Options. (line 13) 43677* msim: Blackfin Options. (line 33) 43678* msimnovec: MeP Options. (line 117) 43679* msimple-fpu: RS/6000 and PowerPC Options. 43680 (line 362) 43681* msingle-exit: MMIX Options. (line 66) 43682* msingle-float <1>: RS/6000 and PowerPC Options. 43683 (line 358) 43684* msingle-float: MIPS Options. (line 233) 43685* msingle-pic-base: ARM Options. (line 182) 43686* msio: HPPA Options. (line 105) 43687* mslow-bytes: MCore Options. (line 35) 43688* msmall-data: DEC Alpha Options. (line 195) 43689* msmall-data-limit: RX Options. (line 48) 43690* msmall-exec: S/390 and zSeries Options. 43691 (line 80) 43692* msmall-mem: SPU Options. (line 35) 43693* msmall-model: FR30 Options. (line 9) 43694* msmall-text: DEC Alpha Options. (line 213) 43695* msmartmips: MIPS Options. (line 269) 43696* msoft-float <1>: SPARC Options. (line 25) 43697* msoft-float <2>: S/390 and zSeries Options. 43698 (line 11) 43699* msoft-float <3>: RS/6000 and PowerPC Options. 43700 (line 352) 43701* msoft-float <4>: PDP-11 Options. (line 13) 43702* msoft-float <5>: MIPS Options. (line 229) 43703* msoft-float <6>: M680x0 Options. (line 202) 43704* msoft-float <7>: i386 and x86-64 Options. 43705 (line 220) 43706* msoft-float <8>: HPPA Options. (line 91) 43707* msoft-float <9>: FRV Options. (line 22) 43708* msoft-float <10>: DEC Alpha Options. (line 10) 43709* msoft-float: ARM Options. (line 60) 43710* msoft-quad-float: SPARC Options. (line 45) 43711* msoft-reg-count: M68hc1x Options. (line 43) 43712* mspace <1>: V850 Options. (line 30) 43713* mspace: SH Options. (line 142) 43714* mspe: RS/6000 and PowerPC Options. 43715 (line 226) 43716* mspecld-anomaly: Blackfin Options. (line 47) 43717* msplit: PDP-11 Options. (line 68) 43718* msplit-addresses: MIPS Options. (line 411) 43719* msse: i386 and x86-64 Options. 43720 (line 443) 43721* msse2avx: i386 and x86-64 Options. 43722 (line 628) 43723* msseregparm: i386 and x86-64 Options. 43724 (line 336) 43725* mstack-align: CRIS Options. (line 55) 43726* mstack-bias: SPARC Options. (line 222) 43727* mstack-check-l1: Blackfin Options. (line 73) 43728* mstack-guard: S/390 and zSeries Options. 43729 (line 156) 43730* mstack-increment: MCore Options. (line 50) 43731* mstack-size: S/390 and zSeries Options. 43732 (line 156) 43733* mstackrealign: i386 and x86-64 Options. 43734 (line 369) 43735* mstdmain: SPU Options. (line 40) 43736* mstrict-align <1>: RS/6000 and PowerPC Options. 43737 (line 450) 43738* mstrict-align: M680x0 Options. (line 286) 43739* mstring: RS/6000 and PowerPC Options. 43740 (line 388) 43741* mstringop-strategy=ALG: i386 and x86-64 Options. 43742 (line 602) 43743* mstructure-size-boundary: ARM Options. (line 137) 43744* msvr4-struct-return: RS/6000 and PowerPC Options. 43745 (line 564) 43746* mswdiv: RS/6000 and PowerPC Options. 43747 (line 178) 43748* msym32: MIPS Options. (line 308) 43749* msynci: MIPS Options. (line 650) 43750* MT: Preprocessor Options. 43751 (line 239) 43752* mtarget-align: Xtensa Options. (line 54) 43753* mtda: V850 Options. (line 34) 43754* mtext: ARC Options. (line 30) 43755* mtext-section-literals: Xtensa Options. (line 42) 43756* mtf: MeP Options. (line 121) 43757* mthread: i386 and x86-64 Windows Options. 43758 (line 40) 43759* mthreads: i386 and x86-64 Options. 43760 (line 577) 43761* mthumb: ARM Options. (line 223) 43762* mthumb-interwork: ARM Options. (line 25) 43763* mtiny-stack: AVR Options. (line 40) 43764* mtiny=: MeP Options. (line 125) 43765* mtls: FRV Options. (line 75) 43766* mTLS: FRV Options. (line 72) 43767* mtls-direct-seg-refs: i386 and x86-64 Options. 43768 (line 618) 43769* mtls-markers: RS/6000 and PowerPC Options. 43770 (line 729) 43771* mtls-size: IA-64 Options. (line 112) 43772* mtoc: RS/6000 and PowerPC Options. 43773 (line 472) 43774* mtomcat-stats: FRV Options. (line 209) 43775* mtoplevel-symbols: MMIX Options. (line 40) 43776* mtp: ARM Options. (line 260) 43777* mtpcs-frame: ARM Options. (line 233) 43778* mtpcs-leaf-frame: ARM Options. (line 239) 43779* mtpf-trace: S/390 and zSeries Options. 43780 (line 131) 43781* mtrap-precision: DEC Alpha Options. (line 109) 43782* mtune <1>: SPARC Options. (line 158) 43783* mtune <2>: S/390 and zSeries Options. 43784 (line 124) 43785* mtune <3>: RS/6000 and PowerPC Options. 43786 (line 168) 43787* mtune <4>: MIPS Options. (line 62) 43788* mtune <5>: M680x0 Options. (line 69) 43789* mtune <6>: IA-64 Options. (line 116) 43790* mtune <7>: i386 and x86-64 Options. 43791 (line 10) 43792* mtune <8>: DEC Alpha Options. (line 267) 43793* mtune <9>: CRIS Options. (line 16) 43794* mtune: ARM Options. (line 97) 43795* muclibc: GNU/Linux Options. (line 13) 43796* muls: Score Options. (line 18) 43797* multcost=NUMBER: SH Options. (line 155) 43798* multi_module: Darwin Options. (line 199) 43799* multilib-library-pic: FRV Options. (line 89) 43800* multiply-enabled: LM32 Options. (line 15) 43801* multiply_defined: Darwin Options. (line 199) 43802* multiply_defined_unused: Darwin Options. (line 199) 43803* munaligned-doubles: SPARC Options. (line 59) 43804* municode: i386 and x86-64 Windows Options. 43805 (line 44) 43806* muninit-const-in-rodata: MIPS Options. (line 381) 43807* munix: VAX Options. (line 9) 43808* munix-asm: PDP-11 Options. (line 74) 43809* munsafe-dma: SPU Options. (line 17) 43810* mupdate: RS/6000 and PowerPC Options. 43811 (line 399) 43812* muser-enabled: LM32 Options. (line 21) 43813* musermode: SH Options. (line 150) 43814* mv850: V850 Options. (line 49) 43815* mv850e: V850 Options. (line 69) 43816* mv850e1: V850 Options. (line 64) 43817* mv8plus: SPARC Options. (line 170) 43818* mveclibabi: i386 and x86-64 Options. 43819 (line 531) 43820* mvis: SPARC Options. (line 177) 43821* mvliw-branch: FRV Options. (line 164) 43822* mvms-return-codes <1>: IA-64/VMS Options. (line 9) 43823* mvms-return-codes: DEC Alpha/VMS Options. 43824 (line 9) 43825* mvolatile-asm-stop: IA-64 Options. (line 32) 43826* mvr4130-align: MIPS Options. (line 639) 43827* mvrsave: RS/6000 and PowerPC Options. 43828 (line 196) 43829* mvsx: RS/6000 and PowerPC Options. 43830 (line 240) 43831* mvxworks: RS/6000 and PowerPC Options. 43832 (line 621) 43833* mwarn-cell-microcode: RS/6000 and PowerPC Options. 43834 (line 202) 43835* mwarn-dynamicstack: S/390 and zSeries Options. 43836 (line 150) 43837* mwarn-framesize: S/390 and zSeries Options. 43838 (line 142) 43839* mwarn-reloc: SPU Options. (line 10) 43840* mwide-bitfields: MCore Options. (line 23) 43841* mwin32: i386 and x86-64 Windows Options. 43842 (line 49) 43843* mwindows: i386 and x86-64 Windows Options. 43844 (line 55) 43845* mword-relocations: ARM Options. (line 268) 43846* mwords-little-endian: ARM Options. (line 71) 43847* mxgot <1>: MIPS Options. (line 191) 43848* mxgot: M680x0 Options. (line 318) 43849* mxilinx-fpu: RS/6000 and PowerPC Options. 43850 (line 372) 43851* mxl-compat: RS/6000 and PowerPC Options. 43852 (line 309) 43853* myellowknife: RS/6000 and PowerPC Options. 43854 (line 616) 43855* mzarch: S/390 and zSeries Options. 43856 (line 95) 43857* mzda: V850 Options. (line 45) 43858* mzero-extend: MMIX Options. (line 27) 43859* no-canonical-prefixes: Overall Options. (line 348) 43860* no-integrated-cpp: C Dialect Options. (line 243) 43861* no_dead_strip_inits_and_terms: Darwin Options. (line 199) 43862* noall_load: Darwin Options. (line 199) 43863* nocpp: MIPS Options. (line 477) 43864* nodefaultlibs: Link Options. (line 62) 43865* nofixprebinding: Darwin Options. (line 199) 43866* nofpu: RX Options. (line 17) 43867* nolibdld: HPPA Options. (line 188) 43868* nomultidefs: Darwin Options. (line 199) 43869* non-static: VxWorks Options. (line 16) 43870* noprebind: Darwin Options. (line 199) 43871* noseglinkedit: Darwin Options. (line 199) 43872* nostartfiles: Link Options. (line 57) 43873* nostdinc: Preprocessor Options. 43874 (line 377) 43875* nostdinc++ <1>: Preprocessor Options. 43876 (line 382) 43877* nostdinc++: C++ Dialect Options. 43878 (line 292) 43879* nostdlib: Link Options. (line 73) 43880* o: Preprocessor Options. 43881 (line 75) 43882* O: Optimize Options. (line 39) 43883* o: Overall Options. (line 187) 43884* O0: Optimize Options. (line 121) 43885* O1: Optimize Options. (line 39) 43886* O2: Optimize Options. (line 79) 43887* O3: Optimize Options. (line 114) 43888* Os: Optimize Options. (line 125) 43889* P: Preprocessor Options. 43890 (line 593) 43891* p: Debugging Options. (line 291) 43892* pagezero_size: Darwin Options. (line 199) 43893* param: Optimize Options. (line 2045) 43894* pass-exit-codes: Overall Options. (line 145) 43895* pedantic <1>: Warnings and Errors. 43896 (line 25) 43897* pedantic <2>: Alternate Keywords. (line 29) 43898* pedantic <3>: C Extensions. (line 6) 43899* pedantic <4>: Preprocessor Options. 43900 (line 163) 43901* pedantic <5>: Warning Options. (line 53) 43902* pedantic: Standards. (line 16) 43903* pedantic-errors <1>: Warnings and Errors. 43904 (line 25) 43905* pedantic-errors <2>: Non-bugs. (line 216) 43906* pedantic-errors <3>: Preprocessor Options. 43907 (line 168) 43908* pedantic-errors <4>: Warning Options. (line 95) 43909* pedantic-errors: Standards. (line 16) 43910* pg: Debugging Options. (line 297) 43911* pie: Link Options. (line 95) 43912* pipe: Overall Options. (line 209) 43913* prebind: Darwin Options. (line 199) 43914* prebind_all_twolevel_modules: Darwin Options. (line 199) 43915* print-file-name: Debugging Options. (line 1038) 43916* print-libgcc-file-name: Debugging Options. (line 1068) 43917* print-multi-directory: Debugging Options. (line 1044) 43918* print-multi-lib: Debugging Options. (line 1049) 43919* print-multi-os-directory: Debugging Options. (line 1056) 43920* print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 43921 (line 244) 43922* print-prog-name: Debugging Options. (line 1065) 43923* print-search-dirs: Debugging Options. (line 1076) 43924* print-sysroot: Debugging Options. (line 1089) 43925* print-sysroot-headers-suffix: Debugging Options. (line 1096) 43926* private_bundle: Darwin Options. (line 199) 43927* pthread <1>: SPARC Options. (line 242) 43928* pthread: RS/6000 and PowerPC Options. 43929 (line 736) 43930* pthreads: SPARC Options. (line 236) 43931* Q: Debugging Options. (line 303) 43932* Qn: System V Options. (line 18) 43933* Qy: System V Options. (line 14) 43934* rdynamic: Link Options. (line 101) 43935* read_only_relocs: Darwin Options. (line 199) 43936* remap: Preprocessor Options. 43937 (line 641) 43938* s: Link Options. (line 108) 43939* S <1>: Link Options. (line 20) 43940* S: Overall Options. (line 170) 43941* save-temps: Debugging Options. (line 946) 43942* save-temps=obj: Debugging Options. (line 972) 43943* sectalign: Darwin Options. (line 199) 43944* sectcreate: Darwin Options. (line 199) 43945* sectobjectsymbols: Darwin Options. (line 199) 43946* sectorder: Darwin Options. (line 199) 43947* seg1addr: Darwin Options. (line 199) 43948* seg_addr_table: Darwin Options. (line 199) 43949* seg_addr_table_filename: Darwin Options. (line 199) 43950* segaddr: Darwin Options. (line 199) 43951* seglinkedit: Darwin Options. (line 199) 43952* segprot: Darwin Options. (line 199) 43953* segs_read_only_addr: Darwin Options. (line 199) 43954* segs_read_write_addr: Darwin Options. (line 199) 43955* shared: Link Options. (line 117) 43956* shared-libgcc: Link Options. (line 125) 43957* sim: CRIS Options. (line 95) 43958* sim2: CRIS Options. (line 101) 43959* single_module: Darwin Options. (line 199) 43960* specs: Directory Options. (line 84) 43961* static <1>: HPPA Options. (line 192) 43962* static <2>: Darwin Options. (line 199) 43963* static: Link Options. (line 112) 43964* static-libgcc: Link Options. (line 125) 43965* std <1>: Non-bugs. (line 107) 43966* std <2>: Other Builtins. (line 22) 43967* std <3>: C Dialect Options. (line 47) 43968* std: Standards. (line 16) 43969* std=: Preprocessor Options. 43970 (line 326) 43971* sub_library: Darwin Options. (line 199) 43972* sub_umbrella: Darwin Options. (line 199) 43973* symbolic: Link Options. (line 172) 43974* sysroot: Directory Options. (line 92) 43975* T: Link Options. (line 178) 43976* target-help <1>: Preprocessor Options. 43977 (line 646) 43978* target-help: Overall Options. (line 240) 43979* threads <1>: SPARC Options. (line 230) 43980* threads: HPPA Options. (line 205) 43981* time: Debugging Options. (line 987) 43982* traditional <1>: Incompatibilities. (line 6) 43983* traditional: C Dialect Options. (line 255) 43984* traditional-cpp <1>: Preprocessor Options. 43985 (line 624) 43986* traditional-cpp: C Dialect Options. (line 255) 43987* trigraphs <1>: Preprocessor Options. 43988 (line 628) 43989* trigraphs: C Dialect Options. (line 239) 43990* twolevel_namespace: Darwin Options. (line 199) 43991* u: Link Options. (line 211) 43992* U: Preprocessor Options. 43993 (line 57) 43994* umbrella: Darwin Options. (line 199) 43995* undef: Preprocessor Options. 43996 (line 61) 43997* undefined: Darwin Options. (line 199) 43998* unexported_symbols_list: Darwin Options. (line 199) 43999* V: Target Options. (line 25) 44000* v <1>: Preprocessor Options. 44001 (line 650) 44002* v: Overall Options. (line 198) 44003* version <1>: Preprocessor Options. 44004 (line 663) 44005* version: Overall Options. (line 352) 44006* W: Incompatibilities. (line 64) 44007* w: Preprocessor Options. 44008 (line 159) 44009* W: Warning Options. (line 147) 44010* w: Warning Options. (line 18) 44011* Wa: Assembler Options. (line 9) 44012* Wabi: C++ Dialect Options. 44013 (line 306) 44014* Waddress: Warning Options. (line 988) 44015* Waggregate-return: Warning Options. (line 1006) 44016* Wall <1>: Standard Libraries. (line 6) 44017* Wall <2>: Preprocessor Options. 44018 (line 81) 44019* Wall: Warning Options. (line 99) 44020* Warray-bounds: Warning Options. (line 700) 44021* Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 44022 (line 198) 44023* Wattributes: Warning Options. (line 1011) 44024* Wbad-function-cast: Warning Options. (line 878) 44025* Wbuiltin-macro-redefined: Warning Options. (line 1017) 44026* Wcast-align: Warning Options. (line 909) 44027* Wcast-qual: Warning Options. (line 893) 44028* Wchar-subscripts: Warning Options. (line 185) 44029* Wclobbered: Warning Options. (line 929) 44030* Wcomment <1>: Preprocessor Options. 44031 (line 89) 44032* Wcomment: Warning Options. (line 190) 44033* Wcomments: Preprocessor Options. 44034 (line 89) 44035* Wconversion: Warning Options. (line 933) 44036* Wconversion-null: Warning Options. (line 951) 44037* Wcoverage-mismatch: Language Independent Options. 44038 (line 42) 44039* Wctor-dtor-privacy: C++ Dialect Options. 44040 (line 416) 44041* Wdeclaration-after-statement: Warning Options. (line 821) 44042* Wdeprecated: Warning Options. (line 1154) 44043* Wdeprecated-declarations: Warning Options. (line 1158) 44044* Wdisabled-optimization: Warning Options. (line 1284) 44045* Wdiv-by-zero: Warning Options. (line 705) 44046* weak_reference_mismatches: Darwin Options. (line 199) 44047* Weffc++: C++ Dialect Options. 44048 (line 443) 44049* Wempty-body: Warning Options. (line 955) 44050* Wendif-labels <1>: Preprocessor Options. 44051 (line 136) 44052* Wendif-labels: Warning Options. (line 831) 44053* Wenum-compare: Warning Options. (line 959) 44054* Werror <1>: Preprocessor Options. 44055 (line 149) 44056* Werror: Warning Options. (line 21) 44057* Werror=: Warning Options. (line 24) 44058* Wextra: Warning Options. (line 147) 44059* Wfatal-errors: Warning Options. (line 38) 44060* Wfloat-equal: Warning Options. (line 721) 44061* Wformat <1>: Function Attributes. 44062 (line 398) 44063* Wformat: Warning Options. (line 195) 44064* Wformat-contains-nul: Warning Options. (line 234) 44065* Wformat-extra-args: Warning Options. (line 238) 44066* Wformat-nonliteral <1>: Function Attributes. 44067 (line 457) 44068* Wformat-nonliteral: Warning Options. (line 256) 44069* Wformat-security: Warning Options. (line 261) 44070* Wformat-y2k: Warning Options. (line 230) 44071* Wformat-zero-length: Warning Options. (line 252) 44072* Wformat=2: Warning Options. (line 272) 44073* Wframe-larger-than: Warning Options. (line 843) 44074* whatsloaded: Darwin Options. (line 199) 44075* whyload: Darwin Options. (line 199) 44076* Wignored-qualifiers: Warning Options. (line 311) 44077* Wimplicit: Warning Options. (line 307) 44078* Wimplicit-function-declaration: Warning Options. (line 301) 44079* Wimplicit-int: Warning Options. (line 297) 44080* Winit-self: Warning Options. (line 284) 44081* Winline <1>: Inline. (line 63) 44082* Winline: Warning Options. (line 1224) 44083* Wint-to-pointer-cast: Warning Options. (line 1251) 44084* Winvalid-offsetof: Warning Options. (line 1237) 44085* Winvalid-pch: Warning Options. (line 1259) 44086* Wjump-misses-init: Warning Options. (line 964) 44087* Wl: Link Options. (line 203) 44088* Wlarger-than-LEN: Warning Options. (line 840) 44089* Wlarger-than=LEN: Warning Options. (line 840) 44090* Wlogical-op: Warning Options. (line 1001) 44091* Wlong-long: Warning Options. (line 1263) 44092* Wmain: Warning Options. (line 322) 44093* Wmissing-braces: Warning Options. (line 329) 44094* Wmissing-declarations: Warning Options. (line 1052) 44095* Wmissing-field-initializers: Warning Options. (line 1060) 44096* Wmissing-format-attribute: Warning Options. (line 1086) 44097* Wmissing-include-dirs: Warning Options. (line 339) 44098* Wmissing-noreturn: Warning Options. (line 1078) 44099* Wmissing-parameter-type: Warning Options. (line 1038) 44100* Wmissing-prototypes: Warning Options. (line 1046) 44101* Wmultichar: Warning Options. (line 1105) 44102* Wnested-externs: Warning Options. (line 1221) 44103* Wno-abi: C++ Dialect Options. 44104 (line 306) 44105* Wno-address: Warning Options. (line 988) 44106* Wno-aggregate-return: Warning Options. (line 1006) 44107* Wno-all: Warning Options. (line 99) 44108* Wno-array-bounds: Warning Options. (line 700) 44109* Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 44110 (line 198) 44111* Wno-attributes: Warning Options. (line 1011) 44112* Wno-bad-function-cast: Warning Options. (line 878) 44113* Wno-builtin-macro-redefined: Warning Options. (line 1017) 44114* Wno-cast-align: Warning Options. (line 909) 44115* Wno-cast-qual: Warning Options. (line 893) 44116* Wno-char-subscripts: Warning Options. (line 185) 44117* Wno-clobbered: Warning Options. (line 929) 44118* Wno-comment: Warning Options. (line 190) 44119* Wno-conversion: Warning Options. (line 933) 44120* Wno-conversion-null: Warning Options. (line 951) 44121* Wno-ctor-dtor-privacy: C++ Dialect Options. 44122 (line 416) 44123* Wno-declaration-after-statement: Warning Options. (line 821) 44124* Wno-deprecated: Warning Options. (line 1154) 44125* Wno-deprecated-declarations: Warning Options. (line 1158) 44126* Wno-disabled-optimization: Warning Options. (line 1284) 44127* Wno-div-by-zero: Warning Options. (line 705) 44128* Wno-effc++: C++ Dialect Options. 44129 (line 443) 44130* Wno-empty-body: Warning Options. (line 955) 44131* Wno-endif-labels: Warning Options. (line 831) 44132* Wno-enum-compare: Warning Options. (line 959) 44133* Wno-error: Warning Options. (line 21) 44134* Wno-error=: Warning Options. (line 24) 44135* Wno-extra: Warning Options. (line 147) 44136* Wno-fatal-errors: Warning Options. (line 38) 44137* Wno-float-equal: Warning Options. (line 721) 44138* Wno-format: Warning Options. (line 195) 44139* Wno-format-contains-nul: Warning Options. (line 234) 44140* Wno-format-extra-args: Warning Options. (line 238) 44141* Wno-format-nonliteral: Warning Options. (line 256) 44142* Wno-format-security: Warning Options. (line 261) 44143* Wno-format-y2k: Warning Options. (line 230) 44144* Wno-format-zero-length: Warning Options. (line 252) 44145* Wno-format=2: Warning Options. (line 272) 44146* Wno-ignored-qualifiers: Warning Options. (line 311) 44147* Wno-implicit: Warning Options. (line 307) 44148* Wno-implicit-function-declaration: Warning Options. (line 301) 44149* Wno-implicit-int: Warning Options. (line 297) 44150* Wno-init-self: Warning Options. (line 284) 44151* Wno-inline: Warning Options. (line 1224) 44152* Wno-int-to-pointer-cast: Warning Options. (line 1251) 44153* Wno-invalid-offsetof: Warning Options. (line 1237) 44154* Wno-invalid-pch: Warning Options. (line 1259) 44155* Wno-jump-misses-init: Warning Options. (line 964) 44156* Wno-logical-op: Warning Options. (line 1001) 44157* Wno-long-long: Warning Options. (line 1263) 44158* Wno-main: Warning Options. (line 322) 44159* Wno-missing-braces: Warning Options. (line 329) 44160* Wno-missing-declarations: Warning Options. (line 1052) 44161* Wno-missing-field-initializers: Warning Options. (line 1060) 44162* Wno-missing-format-attribute: Warning Options. (line 1086) 44163* Wno-missing-include-dirs: Warning Options. (line 339) 44164* Wno-missing-noreturn: Warning Options. (line 1078) 44165* Wno-missing-parameter-type: Warning Options. (line 1038) 44166* Wno-missing-prototypes: Warning Options. (line 1046) 44167* Wno-mudflap: Warning Options. (line 1304) 44168* Wno-multichar: Warning Options. (line 1105) 44169* Wno-nested-externs: Warning Options. (line 1221) 44170* Wno-non-template-friend: C++ Dialect Options. 44171 (line 480) 44172* Wno-non-virtual-dtor: C++ Dialect Options. 44173 (line 421) 44174* Wno-nonnull: Warning Options. (line 277) 44175* Wno-old-style-cast: C++ Dialect Options. 44176 (line 496) 44177* Wno-old-style-declaration: Warning Options. (line 1028) 44178* Wno-old-style-definition: Warning Options. (line 1034) 44179* Wno-overflow: Warning Options. (line 1164) 44180* Wno-overlength-strings: Warning Options. (line 1308) 44181* Wno-overloaded-virtual: C++ Dialect Options. 44182 (line 502) 44183* Wno-override-init: Warning Options. (line 1167) 44184* Wno-packed: Warning Options. (line 1175) 44185* Wno-packed-bitfield-compat: Warning Options. (line 1192) 44186* Wno-padded: Warning Options. (line 1209) 44187* Wno-parentheses: Warning Options. (line 342) 44188* Wno-pedantic-ms-format: Warning Options. (line 858) 44189* Wno-pmf-conversions <1>: Bound member functions. 44190 (line 35) 44191* Wno-pmf-conversions: C++ Dialect Options. 44192 (line 521) 44193* Wno-pointer-arith: Warning Options. (line 864) 44194* Wno-pointer-sign: Warning Options. (line 1293) 44195* Wno-pointer-to-int-cast: Warning Options. (line 1255) 44196* Wno-pragmas: Warning Options. (line 603) 44197* Wno-protocol: Objective-C and Objective-C++ Dialect Options. 44198 (line 202) 44199* Wno-redundant-decls: Warning Options. (line 1216) 44200* Wno-reorder: C++ Dialect Options. 44201 (line 427) 44202* Wno-return-type: Warning Options. (line 432) 44203* Wno-selector: Objective-C and Objective-C++ Dialect Options. 44204 (line 212) 44205* Wno-sequence-point: Warning Options. (line 386) 44206* Wno-shadow: Warning Options. (line 835) 44207* Wno-sign-compare: Warning Options. (line 975) 44208* Wno-sign-conversion: Warning Options. (line 982) 44209* Wno-sign-promo: C++ Dialect Options. 44210 (line 525) 44211* Wno-stack-protector: Warning Options. (line 1299) 44212* Wno-strict-aliasing: Warning Options. (line 608) 44213* Wno-strict-aliasing=n: Warning Options. (line 616) 44214* Wno-strict-null-sentinel: C++ Dialect Options. 44215 (line 473) 44216* Wno-strict-overflow: Warning Options. (line 649) 44217* Wno-strict-prototypes: Warning Options. (line 1022) 44218* Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 44219 (line 224) 44220* Wno-switch: Warning Options. (line 447) 44221* Wno-switch-default: Warning Options. (line 455) 44222* Wno-switch-enum: Warning Options. (line 458) 44223* Wno-sync-nand: Warning Options. (line 467) 44224* Wno-system-headers: Warning Options. (line 710) 44225* Wno-traditional: Warning Options. (line 736) 44226* Wno-traditional-conversion: Warning Options. (line 813) 44227* Wno-trigraphs: Warning Options. (line 472) 44228* Wno-type-limits: Warning Options. (line 871) 44229* Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 44230 (line 232) 44231* Wno-undef: Warning Options. (line 828) 44232* Wno-uninitialized: Warning Options. (line 526) 44233* Wno-unknown-pragmas: Warning Options. (line 596) 44234* Wno-unsafe-loop-optimizations: Warning Options. (line 852) 44235* Wno-unused: Warning Options. (line 519) 44236* Wno-unused-function: Warning Options. (line 477) 44237* Wno-unused-label: Warning Options. (line 482) 44238* Wno-unused-parameter: Warning Options. (line 489) 44239* Wno-unused-result: Warning Options. (line 496) 44240* Wno-unused-value: Warning Options. (line 509) 44241* Wno-unused-variable: Warning Options. (line 501) 44242* Wno-variadic-macros: Warning Options. (line 1268) 44243* Wno-vla: Warning Options. (line 1274) 44244* Wno-volatile-register-var: Warning Options. (line 1278) 44245* Wno-write-strings: Warning Options. (line 915) 44246* Wnon-template-friend: C++ Dialect Options. 44247 (line 480) 44248* Wnon-virtual-dtor: C++ Dialect Options. 44249 (line 421) 44250* Wnonnull: Warning Options. (line 277) 44251* Wnormalized=: Warning Options. (line 1111) 44252* Wold-style-cast: C++ Dialect Options. 44253 (line 496) 44254* Wold-style-declaration: Warning Options. (line 1028) 44255* Wold-style-definition: Warning Options. (line 1034) 44256* Woverflow: Warning Options. (line 1164) 44257* Woverlength-strings: Warning Options. (line 1308) 44258* Woverloaded-virtual: C++ Dialect Options. 44259 (line 502) 44260* Woverride-init: Warning Options. (line 1167) 44261* Wp: Preprocessor Options. 44262 (line 14) 44263* Wpacked: Warning Options. (line 1175) 44264* Wpacked-bitfield-compat: Warning Options. (line 1192) 44265* Wpadded: Warning Options. (line 1209) 44266* Wparentheses: Warning Options. (line 342) 44267* Wpedantic-ms-format: Warning Options. (line 858) 44268* Wpmf-conversions: C++ Dialect Options. 44269 (line 521) 44270* Wpointer-arith <1>: Pointer Arith. (line 13) 44271* Wpointer-arith: Warning Options. (line 864) 44272* Wpointer-sign: Warning Options. (line 1293) 44273* Wpointer-to-int-cast: Warning Options. (line 1255) 44274* Wpragmas: Warning Options. (line 603) 44275* Wprotocol: Objective-C and Objective-C++ Dialect Options. 44276 (line 202) 44277* wrapper: Overall Options. (line 355) 44278* Wredundant-decls: Warning Options. (line 1216) 44279* Wreorder: C++ Dialect Options. 44280 (line 427) 44281* Wreturn-type: Warning Options. (line 432) 44282* Wselector: Objective-C and Objective-C++ Dialect Options. 44283 (line 212) 44284* Wsequence-point: Warning Options. (line 386) 44285* Wshadow: Warning Options. (line 835) 44286* Wsign-compare: Warning Options. (line 975) 44287* Wsign-conversion: Warning Options. (line 982) 44288* Wsign-promo: C++ Dialect Options. 44289 (line 525) 44290* Wstack-protector: Warning Options. (line 1299) 44291* Wstrict-aliasing: Warning Options. (line 608) 44292* Wstrict-aliasing=n: Warning Options. (line 616) 44293* Wstrict-null-sentinel: C++ Dialect Options. 44294 (line 473) 44295* Wstrict-overflow: Warning Options. (line 649) 44296* Wstrict-prototypes: Warning Options. (line 1022) 44297* Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 44298 (line 224) 44299* Wswitch: Warning Options. (line 447) 44300* Wswitch-default: Warning Options. (line 455) 44301* Wswitch-enum: Warning Options. (line 458) 44302* Wsync-nand: Warning Options. (line 467) 44303* Wsystem-headers <1>: Preprocessor Options. 44304 (line 153) 44305* Wsystem-headers: Warning Options. (line 710) 44306* Wtraditional <1>: Preprocessor Options. 44307 (line 106) 44308* Wtraditional: Warning Options. (line 736) 44309* Wtraditional-conversion: Warning Options. (line 813) 44310* Wtrigraphs <1>: Preprocessor Options. 44311 (line 94) 44312* Wtrigraphs: Warning Options. (line 472) 44313* Wtype-limits: Warning Options. (line 871) 44314* Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 44315 (line 232) 44316* Wundef <1>: Preprocessor Options. 44317 (line 112) 44318* Wundef: Warning Options. (line 828) 44319* Wuninitialized: Warning Options. (line 526) 44320* Wunknown-pragmas: Warning Options. (line 596) 44321* Wunsafe-loop-optimizations: Warning Options. (line 852) 44322* Wunsuffixed-float-constants: Warning Options. (line 1323) 44323* Wunused: Warning Options. (line 519) 44324* Wunused-function: Warning Options. (line 477) 44325* Wunused-label: Warning Options. (line 482) 44326* Wunused-macros: Preprocessor Options. 44327 (line 117) 44328* Wunused-parameter: Warning Options. (line 489) 44329* Wunused-result: Warning Options. (line 496) 44330* Wunused-value: Warning Options. (line 509) 44331* Wunused-variable: Warning Options. (line 501) 44332* Wvariadic-macros: Warning Options. (line 1268) 44333* Wvla: Warning Options. (line 1274) 44334* Wvolatile-register-var: Warning Options. (line 1278) 44335* Wwrite-strings: Warning Options. (line 915) 44336* x <1>: Preprocessor Options. 44337 (line 310) 44338* x: Overall Options. (line 122) 44339* Xassembler: Assembler Options. (line 13) 44340* Xbind-lazy: VxWorks Options. (line 26) 44341* Xbind-now: VxWorks Options. (line 30) 44342* Xlinker: Link Options. (line 184) 44343* Xpreprocessor: Preprocessor Options. 44344 (line 25) 44345* Ym: System V Options. (line 26) 44346* YP: System V Options. (line 22) 44347 44348 44349File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 44350 44351Keyword Index 44352************* 44353 44354[index] 44355* Menu: 44356 44357* ! in constraint: Multi-Alternative. (line 33) 44358* # in constraint: Modifiers. (line 57) 44359* #pragma: Pragmas. (line 6) 44360* #pragma implementation: C++ Interface. (line 39) 44361* #pragma implementation, implied: C++ Interface. (line 46) 44362* #pragma interface: C++ Interface. (line 20) 44363* #pragma, reason for not using: Function Attributes. 44364 (line 1455) 44365* $: Dollar Signs. (line 6) 44366* % in constraint: Modifiers. (line 45) 44367* %include: Spec Files. (line 27) 44368* %include_noerr: Spec Files. (line 31) 44369* %rename: Spec Files. (line 35) 44370* & in constraint: Modifiers. (line 25) 44371* ': Incompatibilities. (line 116) 44372* (: Constructing Calls. (line 53) 44373* * in constraint: Modifiers. (line 62) 44374* + in constraint: Modifiers. (line 12) 44375* -lgcc, use with -nodefaultlibs: Link Options. (line 82) 44376* -lgcc, use with -nostdlib: Link Options. (line 82) 44377* -nodefaultlibs and unresolved references: Link Options. (line 82) 44378* -nostdlib and unresolved references: Link Options. (line 82) 44379* .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 44380 (line 682) 44381* //: C++ Comments. (line 6) 44382* 0 in constraint: Simple Constraints. (line 117) 44383* < in constraint: Simple Constraints. (line 48) 44384* = in constraint: Modifiers. (line 8) 44385* > in constraint: Simple Constraints. (line 52) 44386* ? in constraint: Multi-Alternative. (line 27) 44387* ?: extensions: Conditionals. (line 6) 44388* ?: side effect: Conditionals. (line 20) 44389* _ in variables in macros: Typeof. (line 46) 44390* __builtin___clear_cache: Other Builtins. (line 327) 44391* __builtin___fprintf_chk: Object Size Checking. 44392 (line 6) 44393* __builtin___memcpy_chk: Object Size Checking. 44394 (line 6) 44395* __builtin___memmove_chk: Object Size Checking. 44396 (line 6) 44397* __builtin___mempcpy_chk: Object Size Checking. 44398 (line 6) 44399* __builtin___memset_chk: Object Size Checking. 44400 (line 6) 44401* __builtin___printf_chk: Object Size Checking. 44402 (line 6) 44403* __builtin___snprintf_chk: Object Size Checking. 44404 (line 6) 44405* __builtin___sprintf_chk: Object Size Checking. 44406 (line 6) 44407* __builtin___stpcpy_chk: Object Size Checking. 44408 (line 6) 44409* __builtin___strcat_chk: Object Size Checking. 44410 (line 6) 44411* __builtin___strcpy_chk: Object Size Checking. 44412 (line 6) 44413* __builtin___strncat_chk: Object Size Checking. 44414 (line 6) 44415* __builtin___strncpy_chk: Object Size Checking. 44416 (line 6) 44417* __builtin___vfprintf_chk: Object Size Checking. 44418 (line 6) 44419* __builtin___vprintf_chk: Object Size Checking. 44420 (line 6) 44421* __builtin___vsnprintf_chk: Object Size Checking. 44422 (line 6) 44423* __builtin___vsprintf_chk: Object Size Checking. 44424 (line 6) 44425* __builtin_apply: Constructing Calls. (line 31) 44426* __builtin_apply_args: Constructing Calls. (line 20) 44427* __builtin_bswap32: Other Builtins. (line 546) 44428* __builtin_bswap64: Other Builtins. (line 551) 44429* __builtin_choose_expr: Other Builtins. (line 156) 44430* __builtin_clz: Other Builtins. (line 479) 44431* __builtin_clzl: Other Builtins. (line 497) 44432* __builtin_clzll: Other Builtins. (line 517) 44433* __builtin_constant_p: Other Builtins. (line 195) 44434* __builtin_ctz: Other Builtins. (line 483) 44435* __builtin_ctzl: Other Builtins. (line 501) 44436* __builtin_ctzll: Other Builtins. (line 521) 44437* __builtin_expect: Other Builtins. (line 245) 44438* __builtin_extract_return_address: Return Address. (line 37) 44439* __builtin_ffs: Other Builtins. (line 475) 44440* __builtin_ffsl: Other Builtins. (line 493) 44441* __builtin_ffsll: Other Builtins. (line 513) 44442* __builtin_fpclassify: Other Builtins. (line 6) 44443* __builtin_frame_address: Return Address. (line 51) 44444* __builtin_frob_return_address: Return Address. (line 46) 44445* __builtin_huge_val: Other Builtins. (line 378) 44446* __builtin_huge_valf: Other Builtins. (line 383) 44447* __builtin_huge_vall: Other Builtins. (line 386) 44448* __builtin_huge_valq: X86 Built-in Functions. 44449 (line 51) 44450* __builtin_inf: Other Builtins. (line 401) 44451* __builtin_infd128: Other Builtins. (line 411) 44452* __builtin_infd32: Other Builtins. (line 405) 44453* __builtin_infd64: Other Builtins. (line 408) 44454* __builtin_inff: Other Builtins. (line 415) 44455* __builtin_infl: Other Builtins. (line 420) 44456* __builtin_infq: X86 Built-in Functions. 44457 (line 47) 44458* __builtin_isfinite: Other Builtins. (line 6) 44459* __builtin_isgreater: Other Builtins. (line 6) 44460* __builtin_isgreaterequal: Other Builtins. (line 6) 44461* __builtin_isinf_sign: Other Builtins. (line 6) 44462* __builtin_isless: Other Builtins. (line 6) 44463* __builtin_islessequal: Other Builtins. (line 6) 44464* __builtin_islessgreater: Other Builtins. (line 6) 44465* __builtin_isnormal: Other Builtins. (line 6) 44466* __builtin_isunordered: Other Builtins. (line 6) 44467* __builtin_nan: Other Builtins. (line 431) 44468* __builtin_nand128: Other Builtins. (line 453) 44469* __builtin_nand32: Other Builtins. (line 447) 44470* __builtin_nand64: Other Builtins. (line 450) 44471* __builtin_nanf: Other Builtins. (line 457) 44472* __builtin_nanl: Other Builtins. (line 460) 44473* __builtin_nans: Other Builtins. (line 464) 44474* __builtin_nansf: Other Builtins. (line 468) 44475* __builtin_nansl: Other Builtins. (line 471) 44476* __builtin_object_size: Object Size Checking. 44477 (line 6) 44478* __builtin_offsetof: Offsetof. (line 6) 44479* __builtin_parity: Other Builtins. (line 490) 44480* __builtin_parityl: Other Builtins. (line 509) 44481* __builtin_parityll: Other Builtins. (line 529) 44482* __builtin_popcount: Other Builtins. (line 487) 44483* __builtin_popcountl: Other Builtins. (line 505) 44484* __builtin_popcountll: Other Builtins. (line 525) 44485* __builtin_powi: Other Builtins. (line 6) 44486* __builtin_powif: Other Builtins. (line 6) 44487* __builtin_powil: Other Builtins. (line 6) 44488* __builtin_prefetch: Other Builtins. (line 339) 44489* __builtin_return: Constructing Calls. (line 48) 44490* __builtin_return_address: Return Address. (line 11) 44491* __builtin_rx_brk: RX Built-in Functions. 44492 (line 11) 44493* __builtin_rx_clrpsw: RX Built-in Functions. 44494 (line 14) 44495* __builtin_rx_int: RX Built-in Functions. 44496 (line 18) 44497* __builtin_rx_machi: RX Built-in Functions. 44498 (line 22) 44499* __builtin_rx_maclo: RX Built-in Functions. 44500 (line 27) 44501* __builtin_rx_mulhi: RX Built-in Functions. 44502 (line 32) 44503* __builtin_rx_mullo: RX Built-in Functions. 44504 (line 37) 44505* __builtin_rx_mvfachi: RX Built-in Functions. 44506 (line 42) 44507* __builtin_rx_mvfacmi: RX Built-in Functions. 44508 (line 46) 44509* __builtin_rx_mvfc: RX Built-in Functions. 44510 (line 50) 44511* __builtin_rx_mvtachi: RX Built-in Functions. 44512 (line 54) 44513* __builtin_rx_mvtaclo: RX Built-in Functions. 44514 (line 58) 44515* __builtin_rx_mvtc: RX Built-in Functions. 44516 (line 62) 44517* __builtin_rx_mvtipl: RX Built-in Functions. 44518 (line 66) 44519* __builtin_rx_racw: RX Built-in Functions. 44520 (line 70) 44521* __builtin_rx_revw: RX Built-in Functions. 44522 (line 74) 44523* __builtin_rx_rmpa: RX Built-in Functions. 44524 (line 79) 44525* __builtin_rx_round: RX Built-in Functions. 44526 (line 83) 44527* __builtin_rx_sat: RX Built-in Functions. 44528 (line 88) 44529* __builtin_rx_setpsw: RX Built-in Functions. 44530 (line 92) 44531* __builtin_rx_wait: RX Built-in Functions. 44532 (line 96) 44533* __builtin_trap: Other Builtins. (line 269) 44534* __builtin_types_compatible_p: Other Builtins. (line 110) 44535* __builtin_unreachable: Other Builtins. (line 276) 44536* __complex__ keyword: Complex. (line 6) 44537* __declspec(dllexport): Function Attributes. 44538 (line 259) 44539* __declspec(dllimport): Function Attributes. 44540 (line 289) 44541* __extension__: Alternate Keywords. (line 29) 44542* __float128 data type: Floating Types. (line 6) 44543* __float80 data type: Floating Types. (line 6) 44544* __fp16 data type: Half-Precision. (line 6) 44545* __func__ identifier: Function Names. (line 6) 44546* __FUNCTION__ identifier: Function Names. (line 6) 44547* __imag__ keyword: Complex. (line 27) 44548* __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 44549* __real__ keyword: Complex. (line 27) 44550* __STDC_HOSTED__: Standards. (line 13) 44551* __sync_add_and_fetch: Atomic Builtins. (line 61) 44552* __sync_and_and_fetch: Atomic Builtins. (line 61) 44553* __sync_bool_compare_and_swap: Atomic Builtins. (line 73) 44554* __sync_fetch_and_add: Atomic Builtins. (line 45) 44555* __sync_fetch_and_and: Atomic Builtins. (line 45) 44556* __sync_fetch_and_nand: Atomic Builtins. (line 45) 44557* __sync_fetch_and_or: Atomic Builtins. (line 45) 44558* __sync_fetch_and_sub: Atomic Builtins. (line 45) 44559* __sync_fetch_and_xor: Atomic Builtins. (line 45) 44560* __sync_lock_release: Atomic Builtins. (line 103) 44561* __sync_lock_test_and_set: Atomic Builtins. (line 85) 44562* __sync_nand_and_fetch: Atomic Builtins. (line 61) 44563* __sync_or_and_fetch: Atomic Builtins. (line 61) 44564* __sync_sub_and_fetch: Atomic Builtins. (line 61) 44565* __sync_synchronize: Atomic Builtins. (line 82) 44566* __sync_val_compare_and_swap: Atomic Builtins. (line 73) 44567* __sync_xor_and_fetch: Atomic Builtins. (line 61) 44568* __thread: Thread-Local. (line 6) 44569* _Accum data type: Fixed-Point. (line 6) 44570* _Complex keyword: Complex. (line 6) 44571* _Decimal128 data type: Decimal Float. (line 6) 44572* _Decimal32 data type: Decimal Float. (line 6) 44573* _Decimal64 data type: Decimal Float. (line 6) 44574* _exit: Other Builtins. (line 6) 44575* _Exit: Other Builtins. (line 6) 44576* _Fract data type: Fixed-Point. (line 6) 44577* _Sat data type: Fixed-Point. (line 6) 44578* ABI: Compatibility. (line 6) 44579* abort: Other Builtins. (line 6) 44580* abs: Other Builtins. (line 6) 44581* accessing volatiles: Volatiles. (line 6) 44582* acos: Other Builtins. (line 6) 44583* acosf: Other Builtins. (line 6) 44584* acosh: Other Builtins. (line 6) 44585* acoshf: Other Builtins. (line 6) 44586* acoshl: Other Builtins. (line 6) 44587* acosl: Other Builtins. (line 6) 44588* Ada: G++ and GCC. (line 6) 44589* additional floating types: Floating Types. (line 6) 44590* address constraints: Simple Constraints. (line 144) 44591* address of a label: Labels as Values. (line 6) 44592* address_operand: Simple Constraints. (line 148) 44593* alias attribute: Function Attributes. 44594 (line 36) 44595* aliasing of parameters: Code Gen Options. (line 411) 44596* aligned attribute <1>: Type Attributes. (line 31) 44597* aligned attribute <2>: Variable Attributes. 44598 (line 23) 44599* aligned attribute: Function Attributes. 44600 (line 49) 44601* alignment: Alignment. (line 6) 44602* alloc_size attribute: Function Attributes. 44603 (line 69) 44604* alloca: Other Builtins. (line 6) 44605* alloca vs variable-length arrays: Variable Length. (line 26) 44606* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 44607 (line 774) 44608* alternate keywords: Alternate Keywords. (line 6) 44609* always_inline function attribute: Function Attributes. 44610 (line 90) 44611* AMD x86-64 Options: i386 and x86-64 Options. 44612 (line 6) 44613* AMD1: Standards. (line 13) 44614* ANSI C: Standards. (line 13) 44615* ANSI C standard: Standards. (line 13) 44616* ANSI C89: Standards. (line 13) 44617* ANSI support: C Dialect Options. (line 10) 44618* ANSI X3.159-1989: Standards. (line 13) 44619* apostrophes: Incompatibilities. (line 116) 44620* application binary interface: Compatibility. (line 6) 44621* ARC Options: ARC Options. (line 6) 44622* ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 44623 (line 6) 44624* ARM options: ARM Options. (line 6) 44625* arrays of length zero: Zero Length. (line 6) 44626* arrays of variable length: Variable Length. (line 6) 44627* arrays, non-lvalue: Subscripting. (line 6) 44628* artificial function attribute: Function Attributes. 44629 (line 133) 44630* asin: Other Builtins. (line 6) 44631* asinf: Other Builtins. (line 6) 44632* asinh: Other Builtins. (line 6) 44633* asinhf: Other Builtins. (line 6) 44634* asinhl: Other Builtins. (line 6) 44635* asinl: Other Builtins. (line 6) 44636* asm constraints: Constraints. (line 6) 44637* asm expressions: Extended Asm. (line 6) 44638* assembler instructions: Extended Asm. (line 6) 44639* assembler names for identifiers: Asm Labels. (line 6) 44640* assembly code, invalid: Bug Criteria. (line 12) 44641* atan: Other Builtins. (line 6) 44642* atan2: Other Builtins. (line 6) 44643* atan2f: Other Builtins. (line 6) 44644* atan2l: Other Builtins. (line 6) 44645* atanf: Other Builtins. (line 6) 44646* atanh: Other Builtins. (line 6) 44647* atanhf: Other Builtins. (line 6) 44648* atanhl: Other Builtins. (line 6) 44649* atanl: Other Builtins. (line 6) 44650* attribute of types: Type Attributes. (line 6) 44651* attribute of variables: Variable Attributes. 44652 (line 6) 44653* attribute syntax: Attribute Syntax. (line 6) 44654* autoincrement/decrement addressing: Simple Constraints. (line 30) 44655* automatic inline for C++ member fns: Inline. (line 71) 44656* AVR Options: AVR Options. (line 6) 44657* Backwards Compatibility: Backwards Compatibility. 44658 (line 6) 44659* base class members: Name lookup. (line 6) 44660* bcmp: Other Builtins. (line 6) 44661* below100 attribute: Variable Attributes. 44662 (line 550) 44663* binary compatibility: Compatibility. (line 6) 44664* Binary constants using the 0b prefix: Binary constants. (line 6) 44665* Blackfin Options: Blackfin Options. (line 6) 44666* bound pointer to member function: Bound member functions. 44667 (line 6) 44668* bounds checking: Optimize Options. (line 360) 44669* bug criteria: Bug Criteria. (line 6) 44670* bugs: Bugs. (line 6) 44671* bugs, known: Trouble. (line 6) 44672* built-in functions <1>: Other Builtins. (line 6) 44673* built-in functions: C Dialect Options. (line 173) 44674* bzero: Other Builtins. (line 6) 44675* C compilation options: Invoking GCC. (line 17) 44676* C intermediate output, nonexistent: G++ and GCC. (line 35) 44677* C language extensions: C Extensions. (line 6) 44678* C language, traditional: C Dialect Options. (line 253) 44679* C standard: Standards. (line 13) 44680* C standards: Standards. (line 13) 44681* c++: Invoking G++. (line 14) 44682* C++: G++ and GCC. (line 30) 44683* C++ comments: C++ Comments. (line 6) 44684* C++ compilation options: Invoking GCC. (line 23) 44685* C++ interface and implementation headers: C++ Interface. (line 6) 44686* C++ language extensions: C++ Extensions. (line 6) 44687* C++ member fns, automatically inline: Inline. (line 71) 44688* C++ misunderstandings: C++ Misunderstandings. 44689 (line 6) 44690* C++ options, command line: C++ Dialect Options. 44691 (line 6) 44692* C++ pragmas, effect on inlining: C++ Interface. (line 66) 44693* C++ source file suffixes: Invoking G++. (line 6) 44694* C++ static data, declaring and defining: Static Definitions. 44695 (line 6) 44696* C89: Standards. (line 13) 44697* C90: Standards. (line 13) 44698* C94: Standards. (line 13) 44699* C95: Standards. (line 13) 44700* C99: Standards. (line 13) 44701* C9X: Standards. (line 13) 44702* C_INCLUDE_PATH: Environment Variables. 44703 (line 127) 44704* cabs: Other Builtins. (line 6) 44705* cabsf: Other Builtins. (line 6) 44706* cabsl: Other Builtins. (line 6) 44707* cacos: Other Builtins. (line 6) 44708* cacosf: Other Builtins. (line 6) 44709* cacosh: Other Builtins. (line 6) 44710* cacoshf: Other Builtins. (line 6) 44711* cacoshl: Other Builtins. (line 6) 44712* cacosl: Other Builtins. (line 6) 44713* calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 44714 (line 496) 44715* calloc: Other Builtins. (line 6) 44716* carg: Other Builtins. (line 6) 44717* cargf: Other Builtins. (line 6) 44718* cargl: Other Builtins. (line 6) 44719* case labels in initializers: Designated Inits. (line 6) 44720* case ranges: Case Ranges. (line 6) 44721* casin: Other Builtins. (line 6) 44722* casinf: Other Builtins. (line 6) 44723* casinh: Other Builtins. (line 6) 44724* casinhf: Other Builtins. (line 6) 44725* casinhl: Other Builtins. (line 6) 44726* casinl: Other Builtins. (line 6) 44727* cast to a union: Cast to Union. (line 6) 44728* catan: Other Builtins. (line 6) 44729* catanf: Other Builtins. (line 6) 44730* catanh: Other Builtins. (line 6) 44731* catanhf: Other Builtins. (line 6) 44732* catanhl: Other Builtins. (line 6) 44733* catanl: Other Builtins. (line 6) 44734* cbrt: Other Builtins. (line 6) 44735* cbrtf: Other Builtins. (line 6) 44736* cbrtl: Other Builtins. (line 6) 44737* ccos: Other Builtins. (line 6) 44738* ccosf: Other Builtins. (line 6) 44739* ccosh: Other Builtins. (line 6) 44740* ccoshf: Other Builtins. (line 6) 44741* ccoshl: Other Builtins. (line 6) 44742* ccosl: Other Builtins. (line 6) 44743* ceil: Other Builtins. (line 6) 44744* ceilf: Other Builtins. (line 6) 44745* ceill: Other Builtins. (line 6) 44746* cexp: Other Builtins. (line 6) 44747* cexpf: Other Builtins. (line 6) 44748* cexpl: Other Builtins. (line 6) 44749* character set, execution: Preprocessor Options. 44750 (line 498) 44751* character set, input: Preprocessor Options. 44752 (line 511) 44753* character set, input normalization: Warning Options. (line 1111) 44754* character set, wide execution: Preprocessor Options. 44755 (line 503) 44756* cimag: Other Builtins. (line 6) 44757* cimagf: Other Builtins. (line 6) 44758* cimagl: Other Builtins. (line 6) 44759* cleanup attribute: Variable Attributes. 44760 (line 89) 44761* clog: Other Builtins. (line 6) 44762* clogf: Other Builtins. (line 6) 44763* clogl: Other Builtins. (line 6) 44764* COBOL: G++ and GCC. (line 23) 44765* code generation conventions: Code Gen Options. (line 6) 44766* code, mixed with declarations: Mixed Declarations. (line 6) 44767* cold function attribute: Function Attributes. 44768 (line 949) 44769* command options: Invoking GCC. (line 6) 44770* comments, C++ style: C++ Comments. (line 6) 44771* common attribute: Variable Attributes. 44772 (line 105) 44773* comparison of signed and unsigned values, warning: Warning Options. 44774 (line 975) 44775* compiler bugs, reporting: Bug Reporting. (line 6) 44776* compiler compared to C++ preprocessor: G++ and GCC. (line 35) 44777* compiler options, C++: C++ Dialect Options. 44778 (line 6) 44779* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 44780 (line 6) 44781* compiler version, specifying: Target Options. (line 6) 44782* COMPILER_PATH: Environment Variables. 44783 (line 88) 44784* complex conjugation: Complex. (line 34) 44785* complex numbers: Complex. (line 6) 44786* compound literals: Compound Literals. (line 6) 44787* computed gotos: Labels as Values. (line 6) 44788* conditional expressions, extensions: Conditionals. (line 6) 44789* conflicting types: Disappointments. (line 21) 44790* conj: Other Builtins. (line 6) 44791* conjf: Other Builtins. (line 6) 44792* conjl: Other Builtins. (line 6) 44793* const applied to function: Function Attributes. 44794 (line 6) 44795* const function attribute: Function Attributes. 44796 (line 183) 44797* constants in constraints: Simple Constraints. (line 60) 44798* constraint modifier characters: Modifiers. (line 6) 44799* constraint, matching: Simple Constraints. (line 129) 44800* constraints, asm: Constraints. (line 6) 44801* constraints, machine specific: Machine Constraints. 44802 (line 6) 44803* constructing calls: Constructing Calls. (line 6) 44804* constructor expressions: Compound Literals. (line 6) 44805* constructor function attribute: Function Attributes. 44806 (line 211) 44807* contributors: Contributors. (line 6) 44808* copysign: Other Builtins. (line 6) 44809* copysignf: Other Builtins. (line 6) 44810* copysignl: Other Builtins. (line 6) 44811* core dump: Bug Criteria. (line 9) 44812* cos: Other Builtins. (line 6) 44813* cosf: Other Builtins. (line 6) 44814* cosh: Other Builtins. (line 6) 44815* coshf: Other Builtins. (line 6) 44816* coshl: Other Builtins. (line 6) 44817* cosl: Other Builtins. (line 6) 44818* CPATH: Environment Variables. 44819 (line 126) 44820* CPLUS_INCLUDE_PATH: Environment Variables. 44821 (line 128) 44822* cpow: Other Builtins. (line 6) 44823* cpowf: Other Builtins. (line 6) 44824* cpowl: Other Builtins. (line 6) 44825* cproj: Other Builtins. (line 6) 44826* cprojf: Other Builtins. (line 6) 44827* cprojl: Other Builtins. (line 6) 44828* creal: Other Builtins. (line 6) 44829* crealf: Other Builtins. (line 6) 44830* creall: Other Builtins. (line 6) 44831* CRIS Options: CRIS Options. (line 6) 44832* cross compiling: Target Options. (line 6) 44833* CRX Options: CRX Options. (line 6) 44834* csin: Other Builtins. (line 6) 44835* csinf: Other Builtins. (line 6) 44836* csinh: Other Builtins. (line 6) 44837* csinhf: Other Builtins. (line 6) 44838* csinhl: Other Builtins. (line 6) 44839* csinl: Other Builtins. (line 6) 44840* csqrt: Other Builtins. (line 6) 44841* csqrtf: Other Builtins. (line 6) 44842* csqrtl: Other Builtins. (line 6) 44843* ctan: Other Builtins. (line 6) 44844* ctanf: Other Builtins. (line 6) 44845* ctanh: Other Builtins. (line 6) 44846* ctanhf: Other Builtins. (line 6) 44847* ctanhl: Other Builtins. (line 6) 44848* ctanl: Other Builtins. (line 6) 44849* Darwin options: Darwin Options. (line 6) 44850* dcgettext: Other Builtins. (line 6) 44851* DD integer suffix: Decimal Float. (line 6) 44852* dd integer suffix: Decimal Float. (line 6) 44853* deallocating variable length arrays: Variable Length. (line 22) 44854* debugging information options: Debugging Options. (line 6) 44855* decimal floating types: Decimal Float. (line 6) 44856* declaration scope: Incompatibilities. (line 80) 44857* declarations inside expressions: Statement Exprs. (line 6) 44858* declarations, mixed with code: Mixed Declarations. (line 6) 44859* declaring attributes of functions: Function Attributes. 44860 (line 6) 44861* declaring static data in C++: Static Definitions. (line 6) 44862* defining static data in C++: Static Definitions. (line 6) 44863* dependencies for make as output: Environment Variables. 44864 (line 154) 44865* dependencies, make: Preprocessor Options. 44866 (line 173) 44867* DEPENDENCIES_OUTPUT: Environment Variables. 44868 (line 153) 44869* dependent name lookup: Name lookup. (line 6) 44870* deprecated attribute: Variable Attributes. 44871 (line 114) 44872* deprecated attribute.: Function Attributes. 44873 (line 234) 44874* designated initializers: Designated Inits. (line 6) 44875* designator lists: Designated Inits. (line 94) 44876* designators: Designated Inits. (line 61) 44877* destructor function attribute: Function Attributes. 44878 (line 211) 44879* DF integer suffix: Decimal Float. (line 6) 44880* df integer suffix: Decimal Float. (line 6) 44881* dgettext: Other Builtins. (line 6) 44882* diagnostic messages: Language Independent Options. 44883 (line 6) 44884* dialect options: C Dialect Options. (line 6) 44885* digits in constraint: Simple Constraints. (line 117) 44886* directory options: Directory Options. (line 6) 44887* disinterrupt attribute: Function Attributes. 44888 (line 254) 44889* DL integer suffix: Decimal Float. (line 6) 44890* dl integer suffix: Decimal Float. (line 6) 44891* dollar signs in identifier names: Dollar Signs. (line 6) 44892* double-word arithmetic: Long Long. (line 6) 44893* downward funargs: Nested Functions. (line 6) 44894* drem: Other Builtins. (line 6) 44895* dremf: Other Builtins. (line 6) 44896* dreml: Other Builtins. (line 6) 44897* E in constraint: Simple Constraints. (line 79) 44898* earlyclobber operand: Modifiers. (line 25) 44899* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 44900 (line 342) 44901* empty structures: Empty Structures. (line 6) 44902* environment variables: Environment Variables. 44903 (line 6) 44904* erf: Other Builtins. (line 6) 44905* erfc: Other Builtins. (line 6) 44906* erfcf: Other Builtins. (line 6) 44907* erfcl: Other Builtins. (line 6) 44908* erff: Other Builtins. (line 6) 44909* erfl: Other Builtins. (line 6) 44910* error function attribute: Function Attributes. 44911 (line 152) 44912* error messages: Warnings and Errors. 44913 (line 6) 44914* escaped newlines: Escaped Newlines. (line 6) 44915* exception handler functions on the Blackfin processor: Function Attributes. 44916 (line 352) 44917* exclamation point: Multi-Alternative. (line 33) 44918* exit: Other Builtins. (line 6) 44919* exp: Other Builtins. (line 6) 44920* exp10: Other Builtins. (line 6) 44921* exp10f: Other Builtins. (line 6) 44922* exp10l: Other Builtins. (line 6) 44923* exp2: Other Builtins. (line 6) 44924* exp2f: Other Builtins. (line 6) 44925* exp2l: Other Builtins. (line 6) 44926* expf: Other Builtins. (line 6) 44927* expl: Other Builtins. (line 6) 44928* explicit register variables: Explicit Reg Vars. (line 6) 44929* expm1: Other Builtins. (line 6) 44930* expm1f: Other Builtins. (line 6) 44931* expm1l: Other Builtins. (line 6) 44932* expressions containing statements: Statement Exprs. (line 6) 44933* expressions, constructor: Compound Literals. (line 6) 44934* extended asm: Extended Asm. (line 6) 44935* extensible constraints: Simple Constraints. (line 153) 44936* extensions, ?:: Conditionals. (line 6) 44937* extensions, C language: C Extensions. (line 6) 44938* extensions, C++ language: C++ Extensions. (line 6) 44939* external declaration scope: Incompatibilities. (line 80) 44940* externally_visible attribute.: Function Attributes. 44941 (line 358) 44942* F in constraint: Simple Constraints. (line 84) 44943* fabs: Other Builtins. (line 6) 44944* fabsf: Other Builtins. (line 6) 44945* fabsl: Other Builtins. (line 6) 44946* fatal signal: Bug Criteria. (line 9) 44947* fdim: Other Builtins. (line 6) 44948* fdimf: Other Builtins. (line 6) 44949* fdiml: Other Builtins. (line 6) 44950* FDL, GNU Free Documentation License: GNU Free Documentation License. 44951 (line 6) 44952* ffs: Other Builtins. (line 6) 44953* file name suffix: Overall Options. (line 14) 44954* file names: Link Options. (line 10) 44955* fixed-point types: Fixed-Point. (line 6) 44956* flatten function attribute: Function Attributes. 44957 (line 145) 44958* flexible array members: Zero Length. (line 6) 44959* float as function value type: Incompatibilities. (line 141) 44960* floating point precision <1>: Disappointments. (line 68) 44961* floating point precision: Optimize Options. (line 1677) 44962* floor: Other Builtins. (line 6) 44963* floorf: Other Builtins. (line 6) 44964* floorl: Other Builtins. (line 6) 44965* fma: Other Builtins. (line 6) 44966* fmaf: Other Builtins. (line 6) 44967* fmal: Other Builtins. (line 6) 44968* fmax: Other Builtins. (line 6) 44969* fmaxf: Other Builtins. (line 6) 44970* fmaxl: Other Builtins. (line 6) 44971* fmin: Other Builtins. (line 6) 44972* fminf: Other Builtins. (line 6) 44973* fminl: Other Builtins. (line 6) 44974* fmod: Other Builtins. (line 6) 44975* fmodf: Other Builtins. (line 6) 44976* fmodl: Other Builtins. (line 6) 44977* force_align_arg_pointer attribute: Function Attributes. 44978 (line 991) 44979* format function attribute: Function Attributes. 44980 (line 398) 44981* format_arg function attribute: Function Attributes. 44982 (line 457) 44983* Fortran: G++ and GCC. (line 6) 44984* forwarding calls: Constructing Calls. (line 6) 44985* fprintf: Other Builtins. (line 6) 44986* fprintf_unlocked: Other Builtins. (line 6) 44987* fputs: Other Builtins. (line 6) 44988* fputs_unlocked: Other Builtins. (line 6) 44989* FR30 Options: FR30 Options. (line 6) 44990* freestanding environment: Standards. (line 13) 44991* freestanding implementation: Standards. (line 13) 44992* frexp: Other Builtins. (line 6) 44993* frexpf: Other Builtins. (line 6) 44994* frexpl: Other Builtins. (line 6) 44995* FRV Options: FRV Options. (line 6) 44996* fscanf: Other Builtins. (line 6) 44997* fscanf, and constant strings: Incompatibilities. (line 17) 44998* function addressability on the M32R/D: Function Attributes. 44999 (line 704) 45000* function attributes: Function Attributes. 45001 (line 6) 45002* function pointers, arithmetic: Pointer Arith. (line 6) 45003* function prototype declarations: Function Prototypes. 45004 (line 6) 45005* function without a prologue/epilogue code: Function Attributes. 45006 (line 751) 45007* function, size of pointer to: Pointer Arith. (line 6) 45008* functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 45009 (line 658) 45010* functions in arbitrary sections: Function Attributes. 45011 (line 6) 45012* functions that are passed arguments in registers on the 386: Function Attributes. 45013 (line 6) 45014* functions that behave like malloc: Function Attributes. 45015 (line 6) 45016* functions that do not pop the argument stack on the 386: Function Attributes. 45017 (line 6) 45018* functions that do pop the argument stack on the 386: Function Attributes. 45019 (line 177) 45020* functions that have different compilation options on the 386: Function Attributes. 45021 (line 6) 45022* functions that have different optimization options: Function Attributes. 45023 (line 6) 45024* functions that have no side effects: Function Attributes. 45025 (line 6) 45026* functions that never return: Function Attributes. 45027 (line 6) 45028* functions that pop the argument stack on the 386: Function Attributes. 45029 (line 6) 45030* functions that return more than once: Function Attributes. 45031 (line 6) 45032* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 45033 (line 764) 45034* functions which handle memory bank switching: Function Attributes. 45035 (line 363) 45036* functions with non-null pointer arguments: Function Attributes. 45037 (line 6) 45038* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 45039 (line 6) 45040* g in constraint: Simple Constraints. (line 110) 45041* G in constraint: Simple Constraints. (line 88) 45042* g++: Invoking G++. (line 14) 45043* G++: G++ and GCC. (line 30) 45044* gamma: Other Builtins. (line 6) 45045* gamma_r: Other Builtins. (line 6) 45046* gammaf: Other Builtins. (line 6) 45047* gammaf_r: Other Builtins. (line 6) 45048* gammal: Other Builtins. (line 6) 45049* gammal_r: Other Builtins. (line 6) 45050* GCC: G++ and GCC. (line 6) 45051* GCC command options: Invoking GCC. (line 6) 45052* GCC_EXEC_PREFIX: Environment Variables. 45053 (line 52) 45054* gcc_struct: Type Attributes. (line 319) 45055* gcc_struct attribute: Variable Attributes. 45056 (line 407) 45057* gcov: Debugging Options. (line 335) 45058* gettext: Other Builtins. (line 6) 45059* global offset table: Code Gen Options. (line 184) 45060* global register after longjmp: Global Reg Vars. (line 66) 45061* global register variables: Global Reg Vars. (line 6) 45062* GNAT: G++ and GCC. (line 30) 45063* GNU C Compiler: G++ and GCC. (line 6) 45064* GNU Compiler Collection: G++ and GCC. (line 6) 45065* gnu_inline function attribute: Function Attributes. 45066 (line 95) 45067* goto with computed label: Labels as Values. (line 6) 45068* gprof: Debugging Options. (line 296) 45069* grouping options: Invoking GCC. (line 26) 45070* H in constraint: Simple Constraints. (line 88) 45071* half-precision floating point: Half-Precision. (line 6) 45072* hardware models and configurations, specifying: Submodel Options. 45073 (line 6) 45074* hex floats: Hex Floats. (line 6) 45075* HK fixed-suffix: Fixed-Point. (line 6) 45076* hk fixed-suffix: Fixed-Point. (line 6) 45077* hosted environment <1>: C Dialect Options. (line 207) 45078* hosted environment: Standards. (line 13) 45079* hosted implementation: Standards. (line 13) 45080* hot function attribute: Function Attributes. 45081 (line 936) 45082* HPPA Options: HPPA Options. (line 6) 45083* HR fixed-suffix: Fixed-Point. (line 6) 45084* hr fixed-suffix: Fixed-Point. (line 6) 45085* hypot: Other Builtins. (line 6) 45086* hypotf: Other Builtins. (line 6) 45087* hypotl: Other Builtins. (line 6) 45088* I in constraint: Simple Constraints. (line 71) 45089* i in constraint: Simple Constraints. (line 60) 45090* i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 45091 (line 6) 45092* i386 Options: i386 and x86-64 Options. 45093 (line 6) 45094* IA-64 Options: IA-64 Options. (line 6) 45095* IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 45096 (line 6) 45097* identifier names, dollar signs in: Dollar Signs. (line 6) 45098* identifiers, names in assembler code: Asm Labels. (line 6) 45099* ilogb: Other Builtins. (line 6) 45100* ilogbf: Other Builtins. (line 6) 45101* ilogbl: Other Builtins. (line 6) 45102* imaxabs: Other Builtins. (line 6) 45103* implementation-defined behavior, C language: C Implementation. 45104 (line 6) 45105* implementation-defined behavior, C++ language: C++ Implementation. 45106 (line 6) 45107* implied #pragma implementation: C++ Interface. (line 46) 45108* incompatibilities of GCC: Incompatibilities. (line 6) 45109* increment operators: Bug Criteria. (line 17) 45110* index: Other Builtins. (line 6) 45111* indirect calls on ARM: Function Attributes. 45112 (line 648) 45113* indirect calls on MIPS: Function Attributes. 45114 (line 670) 45115* init_priority attribute: C++ Attributes. (line 9) 45116* initializations in expressions: Compound Literals. (line 6) 45117* initializers with labeled elements: Designated Inits. (line 6) 45118* initializers, non-constant: Initializers. (line 6) 45119* inline automatic for C++ member fns: Inline. (line 71) 45120* inline functions: Inline. (line 6) 45121* inline functions, omission of: Inline. (line 51) 45122* inlining and C++ pragmas: C++ Interface. (line 66) 45123* installation trouble: Trouble. (line 6) 45124* integrating function code: Inline. (line 6) 45125* Intel 386 Options: i386 and x86-64 Options. 45126 (line 6) 45127* interface and implementation headers, C++: C++ Interface. (line 6) 45128* intermediate C version, nonexistent: G++ and GCC. (line 35) 45129* interrupt handler functions: Function Attributes. 45130 (line 140) 45131* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 45132 (line 612) 45133* interrupt service routines on ARM: Function Attributes. 45134 (line 627) 45135* interrupt thread functions on fido: Function Attributes. 45136 (line 619) 45137* introduction: Top. (line 6) 45138* invalid assembly code: Bug Criteria. (line 12) 45139* invalid input: Bug Criteria. (line 42) 45140* invoking g++: Invoking G++. (line 22) 45141* isalnum: Other Builtins. (line 6) 45142* isalpha: Other Builtins. (line 6) 45143* isascii: Other Builtins. (line 6) 45144* isblank: Other Builtins. (line 6) 45145* iscntrl: Other Builtins. (line 6) 45146* isdigit: Other Builtins. (line 6) 45147* isgraph: Other Builtins. (line 6) 45148* islower: Other Builtins. (line 6) 45149* ISO 9899: Standards. (line 13) 45150* ISO C: Standards. (line 13) 45151* ISO C standard: Standards. (line 13) 45152* ISO C90: Standards. (line 13) 45153* ISO C94: Standards. (line 13) 45154* ISO C95: Standards. (line 13) 45155* ISO C99: Standards. (line 13) 45156* ISO C9X: Standards. (line 13) 45157* ISO support: C Dialect Options. (line 10) 45158* ISO/IEC 9899: Standards. (line 13) 45159* isprint: Other Builtins. (line 6) 45160* ispunct: Other Builtins. (line 6) 45161* isspace: Other Builtins. (line 6) 45162* isupper: Other Builtins. (line 6) 45163* iswalnum: Other Builtins. (line 6) 45164* iswalpha: Other Builtins. (line 6) 45165* iswblank: Other Builtins. (line 6) 45166* iswcntrl: Other Builtins. (line 6) 45167* iswdigit: Other Builtins. (line 6) 45168* iswgraph: Other Builtins. (line 6) 45169* iswlower: Other Builtins. (line 6) 45170* iswprint: Other Builtins. (line 6) 45171* iswpunct: Other Builtins. (line 6) 45172* iswspace: Other Builtins. (line 6) 45173* iswupper: Other Builtins. (line 6) 45174* iswxdigit: Other Builtins. (line 6) 45175* isxdigit: Other Builtins. (line 6) 45176* j0: Other Builtins. (line 6) 45177* j0f: Other Builtins. (line 6) 45178* j0l: Other Builtins. (line 6) 45179* j1: Other Builtins. (line 6) 45180* j1f: Other Builtins. (line 6) 45181* j1l: Other Builtins. (line 6) 45182* Java: G++ and GCC. (line 6) 45183* java_interface attribute: C++ Attributes. (line 29) 45184* jn: Other Builtins. (line 6) 45185* jnf: Other Builtins. (line 6) 45186* jnl: Other Builtins. (line 6) 45187* K fixed-suffix: Fixed-Point. (line 6) 45188* k fixed-suffix: Fixed-Point. (line 6) 45189* keep_interrupts_masked attribute: Function Attributes. 45190 (line 588) 45191* keywords, alternate: Alternate Keywords. (line 6) 45192* known causes of trouble: Trouble. (line 6) 45193* l1_data variable attribute: Variable Attributes. 45194 (line 318) 45195* l1_data_A variable attribute: Variable Attributes. 45196 (line 318) 45197* l1_data_B variable attribute: Variable Attributes. 45198 (line 318) 45199* l1_text function attribute: Function Attributes. 45200 (line 636) 45201* l2 function attribute: Function Attributes. 45202 (line 642) 45203* l2 variable attribute: Variable Attributes. 45204 (line 326) 45205* labeled elements in initializers: Designated Inits. (line 6) 45206* labels as values: Labels as Values. (line 6) 45207* labs: Other Builtins. (line 6) 45208* LANG: Environment Variables. 45209 (line 21) 45210* language dialect options: C Dialect Options. (line 6) 45211* LC_ALL: Environment Variables. 45212 (line 21) 45213* LC_CTYPE: Environment Variables. 45214 (line 21) 45215* LC_MESSAGES: Environment Variables. 45216 (line 21) 45217* ldexp: Other Builtins. (line 6) 45218* ldexpf: Other Builtins. (line 6) 45219* ldexpl: Other Builtins. (line 6) 45220* length-zero arrays: Zero Length. (line 6) 45221* lgamma: Other Builtins. (line 6) 45222* lgamma_r: Other Builtins. (line 6) 45223* lgammaf: Other Builtins. (line 6) 45224* lgammaf_r: Other Builtins. (line 6) 45225* lgammal: Other Builtins. (line 6) 45226* lgammal_r: Other Builtins. (line 6) 45227* Libraries: Link Options. (line 24) 45228* LIBRARY_PATH: Environment Variables. 45229 (line 94) 45230* link options: Link Options. (line 6) 45231* linker script: Link Options. (line 178) 45232* LK fixed-suffix: Fixed-Point. (line 6) 45233* lk fixed-suffix: Fixed-Point. (line 6) 45234* LL integer suffix: Long Long. (line 6) 45235* llabs: Other Builtins. (line 6) 45236* LLK fixed-suffix: Fixed-Point. (line 6) 45237* llk fixed-suffix: Fixed-Point. (line 6) 45238* LLR fixed-suffix: Fixed-Point. (line 6) 45239* llr fixed-suffix: Fixed-Point. (line 6) 45240* llrint: Other Builtins. (line 6) 45241* llrintf: Other Builtins. (line 6) 45242* llrintl: Other Builtins. (line 6) 45243* llround: Other Builtins. (line 6) 45244* llroundf: Other Builtins. (line 6) 45245* llroundl: Other Builtins. (line 6) 45246* LM32 options: LM32 Options. (line 6) 45247* load address instruction: Simple Constraints. (line 144) 45248* local labels: Local Labels. (line 6) 45249* local variables in macros: Typeof. (line 46) 45250* local variables, specifying registers: Local Reg Vars. (line 6) 45251* locale: Environment Variables. 45252 (line 21) 45253* locale definition: Environment Variables. 45254 (line 103) 45255* log: Other Builtins. (line 6) 45256* log10: Other Builtins. (line 6) 45257* log10f: Other Builtins. (line 6) 45258* log10l: Other Builtins. (line 6) 45259* log1p: Other Builtins. (line 6) 45260* log1pf: Other Builtins. (line 6) 45261* log1pl: Other Builtins. (line 6) 45262* log2: Other Builtins. (line 6) 45263* log2f: Other Builtins. (line 6) 45264* log2l: Other Builtins. (line 6) 45265* logb: Other Builtins. (line 6) 45266* logbf: Other Builtins. (line 6) 45267* logbl: Other Builtins. (line 6) 45268* logf: Other Builtins. (line 6) 45269* logl: Other Builtins. (line 6) 45270* long long data types: Long Long. (line 6) 45271* longjmp: Global Reg Vars. (line 66) 45272* longjmp incompatibilities: Incompatibilities. (line 39) 45273* longjmp warnings: Warning Options. (line 579) 45274* LR fixed-suffix: Fixed-Point. (line 6) 45275* lr fixed-suffix: Fixed-Point. (line 6) 45276* lrint: Other Builtins. (line 6) 45277* lrintf: Other Builtins. (line 6) 45278* lrintl: Other Builtins. (line 6) 45279* lround: Other Builtins. (line 6) 45280* lroundf: Other Builtins. (line 6) 45281* lroundl: Other Builtins. (line 6) 45282* m in constraint: Simple Constraints. (line 17) 45283* M32C options: M32C Options. (line 6) 45284* M32R/D options: M32R/D Options. (line 6) 45285* M680x0 options: M680x0 Options. (line 6) 45286* M68hc1x options: M68hc1x Options. (line 6) 45287* machine dependent options: Submodel Options. (line 6) 45288* machine specific constraints: Machine Constraints. 45289 (line 6) 45290* macro with variable arguments: Variadic Macros. (line 6) 45291* macros containing asm: Extended Asm. (line 242) 45292* macros, inline alternative: Inline. (line 6) 45293* macros, local labels: Local Labels. (line 6) 45294* macros, local variables in: Typeof. (line 46) 45295* macros, statements in expressions: Statement Exprs. (line 6) 45296* macros, types of arguments: Typeof. (line 6) 45297* make: Preprocessor Options. 45298 (line 173) 45299* malloc: Other Builtins. (line 6) 45300* malloc attribute: Function Attributes. 45301 (line 680) 45302* matching constraint: Simple Constraints. (line 129) 45303* MCore options: MCore Options. (line 6) 45304* member fns, automatically inline: Inline. (line 71) 45305* memchr: Other Builtins. (line 6) 45306* memcmp: Other Builtins. (line 6) 45307* memcpy: Other Builtins. (line 6) 45308* memory references in constraints: Simple Constraints. (line 17) 45309* mempcpy: Other Builtins. (line 6) 45310* memset: Other Builtins. (line 6) 45311* MeP options: MeP Options. (line 6) 45312* Mercury: G++ and GCC. (line 23) 45313* message formatting: Language Independent Options. 45314 (line 6) 45315* messages, warning: Warning Options. (line 6) 45316* messages, warning and error: Warnings and Errors. 45317 (line 6) 45318* middle-operands, omitted: Conditionals. (line 6) 45319* MIPS options: MIPS Options. (line 6) 45320* mips16 attribute: Function Attributes. 45321 (line 690) 45322* misunderstandings in C++: C++ Misunderstandings. 45323 (line 6) 45324* mixed declarations and code: Mixed Declarations. (line 6) 45325* mktemp, and constant strings: Incompatibilities. (line 13) 45326* MMIX Options: MMIX Options. (line 6) 45327* MN10300 options: MN10300 Options. (line 6) 45328* mode attribute: Variable Attributes. 45329 (line 134) 45330* modf: Other Builtins. (line 6) 45331* modff: Other Builtins. (line 6) 45332* modfl: Other Builtins. (line 6) 45333* modifiers in constraints: Modifiers. (line 6) 45334* ms_abi attribute: Function Attributes. 45335 (line 732) 45336* ms_hook_prologue attribute: Function Attributes. 45337 (line 744) 45338* ms_struct: Type Attributes. (line 319) 45339* ms_struct attribute: Variable Attributes. 45340 (line 407) 45341* mudflap: Optimize Options. (line 360) 45342* multiple alternative constraints: Multi-Alternative. (line 6) 45343* multiprecision arithmetic: Long Long. (line 6) 45344* n in constraint: Simple Constraints. (line 65) 45345* named address spaces: Named Address Spaces. 45346 (line 6) 45347* names used in assembler code: Asm Labels. (line 6) 45348* naming convention, implementation headers: C++ Interface. (line 46) 45349* nearbyint: Other Builtins. (line 6) 45350* nearbyintf: Other Builtins. (line 6) 45351* nearbyintl: Other Builtins. (line 6) 45352* nested functions: Nested Functions. (line 6) 45353* newlines (escaped): Escaped Newlines. (line 6) 45354* nextafter: Other Builtins. (line 6) 45355* nextafterf: Other Builtins. (line 6) 45356* nextafterl: Other Builtins. (line 6) 45357* nexttoward: Other Builtins. (line 6) 45358* nexttowardf: Other Builtins. (line 6) 45359* nexttowardl: Other Builtins. (line 6) 45360* NFC: Warning Options. (line 1111) 45361* NFKC: Warning Options. (line 1111) 45362* NMI handler functions on the Blackfin processor: Function Attributes. 45363 (line 779) 45364* no_instrument_function function attribute: Function Attributes. 45365 (line 785) 45366* noclone function attribute: Function Attributes. 45367 (line 800) 45368* nocommon attribute: Variable Attributes. 45369 (line 105) 45370* noinline function attribute: Function Attributes. 45371 (line 790) 45372* nomips16 attribute: Function Attributes. 45373 (line 690) 45374* non-constant initializers: Initializers. (line 6) 45375* non-static inline function: Inline. (line 85) 45376* nonnull function attribute: Function Attributes. 45377 (line 806) 45378* noreturn function attribute: Function Attributes. 45379 (line 829) 45380* nothrow function attribute: Function Attributes. 45381 (line 871) 45382* o in constraint: Simple Constraints. (line 23) 45383* OBJC_INCLUDE_PATH: Environment Variables. 45384 (line 129) 45385* Objective-C <1>: Standards. (line 153) 45386* Objective-C: G++ and GCC. (line 6) 45387* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 45388 (line 6) 45389* Objective-C++ <1>: Standards. (line 153) 45390* Objective-C++: G++ and GCC. (line 6) 45391* offsettable address: Simple Constraints. (line 23) 45392* old-style function definitions: Function Prototypes. 45393 (line 6) 45394* omitted middle-operands: Conditionals. (line 6) 45395* open coding: Inline. (line 6) 45396* openmp parallel: C Dialect Options. (line 224) 45397* operand constraints, asm: Constraints. (line 6) 45398* optimize function attribute: Function Attributes. 45399 (line 879) 45400* optimize options: Optimize Options. (line 6) 45401* options to control diagnostics formatting: Language Independent Options. 45402 (line 6) 45403* options to control warnings: Warning Options. (line 6) 45404* options, C++: C++ Dialect Options. 45405 (line 6) 45406* options, code generation: Code Gen Options. (line 6) 45407* options, debugging: Debugging Options. (line 6) 45408* options, dialect: C Dialect Options. (line 6) 45409* options, directory search: Directory Options. (line 6) 45410* options, GCC command: Invoking GCC. (line 6) 45411* options, grouping: Invoking GCC. (line 26) 45412* options, linking: Link Options. (line 6) 45413* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 45414 (line 6) 45415* options, optimization: Optimize Options. (line 6) 45416* options, order: Invoking GCC. (line 30) 45417* options, preprocessor: Preprocessor Options. 45418 (line 6) 45419* order of evaluation, side effects: Non-bugs. (line 196) 45420* order of options: Invoking GCC. (line 30) 45421* other register constraints: Simple Constraints. (line 153) 45422* output file option: Overall Options. (line 186) 45423* overloaded virtual fn, warning: C++ Dialect Options. 45424 (line 502) 45425* p in constraint: Simple Constraints. (line 144) 45426* packed attribute: Variable Attributes. 45427 (line 145) 45428* parameter forward declaration: Variable Length. (line 59) 45429* parameters, aliased: Code Gen Options. (line 411) 45430* Pascal: G++ and GCC. (line 23) 45431* pcs function attribute: Function Attributes. 45432 (line 896) 45433* PDP-11 Options: PDP-11 Options. (line 6) 45434* PIC: Code Gen Options. (line 184) 45435* picoChip options: picoChip Options. (line 6) 45436* pmf: Bound member functions. 45437 (line 6) 45438* pointer arguments: Function Attributes. 45439 (line 188) 45440* pointer to member function: Bound member functions. 45441 (line 6) 45442* portions of temporary objects, pointers to: Temporaries. (line 6) 45443* pow: Other Builtins. (line 6) 45444* pow10: Other Builtins. (line 6) 45445* pow10f: Other Builtins. (line 6) 45446* pow10l: Other Builtins. (line 6) 45447* PowerPC options: PowerPC Options. (line 6) 45448* powf: Other Builtins. (line 6) 45449* powl: Other Builtins. (line 6) 45450* pragma GCC optimize: Function Specific Option Pragmas. 45451 (line 20) 45452* pragma GCC pop_options: Function Specific Option Pragmas. 45453 (line 33) 45454* pragma GCC push_options: Function Specific Option Pragmas. 45455 (line 33) 45456* pragma GCC reset_options: Function Specific Option Pragmas. 45457 (line 43) 45458* pragma GCC target: Function Specific Option Pragmas. 45459 (line 7) 45460* pragma, align: Solaris Pragmas. (line 11) 45461* pragma, call: MeP Pragmas. (line 48) 45462* pragma, coprocessor available: MeP Pragmas. (line 13) 45463* pragma, coprocessor call_saved: MeP Pragmas. (line 20) 45464* pragma, coprocessor subclass: MeP Pragmas. (line 28) 45465* pragma, custom io_volatile: MeP Pragmas. (line 7) 45466* pragma, diagnostic: Diagnostic Pragmas. (line 14) 45467* pragma, disinterrupt: MeP Pragmas. (line 38) 45468* pragma, extern_prefix: Symbol-Renaming Pragmas. 45469 (line 20) 45470* pragma, fini: Solaris Pragmas. (line 19) 45471* pragma, init: Solaris Pragmas. (line 24) 45472* pragma, long_calls: ARM Pragmas. (line 11) 45473* pragma, long_calls_off: ARM Pragmas. (line 17) 45474* pragma, longcall: RS/6000 and PowerPC Pragmas. 45475 (line 14) 45476* pragma, mark: Darwin Pragmas. (line 11) 45477* pragma, memregs: M32C Pragmas. (line 7) 45478* pragma, no_long_calls: ARM Pragmas. (line 14) 45479* pragma, options align: Darwin Pragmas. (line 14) 45480* pragma, pop_macro: Push/Pop Macro Pragmas. 45481 (line 15) 45482* pragma, push_macro: Push/Pop Macro Pragmas. 45483 (line 11) 45484* pragma, reason for not using: Function Attributes. 45485 (line 1455) 45486* pragma, redefine_extname: Symbol-Renaming Pragmas. 45487 (line 14) 45488* pragma, segment: Darwin Pragmas. (line 21) 45489* pragma, unused: Darwin Pragmas. (line 24) 45490* pragma, visibility: Visibility Pragmas. (line 8) 45491* pragma, weak: Weak Pragmas. (line 10) 45492* pragmas: Pragmas. (line 6) 45493* pragmas in C++, effect on inlining: C++ Interface. (line 66) 45494* pragmas, interface and implementation: C++ Interface. (line 6) 45495* pragmas, warning of unknown: Warning Options. (line 596) 45496* precompiled headers: Precompiled Headers. 45497 (line 6) 45498* preprocessing numbers: Incompatibilities. (line 173) 45499* preprocessing tokens: Incompatibilities. (line 173) 45500* preprocessor options: Preprocessor Options. 45501 (line 6) 45502* printf: Other Builtins. (line 6) 45503* printf_unlocked: Other Builtins. (line 6) 45504* prof: Debugging Options. (line 290) 45505* progmem variable attribute: Variable Attributes. 45506 (line 561) 45507* promotion of formal parameters: Function Prototypes. 45508 (line 6) 45509* pure function attribute: Function Attributes. 45510 (line 914) 45511* push address instruction: Simple Constraints. (line 144) 45512* putchar: Other Builtins. (line 6) 45513* puts: Other Builtins. (line 6) 45514* Q floating point suffix: Floating Types. (line 6) 45515* q floating point suffix: Floating Types. (line 6) 45516* qsort, and global register variables: Global Reg Vars. (line 42) 45517* question mark: Multi-Alternative. (line 27) 45518* R fixed-suffix: Fixed-Point. (line 6) 45519* r fixed-suffix: Fixed-Point. (line 6) 45520* r in constraint: Simple Constraints. (line 56) 45521* ranges in case statements: Case Ranges. (line 6) 45522* read-only strings: Incompatibilities. (line 9) 45523* register variable after longjmp: Global Reg Vars. (line 66) 45524* registers: Extended Asm. (line 6) 45525* registers for local variables: Local Reg Vars. (line 6) 45526* registers in constraints: Simple Constraints. (line 56) 45527* registers, global allocation: Explicit Reg Vars. (line 6) 45528* registers, global variables in: Global Reg Vars. (line 6) 45529* regparm attribute: Function Attributes. 45530 (line 967) 45531* relocation truncated to fit (ColdFire): M680x0 Options. (line 328) 45532* relocation truncated to fit (MIPS): MIPS Options. (line 199) 45533* remainder: Other Builtins. (line 6) 45534* remainderf: Other Builtins. (line 6) 45535* remainderl: Other Builtins. (line 6) 45536* remquo: Other Builtins. (line 6) 45537* remquof: Other Builtins. (line 6) 45538* remquol: Other Builtins. (line 6) 45539* reordering, warning: C++ Dialect Options. 45540 (line 427) 45541* reporting bugs: Bugs. (line 6) 45542* resbank attribute: Function Attributes. 45543 (line 999) 45544* rest argument (in macro): Variadic Macros. (line 6) 45545* restricted pointers: Restricted Pointers. 45546 (line 6) 45547* restricted references: Restricted Pointers. 45548 (line 6) 45549* restricted this pointer: Restricted Pointers. 45550 (line 6) 45551* returns_twice attribute: Function Attributes. 45552 (line 1013) 45553* rindex: Other Builtins. (line 6) 45554* rint: Other Builtins. (line 6) 45555* rintf: Other Builtins. (line 6) 45556* rintl: Other Builtins. (line 6) 45557* round: Other Builtins. (line 6) 45558* roundf: Other Builtins. (line 6) 45559* roundl: Other Builtins. (line 6) 45560* RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 45561 (line 6) 45562* RTTI: Vague Linkage. (line 43) 45563* run-time options: Code Gen Options. (line 6) 45564* RX Options: RX Options. (line 6) 45565* s in constraint: Simple Constraints. (line 92) 45566* S/390 and zSeries Options: S/390 and zSeries Options. 45567 (line 6) 45568* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 45569 (line 1022) 45570* scalb: Other Builtins. (line 6) 45571* scalbf: Other Builtins. (line 6) 45572* scalbl: Other Builtins. (line 6) 45573* scalbln: Other Builtins. (line 6) 45574* scalblnf: Other Builtins. (line 6) 45575* scalbn: Other Builtins. (line 6) 45576* scalbnf: Other Builtins. (line 6) 45577* scanf, and constant strings: Incompatibilities. (line 17) 45578* scanfnl: Other Builtins. (line 6) 45579* scope of a variable length array: Variable Length. (line 22) 45580* scope of declaration: Disappointments. (line 21) 45581* scope of external declarations: Incompatibilities. (line 80) 45582* Score Options: Score Options. (line 6) 45583* search path: Directory Options. (line 6) 45584* section function attribute: Function Attributes. 45585 (line 1027) 45586* section variable attribute: Variable Attributes. 45587 (line 166) 45588* sentinel function attribute: Function Attributes. 45589 (line 1043) 45590* setjmp: Global Reg Vars. (line 66) 45591* setjmp incompatibilities: Incompatibilities. (line 39) 45592* shared strings: Incompatibilities. (line 9) 45593* shared variable attribute: Variable Attributes. 45594 (line 211) 45595* side effect in ?:: Conditionals. (line 20) 45596* side effects, macro argument: Statement Exprs. (line 35) 45597* side effects, order of evaluation: Non-bugs. (line 196) 45598* signal handler functions on the AVR processors: Function Attributes. 45599 (line 1074) 45600* signbit: Other Builtins. (line 6) 45601* signbitd128: Other Builtins. (line 6) 45602* signbitd32: Other Builtins. (line 6) 45603* signbitd64: Other Builtins. (line 6) 45604* signbitf: Other Builtins. (line 6) 45605* signbitl: Other Builtins. (line 6) 45606* signed and unsigned values, comparison warning: Warning Options. 45607 (line 975) 45608* significand: Other Builtins. (line 6) 45609* significandf: Other Builtins. (line 6) 45610* significandl: Other Builtins. (line 6) 45611* simple constraints: Simple Constraints. (line 6) 45612* sin: Other Builtins. (line 6) 45613* sincos: Other Builtins. (line 6) 45614* sincosf: Other Builtins. (line 6) 45615* sincosl: Other Builtins. (line 6) 45616* sinf: Other Builtins. (line 6) 45617* sinh: Other Builtins. (line 6) 45618* sinhf: Other Builtins. (line 6) 45619* sinhl: Other Builtins. (line 6) 45620* sinl: Other Builtins. (line 6) 45621* sizeof: Typeof. (line 6) 45622* smaller data references: M32R/D Options. (line 57) 45623* smaller data references (PowerPC): RS/6000 and PowerPC Options. 45624 (line 682) 45625* snprintf: Other Builtins. (line 6) 45626* SPARC options: SPARC Options. (line 6) 45627* Spec Files: Spec Files. (line 6) 45628* specified registers: Explicit Reg Vars. (line 6) 45629* specifying compiler version and target machine: Target Options. 45630 (line 6) 45631* specifying hardware config: Submodel Options. (line 6) 45632* specifying machine version: Target Options. (line 6) 45633* specifying registers for local variables: Local Reg Vars. (line 6) 45634* speed of compilation: Precompiled Headers. 45635 (line 6) 45636* sprintf: Other Builtins. (line 6) 45637* SPU options: SPU Options. (line 6) 45638* sqrt: Other Builtins. (line 6) 45639* sqrtf: Other Builtins. (line 6) 45640* sqrtl: Other Builtins. (line 6) 45641* sscanf: Other Builtins. (line 6) 45642* sscanf, and constant strings: Incompatibilities. (line 17) 45643* sseregparm attribute: Function Attributes. 45644 (line 984) 45645* statements inside expressions: Statement Exprs. (line 6) 45646* static data in C++, declaring and defining: Static Definitions. 45647 (line 6) 45648* stpcpy: Other Builtins. (line 6) 45649* stpncpy: Other Builtins. (line 6) 45650* strcasecmp: Other Builtins. (line 6) 45651* strcat: Other Builtins. (line 6) 45652* strchr: Other Builtins. (line 6) 45653* strcmp: Other Builtins. (line 6) 45654* strcpy: Other Builtins. (line 6) 45655* strcspn: Other Builtins. (line 6) 45656* strdup: Other Builtins. (line 6) 45657* strfmon: Other Builtins. (line 6) 45658* strftime: Other Builtins. (line 6) 45659* string constants: Incompatibilities. (line 9) 45660* strlen: Other Builtins. (line 6) 45661* strncasecmp: Other Builtins. (line 6) 45662* strncat: Other Builtins. (line 6) 45663* strncmp: Other Builtins. (line 6) 45664* strncpy: Other Builtins. (line 6) 45665* strndup: Other Builtins. (line 6) 45666* strpbrk: Other Builtins. (line 6) 45667* strrchr: Other Builtins. (line 6) 45668* strspn: Other Builtins. (line 6) 45669* strstr: Other Builtins. (line 6) 45670* struct: Unnamed Fields. (line 6) 45671* structures: Incompatibilities. (line 146) 45672* structures, constructor expression: Compound Literals. (line 6) 45673* submodel options: Submodel Options. (line 6) 45674* subscripting: Subscripting. (line 6) 45675* subscripting and function values: Subscripting. (line 6) 45676* suffixes for C++ source: Invoking G++. (line 6) 45677* SUNPRO_DEPENDENCIES: Environment Variables. 45678 (line 169) 45679* suppressing warnings: Warning Options. (line 6) 45680* surprises in C++: C++ Misunderstandings. 45681 (line 6) 45682* syntax checking: Warning Options. (line 13) 45683* syscall_linkage attribute: Function Attributes. 45684 (line 1096) 45685* system headers, warnings from: Warning Options. (line 710) 45686* sysv_abi attribute: Function Attributes. 45687 (line 732) 45688* tan: Other Builtins. (line 6) 45689* tanf: Other Builtins. (line 6) 45690* tanh: Other Builtins. (line 6) 45691* tanhf: Other Builtins. (line 6) 45692* tanhl: Other Builtins. (line 6) 45693* tanl: Other Builtins. (line 6) 45694* target function attribute: Function Attributes. 45695 (line 1103) 45696* target machine, specifying: Target Options. (line 6) 45697* target options: Target Options. (line 6) 45698* target("abm") attribute: Function Attributes. 45699 (line 1130) 45700* target("aes") attribute: Function Attributes. 45701 (line 1135) 45702* target("align-stringops") attribute: Function Attributes. 45703 (line 1225) 45704* target("arch=ARCH") attribute: Function Attributes. 45705 (line 1234) 45706* target("cld") attribute: Function Attributes. 45707 (line 1196) 45708* target("fancy-math-387") attribute: Function Attributes. 45709 (line 1200) 45710* target("fma4") attribute: Function Attributes. 45711 (line 1180) 45712* target("fpmath=FPMATH") attribute: Function Attributes. 45713 (line 1242) 45714* target("fused-madd") attribute: Function Attributes. 45715 (line 1205) 45716* target("ieee-fp") attribute: Function Attributes. 45717 (line 1210) 45718* target("inline-all-stringops") attribute: Function Attributes. 45719 (line 1215) 45720* target("inline-stringops-dynamically") attribute: Function Attributes. 45721 (line 1219) 45722* target("lwp") attribute: Function Attributes. 45723 (line 1188) 45724* target("mmx") attribute: Function Attributes. 45725 (line 1139) 45726* target("pclmul") attribute: Function Attributes. 45727 (line 1143) 45728* target("popcnt") attribute: Function Attributes. 45729 (line 1147) 45730* target("recip") attribute: Function Attributes. 45731 (line 1229) 45732* target("sse") attribute: Function Attributes. 45733 (line 1151) 45734* target("sse2") attribute: Function Attributes. 45735 (line 1155) 45736* target("sse3") attribute: Function Attributes. 45737 (line 1159) 45738* target("sse4") attribute: Function Attributes. 45739 (line 1163) 45740* target("sse4.1") attribute: Function Attributes. 45741 (line 1168) 45742* target("sse4.2") attribute: Function Attributes. 45743 (line 1172) 45744* target("sse4a") attribute: Function Attributes. 45745 (line 1176) 45746* target("ssse3") attribute: Function Attributes. 45747 (line 1192) 45748* target("tune=TUNE") attribute: Function Attributes. 45749 (line 1238) 45750* target("xop") attribute: Function Attributes. 45751 (line 1184) 45752* TC1: Standards. (line 13) 45753* TC2: Standards. (line 13) 45754* TC3: Standards. (line 13) 45755* Technical Corrigenda: Standards. (line 13) 45756* Technical Corrigendum 1: Standards. (line 13) 45757* Technical Corrigendum 2: Standards. (line 13) 45758* Technical Corrigendum 3: Standards. (line 13) 45759* template instantiation: Template Instantiation. 45760 (line 6) 45761* temporaries, lifetime of: Temporaries. (line 6) 45762* tgamma: Other Builtins. (line 6) 45763* tgammaf: Other Builtins. (line 6) 45764* tgammal: Other Builtins. (line 6) 45765* Thread-Local Storage: Thread-Local. (line 6) 45766* thunks: Nested Functions. (line 6) 45767* tiny data section on the H8/300H and H8S: Function Attributes. 45768 (line 1260) 45769* TLS: Thread-Local. (line 6) 45770* tls_model attribute: Variable Attributes. 45771 (line 235) 45772* TMPDIR: Environment Variables. 45773 (line 45) 45774* toascii: Other Builtins. (line 6) 45775* tolower: Other Builtins. (line 6) 45776* toupper: Other Builtins. (line 6) 45777* towlower: Other Builtins. (line 6) 45778* towupper: Other Builtins. (line 6) 45779* traditional C language: C Dialect Options. (line 253) 45780* trunc: Other Builtins. (line 6) 45781* truncf: Other Builtins. (line 6) 45782* truncl: Other Builtins. (line 6) 45783* two-stage name lookup: Name lookup. (line 6) 45784* type alignment: Alignment. (line 6) 45785* type attributes: Type Attributes. (line 6) 45786* type_info: Vague Linkage. (line 43) 45787* typedef names as function parameters: Incompatibilities. (line 97) 45788* typeof: Typeof. (line 6) 45789* UHK fixed-suffix: Fixed-Point. (line 6) 45790* uhk fixed-suffix: Fixed-Point. (line 6) 45791* UHR fixed-suffix: Fixed-Point. (line 6) 45792* uhr fixed-suffix: Fixed-Point. (line 6) 45793* UK fixed-suffix: Fixed-Point. (line 6) 45794* uk fixed-suffix: Fixed-Point. (line 6) 45795* ULK fixed-suffix: Fixed-Point. (line 6) 45796* ulk fixed-suffix: Fixed-Point. (line 6) 45797* ULL integer suffix: Long Long. (line 6) 45798* ULLK fixed-suffix: Fixed-Point. (line 6) 45799* ullk fixed-suffix: Fixed-Point. (line 6) 45800* ULLR fixed-suffix: Fixed-Point. (line 6) 45801* ullr fixed-suffix: Fixed-Point. (line 6) 45802* ULR fixed-suffix: Fixed-Point. (line 6) 45803* ulr fixed-suffix: Fixed-Point. (line 6) 45804* undefined behavior: Bug Criteria. (line 17) 45805* undefined function value: Bug Criteria. (line 17) 45806* underscores in variables in macros: Typeof. (line 46) 45807* union: Unnamed Fields. (line 6) 45808* union, casting to a: Cast to Union. (line 6) 45809* unions: Incompatibilities. (line 146) 45810* unknown pragmas, warning: Warning Options. (line 596) 45811* unresolved references and -nodefaultlibs: Link Options. (line 82) 45812* unresolved references and -nostdlib: Link Options. (line 82) 45813* unused attribute.: Function Attributes. 45814 (line 1272) 45815* UR fixed-suffix: Fixed-Point. (line 6) 45816* ur fixed-suffix: Fixed-Point. (line 6) 45817* use_debug_exception_return attribute: Function Attributes. 45818 (line 593) 45819* use_shadow_register_set attribute: Function Attributes. 45820 (line 584) 45821* used attribute.: Function Attributes. 45822 (line 1277) 45823* User stack pointer in interrupts on the Blackfin: Function Attributes. 45824 (line 631) 45825* V in constraint: Simple Constraints. (line 43) 45826* V850 Options: V850 Options. (line 6) 45827* vague linkage: Vague Linkage. (line 6) 45828* value after longjmp: Global Reg Vars. (line 66) 45829* variable addressability on the IA-64: Function Attributes. 45830 (line 704) 45831* variable addressability on the M32R/D: Variable Attributes. 45832 (line 336) 45833* variable alignment: Alignment. (line 6) 45834* variable attributes: Variable Attributes. 45835 (line 6) 45836* variable number of arguments: Variadic Macros. (line 6) 45837* variable-length array scope: Variable Length. (line 22) 45838* variable-length arrays: Variable Length. (line 6) 45839* variables in specified registers: Explicit Reg Vars. (line 6) 45840* variables, local, in macros: Typeof. (line 46) 45841* variadic macros: Variadic Macros. (line 6) 45842* VAX options: VAX Options. (line 6) 45843* version_id attribute: Function Attributes. 45844 (line 1283) 45845* vfprintf: Other Builtins. (line 6) 45846* vfscanf: Other Builtins. (line 6) 45847* visibility attribute: Function Attributes. 45848 (line 1293) 45849* VLAs: Variable Length. (line 6) 45850* vliw attribute: Function Attributes. 45851 (line 1387) 45852* void pointers, arithmetic: Pointer Arith. (line 6) 45853* void, size of pointer to: Pointer Arith. (line 6) 45854* volatile access: Volatiles. (line 6) 45855* volatile applied to function: Function Attributes. 45856 (line 6) 45857* volatile read: Volatiles. (line 6) 45858* volatile write: Volatiles. (line 6) 45859* vprintf: Other Builtins. (line 6) 45860* vscanf: Other Builtins. (line 6) 45861* vsnprintf: Other Builtins. (line 6) 45862* vsprintf: Other Builtins. (line 6) 45863* vsscanf: Other Builtins. (line 6) 45864* vtable: Vague Linkage. (line 28) 45865* VxWorks Options: VxWorks Options. (line 6) 45866* W floating point suffix: Floating Types. (line 6) 45867* w floating point suffix: Floating Types. (line 6) 45868* warn_unused_result attribute: Function Attributes. 45869 (line 1393) 45870* warning for comparison of signed and unsigned values: Warning Options. 45871 (line 975) 45872* warning for overloaded virtual fn: C++ Dialect Options. 45873 (line 502) 45874* warning for reordering of member initializers: C++ Dialect Options. 45875 (line 427) 45876* warning for unknown pragmas: Warning Options. (line 596) 45877* warning function attribute: Function Attributes. 45878 (line 165) 45879* warning messages: Warning Options. (line 6) 45880* warnings from system headers: Warning Options. (line 710) 45881* warnings vs errors: Warnings and Errors. 45882 (line 6) 45883* weak attribute: Function Attributes. 45884 (line 1410) 45885* weakref attribute: Function Attributes. 45886 (line 1419) 45887* whitespace: Incompatibilities. (line 112) 45888* X in constraint: Simple Constraints. (line 114) 45889* X3.159-1989: Standards. (line 13) 45890* x86-64 options: x86-64 Options. (line 6) 45891* x86-64 Options: i386 and x86-64 Options. 45892 (line 6) 45893* Xstormy16 Options: Xstormy16 Options. (line 6) 45894* Xtensa Options: Xtensa Options. (line 6) 45895* y0: Other Builtins. (line 6) 45896* y0f: Other Builtins. (line 6) 45897* y0l: Other Builtins. (line 6) 45898* y1: Other Builtins. (line 6) 45899* y1f: Other Builtins. (line 6) 45900* y1l: Other Builtins. (line 6) 45901* yn: Other Builtins. (line 6) 45902* ynf: Other Builtins. (line 6) 45903* ynl: Other Builtins. (line 6) 45904* zero-length arrays: Zero Length. (line 6) 45905* zero-size structures: Empty Structures. (line 6) 45906* zSeries options: zSeries Options. (line 6) 45907 45908 45909 45910Tag Table: 45911Node: Top2076 45912Node: G++ and GCC3842 45913Node: Standards5907 45914Node: Invoking GCC14873 45915Node: Option Summary18624 45916Node: Overall Options53916 45917Node: Invoking G++68423 45918Node: C Dialect Options69946 45919Node: C++ Dialect Options83878 45920Node: Objective-C and Objective-C++ Dialect Options107043 45921Node: Language Independent Options118820 45922Node: Warning Options121590 45923Node: Debugging Options180892 45924Node: Optimize Options226955 45925Ref: Type-punning278437 45926Node: Preprocessor Options347069 45927Ref: Wtrigraphs351167 45928Ref: dashMF355915 45929Ref: fdollars-in-identifiers366456 45930Node: Assembler Options375017 45931Node: Link Options375722 45932Ref: Link Options-Footnote-1386080 45933Node: Directory Options386414 45934Node: Spec Files392476 45935Node: Target Options413286 45936Node: Submodel Options414804 45937Node: ARC Options416573 45938Node: ARM Options418060 45939Node: AVR Options430962 45940Node: Blackfin Options432817 45941Node: CRIS Options440765 45942Node: CRX Options444506 45943Node: Darwin Options444931 45944Node: DEC Alpha Options452423 45945Node: DEC Alpha/VMS Options464339 45946Node: FR30 Options464913 45947Node: FRV Options465488 45948Node: GNU/Linux Options472205 45949Node: H8/300 Options472663 45950Node: HPPA Options473730 45951Node: i386 and x86-64 Options483230 45952Node: i386 and x86-64 Windows Options512233 45953Node: IA-64 Options515462 45954Node: IA-64/VMS Options523480 45955Node: LM32 Options524035 45956Node: M32C Options524564 45957Node: M32R/D Options525854 45958Node: M680x0 Options529441 45959Node: M68hc1x Options543448 45960Node: MCore Options545017 45961Node: MeP Options546524 45962Node: MIPS Options550491 45963Node: MMIX Options578390 45964Node: MN10300 Options580872 45965Node: PDP-11 Options582294 45966Node: picoChip Options584134 45967Node: PowerPC Options586333 45968Node: RS/6000 and PowerPC Options586569 45969Node: RX Options618368 45970Node: S/390 and zSeries Options623952 45971Node: Score Options631883 45972Node: SH Options632711 45973Node: SPARC Options643565 45974Node: SPU Options654538 45975Node: System V Options659542 45976Node: V850 Options660365 45977Node: VAX Options663505 45978Node: VxWorks Options664053 45979Node: x86-64 Options665208 45980Node: Xstormy16 Options665426 45981Node: Xtensa Options665715 45982Node: zSeries Options669862 45983Node: Code Gen Options670058 45984Node: Environment Variables694765 45985Node: Precompiled Headers702661 45986Node: C Implementation708862 45987Node: Translation implementation710525 45988Node: Environment implementation711099 45989Node: Identifiers implementation711649 45990Node: Characters implementation712703 45991Node: Integers implementation715509 45992Node: Floating point implementation717334 45993Node: Arrays and pointers implementation720263 45994Ref: Arrays and pointers implementation-Footnote-1721698 45995Node: Hints implementation721822 45996Node: Structures unions enumerations and bit-fields implementation723288 45997Node: Qualifiers implementation725274 45998Node: Declarators implementation727046 45999Node: Statements implementation727388 46000Node: Preprocessing directives implementation727715 46001Node: Library functions implementation729820 46002Node: Architecture implementation730460 46003Node: Locale-specific behavior implementation731163 46004Node: C++ Implementation731468 46005Node: Conditionally-supported behavior732725 46006Node: C Extensions733208 46007Node: Statement Exprs737924 46008Node: Local Labels742437 46009Node: Labels as Values745416 46010Ref: Labels as Values-Footnote-1747825 46011Node: Nested Functions748008 46012Node: Constructing Calls751941 46013Node: Typeof756664 46014Node: Conditionals759979 46015Node: Long Long760870 46016Node: Complex762371 46017Node: Floating Types764941 46018Node: Half-Precision766021 46019Node: Decimal Float768203 46020Node: Hex Floats770070 46021Node: Fixed-Point771111 46022Node: Named Address Spaces774405 46023Node: Zero Length775439 46024Node: Empty Structures778726 46025Node: Variable Length779142 46026Node: Variadic Macros781795 46027Node: Escaped Newlines784177 46028Node: Subscripting785016 46029Node: Pointer Arith785739 46030Node: Initializers786307 46031Node: Compound Literals786803 46032Node: Designated Inits788978 46033Node: Case Ranges792633 46034Node: Cast to Union793316 46035Node: Mixed Declarations794412 46036Node: Function Attributes794918 46037Node: Attribute Syntax862442 46038Node: Function Prototypes872877 46039Node: C++ Comments874658 46040Node: Dollar Signs875177 46041Node: Character Escapes875642 46042Node: Variable Attributes875936 46043Ref: MeP Variable Attributes890827 46044Ref: i386 Variable Attributes892788 46045Node: Type Attributes898773 46046Ref: MeP Type Attributes912514 46047Ref: i386 Type Attributes912788 46048Ref: PowerPC Type Attributes913628 46049Ref: SPU Type Attributes914490 46050Node: Alignment914781 46051Node: Inline916155 46052Node: Extended Asm921102 46053Ref: Example of asm with clobbered asm reg927188 46054Ref: Extended asm with goto936955 46055Node: Constraints944690 46056Node: Simple Constraints945540 46057Node: Multi-Alternative952211 46058Node: Modifiers953928 46059Node: Machine Constraints956822 46060Node: Asm Labels993175 46061Node: Explicit Reg Vars994851 46062Node: Global Reg Vars996459 46063Node: Local Reg Vars1001009 46064Node: Alternate Keywords1003450 46065Node: Incomplete Enums1004878 46066Node: Function Names1005635 46067Node: Return Address1007797 46068Node: Vector Extensions1011350 46069Node: Offsetof1014855 46070Node: Atomic Builtins1015669 46071Node: Object Size Checking1021047 46072Node: Other Builtins1026475 46073Node: Target Builtins1053135 46074Node: Alpha Built-in Functions1054059 46075Node: ARM iWMMXt Built-in Functions1057058 46076Node: ARM NEON Intrinsics1063777 46077Node: Blackfin Built-in Functions1271609 46078Node: FR-V Built-in Functions1272223 46079Node: Argument Types1273082 46080Node: Directly-mapped Integer Functions1274838 46081Node: Directly-mapped Media Functions1275920 46082Node: Raw read/write Functions1282952 46083Node: Other Built-in Functions1283864 46084Node: X86 Built-in Functions1285053 46085Node: MIPS DSP Built-in Functions1328484 46086Node: MIPS Paired-Single Support1340931 46087Node: MIPS Loongson Built-in Functions1342432 46088Node: Paired-Single Arithmetic1348950 46089Node: Paired-Single Built-in Functions1349896 46090Node: MIPS-3D Built-in Functions1352566 46091Node: picoChip Built-in Functions1357941 46092Node: Other MIPS Built-in Functions1359307 46093Node: PowerPC AltiVec/VSX Built-in Functions1359831 46094Node: RX Built-in Functions1469881 46095Node: SPARC VIS Built-in Functions1473891 46096Node: SPU Built-in Functions1475570 46097Node: Target Format Checks1477352 46098Node: Solaris Format Checks1477759 46099Node: Pragmas1478156 46100Node: ARM Pragmas1478866 46101Node: M32C Pragmas1479469 46102Node: MeP Pragmas1480029 46103Node: RS/6000 and PowerPC Pragmas1482098 46104Node: Darwin Pragmas1482839 46105Node: Solaris Pragmas1483906 46106Node: Symbol-Renaming Pragmas1485067 46107Node: Structure-Packing Pragmas1487701 46108Node: Weak Pragmas1489353 46109Node: Diagnostic Pragmas1490155 46110Node: Visibility Pragmas1492791 46111Node: Push/Pop Macro Pragmas1493543 46112Node: Function Specific Option Pragmas1494516 46113Node: Unnamed Fields1496731 46114Node: Thread-Local1498241 46115Node: C99 Thread-Local Edits1500348 46116Node: C++98 Thread-Local Edits1502360 46117Node: Binary constants1505805 46118Node: C++ Extensions1506476 46119Node: Volatiles1508124 46120Node: Restricted Pointers1510800 46121Node: Vague Linkage1512394 46122Node: C++ Interface1516050 46123Ref: C++ Interface-Footnote-11520347 46124Node: Template Instantiation1520484 46125Node: Bound member functions1527496 46126Node: C++ Attributes1529039 46127Node: Namespace Association1530697 46128Node: Type Traits1532111 46129Node: Java Exceptions1537658 46130Node: Deprecated Features1539055 46131Node: Backwards Compatibility1542020 46132Node: Objective-C1543378 46133Node: Executing code before main1543959 46134Node: What you can and what you cannot do in +load1546565 46135Node: Type encoding1548732 46136Node: Garbage Collection1552119 46137Node: Constant string objects1554743 46138Node: compatibility_alias1557251 46139Node: Compatibility1558129 46140Node: Gcov1564696 46141Node: Gcov Intro1565229 46142Node: Invoking Gcov1567947 46143Node: Gcov and Optimization1579810 46144Node: Gcov Data Files1582465 46145Node: Cross-profiling1583605 46146Node: Trouble1585433 46147Node: Actual Bugs1586918 46148Node: Cross-Compiler Problems1587374 46149Node: Interoperation1587788 46150Node: Incompatibilities1594925 46151Node: Fixed Headers1603076 46152Node: Standard Libraries1604739 46153Node: Disappointments1606111 46154Node: C++ Misunderstandings1610469 46155Node: Static Definitions1611280 46156Node: Name lookup1612333 46157Ref: Name lookup-Footnote-11617111 46158Node: Temporaries1617298 46159Node: Copy Assignment1619274 46160Node: Non-bugs1621081 46161Node: Warnings and Errors1631588 46162Node: Bugs1633352 46163Node: Bug Criteria1633916 46164Node: Bug Reporting1636126 46165Node: Service1636347 46166Node: Contributing1637166 46167Node: Funding1637906 46168Node: GNU Project1640395 46169Node: Copying1641041 46170Node: GNU Free Documentation License1678569 46171Node: Contributors1700975 46172Node: Option Index1737659 46173Node: Keyword Index1907838 46174 46175End Tag Table 46176