1 This is doc/gcc.info, produced by makeinfo version 4.8 from 2 /tmp/android-build-b1a4f38d56038d5f3847fea7c8c86b90/src/build/../gcc/gcc-4.4.3/gcc/doc/gcc.texi. 3 4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 5 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 6 Software Foundation, Inc. 7 8 Permission is granted to copy, distribute and/or modify this document 9 under the terms of the GNU Free Documentation License, Version 1.2 or 10 any later version published by the Free Software Foundation; with the 11 Invariant Sections being "Funding Free Software", the Front-Cover Texts 12 being (a) (see below), and with the Back-Cover Texts being (b) (see 13 below). A copy of the license is included in the section entitled "GNU 14 Free 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 23 software. Copies published by the Free Software Foundation raise 24 funds for GNU development. 25 26 INFO-DIR-SECTION Software development 27 START-INFO-DIR-ENTRY 28 * gcc: (gcc). The GNU Compiler Collection. 29 * g++: (gcc). The GNU C++ compiler. 30 END-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, 34 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free 35 Software Foundation, Inc. 36 37 Permission is granted to copy, distribute and/or modify this document 38 under the terms of the GNU Free Documentation License, Version 1.2 or 39 any later version published by the Free Software Foundation; with the 40 Invariant Sections being "Funding Free Software", the Front-Cover Texts 41 being (a) (see below), and with the Back-Cover Texts being (b) (see 42 below). A copy of the license is included in the section entitled "GNU 43 Free 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 52 software. Copies published by the Free Software Foundation raise 53 funds for GNU development. 54 55 56 57 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) 58 59 Introduction 60 ************ 61 62 This manual documents how to use the GNU compilers, as well as their 63 features and incompatibilities, and how to report bugs. It corresponds 64 to the compilers (GCC) version 4.4.3. The internals of the GNU 65 compilers, including how to port them to new targets and some 66 information about how to write front ends for new languages, are 67 documented 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++ Extensions:: GNU extensions to the C++ language. 77 * Objective-C:: GNU Objective-C runtime features. 78 * Compatibility:: Binary Compatibility 79 * Gcov:: `gcov'---a test coverage program. 80 * Trouble:: If you have trouble using GCC. 81 * Bugs:: How, why and where to report bugs. 82 * Service:: How to find suppliers of support for GCC. 83 * Contributing:: How to contribute to testing and developing GCC. 84 85 * Funding:: How to help assure funding for free software. 86 * GNU Project:: The GNU Project and GNU/Linux. 87 88 * Copying:: GNU General Public License says 89 how you can copy and share GCC. 90 * GNU Free Documentation License:: How you can copy and share this manual. 91 * Contributors:: People who have contributed to GCC. 92 93 * Option Index:: Index to command line options. 94 * Keyword Index:: Index of concepts and symbol names. 95 96 97 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top 98 99 1 Programming Languages Supported by GCC 100 **************************************** 101 102 GCC stands for "GNU Compiler Collection". GCC is an integrated 103 distribution of compilers for several major programming languages. 104 These languages currently include C, C++, Objective-C, Objective-C++, 105 Java, Fortran, and Ada. 106 107 The abbreviation "GCC" has multiple meanings in common use. The 108 current official meaning is "GNU Compiler Collection", which refers 109 generically to the complete suite of tools. The name historically stood 110 for "GNU C Compiler", and this usage is still common when the emphasis 111 is on compiling C programs. Finally, the name is also used when 112 speaking of the "language-independent" component of GCC: code shared 113 among the compilers for all supported languages. 114 115 The language-independent component of GCC includes the majority of the 116 optimizers, as well as the "back ends" that generate machine code for 117 various processors. 118 119 The part of a compiler that is specific to a particular language is 120 called the "front end". In addition to the front ends that are 121 integrated components of GCC, there are several other front ends that 122 are maintained separately. These support languages such as Pascal, 123 Mercury, and COBOL. To use these, they must be built together with GCC 124 proper. 125 126 Most of the compilers for languages other than C have their own names. 127 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we 128 talk about compiling one of those languages, we might refer to that 129 compiler by its own name, or as GCC. Either is correct. 130 131 Historically, compilers for many languages, including C++ and Fortran, 132 have been implemented as "preprocessors" which emit another high level 133 language such as C. None of the compilers included in GCC are 134 implemented this way; they all generate machine code directly. This 135 sort of preprocessor should not be confused with the "C preprocessor", 136 which is an integral feature of the C, C++, Objective-C and 137 Objective-C++ languages. 138 139 140 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top 141 142 2 Language Standards Supported by GCC 143 ************************************* 144 145 For each language compiled by GCC for which there is a standard, GCC 146 attempts to follow one or more versions of that standard, possibly with 147 some exceptions, and possibly with some extensions. 148 149 2.1 C language 150 ============== 151 152 GCC supports three versions of the C standard, although support for the 153 most recent version is not yet complete. 154 155 The original ANSI C standard (X3.159-1989) was ratified in 1989 and 156 published in 1990. This standard was ratified as an ISO standard 157 (ISO/IEC 9899:1990) later in 1990. There were no technical differences 158 between these publications, although the sections of the ANSI standard 159 were renumbered and became clauses in the ISO standard. This standard, 160 in both its forms, is commonly known as "C89", or occasionally as 161 "C90", from the dates of ratification. The ANSI standard, but not the 162 ISO standard, also came with a Rationale document. To select this 163 standard in GCC, use one of the options `-ansi', `-std=c89' or 164 `-std=iso9899:1990'; to obtain all the diagnostics required by the 165 standard, you should also specify `-pedantic' (or `-pedantic-errors' if 166 you want them to be errors rather than warnings). *Note Options 167 Controlling C Dialect: C Dialect Options. 168 169 Errors in the 1990 ISO C standard were corrected in two Technical 170 Corrigenda published in 1994 and 1996. GCC does not support the 171 uncorrected version. 172 173 An amendment to the 1990 standard was published in 1995. This 174 amendment added digraphs and `__STDC_VERSION__' to the language, but 175 otherwise concerned the library. This amendment is commonly known as 176 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To 177 select this standard in GCC, use the option `-std=iso9899:199409' 178 (with, as for other standard versions, `-pedantic' to receive all 179 required diagnostics). 180 181 A new edition of the ISO C standard was published in 1999 as ISO/IEC 182 9899:1999, and is commonly known as "C99". GCC has incomplete support 183 for this standard version; see 184 `http://gcc.gnu.org/gcc-4.4/c99status.html' for details. To select this 185 standard, use `-std=c99' or `-std=iso9899:1999'. (While in 186 development, drafts of this standard version were referred to as "C9X".) 187 188 Errors in the 1999 ISO C standard were corrected in three Technical 189 Corrigenda published in 2001, 2004 and 2007. GCC does not support the 190 uncorrected version. 191 192 By default, GCC provides some extensions to the C language that on 193 rare occasions conflict with the C standard. *Note Extensions to the C 194 Language Family: C Extensions. Use of the `-std' options listed above 195 will disable these extensions where they conflict with the C standard 196 version selected. You may also select an extended version of the C 197 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or 198 `-std=gnu99' (for C99 with GNU extensions). The default, if no C 199 language dialect options are given, is `-std=gnu89'; this will change to 200 `-std=gnu99' in some future release when the C99 support is complete. 201 Some features that are part of the C99 standard are accepted as 202 extensions in C89 mode. 203 204 The ISO C standard defines (in clause 4) two classes of conforming 205 implementation. A "conforming hosted implementation" supports the 206 whole standard including all the library facilities; a "conforming 207 freestanding implementation" is only required to provide certain 208 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>', 209 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99, 210 also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex 211 types, added in C99, are not required for freestanding implementations. 212 The standard also defines two environments for programs, a 213 "freestanding environment", required of all implementations and which 214 may not have library facilities beyond those required of freestanding 215 implementations, where the handling of program startup and termination 216 are implementation-defined, and a "hosted environment", which is not 217 required, in which all the library facilities are provided and startup 218 is through a function `int main (void)' or `int main (int, char *[])'. 219 An OS kernel would be a freestanding environment; a program using the 220 facilities of an operating system would normally be in a hosted 221 implementation. 222 223 GCC aims towards being usable as a conforming freestanding 224 implementation, or as the compiler for a conforming hosted 225 implementation. By default, it will act as the compiler for a hosted 226 implementation, defining `__STDC_HOSTED__' as `1' and presuming that 227 when the names of ISO C functions are used, they have the semantics 228 defined in the standard. To make it act as a conforming freestanding 229 implementation for a freestanding environment, use the option 230 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not 231 make assumptions about the meanings of function names from the standard 232 library, with exceptions noted below. To build an OS kernel, you may 233 well still need to make your own arrangements for linking and startup. 234 *Note Options Controlling C Dialect: C Dialect Options. 235 236 GCC does not provide the library facilities required only of hosted 237 implementations, nor yet all the facilities required by C99 of 238 freestanding implementations; to use the facilities of a hosted 239 environment, you will need to find them elsewhere (for example, in the 240 GNU C library). *Note Standard Libraries: Standard Libraries. 241 242 Most of the compiler support routines used by GCC are present in 243 `libgcc', but there are a few exceptions. GCC requires the 244 freestanding environment provide `memcpy', `memmove', `memset' and 245 `memcmp'. Finally, if `__builtin_trap' is used, and the target does 246 not implement the `trap' pattern, then GCC will emit a call to `abort'. 247 248 For references to Technical Corrigenda, Rationale documents and 249 information concerning the history of C that is available online, see 250 `http://gcc.gnu.org/readings.html' 251 252 2.2 C++ language 253 ================ 254 255 GCC supports the ISO C++ standard (1998) and contains experimental 256 support for the upcoming ISO C++ standard (200x). 257 258 The original ISO C++ standard was published as the ISO standard 259 (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 260 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and 261 C++03, respectively. GCC implements the majority of C++98 (`export' is 262 a notable exception) and most of the changes in C++03. To select this 263 standard in GCC, use one of the options `-ansi' or `-std=c++98'; to 264 obtain all the diagnostics required by the standard, you should also 265 specify `-pedantic' (or `-pedantic-errors' if you want them to be 266 errors rather than warnings). 267 268 The ISO C++ committee is working on a new ISO C++ standard, dubbed 269 C++0x, that is intended to be published by 2009. C++0x contains several 270 changes to the C++ language, some of which have been implemented in an 271 experimental C++0x mode in GCC. The C++0x mode in GCC tracks the draft 272 working paper for the C++0x standard; the latest working paper is 273 available on the ISO C++ committee's web site at 274 `http://www.open-std.org/jtc1/sc22/wg21/'. For information regarding 275 the C++0x features available in the experimental C++0x mode, see 276 `http://gcc.gnu.org/gcc-4.3/cxx0x_status.html'. To select this standard 277 in GCC, use the option `-std=c++0x'; to obtain all the diagnostics 278 required by the standard, you should also specify `-pedantic' (or 279 `-pedantic-errors' if you want them to be errors rather than warnings). 280 281 By default, GCC provides some extensions to the C++ language; *Note 282 Options Controlling C++ Dialect: C++ Dialect Options. Use of the 283 `-std' option listed above will disable these extensions. You may also 284 select an extended version of the C++ language explicitly with 285 `-std=gnu++98' (for C++98 with GNU extensions) or `-std=gnu++0x' (for 286 C++0x with GNU extensions). The default, if no C++ language dialect 287 options are given, is `-std=gnu++98'. 288 289 2.3 Objective-C and Objective-C++ languages 290 =========================================== 291 292 There is no formal written standard for Objective-C or Objective-C++. 293 The most authoritative manual is "Object-Oriented Programming and the 294 Objective-C Language", available at a number of web sites: 295 296 * 297 `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/' 298 is a recent (and periodically updated) version; 299 300 * `http://www.toodarkpark.org/computers/objc/' is an older example; 301 302 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html' 303 have additional useful information. 304 305 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard 306 conformance and compatibility of the Ada compiler. 307 308 *Note Standards: (gfortran)Standards, for details of standards 309 supported by GNU Fortran. 310 311 *Note Compatibility with the Java Platform: (gcj)Compatibility, for 312 details of compatibility between `gcj' and the Java Platform. 313 314 315 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top 316 317 3 GCC Command Options 318 ********************* 319 320 When you invoke GCC, it normally does preprocessing, compilation, 321 assembly and linking. The "overall options" allow you to stop this 322 process at an intermediate stage. For example, the `-c' option says 323 not to run the linker. Then the output consists of object files output 324 by the assembler. 325 326 Other options are passed on to one stage of processing. Some options 327 control the preprocessor and others the compiler itself. Yet other 328 options control the assembler and linker; most of these are not 329 documented here, since you rarely need to use any of them. 330 331 Most of the command line options that you can use with GCC are useful 332 for C programs; when an option is only useful with another language 333 (usually C++), the explanation says so explicitly. If the description 334 for a particular option does not mention a source language, you can use 335 that option with all supported languages. 336 337 *Note Compiling C++ Programs: Invoking G++, for a summary of special 338 options for compiling C++ programs. 339 340 The `gcc' program accepts options and file names as operands. Many 341 options have multi-letter names; therefore multiple single-letter 342 options may _not_ be grouped: `-dv' is very different from `-d -v'. 343 344 You can mix options and other arguments. For the most part, the order 345 you use doesn't matter. Order does matter when you use several options 346 of the same kind; for example, if you specify `-L' more than once, the 347 directories are searched in the order specified. Also, the placement 348 of the `-l' option is significant. 349 350 Many options have long names starting with `-f' or with `-W'--for 351 example, `-fmove-loop-invariants', `-Wformat' and so on. Most of these 352 have both positive and negative forms; the negative form of `-ffoo' 353 would be `-fno-foo'. This manual documents only one of these two 354 forms, whichever one is not the default. 355 356 *Note Option Index::, for an index to GCC's options. 357 358 * Menu: 359 360 * Option Summary:: Brief list of all options, without explanations. 361 * Overall Options:: Controlling the kind of output: 362 an executable, object files, assembler files, 363 or preprocessed source. 364 * Invoking G++:: Compiling C++ programs. 365 * C Dialect Options:: Controlling the variant of C language compiled. 366 * C++ Dialect Options:: Variations on C++. 367 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 368 and Objective-C++. 369 * Language Independent Options:: Controlling how diagnostics should be 370 formatted. 371 * Warning Options:: How picky should the compiler be? 372 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 373 * Optimize Options:: How much optimization? 374 * Preprocessor Options:: Controlling header files and macro definitions. 375 Also, getting dependency information for Make. 376 * Assembler Options:: Passing options to the assembler. 377 * Link Options:: Specifying libraries and so on. 378 * Directory Options:: Where to find header files and libraries. 379 Where to find the compiler executable files. 380 * Spec Files:: How to pass switches to sub-processes. 381 * Target Options:: Running a cross-compiler, or an old version of GCC. 382 * Submodel Options:: Specifying minor hardware or convention variations, 383 such as 68010 vs 68020. 384 * Code Gen Options:: Specifying conventions for function calls, data layout 385 and register usage. 386 * Environment Variables:: Env vars that affect GCC. 387 * Precompiled Headers:: Compiling a header once, and using it many times. 388 * Running Protoize:: Automatically adding or removing function prototypes. 389 390 391 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC 392 393 3.1 Option Summary 394 ================== 395 396 Here is a summary of all the options, grouped by type. Explanations are 397 in 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 -frepo -fno-rtti -fstats -ftemplate-depth-N 430 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ 431 -fno-default-inline -fvisibility-inlines-hidden 432 -fvisibility-ms-compat 433 -Wabi -Wctor-dtor-privacy 434 -Wnon-virtual-dtor -Wreorder 435 -Weffc++ -Wstrict-null-sentinel 436 -Wno-non-template-friend -Wold-style-cast 437 -Woverloaded-virtual -Wno-pmf-conversions 438 -Wsign-promo 439 440 _Objective-C and Objective-C++ Language Options_ 441 *Note Options Controlling Objective-C and Objective-C++ Dialects: 442 Objective-C and Objective-C++ Dialect Options. 443 -fconstant-string-class=CLASS-NAME 444 -fgnu-runtime -fnext-runtime 445 -fno-nil-receivers 446 -fobjc-call-cxx-cdtors 447 -fobjc-direct-dispatch 448 -fobjc-exceptions 449 -fobjc-gc 450 -freplace-objc-classes 451 -fzero-link 452 -gen-decls 453 -Wassign-intercept 454 -Wno-protocol -Wselector 455 -Wstrict-selector-match 456 -Wundeclared-selector 457 458 _Language Independent Options_ 459 *Note Options to Control Diagnostic Messages Formatting: Language 460 Independent Options. 461 -fmessage-length=N 462 -fdiagnostics-show-location=[once|every-line] 463 -fdiagnostics-show-option 464 465 _Warning Options_ 466 *Note Options to Request or Suppress Warnings: Warning Options. 467 -fsyntax-only -pedantic -pedantic-errors 468 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds 469 -Wno-attributes -Wno-builtin-macro-redefined 470 -Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual 471 -Wchar-subscripts -Wclobbered -Wcomment 472 -Wconversion -Wcoverage-mismatch -Wno-deprecated 473 -Wno-deprecated-declarations -Wdisabled-optimization 474 -Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels 475 -Werror -Werror=* 476 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 477 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral 478 -Wformat-security -Wformat-y2k 479 -Wframe-larger-than=LEN -Wignored-qualifiers 480 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int 481 -Winit-self -Winline 482 -Wno-int-to-pointer-cast -Wno-invalid-offsetof 483 -Winvalid-pch -Wlarger-than=LEN -Wunsafe-loop-optimizations 484 -Wlogical-op -Wlong-long 485 -Wmain -Wmaybe-uninitialized -Wmissing-braces -Wmissing-field-initializers 486 -Wmissing-format-attribute -Wmissing-include-dirs 487 -Wmissing-noreturn -Wno-mudflap 488 -Wno-multichar -Wnonnull -Wno-overflow -Wconversion-null 489 -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded 490 -Wparentheses -Wpedantic-ms-format -Wno-pedantic-ms-format 491 -Wpointer-arith -Wno-pointer-to-int-cast 492 -Wreal-conversion -Wredundant-decls 493 -Wreturn-type -Wripa-opt-mismatch -Wself-assign -Wself-assign-non-pod 494 -Wsequence-point -Wshadow -Wshadow-compatible-local -Wshadow-local 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 -Wunreachable-code 501 -Wunused -Wunused-function -Wunused-label -Wunused-parameter 502 -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 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-phiopt[-N] 533 -fdump-tree-forwprop[-N] 534 -fdump-tree-copyrename[-N] 535 -fdump-tree-nrv -fdump-tree-vect 536 -fdump-tree-sink 537 -fdump-tree-sra[-N] 538 -fdump-tree-fre[-N] 539 -fdump-tree-vrp[-N] 540 -ftree-vectorizer-verbose=N 541 -fdump-tree-storeccp[-N] 542 -feliminate-dwarf2-dups -feliminate-unused-debug-types 543 -feliminate-unused-debug-symbols -femit-class-debug-always 544 -fenable-icf-debug 545 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs 546 -frandom-seed=STRING -fsched-verbose=N 547 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose 548 -ftest-coverage -ftime-report -fvar-tracking 549 -g -gLEVEL -gcoff -gdwarf-2 550 -ggdb -gmlt -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf 551 -gvms -gxcoff -gxcoff+ 552 -fno-merge-debug-strings -fno-dwarf2-cfi-asm 553 -fdebug-prefix-map=OLD=NEW 554 -femit-struct-debug-baseonly -femit-struct-debug-reduced 555 -femit-struct-debug-detailed[=SPEC-LIST] 556 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name 557 -print-multi-directory -print-multi-lib 558 -print-prog-name=PROGRAM -print-search-dirs -Q 559 -print-sysroot -print-sysroot-headers-suffix 560 -save-temps -time 561 562 _Optimization Options_ 563 *Note Options that Control Optimization: Optimize Options. 564 -falign-functions[=N] -falign-jumps[=N] 565 -falign-labels[=N] -falign-loops[=N] -fassociative-math 566 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize 567 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves 568 -fcgraph-section -fcheck-data-deps 569 -fconserve-stack -fcprop-registers -fcrossjumping 570 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range 571 -fdata-sections -fdce -fdce 572 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse 573 -fearly-inlining -fexpensive-optimizations -ffast-math 574 -ffinite-math-only -ffloat-store -fforward-propagate 575 -ffunction-sections -ffvpt -ffvpt-functions=FFVPTFUNCTIONS -fgcse 576 -fgcse-after-reload -fgcse-las -fgcse-lm 577 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining 578 -finline-functions -finline-functions-called-once -finline-limit=N 579 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta 580 -fipa-pure-const -fipa-reference -fipa-struct-reorg 581 -fipa-type-escape -fira-algorithm=ALGORITHM 582 -fira-region=REGION -fira-coalesce -fno-ira-share-save-slots 583 -fno-ira-share-spill-slots -fira-verbose=N 584 -fivopts -fkeep-inline-functions -fkeep-static-consts 585 -floop-block -floop-interchange -floop-strip-mine 586 -fmerge-all-constants -fmerge-constants -fmodulo-sched 587 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap 588 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline 589 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability 590 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 591 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros 592 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss 593 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls 594 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays 595 -fprofile-correction -fprofile-dir=PATH -fprofile-generate 596 -fprofile-generate=PATH -fprofile-generate-sampling 597 -fprofile-use -fprofile-use=PATH -fprofile-values 598 -fpmu-profile-generate=PMUOPTION 599 -fpmu-profile-use=PMUOPTION 600 -freciprocal-math -fregmove -frename-registers -freorder-blocks 601 -freorder-blocks-and-partition -freorder-functions 602 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops 603 -fripa -fripa-disallow-asm-modules -fripa-disallow-opt-mismatch 604 -fripa-no-promote-always-inline-func -fripa-verbose 605 -frounding-math -fsample-profile -fsample-profile-aggregate-using 606 -fsample-profile-use-entry -fsched2-use-superblocks 607 -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous 608 -fsched-stalled-insns-dep[=N] -fsched-stalled-insns[=N] 609 -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee 610 -fselective-scheduling -fselective-scheduling2 611 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops 612 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller 613 -fsplit-wide-types -fstack-protector -fstack-protector-all 614 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer 615 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop 616 -ftree-copyrename -ftree-dce 617 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im 618 -ftree-loop-distribution 619 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize 620 -ftree-lr-shrinking 621 -ftree-parallelize-loops=N -ftree-pre -ftree-reassoc 622 -ftree-sink -ftree-sra -ftree-switch-conversion 623 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp 624 -funit-at-a-time -funroll-all-loops -funroll-loops 625 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops 626 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb 627 -fwhole-program -frecord-options-in-elf -fuse-ld 628 --param NAME=VALUE 629 -O -O0 -O1 -O2 -O3 -Os 630 631 _Preprocessor Options_ 632 *Note Options Controlling the Preprocessor: Preprocessor Options. 633 -AQUESTION=ANSWER 634 -A-QUESTION[=ANSWER] 635 -C -dD -dI -dM -dN 636 -DMACRO[=DEFN] -E -H 637 -idirafter DIR 638 -include FILE -imacros FILE 639 -iprefix FILE -iwithprefix DIR 640 -iwithprefixbefore DIR -isystem DIR 641 -imultilib DIR -isysroot DIR 642 -M -MM -MF -MG -MP -MQ -MT -nostdinc 643 -P -fworking-directory -remap 644 -trigraphs -undef -UMACRO -Wp,OPTION 645 -Xpreprocessor OPTION 646 647 _Assembler Option_ 648 *Note Passing Options to the Assembler: Assembler Options. 649 -Wa,OPTION -Xassembler OPTION 650 651 _Linker Options_ 652 *Note Options for Linking: Link Options. 653 OBJECT-FILE-NAME -lLIBRARY 654 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic 655 -s -static -static-libgcc -shared -shared-libgcc -symbolic 656 -T SCRIPT -Wl,OPTION -Xlinker OPTION 657 -u SYMBOL 658 659 _Directory Options_ 660 *Note Options for Directory Search: Directory Options. 661 -BPREFIX -IDIR -iquoteDIR -LDIR 662 -specs=FILE -I- --sysroot=DIR 663 664 _Target Options_ 665 *Note Target Options::. 666 -V VERSION -b MACHINE 667 668 _Machine Dependent Options_ 669 *Note Hardware Models and Configurations: Submodel Options. 670 671 _ARC Options_ 672 -EB -EL 673 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION 674 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION 675 676 _ARM Options_ 677 -mapcs-frame -mno-apcs-frame 678 -mabi=NAME 679 -mapcs-stack-check -mno-apcs-stack-check 680 -mapcs-float -mno-apcs-float 681 -mapcs-reentrant -mno-apcs-reentrant 682 -msched-prolog -mno-sched-prolog 683 -mlittle-endian -mbig-endian -mwords-little-endian 684 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe 685 -mthumb-interwork -mno-thumb-interwork 686 -mcpu=NAME -march=NAME -mfpu=NAME 687 -mstructure-size-boundary=N 688 -mabort-on-noreturn 689 -mlong-calls -mno-long-calls 690 -msingle-pic-base -mno-single-pic-base 691 -mpic-register=REG 692 -mnop-fun-dllimport 693 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 694 -mpoke-function-name 695 -mthumb -marm 696 -mtpcs-frame -mtpcs-leaf-frame 697 -mcaller-super-interworking -mcallee-super-interworking 698 -mtp=NAME 699 -mword-relocations 700 -mfix-cortex-m3-ldrd 701 702 _AVR Options_ 703 -mmcu=MCU -msize -mno-interrupts 704 -mcall-prologues -mno-tablejump -mtiny-stack -mint8 705 706 _Blackfin Options_ 707 -mcpu=CPU[-SIREVISION] 708 -msim -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer 709 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly 710 -mlow-64k -mno-low64k -mstack-check-l1 -mid-shared-library 711 -mno-id-shared-library -mshared-library-id=N 712 -mleaf-id-shared-library -mno-leaf-id-shared-library 713 -msep-data -mno-sep-data -mlong-calls -mno-long-calls 714 -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram 715 -micplb 716 717 _CRIS Options_ 718 -mcpu=CPU -march=CPU -mtune=CPU 719 -mmax-stack-frame=N -melinux-stacksize=N 720 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects 721 -mstack-align -mdata-align -mconst-align 722 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt 723 -melf -maout -melinux -mlinux -sim -sim2 724 -mmul-bug-workaround -mno-mul-bug-workaround 725 726 _CRX Options_ 727 -mmac -mpush-args 728 729 _Darwin Options_ 730 -all_load -allowable_client -arch -arch_errors_fatal 731 -arch_only -bind_at_load -bundle -bundle_loader 732 -client_name -compatibility_version -current_version 733 -dead_strip 734 -dependency-file -dylib_file -dylinker_install_name 735 -dynamic -dynamiclib -exported_symbols_list 736 -filelist -flat_namespace -force_cpusubtype_ALL 737 -force_flat_namespace -headerpad_max_install_names 738 -iframework 739 -image_base -init -install_name -keep_private_externs 740 -multi_module -multiply_defined -multiply_defined_unused 741 -noall_load -no_dead_strip_inits_and_terms 742 -nofixprebinding -nomultidefs -noprebind -noseglinkedit 743 -pagezero_size -prebind -prebind_all_twolevel_modules 744 -private_bundle -read_only_relocs -sectalign 745 -sectobjectsymbols -whyload -seg1addr 746 -sectcreate -sectobjectsymbols -sectorder 747 -segaddr -segs_read_only_addr -segs_read_write_addr 748 -seg_addr_table -seg_addr_table_filename -seglinkedit 749 -segprot -segs_read_only_addr -segs_read_write_addr 750 -single_module -static -sub_library -sub_umbrella 751 -twolevel_namespace -umbrella -undefined 752 -unexported_symbols_list -weak_reference_mismatches 753 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION 754 -mkernel -mone-byte-bool 755 756 _DEC Alpha Options_ 757 -mno-fp-regs -msoft-float -malpha-as -mgas 758 -mieee -mieee-with-inexact -mieee-conformant 759 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE 760 -mtrap-precision=MODE -mbuild-constants 761 -mcpu=CPU-TYPE -mtune=CPU-TYPE 762 -mbwx -mmax -mfix -mcix 763 -mfloat-vax -mfloat-ieee 764 -mexplicit-relocs -msmall-data -mlarge-data 765 -msmall-text -mlarge-text 766 -mmemory-latency=TIME 767 768 _DEC Alpha/VMS Options_ 769 -mvms-return-codes 770 771 _FR30 Options_ 772 -msmall-model -mno-lsim 773 774 _FRV Options_ 775 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 776 -mhard-float -msoft-float 777 -malloc-cc -mfixed-cc -mdword -mno-dword 778 -mdouble -mno-double 779 -mmedia -mno-media -mmuladd -mno-muladd 780 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic 781 -mlinked-fp -mlong-calls -malign-labels 782 -mlibrary-pic -macc-4 -macc-8 783 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move 784 -moptimize-membar -mno-optimize-membar 785 -mscc -mno-scc -mcond-exec -mno-cond-exec 786 -mvliw-branch -mno-vliw-branch 787 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec 788 -mno-nested-cond-exec -mtomcat-stats 789 -mTLS -mtls 790 -mcpu=CPU 791 792 _GNU/Linux Options_ 793 -mglibc -muclibc -mbionic -mandroid 794 -tno-android-cc -tno-android-ld 795 796 _H8/300 Options_ 797 -mrelax -mh -ms -mn -mint32 -malign-300 798 799 _HPPA Options_ 800 -march=ARCHITECTURE-TYPE 801 -mbig-switch -mdisable-fpregs -mdisable-indexing 802 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld 803 -mfixed-range=REGISTER-RANGE 804 -mjump-in-delay -mlinker-opt -mlong-calls 805 -mlong-load-store -mno-big-switch -mno-disable-fpregs 806 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas 807 -mno-jump-in-delay -mno-long-load-store 808 -mno-portable-runtime -mno-soft-float 809 -mno-space-regs -msoft-float -mpa-risc-1-0 810 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime 811 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio 812 -munix=UNIX-STD -nolibdld -static -threads 813 814 _i386 and x86-64 Options_ 815 -mtune=CPU-TYPE -march=CPU-TYPE 816 -mfpmath=UNIT 817 -masm=DIALECT -mno-fancy-math-387 818 -mno-fp-ret-in-387 -msoft-float 819 -mno-wide-multiply -mrtd -malign-double 820 -mpreferred-stack-boundary=NUM 821 -mincoming-stack-boundary=NUM 822 -mcld -mcx16 -msahf -mmovbe -mrecip 823 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx 824 -maes -mpclmul 825 -msse4a -m3dnow -mpopcnt -mabm -msse5 -mlwp 826 -mthreads -mno-align-stringops -minline-all-stringops 827 -minline-stringops-dynamically -minline-compares 828 -mstringop-strategy=ALG -mpush-args -maccumulate-outgoing-args 829 -m128bit-long-double -m96bit-long-double -mregparm=NUM -msseregparm 830 -mveclibabi=TYPE -mpc32 -mpc64 -mpc80 -mstackrealign 831 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs 832 -mcmodel=CODE-MODEL -mabi=NAME 833 -m32 -m64 -mlarge-data-threshold=NUM 834 -mfused-madd -mno-fused-madd -msse2avx 835 836 _IA-64 Options_ 837 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic 838 -mvolatile-asm-stop -mregister-names -mno-sdata 839 -mconstant-gp -mauto-pic -minline-float-divide-min-latency 840 -minline-float-divide-max-throughput 841 -minline-int-divide-min-latency 842 -minline-int-divide-max-throughput 843 -minline-sqrt-min-latency -minline-sqrt-max-throughput 844 -mno-dwarf2-asm -mearly-stop-bits 845 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE 846 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64 847 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec 848 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec 849 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose 850 -mno-sched-prefer-non-data-spec-insns 851 -mno-sched-prefer-non-control-spec-insns 852 -mno-sched-count-spec-in-critical-path 853 854 _M32R/D Options_ 855 -m32r2 -m32rx -m32r 856 -mdebug 857 -malign-loops -mno-align-loops 858 -missue-rate=NUMBER 859 -mbranch-cost=NUMBER 860 -mmodel=CODE-SIZE-MODEL-TYPE 861 -msdata=SDATA-TYPE 862 -mno-flush-func -mflush-func=NAME 863 -mno-flush-trap -mflush-trap=NUMBER 864 -G NUM 865 866 _M32C Options_ 867 -mcpu=CPU -msim -memregs=NUMBER 868 869 _M680x0 Options_ 870 -march=ARCH -mcpu=CPU -mtune=TUNE 871 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 872 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407 873 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 874 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -mshort 875 -mno-short -mhard-float -m68881 -msoft-float -mpcrel 876 -malign-int -mstrict-align -msep-data -mno-sep-data 877 -mshared-library-id=n -mid-shared-library -mno-id-shared-library 878 -mxgot -mno-xgot 879 880 _M68hc1x Options_ 881 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12 882 -mauto-incdec -minmax -mlong-calls -mshort 883 -msoft-reg-count=COUNT 884 885 _MCore Options_ 886 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates 887 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields 888 -m4byte-functions -mno-4byte-functions -mcallgraph-data 889 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim 890 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment 891 892 _MIPS Options_ 893 -EL -EB -march=ARCH -mtune=ARCH 894 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 895 -mips64 -mips64r2 896 -mips16 -mno-mips16 -mflip-mips16 897 -minterlink-mips16 -mno-interlink-mips16 898 -mabi=ABI -mabicalls -mno-abicalls 899 -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot 900 -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float -msoft-float 901 -msingle-float -mdouble-float -mdsp -mno-dsp -mdspr2 -mno-dspr2 902 -mfpu=FPU-TYPE 903 -msmartmips -mno-smartmips 904 -mpaired-single -mno-paired-single -mdmx -mno-mdmx 905 -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc 906 -mlong64 -mlong32 -msym32 -mno-sym32 907 -GNUM -mlocal-sdata -mno-local-sdata 908 -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt 909 -membedded-data -mno-embedded-data 910 -muninit-const-in-rodata -mno-uninit-const-in-rodata 911 -mcode-readable=SETTING 912 -msplit-addresses -mno-split-addresses 913 -mexplicit-relocs -mno-explicit-relocs 914 -mcheck-zero-division -mno-check-zero-division 915 -mdivide-traps -mdivide-breaks 916 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls 917 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp 918 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 919 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 920 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 921 -mflush-func=FUNC -mno-flush-func 922 -mbranch-cost=NUM -mbranch-likely -mno-branch-likely 923 -mfp-exceptions -mno-fp-exceptions 924 -mvr4130-align -mno-vr4130-align 925 926 _MMIX Options_ 927 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu 928 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols 929 -melf -mbranch-predict -mno-branch-predict -mbase-addresses 930 -mno-base-addresses -msingle-exit -mno-single-exit 931 932 _MN10300 Options_ 933 -mmult-bug -mno-mult-bug 934 -mam33 -mno-am33 935 -mam33-2 -mno-am33-2 936 -mreturn-pointer-on-d0 937 -mno-crt0 -mrelax 938 939 _PDP-11 Options_ 940 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 941 -mbcopy -mbcopy-builtin -mint32 -mno-int16 942 -mint16 -mno-int32 -mfloat32 -mno-float64 943 -mfloat64 -mno-float32 -mabshi -mno-abshi 944 -mbranch-expensive -mbranch-cheap 945 -msplit -mno-split -munix-asm -mdec-asm 946 947 _picoChip Options_ 948 -mae=AE_TYPE -mvliw-lookahead=N 949 -msymbol-as-address -mno-inefficient-warnings 950 951 _PowerPC Options_ See RS/6000 and PowerPC Options. 952 953 _RS/6000 and PowerPC Options_ 954 -mcpu=CPU-TYPE 955 -mtune=CPU-TYPE 956 -mpower -mno-power -mpower2 -mno-power2 957 -mpowerpc -mpowerpc64 -mno-powerpc 958 -maltivec -mno-altivec 959 -mpowerpc-gpopt -mno-powerpc-gpopt 960 -mpowerpc-gfxopt -mno-powerpc-gfxopt 961 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd 962 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp 963 -mnew-mnemonics -mold-mnemonics 964 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc 965 -m64 -m32 -mxl-compat -mno-xl-compat -mpe 966 -malign-power -malign-natural 967 -msoft-float -mhard-float -mmultiple -mno-multiple 968 -msingle-float -mdouble-float -msimple-fpu 969 -mstring -mno-string -mupdate -mno-update 970 -mavoid-indexed-addresses -mno-avoid-indexed-addresses 971 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align 972 -mstrict-align -mno-strict-align -mrelocatable 973 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib 974 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian 975 -mdynamic-no-pic -maltivec -mswdiv 976 -mprioritize-restricted-insns=PRIORITY 977 -msched-costly-dep=DEPENDENCE_TYPE 978 -minsert-sched-nops=SCHEME 979 -mcall-sysv -mcall-netbsd 980 -maix-struct-return -msvr4-struct-return 981 -mabi=ABI-TYPE -msecure-plt -mbss-plt 982 -misel -mno-isel 983 -misel=yes -misel=no 984 -mspe -mno-spe 985 -mspe=yes -mspe=no 986 -mpaired 987 -mgen-cell-microcode -mwarn-cell-microcode 988 -mvrsave -mno-vrsave 989 -mmulhw -mno-mulhw 990 -mdlmzb -mno-dlmzb 991 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double 992 -mprototype -mno-prototype 993 -msim -mmvme -mads -myellowknife -memb -msdata 994 -msdata=OPT -mvxworks -G NUM -pthread 995 996 _S/390 and zSeries Options_ 997 -mtune=CPU-TYPE -march=CPU-TYPE 998 -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp 999 -mlong-double-64 -mlong-double-128 1000 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack 1001 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle 1002 -m64 -m31 -mdebug -mno-debug -mesa -mzarch 1003 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd 1004 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard 1005 1006 _Score Options_ 1007 -meb -mel 1008 -mnhwloop 1009 -muls 1010 -mmac 1011 -mscore5 -mscore5u -mscore7 -mscore7d 1012 1013 _SH Options_ 1014 -m1 -m2 -m2e -m3 -m3e 1015 -m4-nofpu -m4-single-only -m4-single -m4 1016 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al 1017 -m5-64media -m5-64media-nofpu 1018 -m5-32media -m5-32media-nofpu 1019 -m5-compact -m5-compact-nofpu 1020 -mb -ml -mdalign -mrelax 1021 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave 1022 -mieee -mbitops -misize -minline-ic_invalidate -mpadstruct -mspace 1023 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY 1024 -mdivsi3_libfunc=NAME -mfixed-range=REGISTER-RANGE 1025 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed 1026 -minvalid-symbols 1027 1028 _SPARC Options_ 1029 -mcpu=CPU-TYPE 1030 -mtune=CPU-TYPE 1031 -mcmodel=CODE-MODEL 1032 -m32 -m64 -mapp-regs -mno-app-regs 1033 -mfaster-structs -mno-faster-structs 1034 -mfpu -mno-fpu -mhard-float -msoft-float 1035 -mhard-quad-float -msoft-quad-float 1036 -mimpure-text -mno-impure-text -mlittle-endian 1037 -mstack-bias -mno-stack-bias 1038 -munaligned-doubles -mno-unaligned-doubles 1039 -mv8plus -mno-v8plus -mvis -mno-vis 1040 -threads -pthreads -pthread 1041 1042 _SPU Options_ 1043 -mwarn-reloc -merror-reloc 1044 -msafe-dma -munsafe-dma 1045 -mbranch-hints 1046 -msmall-mem -mlarge-mem -mstdmain 1047 -mfixed-range=REGISTER-RANGE 1048 1049 _System V Options_ 1050 -Qy -Qn -YP,PATHS -Ym,DIR 1051 1052 _V850 Options_ 1053 -mlong-calls -mno-long-calls -mep -mno-ep 1054 -mprolog-function -mno-prolog-function -mspace 1055 -mtda=N -msda=N -mzda=N 1056 -mapp-regs -mno-app-regs 1057 -mdisable-callt -mno-disable-callt 1058 -mv850e1 1059 -mv850e 1060 -mv850 -mbig-switch 1061 1062 _VAX Options_ 1063 -mg -mgnu -munix 1064 1065 _VxWorks Options_ 1066 -mrtp -non-static -Bstatic -Bdynamic 1067 -Xbind-lazy -Xbind-now 1068 1069 _x86-64 Options_ See i386 and x86-64 Options. 1070 1071 _i386 and x86-64 Windows Options_ 1072 -mconsole -mcygwin -mno-cygwin -mdll 1073 -mnop-fun-dllimport -mthread -mwin32 -mwindows 1074 1075 _Xstormy16 Options_ 1076 -msim 1077 1078 _Xtensa Options_ 1079 -mconst16 -mno-const16 1080 -mfused-madd -mno-fused-madd 1081 -mserialize-volatile -mno-serialize-volatile 1082 -mtext-section-literals -mno-text-section-literals 1083 -mtarget-align -mno-target-align 1084 -mlongcalls -mno-longcalls 1085 1086 _zSeries Options_ See S/390 and zSeries Options. 1087 1088 _Code Generation Options_ 1089 *Note Options for Code Generation Conventions: Code Gen Options. 1090 -fcall-saved-REG -fcall-used-REG 1091 -ffixed-REG -fexceptions 1092 -fnon-call-exceptions -funwind-tables 1093 -fasynchronous-unwind-tables 1094 -finhibit-size-directive -finstrument-functions 1095 -finstrument-functions-exclude-function-list=SYM,SYM,... 1096 -finstrument-functions-exclude-file-list=FILE,FILE,... 1097 -fno-common -fno-ident 1098 -fpcc-struct-return -fpic -fPIC -fpie -fPIE 1099 -fno-jump-tables 1100 -frecord-gcc-switches 1101 -freg-struct-return -fshort-enums 1102 -fshort-double -fshort-wchar 1103 -fverbose-asm -fpack-struct[=N] -fstack-check 1104 -fstack-limit-register=REG -fstack-limit-symbol=SYM 1105 -fno-stack-limit -fargument-alias -fargument-noalias 1106 -fargument-noalias-global -fargument-noalias-anything 1107 -fleading-underscore -ftls-model=MODEL 1108 -ftrapv -fwrapv -fbounds-check 1109 -fvisibility 1110 1111 1112 * Menu: 1113 1114 * Overall Options:: Controlling the kind of output: 1115 an executable, object files, assembler files, 1116 or preprocessed source. 1117 * C Dialect Options:: Controlling the variant of C language compiled. 1118 * C++ Dialect Options:: Variations on C++. 1119 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C 1120 and Objective-C++. 1121 * Language Independent Options:: Controlling how diagnostics should be 1122 formatted. 1123 * Warning Options:: How picky should the compiler be? 1124 * Debugging Options:: Symbol tables, measurements, and debugging dumps. 1125 * Optimize Options:: How much optimization? 1126 * Preprocessor Options:: Controlling header files and macro definitions. 1127 Also, getting dependency information for Make. 1128 * Assembler Options:: Passing options to the assembler. 1129 * Link Options:: Specifying libraries and so on. 1130 * Directory Options:: Where to find header files and libraries. 1131 Where to find the compiler executable files. 1132 * Spec Files:: How to pass switches to sub-processes. 1133 * Target Options:: Running a cross-compiler, or an old version of GCC. 1134 1135 1136 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC 1137 1138 3.2 Options Controlling the Kind of Output 1139 ========================================== 1140 1141 Compilation can involve up to four stages: preprocessing, compilation 1142 proper, assembly and linking, always in that order. GCC is capable of 1143 preprocessing and compiling several files either into several assembler 1144 input files, or into one assembler input file; then each assembler 1145 input file produces an object file, and linking combines all the object 1146 files (those newly compiled, and those specified as input) into an 1147 executable file. 1148 1149 For any given input file, the file name suffix determines what kind of 1150 compilation is done: 1151 1152 `FILE.c' 1153 C source code which must be preprocessed. 1154 1155 `FILE.i' 1156 C source code which should not be preprocessed. 1157 1158 `FILE.ii' 1159 C++ source code which should not be preprocessed. 1160 1161 `FILE.m' 1162 Objective-C source code. Note that you must link with the 1163 `libobjc' library to make an Objective-C program work. 1164 1165 `FILE.mi' 1166 Objective-C source code which should not be preprocessed. 1167 1168 `FILE.mm' 1169 `FILE.M' 1170 Objective-C++ source code. Note that you must link with the 1171 `libobjc' library to make an Objective-C++ program work. Note 1172 that `.M' refers to a literal capital M. 1173 1174 `FILE.mii' 1175 Objective-C++ source code which should not be preprocessed. 1176 1177 `FILE.h' 1178 C, C++, Objective-C or Objective-C++ header file to be turned into 1179 a precompiled header. 1180 1181 `FILE.cc' 1182 `FILE.cp' 1183 `FILE.cxx' 1184 `FILE.cpp' 1185 `FILE.CPP' 1186 `FILE.c++' 1187 `FILE.C' 1188 C++ source code which must be preprocessed. Note that in `.cxx', 1189 the last two letters must both be literally `x'. Likewise, `.C' 1190 refers to a literal capital C. 1191 1192 `FILE.mm' 1193 `FILE.M' 1194 Objective-C++ source code which must be preprocessed. 1195 1196 `FILE.mii' 1197 Objective-C++ source code which should not be preprocessed. 1198 1199 `FILE.hh' 1200 `FILE.H' 1201 `FILE.hp' 1202 `FILE.hxx' 1203 `FILE.hpp' 1204 `FILE.HPP' 1205 `FILE.h++' 1206 `FILE.tcc' 1207 C++ header file to be turned into a precompiled header. 1208 1209 `FILE.f' 1210 `FILE.for' 1211 `FILE.ftn' 1212 Fixed form Fortran source code which should not be preprocessed. 1213 1214 `FILE.F' 1215 `FILE.FOR' 1216 `FILE.fpp' 1217 `FILE.FPP' 1218 `FILE.FTN' 1219 Fixed form Fortran source code which must be preprocessed (with 1220 the traditional preprocessor). 1221 1222 `FILE.f90' 1223 `FILE.f95' 1224 `FILE.f03' 1225 `FILE.f08' 1226 Free form Fortran source code which should not be preprocessed. 1227 1228 `FILE.F90' 1229 `FILE.F95' 1230 `FILE.F03' 1231 `FILE.F08' 1232 Free form Fortran source code which must be preprocessed (with the 1233 traditional preprocessor). 1234 1235 `FILE.ads' 1236 Ada source code file which contains a library unit declaration (a 1237 declaration of a package, subprogram, or generic, or a generic 1238 instantiation), or a library unit renaming declaration (a package, 1239 generic, or subprogram renaming declaration). Such files are also 1240 called "specs". 1241 1242 `FILE.adb' 1243 Ada source code file containing a library unit body (a subprogram 1244 or package body). Such files are also called "bodies". 1245 1246 `FILE.s' 1247 Assembler code. 1248 1249 `FILE.S' 1250 `FILE.sx' 1251 Assembler code which must be preprocessed. 1252 1253 `OTHER' 1254 An object file to be fed straight into linking. Any file name 1255 with no recognized suffix is treated this way. 1256 1257 You can specify the input language explicitly with the `-x' option: 1258 1259 `-x LANGUAGE' 1260 Specify explicitly the LANGUAGE for the following input files 1261 (rather than letting the compiler choose a default based on the 1262 file name suffix). This option applies to all following input 1263 files until the next `-x' option. Possible values for LANGUAGE 1264 are: 1265 c c-header c-cpp-output 1266 c++ c++-header c++-cpp-output 1267 objective-c objective-c-header objective-c-cpp-output 1268 objective-c++ objective-c++-header objective-c++-cpp-output 1269 assembler assembler-with-cpp 1270 ada 1271 f77 f77-cpp-input f95 f95-cpp-input 1272 java 1273 1274 `-x none' 1275 Turn off any specification of a language, so that subsequent files 1276 are handled according to their file name suffixes (as they are if 1277 `-x' has not been used at all). 1278 1279 `-pass-exit-codes' 1280 Normally the `gcc' program will exit with the code of 1 if any 1281 phase of the compiler returns a non-success return code. If you 1282 specify `-pass-exit-codes', the `gcc' program will instead return 1283 with numerically highest error produced by any phase that returned 1284 an error indication. The C, C++, and Fortran frontends return 4, 1285 if an internal compiler error is encountered. 1286 1287 If you only want some of the stages of compilation, you can use `-x' 1288 (or filename suffixes) to tell `gcc' where to start, and one of the 1289 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that 1290 some combinations (for example, `-x cpp-output -E') instruct `gcc' to 1291 do nothing at all. 1292 1293 `-c' 1294 Compile or assemble the source files, but do not link. The linking 1295 stage simply is not done. The ultimate output is in the form of an 1296 object file for each source file. 1297 1298 By default, the object file name for a source file is made by 1299 replacing the suffix `.c', `.i', `.s', etc., with `.o'. 1300 1301 Unrecognized input files, not requiring compilation or assembly, 1302 are ignored. 1303 1304 `-S' 1305 Stop after the stage of compilation proper; do not assemble. The 1306 output is in the form of an assembler code file for each 1307 non-assembler input file specified. 1308 1309 By default, the assembler file name for a source file is made by 1310 replacing the suffix `.c', `.i', etc., with `.s'. 1311 1312 Input files that don't require compilation are ignored. 1313 1314 `-E' 1315 Stop after the preprocessing stage; do not run the compiler 1316 proper. The output is in the form of preprocessed source code, 1317 which is sent to the standard output. 1318 1319 Input files which don't require preprocessing are ignored. 1320 1321 `-o FILE' 1322 Place output in file FILE. This applies regardless to whatever 1323 sort of output is being produced, whether it be an executable file, 1324 an object file, an assembler file or preprocessed C code. 1325 1326 If `-o' is not specified, the default is to put an executable file 1327 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its 1328 assembler file in `SOURCE.s', a precompiled header file in 1329 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard 1330 output. 1331 1332 `-v' 1333 Print (on standard error output) the commands executed to run the 1334 stages of compilation. Also print the version number of the 1335 compiler driver program and of the preprocessor and the compiler 1336 proper. 1337 1338 `-###' 1339 Like `-v' except the commands are not executed and all command 1340 arguments are quoted. This is useful for shell scripts to capture 1341 the driver-generated command lines. 1342 1343 `-pipe' 1344 Use pipes rather than temporary files for communication between the 1345 various stages of compilation. This fails to work on some systems 1346 where the assembler is unable to read from a pipe; but the GNU 1347 assembler has no trouble. 1348 1349 `-combine' 1350 If you are compiling multiple source files, this option tells the 1351 driver to pass all the source files to the compiler at once (for 1352 those languages for which the compiler can handle this). This 1353 will allow intermodule analysis (IMA) to be performed by the 1354 compiler. Currently the only language for which this is supported 1355 is C. If you pass source files for multiple languages to the 1356 driver, using this option, the driver will invoke the compiler(s) 1357 that support IMA once each, passing each compiler all the source 1358 files appropriate for it. For those languages that do not support 1359 IMA this option will be ignored, and the compiler will be invoked 1360 once for each source file in that language. If you use this 1361 option in conjunction with `-save-temps', the compiler will 1362 generate multiple pre-processed files (one for each source file), 1363 but only one (combined) `.o' or `.s' file. 1364 1365 `--help' 1366 Print (on the standard output) a description of the command line 1367 options understood by `gcc'. If the `-v' option is also specified 1368 then `--help' will also be passed on to the various processes 1369 invoked by `gcc', so that they can display the command line options 1370 they accept. If the `-Wextra' option has also been specified 1371 (prior to the `--help' option), then command line options which 1372 have no documentation associated with them will also be displayed. 1373 1374 `--target-help' 1375 Print (on the standard output) a description of target-specific 1376 command line options for each tool. For some targets extra 1377 target-specific information may also be printed. 1378 1379 `--help={CLASS|[^]QUALIFIER}[,...]' 1380 Print (on the standard output) a description of the command line 1381 options understood by the compiler that fit into all specified 1382 classes and qualifiers. These are the supported classes: 1383 1384 `optimizers' 1385 This will display all of the optimization options supported 1386 by the compiler. 1387 1388 `warnings' 1389 This will display all of the options controlling warning 1390 messages produced by the compiler. 1391 1392 `target' 1393 This will display target-specific options. Unlike the 1394 `--target-help' option however, target-specific options of the 1395 linker and assembler will not be displayed. This is because 1396 those tools do not currently support the extended `--help=' 1397 syntax. 1398 1399 `params' 1400 This will display the values recognized by the `--param' 1401 option. 1402 1403 LANGUAGE 1404 This will display the options supported for LANGUAGE, where 1405 LANGUAGE is the name of one of the languages supported in this 1406 version of GCC. 1407 1408 `common' 1409 This will display the options that are common to all 1410 languages. 1411 1412 These are the supported qualifiers: 1413 1414 `undocumented' 1415 Display only those options which are undocumented. 1416 1417 `joined' 1418 Display options which take an argument that appears after an 1419 equal sign in the same continuous piece of text, such as: 1420 `--help=target'. 1421 1422 `separate' 1423 Display options which take an argument that appears as a 1424 separate word following the original option, such as: `-o 1425 output-file'. 1426 1427 Thus for example to display all the undocumented target-specific 1428 switches supported by the compiler the following can be used: 1429 1430 --help=target,undocumented 1431 1432 The sense of a qualifier can be inverted by prefixing it with the 1433 `^' character, so for example to display all binary warning 1434 options (i.e., ones that are either on or off and that do not take 1435 an argument), which have a description the following can be used: 1436 1437 --help=warnings,^joined,^undocumented 1438 1439 The argument to `--help=' should not consist solely of inverted 1440 qualifiers. 1441 1442 Combining several classes is possible, although this usually 1443 restricts the output by so much that there is nothing to display. 1444 One case where it does work however is when one of the classes is 1445 TARGET. So for example to display all the target-specific 1446 optimization options the following can be used: 1447 1448 --help=target,optimizers 1449 1450 The `--help=' option can be repeated on the command line. Each 1451 successive use will display its requested class of options, 1452 skipping those that have already been displayed. 1453 1454 If the `-Q' option appears on the command line before the 1455 `--help=' option, then the descriptive text displayed by `--help=' 1456 is changed. Instead of describing the displayed options, an 1457 indication is given as to whether the option is enabled, disabled 1458 or set to a specific value (assuming that the compiler knows this 1459 at the point where the `--help=' option is used). 1460 1461 Here is a truncated example from the ARM port of `gcc': 1462 1463 % gcc -Q -mabi=2 --help=target -c 1464 The following options are target specific: 1465 -mabi= 2 1466 -mabort-on-noreturn [disabled] 1467 -mapcs [disabled] 1468 1469 The output is sensitive to the effects of previous command line 1470 options, so for example it is possible to find out which 1471 optimizations are enabled at `-O2' by using: 1472 1473 -Q -O2 --help=optimizers 1474 1475 Alternatively you can discover which binary optimizations are 1476 enabled by `-O3' by using: 1477 1478 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts 1479 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts 1480 diff /tmp/O2-opts /tmp/O3-opts | grep enabled 1481 1482 `-no-canonical-prefixes' 1483 Do not expand any symbolic links, resolve references to `/../' or 1484 `/./', or make the path absolute when generating a relative prefix. 1485 1486 `--version' 1487 Display the version number and copyrights of the invoked GCC. 1488 1489 `-wrapper' 1490 Invoke all subcommands under a wrapper program. It takes a single 1491 comma separated list as an argument, which will be used to invoke 1492 the wrapper: 1493 1494 gcc -c t.c -wrapper gdb,--args 1495 1496 This will invoke all subprograms of gcc under "gdb -args", thus 1497 cc1 invocation will be "gdb -args cc1 ...". 1498 1499 `-fplugin=NAME.so' 1500 Load the plugin code in file NAME.so, assumed to be a shared 1501 object to be dlopen'd by the compiler. The base name of the 1502 shared object file is used to identify the plugin for the purposes 1503 of argument parsing (See `-fplugin-arg-NAME-KEY=VALUE' below). 1504 Each plugin should define the callback functions specified in the 1505 Plugins API. 1506 1507 `-fplugin-arg-NAME-KEY=VALUE' 1508 Define an argument called KEY with a value of VALUE for the plugin 1509 called NAME. 1510 1511 `@FILE' 1512 Read command-line options from FILE. The options read are 1513 inserted in place of the original @FILE option. If FILE does not 1514 exist, or cannot be read, then the option will be treated 1515 literally, and not removed. 1516 1517 Options in FILE are separated by whitespace. A whitespace 1518 character may be included in an option by surrounding the entire 1519 option in either single or double quotes. Any character 1520 (including a backslash) may be included by prefixing the character 1521 to be included with a backslash. The FILE may itself contain 1522 additional @FILE options; any such options will be processed 1523 recursively. 1524 1525 1526 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC 1527 1528 3.3 Compiling C++ Programs 1529 ========================== 1530 1531 C++ source files conventionally use one of the suffixes `.C', `.cc', 1532 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use 1533 `.hh', `.hpp', `.H', or (for shared template code) `.tcc'; and 1534 preprocessed C++ files use the suffix `.ii'. GCC recognizes files with 1535 these names and compiles them as C++ programs even if you call the 1536 compiler the same way as for compiling C programs (usually with the 1537 name `gcc'). 1538 1539 However, the use of `gcc' does not add the C++ library. `g++' is a 1540 program that calls GCC and treats `.c', `.h' and `.i' files as C++ 1541 source files instead of C source files unless `-x' is used, and 1542 automatically specifies linking against the C++ library. This program 1543 is also useful when precompiling a C header file with a `.h' extension 1544 for use in C++ compilations. On many systems, `g++' is also installed 1545 with the name `c++'. 1546 1547 When you compile C++ programs, you may specify many of the same 1548 command-line options that you use for compiling programs in any 1549 language; or command-line options meaningful for C and related 1550 languages; or options that are meaningful only for C++ programs. *Note 1551 Options Controlling C Dialect: C Dialect Options, for explanations of 1552 options for languages related to C. *Note Options Controlling C++ 1553 Dialect: C++ Dialect Options, for explanations of options that are 1554 meaningful only for C++ programs. 1555 1556 1557 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC 1558 1559 3.4 Options Controlling C Dialect 1560 ================================= 1561 1562 The following options control the dialect of C (or languages derived 1563 from C, such as C++, Objective-C and Objective-C++) that the compiler 1564 accepts: 1565 1566 `-ansi' 1567 In C mode, this is equivalent to `-std=c89'. In C++ mode, it is 1568 equivalent to `-std=c++98'. 1569 1570 This turns off certain features of GCC that are incompatible with 1571 ISO C90 (when compiling C code), or of standard C++ (when 1572 compiling C++ code), such as the `asm' and `typeof' keywords, and 1573 predefined macros such as `unix' and `vax' that identify the type 1574 of system you are using. It also enables the undesirable and 1575 rarely used ISO trigraph feature. For the C compiler, it disables 1576 recognition of C++ style `//' comments as well as the `inline' 1577 keyword. 1578 1579 The alternate keywords `__asm__', `__extension__', `__inline__' 1580 and `__typeof__' continue to work despite `-ansi'. You would not 1581 want to use them in an ISO C program, of course, but it is useful 1582 to put them in header files that might be included in compilations 1583 done with `-ansi'. Alternate predefined macros such as `__unix__' 1584 and `__vax__' are also available, with or without `-ansi'. 1585 1586 The `-ansi' option does not cause non-ISO programs to be rejected 1587 gratuitously. For that, `-pedantic' is required in addition to 1588 `-ansi'. *Note Warning Options::. 1589 1590 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option 1591 is used. Some header files may notice this macro and refrain from 1592 declaring certain functions or defining certain macros that the 1593 ISO standard doesn't call for; this is to avoid interfering with 1594 any programs that might use these names for other things. 1595 1596 Functions that would normally be built in but do not have semantics 1597 defined by ISO C (such as `alloca' and `ffs') are not built-in 1598 functions when `-ansi' is used. *Note Other built-in functions 1599 provided by GCC: Other Builtins, for details of the functions 1600 affected. 1601 1602 `-std=' 1603 Determine the language standard. *Note Language Standards 1604 Supported by GCC: Standards, for details of these standard 1605 versions. This option is currently only supported when compiling 1606 C or C++. 1607 1608 The compiler can accept several base standards, such as `c89' or 1609 `c++98', and GNU dialects of those standards, such as `gnu89' or 1610 `gnu++98'. By specifying a base standard, the compiler will 1611 accept all programs following that standard and those using GNU 1612 extensions that do not contradict it. For example, `-std=c89' 1613 turns off certain features of GCC that are incompatible with ISO 1614 C90, such as the `asm' and `typeof' keywords, but not other GNU 1615 extensions that do not have a meaning in ISO C90, such as omitting 1616 the middle term of a `?:' expression. On the other hand, by 1617 specifying a GNU dialect of a standard, all features the compiler 1618 support are enabled, even when those features change the meaning 1619 of the base standard and some strict-conforming programs may be 1620 rejected. The particular standard is used by `-pedantic' to 1621 identify which features are GNU extensions given that version of 1622 the standard. For example `-std=gnu89 -pedantic' would warn about 1623 C++ style `//' comments, while `-std=gnu99 -pedantic' would not. 1624 1625 A value for this option must be provided; possible values are 1626 1627 `c89' 1628 `iso9899:1990' 1629 Support all ISO C90 programs (certain GNU extensions that 1630 conflict with ISO C90 are disabled). Same as `-ansi' for C 1631 code. 1632 1633 `iso9899:199409' 1634 ISO C90 as modified in amendment 1. 1635 1636 `c99' 1637 `c9x' 1638 `iso9899:1999' 1639 `iso9899:199x' 1640 ISO C99. Note that this standard is not yet fully supported; 1641 see `http://gcc.gnu.org/gcc-4.4/c99status.html' for more 1642 information. The names `c9x' and `iso9899:199x' are 1643 deprecated. 1644 1645 `gnu89' 1646 GNU dialect of ISO C90 (including some C99 features). This is 1647 the default for C code. 1648 1649 `gnu99' 1650 `gnu9x' 1651 GNU dialect of ISO C99. When ISO C99 is fully implemented in 1652 GCC, this will become the default. The name `gnu9x' is 1653 deprecated. 1654 1655 `c++98' 1656 The 1998 ISO C++ standard plus amendments. Same as `-ansi' for 1657 C++ code. 1658 1659 `gnu++98' 1660 GNU dialect of `-std=c++98'. This is the default for C++ 1661 code. 1662 1663 `c++0x' 1664 The working draft of the upcoming ISO C++0x standard. This 1665 option enables experimental features that are likely to be 1666 included in C++0x. The working draft is constantly changing, 1667 and any feature that is enabled by this flag may be removed 1668 from future versions of GCC if it is not part of the C++0x 1669 standard. 1670 1671 `gnu++0x' 1672 GNU dialect of `-std=c++0x'. This option enables experimental 1673 features that may be removed in future versions of GCC. 1674 1675 `-fgnu89-inline' 1676 The option `-fgnu89-inline' tells GCC to use the traditional GNU 1677 semantics for `inline' functions when in C99 mode. *Note An 1678 Inline Function is As Fast As a Macro: Inline. This option is 1679 accepted and ignored by GCC versions 4.1.3 up to but not including 1680 4.3. In GCC versions 4.3 and later it changes the behavior of GCC 1681 in C99 mode. Using this option is roughly equivalent to adding the 1682 `gnu_inline' function attribute to all inline functions (*note 1683 Function Attributes::). 1684 1685 The option `-fno-gnu89-inline' explicitly tells GCC to use the C99 1686 semantics for `inline' when in C99 or gnu99 mode (i.e., it 1687 specifies the default behavior). This option was first supported 1688 in GCC 4.3. This option is not supported in C89 or gnu89 mode. 1689 1690 The preprocessor macros `__GNUC_GNU_INLINE__' and 1691 `__GNUC_STDC_INLINE__' may be used to check which semantics are in 1692 effect for `inline' functions. *Note Common Predefined Macros: 1693 (cpp)Common Predefined Macros. 1694 1695 `-aux-info FILENAME' 1696 Output to the given filename prototyped declarations for all 1697 functions declared and/or defined in a translation unit, including 1698 those in header files. This option is silently ignored in any 1699 language other than C. 1700 1701 Besides declarations, the file indicates, in comments, the origin 1702 of each declaration (source file and line), whether the 1703 declaration was implicit, prototyped or unprototyped (`I', `N' for 1704 new or `O' for old, respectively, in the first character after the 1705 line number and the colon), and whether it came from a declaration 1706 or a definition (`C' or `F', respectively, in the following 1707 character). In the case of function definitions, a K&R-style list 1708 of arguments followed by their declarations is also provided, 1709 inside comments, after the declaration. 1710 1711 `-fno-asm' 1712 Do not recognize `asm', `inline' or `typeof' as a keyword, so that 1713 code can use these words as identifiers. You can use the keywords 1714 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies 1715 `-fno-asm'. 1716 1717 In C++, this switch only affects the `typeof' keyword, since `asm' 1718 and `inline' are standard keywords. You may want to use the 1719 `-fno-gnu-keywords' flag instead, which has the same effect. In 1720 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects 1721 the `asm' and `typeof' keywords, since `inline' is a standard 1722 keyword in ISO C99. 1723 1724 `-fno-builtin' 1725 `-fno-builtin-FUNCTION' 1726 Don't recognize built-in functions that do not begin with 1727 `__builtin_' as prefix. *Note Other built-in functions provided 1728 by GCC: Other Builtins, for details of the functions affected, 1729 including those which are not built-in functions when `-ansi' or 1730 `-std' options for strict ISO C conformance are used because they 1731 do not have an ISO standard meaning. 1732 1733 GCC normally generates special code to handle certain built-in 1734 functions more efficiently; for instance, calls to `alloca' may 1735 become single instructions that adjust the stack directly, and 1736 calls to `memcpy' may become inline copy loops. The resulting 1737 code is often both smaller and faster, but since the function 1738 calls no longer appear as such, you cannot set a breakpoint on 1739 those calls, nor can you change the behavior of the functions by 1740 linking with a different library. In addition, when a function is 1741 recognized as a built-in function, GCC may use information about 1742 that function to warn about problems with calls to that function, 1743 or to generate more efficient code, even if the resulting code 1744 still contains calls to that function. For example, warnings are 1745 given with `-Wformat' for bad calls to `printf', when `printf' is 1746 built in, and `strlen' is known not to modify global memory. 1747 1748 With the `-fno-builtin-FUNCTION' option only the built-in function 1749 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'. 1750 If a function is named that is not built-in in this version of 1751 GCC, this option is ignored. There is no corresponding 1752 `-fbuiltin-FUNCTION' option; if you wish to enable built-in 1753 functions selectively when using `-fno-builtin' or 1754 `-ffreestanding', you may define macros such as: 1755 1756 #define abs(n) __builtin_abs ((n)) 1757 #define strcpy(d, s) __builtin_strcpy ((d), (s)) 1758 1759 `-fhosted' 1760 Assert that compilation takes place in a hosted environment. This 1761 implies `-fbuiltin'. A hosted environment is one in which the 1762 entire standard library is available, and in which `main' has a 1763 return type of `int'. Examples are nearly everything except a 1764 kernel. This is equivalent to `-fno-freestanding'. 1765 1766 `-ffreestanding' 1767 Assert that compilation takes place in a freestanding environment. 1768 This implies `-fno-builtin'. A freestanding environment is one 1769 in which the standard library may not exist, and program startup 1770 may not necessarily be at `main'. The most obvious example is an 1771 OS kernel. This is equivalent to `-fno-hosted'. 1772 1773 *Note Language Standards Supported by GCC: Standards, for details 1774 of freestanding and hosted environments. 1775 1776 `-fopenmp' 1777 Enable handling of OpenMP directives `#pragma omp' in C/C++ and 1778 `!$omp' in Fortran. When `-fopenmp' is specified, the compiler 1779 generates parallel code according to the OpenMP Application 1780 Program Interface v2.5 `http://www.openmp.org/'. This option 1781 implies `-pthread', and thus is only supported on targets that 1782 have support for `-pthread'. 1783 1784 `-fms-extensions' 1785 Accept some non-standard constructs used in Microsoft header files. 1786 1787 Some cases of unnamed fields in structures and unions are only 1788 accepted with this option. *Note Unnamed struct/union fields 1789 within structs/unions: Unnamed Fields, for details. 1790 1791 `-trigraphs' 1792 Support ISO C trigraphs. The `-ansi' option (and `-std' options 1793 for strict ISO C conformance) implies `-trigraphs'. 1794 1795 `-no-integrated-cpp' 1796 Performs a compilation in two passes: preprocessing and compiling. 1797 This option allows a user supplied "cc1", "cc1plus", or "cc1obj" 1798 via the `-B' option. The user supplied compilation step can then 1799 add in an additional preprocessing step after normal preprocessing 1800 but before compiling. The default is to use the integrated cpp 1801 (internal cpp) 1802 1803 The semantics of this option will change if "cc1", "cc1plus", and 1804 "cc1obj" are merged. 1805 1806 `-traditional' 1807 `-traditional-cpp' 1808 Formerly, these options caused GCC to attempt to emulate a 1809 pre-standard C compiler. They are now only supported with the 1810 `-E' switch. The preprocessor continues to support a pre-standard 1811 mode. See the GNU CPP manual for details. 1812 1813 `-fcond-mismatch' 1814 Allow conditional expressions with mismatched types in the second 1815 and third arguments. The value of such an expression is void. 1816 This option is not supported for C++. 1817 1818 `-flax-vector-conversions' 1819 Allow implicit conversions between vectors with differing numbers 1820 of elements and/or incompatible element types. This option should 1821 not be used for new code. 1822 1823 `-funsigned-char' 1824 Let the type `char' be unsigned, like `unsigned char'. 1825 1826 Each kind of machine has a default for what `char' should be. It 1827 is either like `unsigned char' by default or like `signed char' by 1828 default. 1829 1830 Ideally, a portable program should always use `signed char' or 1831 `unsigned char' when it depends on the signedness of an object. 1832 But many programs have been written to use plain `char' and expect 1833 it to be signed, or expect it to be unsigned, depending on the 1834 machines they were written for. This option, and its inverse, let 1835 you make such a program work with the opposite default. 1836 1837 The type `char' is always a distinct type from each of `signed 1838 char' or `unsigned char', even though its behavior is always just 1839 like one of those two. 1840 1841 `-fsigned-char' 1842 Let the type `char' be signed, like `signed char'. 1843 1844 Note that this is equivalent to `-fno-unsigned-char', which is the 1845 negative form of `-funsigned-char'. Likewise, the option 1846 `-fno-signed-char' is equivalent to `-funsigned-char'. 1847 1848 `-fsigned-bitfields' 1849 `-funsigned-bitfields' 1850 `-fno-signed-bitfields' 1851 `-fno-unsigned-bitfields' 1852 These options control whether a bit-field is signed or unsigned, 1853 when the declaration does not use either `signed' or `unsigned'. 1854 By default, such a bit-field is signed, because this is 1855 consistent: the basic integer types such as `int' are signed types. 1856 1857 1858 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC 1859 1860 3.5 Options Controlling C++ Dialect 1861 =================================== 1862 1863 This section describes the command-line options that are only meaningful 1864 for C++ programs; but you can also use most of the GNU compiler options 1865 regardless of what language your program is in. For example, you might 1866 compile a file `firstClass.C' like this: 1867 1868 g++ -g -frepo -O -c firstClass.C 1869 1870 In this example, only `-frepo' is an option meant only for C++ 1871 programs; you can use the other options with any language supported by 1872 GCC. 1873 1874 Here is a list of options that are _only_ for compiling C++ programs: 1875 1876 `-fabi-version=N' 1877 Use version N of the C++ ABI. Version 2 is the version of the C++ 1878 ABI that first appeared in G++ 3.4. Version 1 is the version of 1879 the C++ ABI that first appeared in G++ 3.2. Version 0 will always 1880 be the version that conforms most closely to the C++ ABI 1881 specification. Therefore, the ABI obtained using version 0 will 1882 change as ABI bugs are fixed. 1883 1884 The default is version 2. 1885 1886 `-fno-access-control' 1887 Turn off all access checking. This switch is mainly useful for 1888 working around bugs in the access control code. 1889 1890 `-fcheck-new' 1891 Check that the pointer returned by `operator new' is non-null 1892 before attempting to modify the storage allocated. This check is 1893 normally unnecessary because the C++ standard specifies that 1894 `operator new' will only return `0' if it is declared `throw()', 1895 in which case the compiler will always check the return value even 1896 without this option. In all other cases, when `operator new' has 1897 a non-empty exception specification, memory exhaustion is 1898 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'. 1899 1900 `-fconserve-space' 1901 Put uninitialized or runtime-initialized global variables into the 1902 common segment, as C does. This saves space in the executable at 1903 the cost of not diagnosing duplicate definitions. If you compile 1904 with this flag and your program mysteriously crashes after 1905 `main()' has completed, you may have an object that is being 1906 destroyed twice because two definitions were merged. 1907 1908 This option is no longer useful on most targets, now that support 1909 has been added for putting variables into BSS without making them 1910 common. 1911 1912 `-fno-deduce-init-list' 1913 Disable deduction of a template type parameter as 1914 std::initializer_list from a brace-enclosed initializer list, i.e. 1915 1916 template <class T> auto forward(T t) -> decltype (realfn (t)) 1917 { 1918 return realfn (t); 1919 } 1920 1921 void f() 1922 { 1923 forward({1,2}); // call forward<std::initializer_list<int>> 1924 } 1925 1926 This option is present because this deduction is an extension to 1927 the current specification in the C++0x working draft, and there was 1928 some concern about potential overload resolution problems. 1929 1930 `-ffriend-injection' 1931 Inject friend functions into the enclosing namespace, so that they 1932 are visible outside the scope of the class in which they are 1933 declared. Friend functions were documented to work this way in 1934 the old Annotated C++ Reference Manual, and versions of G++ before 1935 4.1 always worked that way. However, in ISO C++ a friend function 1936 which is not declared in an enclosing scope can only be found 1937 using argument dependent lookup. This option causes friends to be 1938 injected as they were in earlier releases. 1939 1940 This option is for compatibility, and may be removed in a future 1941 release of G++. 1942 1943 `-fno-elide-constructors' 1944 The C++ standard allows an implementation to omit creating a 1945 temporary which is only used to initialize another object of the 1946 same type. Specifying this option disables that optimization, and 1947 forces G++ to call the copy constructor in all cases. 1948 1949 `-fno-enforce-eh-specs' 1950 Don't generate code to check for violation of exception 1951 specifications at runtime. This option violates the C++ standard, 1952 but may be useful for reducing code size in production builds, 1953 much like defining `NDEBUG'. This does not give user code 1954 permission to throw exceptions in violation of the exception 1955 specifications; the compiler will still optimize based on the 1956 specifications, so throwing an unexpected exception will result in 1957 undefined behavior. 1958 1959 `-ffor-scope' 1960 `-fno-for-scope' 1961 If `-ffor-scope' is specified, the scope of variables declared in 1962 a for-init-statement is limited to the `for' loop itself, as 1963 specified by the C++ standard. If `-fno-for-scope' is specified, 1964 the scope of variables declared in a for-init-statement extends to 1965 the end of the enclosing scope, as was the case in old versions of 1966 G++, and other (traditional) implementations of C++. 1967 1968 The default if neither flag is given to follow the standard, but 1969 to allow and give a warning for old-style code that would 1970 otherwise be invalid, or have different behavior. 1971 1972 `-fno-gnu-keywords' 1973 Do not recognize `typeof' as a keyword, so that code can use this 1974 word as an identifier. You can use the keyword `__typeof__' 1975 instead. `-ansi' implies `-fno-gnu-keywords'. 1976 1977 `-fno-implicit-templates' 1978 Never emit code for non-inline templates which are instantiated 1979 implicitly (i.e. by use); only emit code for explicit 1980 instantiations. *Note Template Instantiation::, for more 1981 information. 1982 1983 `-fno-implicit-inline-templates' 1984 Don't emit code for implicit instantiations of inline templates, 1985 either. The default is to handle inlines differently so that 1986 compiles with and without optimization will need the same set of 1987 explicit instantiations. 1988 1989 `-fno-implement-inlines' 1990 To save space, do not emit out-of-line copies of inline functions 1991 controlled by `#pragma implementation'. This will cause linker 1992 errors if these functions are not inlined everywhere they are 1993 called. 1994 1995 `-fms-extensions' 1996 Disable pedantic warnings about constructs used in MFC, such as 1997 implicit int and getting a pointer to member function via 1998 non-standard syntax. 1999 2000 `-fno-nonansi-builtins' 2001 Disable built-in declarations of functions that are not mandated by 2002 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index', 2003 `bzero', `conjf', and other related functions. 2004 2005 `-fno-operator-names' 2006 Do not treat the operator name keywords `and', `bitand', `bitor', 2007 `compl', `not', `or' and `xor' as synonyms as keywords. 2008 2009 `-fno-optional-diags' 2010 Disable diagnostics that the standard says a compiler does not 2011 need to issue. Currently, the only such diagnostic issued by G++ 2012 is the one for a name having multiple meanings within a class. 2013 2014 `-fpermissive' 2015 Downgrade some diagnostics about nonconformant code from errors to 2016 warnings. Thus, using `-fpermissive' will allow some 2017 nonconforming code to compile. 2018 2019 `-frepo' 2020 Enable automatic template instantiation at link time. This option 2021 also implies `-fno-implicit-templates'. *Note Template 2022 Instantiation::, for more information. 2023 2024 `-fno-rtti' 2025 Disable generation of information about every class with virtual 2026 functions for use by the C++ runtime type identification features 2027 (`dynamic_cast' and `typeid'). If you don't use those parts of 2028 the language, you can save some space by using this flag. Note 2029 that exception handling uses the same information, but it will 2030 generate it as needed. The `dynamic_cast' operator can still be 2031 used for casts that do not require runtime type information, i.e. 2032 casts to `void *' or to unambiguous base classes. 2033 2034 `-fstats' 2035 Emit statistics about front-end processing at the end of the 2036 compilation. This information is generally only useful to the G++ 2037 development team. 2038 2039 `-ftemplate-depth-N' 2040 Set the maximum instantiation depth for template classes to N. A 2041 limit on the template instantiation depth is needed to detect 2042 endless recursions during template class instantiation. ANSI/ISO 2043 C++ conforming programs must not rely on a maximum depth greater 2044 than 17. 2045 2046 `-fno-threadsafe-statics' 2047 Do not emit the extra code to use the routines specified in the C++ 2048 ABI for thread-safe initialization of local statics. You can use 2049 this option to reduce code size slightly in code that doesn't need 2050 to be thread-safe. 2051 2052 `-fuse-cxa-atexit' 2053 Register destructors for objects with static storage duration with 2054 the `__cxa_atexit' function rather than the `atexit' function. 2055 This option is required for fully standards-compliant handling of 2056 static destructors, but will only work if your C library supports 2057 `__cxa_atexit'. 2058 2059 `-fno-use-cxa-get-exception-ptr' 2060 Don't use the `__cxa_get_exception_ptr' runtime routine. This 2061 will cause `std::uncaught_exception' to be incorrect, but is 2062 necessary if the runtime routine is not available. 2063 2064 `-fvisibility-inlines-hidden' 2065 This switch declares that the user does not attempt to compare 2066 pointers to inline methods where the addresses of the two functions 2067 were taken in different shared objects. 2068 2069 The effect of this is that GCC may, effectively, mark inline 2070 methods with `__attribute__ ((visibility ("hidden")))' so that 2071 they do not appear in the export table of a DSO and do not require 2072 a PLT indirection when used within the DSO. Enabling this option 2073 can have a dramatic effect on load and link times of a DSO as it 2074 massively reduces the size of the dynamic export table when the 2075 library makes heavy use of templates. 2076 2077 The behavior of this switch is not quite the same as marking the 2078 methods as hidden directly, because it does not affect static 2079 variables local to the function or cause the compiler to deduce 2080 that the function is defined in only one shared object. 2081 2082 You may mark a method as having a visibility explicitly to negate 2083 the effect of the switch for that method. For example, if you do 2084 want to compare pointers to a particular inline method, you might 2085 mark it as having default visibility. Marking the enclosing class 2086 with explicit visibility will have no effect. 2087 2088 Explicitly instantiated inline methods are unaffected by this 2089 option as their linkage might otherwise cross a shared library 2090 boundary. *Note Template Instantiation::. 2091 2092 `-fvisibility-ms-compat' 2093 This flag attempts to use visibility settings to make GCC's C++ 2094 linkage model compatible with that of Microsoft Visual Studio. 2095 2096 The flag makes these changes to GCC's linkage model: 2097 2098 1. It sets the default visibility to `hidden', like 2099 `-fvisibility=hidden'. 2100 2101 2. Types, but not their members, are not hidden by default. 2102 2103 3. The One Definition Rule is relaxed for types without explicit 2104 visibility specifications which are defined in more than one 2105 different shared object: those declarations are permitted if 2106 they would have been permitted when this option was not used. 2107 2108 In new code it is better to use `-fvisibility=hidden' and export 2109 those classes which are intended to be externally visible. 2110 Unfortunately it is possible for code to rely, perhaps 2111 accidentally, on the Visual Studio behavior. 2112 2113 Among the consequences of these changes are that static data 2114 members of the same type with the same name but defined in 2115 different shared objects will be different, so changing one will 2116 not change the other; and that pointers to function members 2117 defined in different shared objects may not compare equal. When 2118 this flag is given, it is a violation of the ODR to define types 2119 with the same name differently. 2120 2121 `-fno-weak' 2122 Do not use weak symbol support, even if it is provided by the 2123 linker. By default, G++ will use weak symbols if they are 2124 available. This option exists only for testing, and should not be 2125 used by end-users; it will result in inferior code and has no 2126 benefits. This option may be removed in a future release of G++. 2127 2128 `-nostdinc++' 2129 Do not search for header files in the standard directories 2130 specific to C++, but do still search the other standard 2131 directories. (This option is used when building the C++ library.) 2132 2133 In addition, these optimization, warning, and code generation options 2134 have meanings only for C++ programs: 2135 2136 `-fno-default-inline' 2137 Do not assume `inline' for functions defined inside a class scope. 2138 *Note Options That Control Optimization: Optimize Options. Note 2139 that these functions will have linkage like inline functions; they 2140 just won't be inlined by default. 2141 2142 `-Wabi (C, Objective-C, C++ and Objective-C++ only)' 2143 Warn when G++ generates code that is probably not compatible with 2144 the vendor-neutral C++ ABI. Although an effort has been made to 2145 warn about all such cases, there are probably some cases that are 2146 not warned about, even though G++ is generating incompatible code. 2147 There may also be cases where warnings are emitted even though 2148 the code that is generated will be compatible. 2149 2150 You should rewrite your code to avoid these warnings if you are 2151 concerned about the fact that code generated by G++ may not be 2152 binary compatible with code generated by other compilers. 2153 2154 The known incompatibilities at this point include: 2155 2156 * Incorrect handling of tail-padding for bit-fields. G++ may 2157 attempt to pack data into the same byte as a base class. For 2158 example: 2159 2160 struct A { virtual void f(); int f1 : 1; }; 2161 struct B : public A { int f2 : 1; }; 2162 2163 In this case, G++ will place `B::f2' into the same byte 2164 as`A::f1'; other compilers will not. You can avoid this 2165 problem by explicitly padding `A' so that its size is a 2166 multiple of the byte size on your platform; that will cause 2167 G++ and other compilers to layout `B' identically. 2168 2169 * Incorrect handling of tail-padding for virtual bases. G++ 2170 does not use tail padding when laying out virtual bases. For 2171 example: 2172 2173 struct A { virtual void f(); char c1; }; 2174 struct B { B(); char c2; }; 2175 struct C : public A, public virtual B {}; 2176 2177 In this case, G++ will not place `B' into the tail-padding for 2178 `A'; other compilers will. You can avoid this problem by 2179 explicitly padding `A' so that its size is a multiple of its 2180 alignment (ignoring virtual base classes); that will cause 2181 G++ and other compilers to layout `C' identically. 2182 2183 * Incorrect handling of bit-fields with declared widths greater 2184 than that of their underlying types, when the bit-fields 2185 appear in a union. For example: 2186 2187 union U { int i : 4096; }; 2188 2189 Assuming that an `int' does not have 4096 bits, G++ will make 2190 the union too small by the number of bits in an `int'. 2191 2192 * Empty classes can be placed at incorrect offsets. For 2193 example: 2194 2195 struct A {}; 2196 2197 struct B { 2198 A a; 2199 virtual void f (); 2200 }; 2201 2202 struct C : public B, public A {}; 2203 2204 G++ will place the `A' base class of `C' at a nonzero offset; 2205 it should be placed at offset zero. G++ mistakenly believes 2206 that the `A' data member of `B' is already at offset zero. 2207 2208 * Names of template functions whose types involve `typename' or 2209 template template parameters can be mangled incorrectly. 2210 2211 template <typename Q> 2212 void f(typename Q::X) {} 2213 2214 template <template <typename> class Q> 2215 void f(typename Q<int>::X) {} 2216 2217 Instantiations of these templates may be mangled incorrectly. 2218 2219 2220 It also warns psABI related changes. The known psABI changes at 2221 this point include: 2222 2223 * For SYSV/x86-64, when passing union with long double, it is 2224 changed to pass in memory as specified in psABI. For example: 2225 2226 union U { 2227 long double ld; 2228 int i; 2229 }; 2230 2231 `union U' will always be passed in memory. 2232 2233 2234 `-Wctor-dtor-privacy (C++ and Objective-C++ only)' 2235 Warn when a class seems unusable because all the constructors or 2236 destructors in that class are private, and it has neither friends 2237 nor public static member functions. 2238 2239 `-Wnon-virtual-dtor (C++ and Objective-C++ only)' 2240 Warn when a class has virtual functions and accessible non-virtual 2241 destructor, in which case it would be possible but unsafe to delete 2242 an instance of a derived class through a pointer to the base class. 2243 This warning is also enabled if -Weffc++ is specified. 2244 2245 `-Wreorder (C++ and Objective-C++ only)' 2246 Warn when the order of member initializers given in the code does 2247 not match the order in which they must be executed. For instance: 2248 2249 struct A { 2250 int i; 2251 int j; 2252 A(): j (0), i (1) { } 2253 }; 2254 2255 The compiler will rearrange the member initializers for `i' and 2256 `j' to match the declaration order of the members, emitting a 2257 warning to that effect. This warning is enabled by `-Wall'. 2258 2259 The following `-W...' options are not affected by `-Wall'. 2260 2261 `-Weffc++ (C++ and Objective-C++ only)' 2262 Warn about violations of the following style guidelines from Scott 2263 Meyers' `Effective C++' book: 2264 2265 * Item 11: Define a copy constructor and an assignment 2266 operator for classes with dynamically allocated memory. 2267 2268 * Item 12: Prefer initialization to assignment in constructors. 2269 2270 * Item 14: Make destructors virtual in base classes. 2271 2272 * Item 15: Have `operator=' return a reference to `*this'. 2273 2274 * Item 23: Don't try to return a reference when you must 2275 return an object. 2276 2277 2278 Also warn about violations of the following style guidelines from 2279 Scott Meyers' `More Effective C++' book: 2280 2281 * Item 6: Distinguish between prefix and postfix forms of 2282 increment and decrement operators. 2283 2284 * Item 7: Never overload `&&', `||', or `,'. 2285 2286 2287 When selecting this option, be aware that the standard library 2288 headers do not obey all of these guidelines; use `grep -v' to 2289 filter out those warnings. 2290 2291 `-Wstrict-null-sentinel (C++ and Objective-C++ only)' 2292 Warn also about the use of an uncasted `NULL' as sentinel. When 2293 compiling only with GCC this is a valid sentinel, as `NULL' is 2294 defined to `__null'. Although it is a null pointer constant not a 2295 null pointer, it is guaranteed to be of the same size as a 2296 pointer. But this use is not portable across different compilers. 2297 2298 `-Wno-non-template-friend (C++ and Objective-C++ only)' 2299 Disable warnings when non-templatized friend functions are declared 2300 within a template. Since the advent of explicit template 2301 specification support in G++, if the name of the friend is an 2302 unqualified-id (i.e., `friend foo(int)'), the C++ language 2303 specification demands that the friend declare or define an 2304 ordinary, nontemplate function. (Section 14.5.3). Before G++ 2305 implemented explicit specification, unqualified-ids could be 2306 interpreted as a particular specialization of a templatized 2307 function. Because this non-conforming behavior is no longer the 2308 default behavior for G++, `-Wnon-template-friend' allows the 2309 compiler to check existing code for potential trouble spots and is 2310 on by default. This new compiler behavior can be turned off with 2311 `-Wno-non-template-friend' which keeps the conformant compiler code 2312 but disables the helpful warning. 2313 2314 `-Wold-style-cast (C++ and Objective-C++ only)' 2315 Warn if an old-style (C-style) cast to a non-void type is used 2316 within a C++ program. The new-style casts (`dynamic_cast', 2317 `static_cast', `reinterpret_cast', and `const_cast') are less 2318 vulnerable to unintended effects and much easier to search for. 2319 2320 `-Woverloaded-virtual (C++ and Objective-C++ only)' 2321 Warn when a function declaration hides virtual functions from a 2322 base class. For example, in: 2323 2324 struct A { 2325 virtual void f(); 2326 }; 2327 2328 struct B: public A { 2329 void f(int); 2330 }; 2331 2332 the `A' class version of `f' is hidden in `B', and code like: 2333 2334 B* b; 2335 b->f(); 2336 2337 will fail to compile. 2338 2339 `-Wno-pmf-conversions (C++ and Objective-C++ only)' 2340 Disable the diagnostic for converting a bound pointer to member 2341 function to a plain pointer. 2342 2343 `-Wsign-promo (C++ and Objective-C++ only)' 2344 Warn when overload resolution chooses a promotion from unsigned or 2345 enumerated type to a signed type, over a conversion to an unsigned 2346 type of the same size. Previous versions of G++ would try to 2347 preserve unsignedness, but the standard mandates the current 2348 behavior. 2349 2350 struct A { 2351 operator int (); 2352 A& operator = (int); 2353 }; 2354 2355 main () 2356 { 2357 A a,b; 2358 a = b; 2359 } 2360 2361 In this example, G++ will synthesize a default `A& operator = 2362 (const A&);', while cfront will use the user-defined `operator ='. 2363 2364 2365 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC 2366 2367 3.6 Options Controlling Objective-C and Objective-C++ Dialects 2368 ============================================================== 2369 2370 (NOTE: This manual does not describe the Objective-C and Objective-C++ 2371 languages themselves. See *Note Language Standards Supported by GCC: 2372 Standards, for references.) 2373 2374 This section describes the command-line options that are only 2375 meaningful for Objective-C and Objective-C++ programs, but you can also 2376 use most of the language-independent GNU compiler options. For 2377 example, you might compile a file `some_class.m' like this: 2378 2379 gcc -g -fgnu-runtime -O -c some_class.m 2380 2381 In this example, `-fgnu-runtime' is an option meant only for 2382 Objective-C and Objective-C++ programs; you can use the other options 2383 with any language supported by GCC. 2384 2385 Note that since Objective-C is an extension of the C language, 2386 Objective-C compilations may also use options specific to the C 2387 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++ 2388 compilations may use C++-specific options (e.g., `-Wabi'). 2389 2390 Here is a list of options that are _only_ for compiling Objective-C 2391 and Objective-C++ programs: 2392 2393 `-fconstant-string-class=CLASS-NAME' 2394 Use CLASS-NAME as the name of the class to instantiate for each 2395 literal string specified with the syntax `@"..."'. The default 2396 class name is `NXConstantString' if the GNU runtime is being used, 2397 and `NSConstantString' if the NeXT runtime is being used (see 2398 below). The `-fconstant-cfstrings' option, if also present, will 2399 override the `-fconstant-string-class' setting and cause `@"..."' 2400 literals to be laid out as constant CoreFoundation strings. 2401 2402 `-fgnu-runtime' 2403 Generate object code compatible with the standard GNU Objective-C 2404 runtime. This is the default for most types of systems. 2405 2406 `-fnext-runtime' 2407 Generate output compatible with the NeXT runtime. This is the 2408 default for NeXT-based systems, including Darwin and Mac OS X. 2409 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this 2410 option is used. 2411 2412 `-fno-nil-receivers' 2413 Assume that all Objective-C message dispatches (e.g., `[receiver 2414 message:arg]') in this translation unit ensure that the receiver 2415 is not `nil'. This allows for more efficient entry points in the 2416 runtime to be used. Currently, this option is only available in 2417 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2418 2419 `-fobjc-call-cxx-cdtors' 2420 For each Objective-C class, check if any of its instance variables 2421 is a C++ object with a non-trivial default constructor. If so, 2422 synthesize a special `- (id) .cxx_construct' instance method that 2423 will run non-trivial default constructors on any such instance 2424 variables, in order, and then return `self'. Similarly, check if 2425 any instance variable is a C++ object with a non-trivial 2426 destructor, and if so, synthesize a special `- (void) 2427 .cxx_destruct' method that will run all such default destructors, 2428 in reverse order. 2429 2430 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods 2431 thusly generated will only operate on instance variables declared 2432 in the current Objective-C class, and not those inherited from 2433 superclasses. It is the responsibility of the Objective-C runtime 2434 to invoke all such methods in an object's inheritance hierarchy. 2435 The `- (id) .cxx_construct' methods will be invoked by the runtime 2436 immediately after a new object instance is allocated; the `- 2437 (void) .cxx_destruct' methods will be invoked immediately before 2438 the runtime deallocates an object instance. 2439 2440 As of this writing, only the NeXT runtime on Mac OS X 10.4 and 2441 later has support for invoking the `- (id) .cxx_construct' and `- 2442 (void) .cxx_destruct' methods. 2443 2444 `-fobjc-direct-dispatch' 2445 Allow fast jumps to the message dispatcher. On Darwin this is 2446 accomplished via the comm page. 2447 2448 `-fobjc-exceptions' 2449 Enable syntactic support for structured exception handling in 2450 Objective-C, similar to what is offered by C++ and Java. This 2451 option is unavailable in conjunction with the NeXT runtime on Mac 2452 OS X 10.2 and earlier. 2453 2454 @try { 2455 ... 2456 @throw expr; 2457 ... 2458 } 2459 @catch (AnObjCClass *exc) { 2460 ... 2461 @throw expr; 2462 ... 2463 @throw; 2464 ... 2465 } 2466 @catch (AnotherClass *exc) { 2467 ... 2468 } 2469 @catch (id allOthers) { 2470 ... 2471 } 2472 @finally { 2473 ... 2474 @throw expr; 2475 ... 2476 } 2477 2478 The `@throw' statement may appear anywhere in an Objective-C or 2479 Objective-C++ program; when used inside of a `@catch' block, the 2480 `@throw' may appear without an argument (as shown above), in which 2481 case the object caught by the `@catch' will be rethrown. 2482 2483 Note that only (pointers to) Objective-C objects may be thrown and 2484 caught using this scheme. When an object is thrown, it will be 2485 caught by the nearest `@catch' clause capable of handling objects 2486 of that type, analogously to how `catch' blocks work in C++ and 2487 Java. A `@catch(id ...)' clause (as shown above) may also be 2488 provided to catch any and all Objective-C exceptions not caught by 2489 previous `@catch' clauses (if any). 2490 2491 The `@finally' clause, if present, will be executed upon exit from 2492 the immediately preceding `@try ... @catch' section. This will 2493 happen regardless of whether any exceptions are thrown, caught or 2494 rethrown inside the `@try ... @catch' section, analogously to the 2495 behavior of the `finally' clause in Java. 2496 2497 There are several caveats to using the new exception mechanism: 2498 2499 * Although currently designed to be binary compatible with 2500 `NS_HANDLER'-style idioms provided by the `NSException' 2501 class, the new exceptions can only be used on Mac OS X 10.3 2502 (Panther) and later systems, due to additional functionality 2503 needed in the (NeXT) Objective-C runtime. 2504 2505 * As mentioned above, the new exceptions do not support handling 2506 types other than Objective-C objects. Furthermore, when 2507 used from Objective-C++, the Objective-C exception model does 2508 not interoperate with C++ exceptions at this time. This 2509 means you cannot `@throw' an exception from Objective-C and 2510 `catch' it in C++, or vice versa (i.e., `throw ... @catch'). 2511 2512 The `-fobjc-exceptions' switch also enables the use of 2513 synchronization blocks for thread-safe execution: 2514 2515 @synchronized (ObjCClass *guard) { 2516 ... 2517 } 2518 2519 Upon entering the `@synchronized' block, a thread of execution 2520 shall first check whether a lock has been placed on the 2521 corresponding `guard' object by another thread. If it has, the 2522 current thread shall wait until the other thread relinquishes its 2523 lock. Once `guard' becomes available, the current thread will 2524 place its own lock on it, execute the code contained in the 2525 `@synchronized' block, and finally relinquish the lock (thereby 2526 making `guard' available to other threads). 2527 2528 Unlike Java, Objective-C does not allow for entire methods to be 2529 marked `@synchronized'. Note that throwing exceptions out of 2530 `@synchronized' blocks is allowed, and will cause the guarding 2531 object to be unlocked properly. 2532 2533 `-fobjc-gc' 2534 Enable garbage collection (GC) in Objective-C and Objective-C++ 2535 programs. 2536 2537 `-freplace-objc-classes' 2538 Emit a special marker instructing `ld(1)' not to statically link in 2539 the resulting object file, and allow `dyld(1)' to load it in at 2540 run time instead. This is used in conjunction with the 2541 Fix-and-Continue debugging mode, where the object file in question 2542 may be recompiled and dynamically reloaded in the course of 2543 program execution, without the need to restart the program itself. 2544 Currently, Fix-and-Continue functionality is only available in 2545 conjunction with the NeXT runtime on Mac OS X 10.3 and later. 2546 2547 `-fzero-link' 2548 When compiling for the NeXT runtime, the compiler ordinarily 2549 replaces calls to `objc_getClass("...")' (when the name of the 2550 class is known at compile time) with static class references that 2551 get initialized at load time, which improves run-time performance. 2552 Specifying the `-fzero-link' flag suppresses this behavior and 2553 causes calls to `objc_getClass("...")' to be retained. This is 2554 useful in Zero-Link debugging mode, since it allows for individual 2555 class implementations to be modified during program execution. 2556 2557 `-gen-decls' 2558 Dump interface declarations for all classes seen in the source 2559 file to a file named `SOURCENAME.decl'. 2560 2561 `-Wassign-intercept (Objective-C and Objective-C++ only)' 2562 Warn whenever an Objective-C assignment is being intercepted by the 2563 garbage collector. 2564 2565 `-Wno-protocol (Objective-C and Objective-C++ only)' 2566 If a class is declared to implement a protocol, a warning is 2567 issued for every method in the protocol that is not implemented by 2568 the class. The default behavior is to issue a warning for every 2569 method not explicitly implemented in the class, even if a method 2570 implementation is inherited from the superclass. If you use the 2571 `-Wno-protocol' option, then methods inherited from the superclass 2572 are considered to be implemented, and no warning is issued for 2573 them. 2574 2575 `-Wselector (Objective-C and Objective-C++ only)' 2576 Warn if multiple methods of different types for the same selector 2577 are found during compilation. The check is performed on the list 2578 of methods in the final stage of compilation. Additionally, a 2579 check is performed for each selector appearing in a 2580 `@selector(...)' expression, and a corresponding method for that 2581 selector has been found during compilation. Because these checks 2582 scan the method table only at the end of compilation, these 2583 warnings are not produced if the final stage of compilation is not 2584 reached, for example because an error is found during compilation, 2585 or because the `-fsyntax-only' option is being used. 2586 2587 `-Wstrict-selector-match (Objective-C and Objective-C++ only)' 2588 Warn if multiple methods with differing argument and/or return 2589 types are found for a given selector when attempting to send a 2590 message using this selector to a receiver of type `id' or `Class'. 2591 When this flag is off (which is the default behavior), the 2592 compiler will omit such warnings if any differences found are 2593 confined to types which share the same size and alignment. 2594 2595 `-Wundeclared-selector (Objective-C and Objective-C++ only)' 2596 Warn if a `@selector(...)' expression referring to an undeclared 2597 selector is found. A selector is considered undeclared if no 2598 method with that name has been declared before the 2599 `@selector(...)' expression, either explicitly in an `@interface' 2600 or `@protocol' declaration, or implicitly in an `@implementation' 2601 section. This option always performs its checks as soon as a 2602 `@selector(...)' expression is found, while `-Wselector' only 2603 performs its checks in the final stage of compilation. This also 2604 enforces the coding style convention that methods and selectors 2605 must be declared before being used. 2606 2607 `-print-objc-runtime-info' 2608 Generate C header describing the largest structure that is passed 2609 by value, if any. 2610 2611 2612 2613 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC 2614 2615 3.7 Options to Control Diagnostic Messages Formatting 2616 ===================================================== 2617 2618 Traditionally, diagnostic messages have been formatted irrespective of 2619 the output device's aspect (e.g. its width, ...). The options described 2620 below can be used to control the diagnostic messages formatting 2621 algorithm, e.g. how many characters per line, how often source location 2622 information should be reported. Right now, only the C++ front end can 2623 honor these options. However it is expected, in the near future, that 2624 the remaining front ends would be able to digest them correctly. 2625 2626 `-fmessage-length=N' 2627 Try to format error messages so that they fit on lines of about N 2628 characters. The default is 72 characters for `g++' and 0 for the 2629 rest of the front ends supported by GCC. If N is zero, then no 2630 line-wrapping will be done; each error message will appear on a 2631 single line. 2632 2633 `-fdiagnostics-show-location=once' 2634 Only meaningful in line-wrapping mode. Instructs the diagnostic 2635 messages reporter to emit _once_ source location information; that 2636 is, in case the message is too long to fit on a single physical 2637 line and has to be wrapped, the source location won't be emitted 2638 (as prefix) again, over and over, in subsequent continuation 2639 lines. This is the default behavior. 2640 2641 `-fdiagnostics-show-location=every-line' 2642 Only meaningful in line-wrapping mode. Instructs the diagnostic 2643 messages reporter to emit the same source location information (as 2644 prefix) for physical lines that result from the process of breaking 2645 a message which is too long to fit on a single line. 2646 2647 `-fdiagnostics-show-option' 2648 This option instructs the diagnostic machinery to add text to each 2649 diagnostic emitted, which indicates which command line option 2650 directly controls that diagnostic, when such an option is known to 2651 the diagnostic machinery. 2652 2653 `-Wcoverage-mismatch' 2654 Warn if feedback profiles do not match when using the 2655 `-fprofile-use' option. If a source file was changed between 2656 `-fprofile-gen' and `-fprofile-use', the files with the profile 2657 feedback can fail to match the source file and GCC can not use the 2658 profile feedback information. By default, this warning is enabled 2659 and is treated as an error. `-Wno-coverage-mismatch' can be used 2660 to disable the warning or `-Wno-error=coverage-mismatch' can be 2661 used to disable the error. Disable the error for this warning can 2662 result in poorly optimized code, so disabling the error is useful 2663 only in the case of very minor changes such as bug fixes to an 2664 existing code-base. Completely disabling the warning is not 2665 recommended. 2666 2667 2668 2669 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC 2670 2671 3.8 Options to Request or Suppress Warnings 2672 =========================================== 2673 2674 Warnings are diagnostic messages that report constructions which are 2675 not inherently erroneous but which are risky or suggest there may have 2676 been an error. 2677 2678 The following language-independent options do not enable specific 2679 warnings but control the kinds of diagnostics produced by GCC. 2680 2681 `-fsyntax-only' 2682 Check the code for syntax errors, but don't do anything beyond 2683 that. 2684 2685 `-w' 2686 Inhibit all warning messages. 2687 2688 `-Werror' 2689 Make all warnings into errors. 2690 2691 `-Werror=' 2692 Make the specified warning into an error. The specifier for a 2693 warning is appended, for example `-Werror=switch' turns the 2694 warnings controlled by `-Wswitch' into errors. This switch takes a 2695 negative form, to be used to negate `-Werror' for specific 2696 warnings, for example `-Wno-error=switch' makes `-Wswitch' 2697 warnings not be errors, even when `-Werror' is in effect. You can 2698 use the `-fdiagnostics-show-option' option to have each 2699 controllable warning amended with the option which controls it, to 2700 determine what to use with this option. 2701 2702 Note that specifying `-Werror='FOO automatically implies `-W'FOO. 2703 However, `-Wno-error='FOO does not imply anything. 2704 2705 `-Wfatal-errors' 2706 This option causes the compiler to abort compilation on the first 2707 error occurred rather than trying to keep going and printing 2708 further error messages. 2709 2710 2711 You can request many specific warnings with options beginning `-W', 2712 for example `-Wimplicit' to request warnings on implicit declarations. 2713 Each of these specific warning options also has a negative form 2714 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. 2715 This manual lists only one of the two forms, whichever is not the 2716 default. For further, language-specific options also refer to *Note 2717 C++ Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2718 Options::. 2719 2720 `-pedantic' 2721 Issue all the warnings demanded by strict ISO C and ISO C++; 2722 reject all programs that use forbidden extensions, and some other 2723 programs that do not follow ISO C and ISO C++. For ISO C, follows 2724 the version of the ISO C standard specified by any `-std' option 2725 used. 2726 2727 Valid ISO C and ISO C++ programs should compile properly with or 2728 without this option (though a rare few will require `-ansi' or a 2729 `-std' option specifying the required version of ISO C). However, 2730 without this option, certain GNU extensions and traditional C and 2731 C++ features are supported as well. With this option, they are 2732 rejected. 2733 2734 `-pedantic' does not cause warning messages for use of the 2735 alternate keywords whose names begin and end with `__'. Pedantic 2736 warnings are also disabled in the expression that follows 2737 `__extension__'. However, only system header files should use 2738 these escape routes; application programs should avoid them. 2739 *Note Alternate Keywords::. 2740 2741 Some users try to use `-pedantic' to check programs for strict ISO 2742 C conformance. They soon find that it does not do quite what they 2743 want: it finds some non-ISO practices, but not all--only those for 2744 which ISO C _requires_ a diagnostic, and some others for which 2745 diagnostics have been added. 2746 2747 A feature to report any failure to conform to ISO C might be 2748 useful in some instances, but would require considerable 2749 additional work and would be quite different from `-pedantic'. We 2750 don't have plans to support such a feature in the near future. 2751 2752 Where the standard specified with `-std' represents a GNU extended 2753 dialect of C, such as `gnu89' or `gnu99', there is a corresponding 2754 "base standard", the version of ISO C on which the GNU extended 2755 dialect is based. Warnings from `-pedantic' are given where they 2756 are required by the base standard. (It would not make sense for 2757 such warnings to be given only for features not in the specified 2758 GNU C dialect, since by definition the GNU dialects of C include 2759 all features the compiler supports with the given option, and 2760 there would be nothing to warn about.) 2761 2762 `-pedantic-errors' 2763 Like `-pedantic', except that errors are produced rather than 2764 warnings. 2765 2766 `-Wall' 2767 This enables all the warnings about constructions that some users 2768 consider questionable, and that are easy to avoid (or modify to 2769 prevent the warning), even in conjunction with macros. This also 2770 enables some language-specific warnings described in *Note C++ 2771 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect 2772 Options::. 2773 2774 `-Wall' turns on the following warning flags: 2775 2776 -Waddress 2777 -Warray-bounds (only with `-O2') 2778 -Wc++0x-compat 2779 -Wchar-subscripts 2780 -Wimplicit-int 2781 -Wimplicit-function-declaration 2782 -Wcomment 2783 -Wformat 2784 -Wmain (only for C/ObjC and unless `-ffreestanding') 2785 -Wmaybe-uninitialized 2786 -Wmissing-braces 2787 -Wnonnull 2788 -Wparentheses 2789 -Wpointer-sign 2790 -Wreorder 2791 -Wreturn-type 2792 -Wripa-opt-mismatch 2793 -Wsequence-point 2794 -Wsign-compare (only in C++) 2795 -Wstrict-aliasing 2796 -Wstrict-overflow=1 2797 -Wswitch 2798 -Wtrigraphs 2799 -Wuninitialized 2800 -Wunknown-pragmas 2801 -Wunused-function 2802 -Wunused-label 2803 -Wunused-value 2804 -Wunused-variable 2805 -Wvolatile-register-var 2806 2807 Note that some warning flags are not implied by `-Wall'. Some of 2808 them warn about constructions that users generally do not consider 2809 questionable, but which occasionally you might wish to check for; 2810 others warn about constructions that are necessary or hard to 2811 avoid in some cases, and there is no simple way to modify the code 2812 to suppress the warning. Some of them are enabled by `-Wextra' but 2813 many of them must be enabled individually. 2814 2815 `-Wextra' 2816 This enables some extra warning flags that are not enabled by 2817 `-Wall'. (This option used to be called `-W'. The older name is 2818 still supported, but the newer name is more descriptive.) 2819 2820 -Wclobbered 2821 -Wempty-body 2822 -Wignored-qualifiers 2823 -Wmissing-field-initializers 2824 -Wmissing-parameter-type (C only) 2825 -Wold-style-declaration (C only) 2826 -Woverride-init 2827 -Wsign-compare 2828 -Wtype-limits 2829 -Wuninitialized 2830 -Wmaybe-uninitialized 2831 -Wunused-parameter (only with `-Wunused' or `-Wall') 2832 2833 The option `-Wextra' also prints warning messages for the 2834 following cases: 2835 2836 * A pointer is compared against integer zero with `<', `<=', 2837 `>', or `>='. 2838 2839 * (C++ only) An enumerator and a non-enumerator both appear in a 2840 conditional expression. 2841 2842 * (C++ only) Ambiguous virtual bases. 2843 2844 * (C++ only) Subscripting an array which has been declared 2845 `register'. 2846 2847 * (C++ only) Taking the address of a variable which has been 2848 declared `register'. 2849 2850 * (C++ only) A base class is not initialized in a derived 2851 class' copy constructor. 2852 2853 2854 `-Wchar-subscripts' 2855 Warn if an array subscript has type `char'. This is a common cause 2856 of error, as programmers often forget that this type is signed on 2857 some machines. This warning is enabled by `-Wall'. 2858 2859 `-Wcomment' 2860 Warn whenever a comment-start sequence `/*' appears in a `/*' 2861 comment, or whenever a Backslash-Newline appears in a `//' comment. 2862 This warning is enabled by `-Wall'. 2863 2864 `-Wformat' 2865 Check calls to `printf' and `scanf', etc., to make sure that the 2866 arguments supplied have types appropriate to the format string 2867 specified, and that the conversions specified in the format string 2868 make sense. This includes standard functions, and others 2869 specified by format attributes (*note Function Attributes::), in 2870 the `printf', `scanf', `strftime' and `strfmon' (an X/Open 2871 extension, not in the C standard) families (or other 2872 target-specific families). Which functions are checked without 2873 format attributes having been specified depends on the standard 2874 version selected, and such checks of functions without the 2875 attribute specified are disabled by `-ffreestanding' or 2876 `-fno-builtin'. 2877 2878 The formats are checked against the format features supported by 2879 GNU libc version 2.2. These include all ISO C90 and C99 features, 2880 as well as features from the Single Unix Specification and some 2881 BSD and GNU extensions. Other library implementations may not 2882 support all these features; GCC does not support warning about 2883 features that go beyond a particular library's limitations. 2884 However, if `-pedantic' is used with `-Wformat', warnings will be 2885 given about format features not in the selected standard version 2886 (but not for `strfmon' formats, since those are not in any version 2887 of the C standard). *Note Options Controlling C Dialect: C 2888 Dialect Options. 2889 2890 Since `-Wformat' also checks for null format arguments for several 2891 functions, `-Wformat' also implies `-Wnonnull'. 2892 2893 `-Wformat' is included in `-Wall'. For more control over some 2894 aspects of format checking, the options `-Wformat-y2k', 2895 `-Wno-format-extra-args', `-Wno-format-zero-length', 2896 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are 2897 available, but are not included in `-Wall'. 2898 2899 `-Wformat-y2k' 2900 If `-Wformat' is specified, also warn about `strftime' formats 2901 which may yield only a two-digit year. 2902 2903 `-Wno-format-contains-nul' 2904 If `-Wformat' is specified, do not warn about format strings that 2905 contain NUL bytes. 2906 2907 `-Wno-format-extra-args' 2908 If `-Wformat' is specified, do not warn about excess arguments to a 2909 `printf' or `scanf' format function. The C standard specifies 2910 that such arguments are ignored. 2911 2912 Where the unused arguments lie between used arguments that are 2913 specified with `$' operand number specifications, normally 2914 warnings are still given, since the implementation could not know 2915 what type to pass to `va_arg' to skip the unused arguments. 2916 However, in the case of `scanf' formats, this option will suppress 2917 the warning if the unused arguments are all pointers, since the 2918 Single Unix Specification says that such unused arguments are 2919 allowed. 2920 2921 `-Wno-format-zero-length (C and Objective-C only)' 2922 If `-Wformat' is specified, do not warn about zero-length formats. 2923 The C standard specifies that zero-length formats are allowed. 2924 2925 `-Wformat-nonliteral' 2926 If `-Wformat' is specified, also warn if the format string is not a 2927 string literal and so cannot be checked, unless the format function 2928 takes its format arguments as a `va_list'. 2929 2930 `-Wformat-security' 2931 If `-Wformat' is specified, also warn about uses of format 2932 functions that represent possible security problems. At present, 2933 this warns about calls to `printf' and `scanf' functions where the 2934 format string is not a string literal and there are no format 2935 arguments, as in `printf (foo);'. This may be a security hole if 2936 the format string came from untrusted input and contains `%n'. 2937 (This is currently a subset of what `-Wformat-nonliteral' warns 2938 about, but in future warnings may be added to `-Wformat-security' 2939 that are not included in `-Wformat-nonliteral'.) 2940 2941 `-Wformat=2' 2942 Enable `-Wformat' plus format checks not included in `-Wformat'. 2943 Currently equivalent to `-Wformat -Wformat-nonliteral 2944 -Wformat-security -Wformat-y2k'. 2945 2946 `-Wnonnull (C, C++, Objective-C, and Objective-C++ only)' 2947 Warn about passing a null pointer for arguments marked as 2948 requiring a non-null value by the `nonnull' function attribute. 2949 2950 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be 2951 disabled with the `-Wno-nonnull' option. 2952 2953 `-Winit-self (C, C++, Objective-C and Objective-C++ only)' 2954 Warn about uninitialized variables which are initialized with 2955 themselves. Note this option can only be used with the 2956 `-Wuninitialized' option. 2957 2958 For example, GCC will warn about `i' being uninitialized in the 2959 following snippet only when `-Winit-self' has been specified: 2960 int f() 2961 { 2962 int i = i; 2963 return i; 2964 } 2965 2966 `-Wimplicit-int (C and Objective-C only)' 2967 Warn when a declaration does not specify a type. This warning is 2968 enabled by `-Wall'. 2969 2970 `-Wimplicit-function-declaration (C and Objective-C only)' 2971 Give a warning whenever a function is used before being declared. 2972 In C99 mode (`-std=c99' or `-std=gnu99'), this warning is enabled 2973 by default and it is made into an error by `-pedantic-errors'. 2974 This warning is also enabled by `-Wall'. 2975 2976 `-Wimplicit' 2977 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'. 2978 This warning is enabled by `-Wall'. 2979 2980 `-Wignored-qualifiers (C and C++ only)' 2981 Warn if the return type of a function has a type qualifier such as 2982 `const'. For ISO C such a type qualifier has no effect, since the 2983 value returned by a function is not an lvalue. For C++, the 2984 warning is only emitted for scalar types or `void'. ISO C 2985 prohibits qualified `void' return types on function definitions, 2986 so such return types always receive a warning even without this 2987 option. 2988 2989 This warning is also enabled by `-Wextra'. 2990 2991 `-Wmain' 2992 Warn if the type of `main' is suspicious. `main' should be a 2993 function with external linkage, returning int, taking either zero 2994 arguments, two, or three arguments of appropriate types. This 2995 warning is enabled by default in C++ and is enabled by either 2996 `-Wall' or `-pedantic'. 2997 2998 `-Wmissing-braces' 2999 Warn if an aggregate or union initializer is not fully bracketed. 3000 In the following example, the initializer for `a' is not fully 3001 bracketed, but that for `b' is fully bracketed. 3002 3003 int a[2][2] = { 0, 1, 2, 3 }; 3004 int b[2][2] = { { 0, 1 }, { 2, 3 } }; 3005 3006 This warning is enabled by `-Wall'. 3007 3008 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)' 3009 Warn if a user-supplied include directory does not exist. 3010 3011 `-Wparentheses' 3012 Warn if parentheses are omitted in certain contexts, such as when 3013 there is an assignment in a context where a truth value is 3014 expected, or when operators are nested whose precedence people 3015 often get confused about. 3016 3017 Also warn if a comparison like `x<=y<=z' appears; this is 3018 equivalent to `(x<=y ? 1 : 0) <= z', which is a different 3019 interpretation from that of ordinary mathematical notation. 3020 3021 Also warn about constructions where there may be confusion to which 3022 `if' statement an `else' branch belongs. Here is an example of 3023 such a case: 3024 3025 { 3026 if (a) 3027 if (b) 3028 foo (); 3029 else 3030 bar (); 3031 } 3032 3033 In C/C++, every `else' branch belongs to the innermost possible 3034 `if' statement, which in this example is `if (b)'. This is often 3035 not what the programmer expected, as illustrated in the above 3036 example by indentation the programmer chose. When there is the 3037 potential for this confusion, GCC will issue a warning when this 3038 flag is specified. To eliminate the warning, add explicit braces 3039 around the innermost `if' statement so there is no way the `else' 3040 could belong to the enclosing `if'. The resulting code would look 3041 like this: 3042 3043 { 3044 if (a) 3045 { 3046 if (b) 3047 foo (); 3048 else 3049 bar (); 3050 } 3051 } 3052 3053 This warning is enabled by `-Wall'. 3054 3055 `-Wsequence-point' 3056 Warn about code that may have undefined semantics because of 3057 violations of sequence point rules in the C and C++ standards. 3058 3059 The C and C++ standards defines the order in which expressions in 3060 a C/C++ program are evaluated in terms of "sequence points", which 3061 represent a partial ordering between the execution of parts of the 3062 program: those executed before the sequence point, and those 3063 executed after it. These occur after the evaluation of a full 3064 expression (one which is not part of a larger expression), after 3065 the evaluation of the first operand of a `&&', `||', `? :' or `,' 3066 (comma) operator, before a function is called (but after the 3067 evaluation of its arguments and the expression denoting the called 3068 function), and in certain other places. Other than as expressed 3069 by the sequence point rules, the order of evaluation of 3070 subexpressions of an expression is not specified. All these rules 3071 describe only a partial order rather than a total order, since, 3072 for example, if two functions are called within one expression 3073 with no sequence point between them, the order in which the 3074 functions are called is not specified. However, the standards 3075 committee have ruled that function calls do not overlap. 3076 3077 It is not specified when between sequence points modifications to 3078 the values of objects take effect. Programs whose behavior 3079 depends on this have undefined behavior; the C and C++ standards 3080 specify that "Between the previous and next sequence point an 3081 object shall have its stored value modified at most once by the 3082 evaluation of an expression. Furthermore, the prior value shall 3083 be read only to determine the value to be stored.". If a program 3084 breaks these rules, the results on any particular implementation 3085 are entirely unpredictable. 3086 3087 Examples of code with undefined behavior are `a = a++;', `a[n] = 3088 b[n++]' and `a[i++] = i;'. Some more complicated cases are not 3089 diagnosed by this option, and it may give an occasional false 3090 positive result, but in general it has been found fairly effective 3091 at detecting this sort of problem in programs. 3092 3093 The standard is worded confusingly, therefore there is some debate 3094 over the precise meaning of the sequence point rules in subtle 3095 cases. Links to discussions of the problem, including proposed 3096 formal definitions, may be found on the GCC readings page, at 3097 `http://gcc.gnu.org/readings.html'. 3098 3099 This warning is enabled by `-Wall' for C and C++. 3100 3101 `-Wself-assign' 3102 Warn about self-assignment and self-initialization. This warning 3103 is intended for detecting accidental self-assignment due to typos, 3104 and therefore does not warn on a statement that is semantically a 3105 self-assignment after constant folding. Here is an example of what 3106 will trigger a self-assign warning and what will not: 3107 3108 void func() 3109 { 3110 int i = 2; 3111 int x = x; /* warn */ 3112 float f = 5.0; 3113 double a[3]; 3114 3115 i = i + 0; /* not warn */ 3116 f = f / 1; /* not warn */ 3117 a[1] = a[1]; /* warn */ 3118 i += 0; /* not warn */ 3119 } 3120 3121 In C++ it will not warn on self-assignment of non-POD variables 3122 unless `-Wself-assign-non-pod' is also enabled. 3123 3124 `-Wself-assign-non-pod' 3125 Warn about self-assignment of non-POD variables. This is a 3126 C++-specific warning and only effective when `-Wself-assign' is 3127 enabled. 3128 3129 There are cases where self-assignment might be intentional. For 3130 example, a C++ programmer might write code to test whether an 3131 overloaded `operator=' works when the same object is assigned to 3132 itself. One way to work around the self-assign warning in such 3133 cases when this flag is enabled is using the functional form 3134 `object.operator=(object)' instead of the assignment form `object 3135 = object', as shown in the following example. 3136 3137 void test_func() 3138 { 3139 MyType t; 3140 3141 t.operator=(t); // not warn 3142 t = t; // warn 3143 } 3144 3145 `-Wreturn-type' 3146 Warn whenever a function is defined with a return-type that 3147 defaults to `int'. Also warn about any `return' statement with no 3148 return-value in a function whose return-type is not `void' 3149 (falling off the end of the function body is considered returning 3150 without a value), and about a `return' statement with a expression 3151 in a function whose return-type is `void'. 3152 3153 For C++, a function without return type always produces a 3154 diagnostic message, even when `-Wno-return-type' is specified. 3155 The only exceptions are `main' and functions defined in system 3156 headers. 3157 3158 This warning is enabled by `-Wall'. 3159 3160 `-Wripa-opt-mismatch' 3161 When doing an FDO build with `-fprofile-use' and `-fripa', warn if 3162 importing an axuiliary module that was built with a different GCC 3163 command line during the profile-generate phase than the primary 3164 module. 3165 3166 This warning is enabled by `-Wall'. 3167 3168 `-Wswitch' 3169 Warn whenever a `switch' statement has an index of enumerated type 3170 and lacks a `case' for one or more of the named codes of that 3171 enumeration. (The presence of a `default' label prevents this 3172 warning.) `case' labels outside the enumeration range also 3173 provoke warnings when this option is used. This warning is 3174 enabled by `-Wall'. 3175 3176 `-Wswitch-default' 3177 Warn whenever a `switch' statement does not have a `default' case. 3178 3179 `-Wswitch-enum' 3180 Warn whenever a `switch' statement has an index of enumerated type 3181 and lacks a `case' for one or more of the named codes of that 3182 enumeration. `case' labels outside the enumeration range also 3183 provoke warnings when this option is used. 3184 3185 `-Wsync-nand (C and C++ only)' 3186 Warn when `__sync_fetch_and_nand' and `__sync_nand_and_fetch' 3187 built-in functions are used. These functions changed semantics in 3188 GCC 4.4. 3189 3190 `-Wtrigraphs' 3191 Warn if any trigraphs are encountered that might change the 3192 meaning of the program (trigraphs within comments are not warned 3193 about). This warning is enabled by `-Wall'. 3194 3195 `-Wunused-function' 3196 Warn whenever a static function is declared but not defined or a 3197 non-inline static function is unused. This warning is enabled by 3198 `-Wall'. 3199 3200 `-Wunused-label' 3201 Warn whenever a label is declared but not used. This warning is 3202 enabled by `-Wall'. 3203 3204 To suppress this warning use the `unused' attribute (*note 3205 Variable Attributes::). 3206 3207 `-Wunused-parameter' 3208 Warn whenever a function parameter is unused aside from its 3209 declaration. 3210 3211 To suppress this warning use the `unused' attribute (*note 3212 Variable Attributes::). 3213 3214 `-Wunused-variable' 3215 Warn whenever a local variable or non-constant static variable is 3216 unused aside from its declaration. This warning is enabled by 3217 `-Wall'. 3218 3219 To suppress this warning use the `unused' attribute (*note 3220 Variable Attributes::). 3221 3222 Note that a classic way to avoid `-Wunused-variable' warning is 3223 using `x = x', but that does not work with `-Wself-assign'. Use 3224 `(void) x' or `static_cast<void>(x)' instead. 3225 3226 `-Wunused-value' 3227 Warn whenever a statement computes a result that is explicitly not 3228 used. To suppress this warning cast the unused expression to 3229 `void'. This includes an expression-statement or the left-hand 3230 side of a comma expression that contains no side effects. For 3231 example, an expression such as `x[i,j]' will cause a warning, while 3232 `x[(void)i,j]' will not. 3233 3234 This warning is enabled by `-Wall'. 3235 3236 `-Wunused' 3237 All the above `-Wunused' options combined. 3238 3239 In order to get a warning about an unused function parameter, you 3240 must either specify `-Wextra -Wunused' (note that `-Wall' implies 3241 `-Wunused'), or separately specify `-Wunused-parameter'. 3242 3243 `-Wuninitialized' 3244 Warn if an automatic variable is used without first being 3245 initialized or if a variable may be clobbered by a `setjmp' call. 3246 In C++, warn if a non-static reference or non-static `const' member 3247 appears in a class without constructors. 3248 3249 If you want to warn about code which uses the uninitialized value 3250 of the variable in its own initializer, use the `-Winit-self' 3251 option. 3252 3253 These warnings occur for individual uninitialized or clobbered 3254 elements of structure, union or array variables as well as for 3255 variables which are uninitialized or clobbered as a whole. They do 3256 not occur for variables or elements declared `volatile'. Because 3257 these warnings depend on optimization, the exact variables or 3258 elements for which there are warnings will depend on the precise 3259 optimization options and version of GCC used. 3260 3261 Note that there may be no warning about a variable that is used 3262 only to compute a value that itself is never used, because such 3263 computations may be deleted by data flow analysis before the 3264 warnings are printed. 3265 3266 `-Wmaybe-uninitialized' 3267 For an automatic variable, if there exists a path from the function 3268 entry to a use of the variable that is initialized, but there exist 3269 some other paths the variable is not initialized, the compiler will 3270 emit a warning if it can not prove the uninitialized paths do not 3271 happen at runtime. These warnings are made optional because GCC is 3272 not smart enough to see all the reasons why the code might be 3273 correct despite appearing to have an error. Here is one example 3274 of how this can happen: 3275 3276 { 3277 int x; 3278 switch (y) 3279 { 3280 case 1: x = 1; 3281 break; 3282 case 2: x = 4; 3283 break; 3284 case 3: x = 5; 3285 } 3286 foo (x); 3287 } 3288 3289 If the value of `y' is always 1, 2 or 3, then `x' is always 3290 initialized, but GCC doesn't know this. To suppress the warning, 3291 the user needs to provide a default case with assert(0) or similar 3292 code. 3293 3294 This option also warns when a non-volatile automatic variable 3295 might be changed by a call to `longjmp'. These warnings as well 3296 are possible only in optimizing compilation. 3297 3298 The compiler sees only the calls to `setjmp'. It cannot know 3299 where `longjmp' will be called; in fact, a signal handler could 3300 call it at any point in the code. As a result, you may get a 3301 warning even when there is in fact no problem because `longjmp' 3302 cannot in fact be called at the place which would cause a problem. 3303 3304 Some spurious warnings can be avoided if you declare all the 3305 functions you use that never return as `noreturn'. *Note Function 3306 Attributes::. 3307 3308 This warning is enabled by `-Wall' or `-Wextra'. 3309 3310 `-Wunknown-pragmas' 3311 Warn when a #pragma directive is encountered which is not 3312 understood by GCC. If this command line option is used, warnings 3313 will even be issued for unknown pragmas in system header files. 3314 This is not the case if the warnings were only enabled by the 3315 `-Wall' command line option. 3316 3317 `-Wno-pragmas' 3318 Do not warn about misuses of pragmas, such as incorrect parameters, 3319 invalid syntax, or conflicts between pragmas. See also 3320 `-Wunknown-pragmas'. 3321 3322 `-Wstrict-aliasing' 3323 This option is only active when `-fstrict-aliasing' is active. It 3324 warns about code which might break the strict aliasing rules that 3325 the compiler is using for optimization. The warning does not 3326 catch all cases, but does attempt to catch the more common 3327 pitfalls. It is included in `-Wall'. It is equivalent to 3328 `-Wstrict-aliasing=3' 3329 3330 `-Wstrict-aliasing=n' 3331 This option is only active when `-fstrict-aliasing' is active. It 3332 warns about code which might break the strict aliasing rules that 3333 the compiler is using for optimization. Higher levels correspond 3334 to higher accuracy (fewer false positives). Higher levels also 3335 correspond to more effort, similar to the way -O works. 3336 `-Wstrict-aliasing' is equivalent to `-Wstrict-aliasing=n', with 3337 n=3. 3338 3339 Level 1: Most aggressive, quick, least accurate. Possibly useful 3340 when higher levels do not warn but -fstrict-aliasing still breaks 3341 the code, as it has very few false negatives. However, it has 3342 many false positives. Warns for all pointer conversions between 3343 possibly incompatible types, even if never dereferenced. Runs in 3344 the frontend only. 3345 3346 Level 2: Aggressive, quick, not too precise. May still have many 3347 false positives (not as many as level 1 though), and few false 3348 negatives (but possibly more than level 1). Unlike level 1, it 3349 only warns when an address is taken. Warns about incomplete 3350 types. Runs in the frontend only. 3351 3352 Level 3 (default for `-Wstrict-aliasing'): Should have very few 3353 false positives and few false negatives. Slightly slower than 3354 levels 1 or 2 when optimization is enabled. Takes care of the 3355 common punn+dereference pattern in the frontend: 3356 `*(int*)&some_float'. If optimization is enabled, it also runs in 3357 the backend, where it deals with multiple statement cases using 3358 flow-sensitive points-to information. Only warns when the 3359 converted pointer is dereferenced. Does not warn about incomplete 3360 types. 3361 3362 `-Wstrict-overflow' 3363 `-Wstrict-overflow=N' 3364 This option is only active when `-fstrict-overflow' is active. It 3365 warns about cases where the compiler optimizes based on the 3366 assumption that signed overflow does not occur. Note that it does 3367 not warn about all cases where the code might overflow: it only 3368 warns about cases where the compiler implements some optimization. 3369 Thus this warning depends on the optimization level. 3370 3371 An optimization which assumes that signed overflow does not occur 3372 is perfectly safe if the values of the variables involved are such 3373 that overflow never does, in fact, occur. Therefore this warning 3374 can easily give a false positive: a warning about code which is not 3375 actually a problem. To help focus on important issues, several 3376 warning levels are defined. No warnings are issued for the use of 3377 undefined signed overflow when estimating how many iterations a 3378 loop will require, in particular when determining whether a loop 3379 will be executed at all. 3380 3381 `-Wstrict-overflow=1' 3382 Warn about cases which are both questionable and easy to 3383 avoid. For example: `x + 1 > x'; with `-fstrict-overflow', 3384 the compiler will simplify this to `1'. This level of 3385 `-Wstrict-overflow' is enabled by `-Wall'; higher levels are 3386 not, and must be explicitly requested. 3387 3388 `-Wstrict-overflow=2' 3389 Also warn about other cases where a comparison is simplified 3390 to a constant. For example: `abs (x) >= 0'. This can only be 3391 simplified when `-fstrict-overflow' is in effect, because 3392 `abs (INT_MIN)' overflows to `INT_MIN', which is less than 3393 zero. `-Wstrict-overflow' (with no level) is the same as 3394 `-Wstrict-overflow=2'. 3395 3396 `-Wstrict-overflow=3' 3397 Also warn about other cases where a comparison is simplified. 3398 For example: `x + 1 > 1' will be simplified to `x > 0'. 3399 3400 `-Wstrict-overflow=4' 3401 Also warn about other simplifications not covered by the 3402 above cases. For example: `(x * 10) / 5' will be simplified 3403 to `x * 2'. 3404 3405 `-Wstrict-overflow=5' 3406 Also warn about cases where the compiler reduces the 3407 magnitude of a constant involved in a comparison. For 3408 example: `x + 2 > y' will be simplified to `x + 1 >= y'. 3409 This is reported only at the highest warning level because 3410 this simplification applies to many comparisons, so this 3411 warning level will give a very large number of false 3412 positives. 3413 3414 `-Warray-bounds' 3415 This option is only active when `-ftree-vrp' is active (default 3416 for -O2 and above). It warns about subscripts to arrays that are 3417 always out of bounds. This warning is enabled by `-Wall'. 3418 3419 `-Wno-div-by-zero' 3420 Do not warn about compile-time integer division by zero. Floating 3421 point division by zero is not warned about, as it can be a 3422 legitimate way of obtaining infinities and NaNs. 3423 3424 `-Wsystem-headers' 3425 Print warning messages for constructs found in system header files. 3426 Warnings from system headers are normally suppressed, on the 3427 assumption that they usually do not indicate real problems and 3428 would only make the compiler output harder to read. Using this 3429 command line option tells GCC to emit warnings from system headers 3430 as if they occurred in user code. However, note that using 3431 `-Wall' in conjunction with this option will _not_ warn about 3432 unknown pragmas in system headers--for that, `-Wunknown-pragmas' 3433 must also be used. 3434 3435 `-Wfloat-equal' 3436 Warn if floating point values are used in equality comparisons. 3437 3438 The idea behind this is that sometimes it is convenient (for the 3439 programmer) to consider floating-point values as approximations to 3440 infinitely precise real numbers. If you are doing this, then you 3441 need to compute (by analyzing the code, or in some other way) the 3442 maximum or likely maximum error that the computation introduces, 3443 and allow for it when performing comparisons (and when producing 3444 output, but that's a different problem). In particular, instead 3445 of testing for equality, you would check to see whether the two 3446 values have ranges that overlap; and this is done with the 3447 relational operators, so equality comparisons are probably 3448 mistaken. 3449 3450 `-Wtraditional (C and Objective-C only)' 3451 Warn about certain constructs that behave differently in 3452 traditional and ISO C. Also warn about ISO C constructs that have 3453 no traditional C equivalent, and/or problematic constructs which 3454 should be avoided. 3455 3456 * Macro parameters that appear within string literals in the 3457 macro body. In traditional C macro replacement takes place 3458 within string literals, but does not in ISO C. 3459 3460 * In traditional C, some preprocessor directives did not exist. 3461 Traditional preprocessors would only consider a line to be a 3462 directive if the `#' appeared in column 1 on the line. 3463 Therefore `-Wtraditional' warns about directives that 3464 traditional C understands but would ignore because the `#' 3465 does not appear as the first character on the line. It also 3466 suggests you hide directives like `#pragma' not understood by 3467 traditional C by indenting them. Some traditional 3468 implementations would not recognize `#elif', so it suggests 3469 avoiding it altogether. 3470 3471 * A function-like macro that appears without arguments. 3472 3473 * The unary plus operator. 3474 3475 * The `U' integer constant suffix, or the `F' or `L' floating 3476 point constant suffixes. (Traditional C does support the `L' 3477 suffix on integer constants.) Note, these suffixes appear in 3478 macros defined in the system headers of most modern systems, 3479 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these 3480 macros in user code might normally lead to spurious warnings, 3481 however GCC's integrated preprocessor has enough context to 3482 avoid warning in these cases. 3483 3484 * A function declared external in one block and then used after 3485 the end of the block. 3486 3487 * A `switch' statement has an operand of type `long'. 3488 3489 * A non-`static' function declaration follows a `static' one. 3490 This construct is not accepted by some traditional C 3491 compilers. 3492 3493 * The ISO type of an integer constant has a different width or 3494 signedness from its traditional type. This warning is only 3495 issued if the base of the constant is ten. I.e. hexadecimal 3496 or octal values, which typically represent bit patterns, are 3497 not warned about. 3498 3499 * Usage of ISO string concatenation is detected. 3500 3501 * Initialization of automatic aggregates. 3502 3503 * Identifier conflicts with labels. Traditional C lacks a 3504 separate namespace for labels. 3505 3506 * Initialization of unions. If the initializer is zero, the 3507 warning is omitted. This is done under the assumption that 3508 the zero initializer in user code appears conditioned on e.g. 3509 `__STDC__' to avoid missing initializer warnings and relies 3510 on default initialization to zero in the traditional C case. 3511 3512 * Conversions by prototypes between fixed/floating point values 3513 and vice versa. The absence of these prototypes when 3514 compiling with traditional C would cause serious problems. 3515 This is a subset of the possible conversion warnings, for the 3516 full set use `-Wtraditional-conversion'. 3517 3518 * Use of ISO C style function definitions. This warning 3519 intentionally is _not_ issued for prototype declarations or 3520 variadic functions because these ISO C features will appear 3521 in your code when using libiberty's traditional C 3522 compatibility macros, `PARAMS' and `VPARAMS'. This warning 3523 is also bypassed for nested functions because that feature is 3524 already a GCC extension and thus not relevant to traditional 3525 C compatibility. 3526 3527 `-Wtraditional-conversion (C and Objective-C only)' 3528 Warn if a prototype causes a type conversion that is different 3529 from what would happen to the same argument in the absence of a 3530 prototype. This includes conversions of fixed point to floating 3531 and vice versa, and conversions changing the width or signedness 3532 of a fixed point argument except when the same as the default 3533 promotion. 3534 3535 `-Wdeclaration-after-statement (C and Objective-C only)' 3536 Warn when a declaration is found after a statement in a block. 3537 This construct, known from C++, was introduced with ISO C99 and is 3538 by default allowed in GCC. It is not supported by ISO C90 and was 3539 not supported by GCC versions before GCC 3.0. *Note Mixed 3540 Declarations::. 3541 3542 `-Wundef' 3543 Warn if an undefined identifier is evaluated in an `#if' directive. 3544 3545 `-Wno-endif-labels' 3546 Do not warn whenever an `#else' or an `#endif' are followed by 3547 text. 3548 3549 `-Wshadow' 3550 Warn whenever a local variable shadows another local variable, 3551 parameter or global variable or whenever a built-in function is 3552 shadowed. 3553 3554 `-Wshadow-local' 3555 Warn when a local variable shadows another local variable or 3556 parameter. 3557 3558 `-Wshadow-compatible-local' 3559 Warn when a local variable shadows another local variable or 3560 parameter whose type is compatible with that of the shadowing 3561 variable. In C++, type compatibility here means the type of the 3562 shadowing variable can be converted to that of the shadowed 3563 variable. The creation of this flag (in addition to 3564 `-Wshadow-local') is based on the idea that when a local variable 3565 shadows another one of incompatible type, it is most likely 3566 intentional, not a bug or typo, as shown in the following example: 3567 3568 for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i) 3569 { 3570 for (int i = 0; i < N; ++i) 3571 { 3572 ... 3573 } 3574 ... 3575 } 3576 3577 Since the two variable `i' in the example above have incompatible 3578 types, enabling only `-Wshadow-compatible-local' will not emit a 3579 warning. Because their types are incompatible, if a programmer 3580 accidentally uses one in place of the other, type checking will 3581 catch that and emit an error or warning. So not warning (about 3582 shadowing) in this case will not lead to undetected bugs. Use of 3583 this flag instead of `-Wshadow-local' can possibly reduce the 3584 number of warnings triggered by intentional shadowing. 3585 3586 `-Wlarger-than=LEN' 3587 Warn whenever an object of larger than LEN bytes is defined. 3588 3589 `-Wframe-larger-than=LEN' 3590 Warn if the size of a function frame is larger than LEN bytes. 3591 The computation done to determine the stack frame size is 3592 approximate and not conservative. The actual requirements may be 3593 somewhat greater than LEN even if you do not get a warning. In 3594 addition, any space allocated via `alloca', variable-length 3595 arrays, or related constructs is not included by the compiler when 3596 determining whether or not to issue a warning. 3597 3598 `-Wunsafe-loop-optimizations' 3599 Warn if the loop cannot be optimized because the compiler could not 3600 assume anything on the bounds of the loop indices. With 3601 `-funsafe-loop-optimizations' warn if the compiler made such 3602 assumptions. 3603 3604 `-Wno-pedantic-ms-format (MinGW targets only)' 3605 Disables the warnings about non-ISO `printf' / `scanf' format 3606 width specifiers `I32', `I64', and `I' used on Windows targets 3607 depending on the MS runtime, when you are using the options 3608 `-Wformat' and `-pedantic' without gnu-extensions. 3609 3610 `-Wpointer-arith' 3611 Warn about anything that depends on the "size of" a function type 3612 or of `void'. GNU C assigns these types a size of 1, for 3613 convenience in calculations with `void *' pointers and pointers to 3614 functions. In C++, warn also when an arithmetic operation involves 3615 `NULL'. This warning is also enabled by `-pedantic'. 3616 3617 `-Wtype-limits' 3618 Warn if a comparison is always true or always false due to the 3619 limited range of the data type, but do not warn for constant 3620 expressions. For example, warn if an unsigned variable is 3621 compared against zero with `<' or `>='. This warning is also 3622 enabled by `-Wextra'. 3623 3624 `-Wbad-function-cast (C and Objective-C only)' 3625 Warn whenever a function call is cast to a non-matching type. For 3626 example, warn if `int malloc()' is cast to `anything *'. 3627 3628 `-Wc++-compat (C and Objective-C only)' 3629 Warn about ISO C constructs that are outside of the common subset 3630 of ISO C and ISO C++, e.g. request for implicit conversion from 3631 `void *' to a pointer to non-`void' type. 3632 3633 `-Wc++0x-compat (C++ and Objective-C++ only)' 3634 Warn about C++ constructs whose meaning differs between ISO C++ 3635 1998 and ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will 3636 become keywords in ISO C++ 200x. This warning is enabled by 3637 `-Wall'. 3638 3639 `-Wcast-qual' 3640 Warn whenever a pointer is cast so as to remove a type qualifier 3641 from the target type. For example, warn if a `const char *' is 3642 cast to an ordinary `char *'. 3643 3644 `-Wcast-align' 3645 Warn whenever a pointer is cast such that the required alignment 3646 of the target is increased. For example, warn if a `char *' is 3647 cast to an `int *' on machines where integers can only be accessed 3648 at two- or four-byte boundaries. 3649 3650 `-Wwrite-strings' 3651 When compiling C, give string constants the type `const 3652 char[LENGTH]' so that copying the address of one into a 3653 non-`const' `char *' pointer will get a warning. These warnings 3654 will help you find at compile time code that can try to write into 3655 a string constant, but only if you have been very careful about 3656 using `const' in declarations and prototypes. Otherwise, it will 3657 just be a nuisance. This is why we did not make `-Wall' request 3658 these warnings. 3659 3660 When compiling C++, warn about the deprecated conversion from 3661 string literals to `char *'. This warning is enabled by default 3662 for C++ programs. 3663 3664 `-Wclobbered' 3665 Warn for variables that might be changed by `longjmp' or `vfork'. 3666 This warning is also enabled by `-Wextra'. 3667 3668 `-Wconversion' 3669 Warn for implicit conversions that may alter a value. This includes 3670 conversions between real and integer, like `abs (x)' when `x' is 3671 `double'; conversions between signed and unsigned, like `unsigned 3672 ui = -1'; and conversions to smaller types, like `sqrtf (M_PI)'. 3673 Do not warn for explicit casts like `abs ((int) x)' and `ui = 3674 (unsigned) -1', or if the value is not changed by the conversion 3675 like in `abs (2.0)'. Warnings about conversions between signed 3676 and unsigned integers can be disabled by using 3677 `-Wno-sign-conversion'. 3678 3679 For C++, also warn for conversions between `NULL' and non-pointer 3680 types; confusing overload resolution for user-defined conversions; 3681 and conversions that will never use a type conversion operator: 3682 conversions to `void', the same type, a base class or a reference 3683 to them. Warnings about conversions between signed and unsigned 3684 integers are disabled by default in C++ unless `-Wsign-conversion' 3685 is explicitly enabled. 3686 3687 `-Wconversion-null' 3688 Warn about peculiar, but valid, conversions from/to `NULL'. This 3689 includes converting `NULL' to non-pointer type and converting the 3690 boolean value `false' to `NULL'. This warning is also enabled by 3691 `-Wconversion' and only effective in C++. 3692 3693 `-Wreal-conversion' 3694 Warn for implicit type conversions from real (`double' or `float') 3695 to integral values. 3696 3697 `-Wempty-body' 3698 Warn if an empty body occurs in an `if', `else' or `do while' 3699 statement. This warning is also enabled by `-Wextra'. 3700 3701 `-Wenum-compare (C++ and Objective-C++ only)' 3702 Warn about a comparison between values of different enum types. 3703 This warning is enabled by default. 3704 3705 `-Wsign-compare' 3706 Warn when a comparison between signed and unsigned values could 3707 produce an incorrect result when the signed value is converted to 3708 unsigned. This warning is also enabled by `-Wextra'; to get the 3709 other warnings of `-Wextra' without this warning, use `-Wextra 3710 -Wno-sign-compare'. 3711 3712 `-Wsign-conversion' 3713 Warn for implicit conversions that may change the sign of an 3714 integer value, like assigning a signed integer expression to an 3715 unsigned integer variable. An explicit cast silences the warning. 3716 In C, this option is enabled also by `-Wconversion'. 3717 3718 `-Waddress' 3719 Warn about suspicious uses of memory addresses. These include using 3720 the address of a function in a conditional expression, such as 3721 `void func(void); if (func)', and comparisons against the memory 3722 address of a string literal, such as `if (x == "abc")'. Such uses 3723 typically indicate a programmer error: the address of a function 3724 always evaluates to true, so their use in a conditional usually 3725 indicate that the programmer forgot the parentheses in a function 3726 call; and comparisons against string literals result in unspecified 3727 behavior and are not portable in C, so they usually indicate that 3728 the programmer intended to use `strcmp'. This warning is enabled 3729 by `-Wall'. 3730 3731 `-Wlogical-op' 3732 Warn about suspicious uses of logical operators in expressions. 3733 This includes using logical operators in contexts where a bit-wise 3734 operator is likely to be expected. 3735 3736 `-Waggregate-return' 3737 Warn if any functions that return structures or unions are defined 3738 or called. (In languages where you can return an array, this also 3739 elicits a warning.) 3740 3741 `-Wno-attributes' 3742 Do not warn if an unexpected `__attribute__' is used, such as 3743 unrecognized attributes, function attributes applied to variables, 3744 etc. This will not stop errors for incorrect use of supported 3745 attributes. 3746 3747 `-Wno-builtin-macro-redefined' 3748 Do not warn if certain built-in macros are redefined. This 3749 suppresses warnings for redefinition of `__TIMESTAMP__', 3750 `__TIME__', `__DATE__', `__FILE__', and `__BASE_FILE__'. 3751 3752 `-Wstrict-prototypes (C and Objective-C only)' 3753 Warn if a function is declared or defined without specifying the 3754 argument types. (An old-style function definition is permitted 3755 without a warning if preceded by a declaration which specifies the 3756 argument types.) 3757 3758 `-Wold-style-declaration (C and Objective-C only)' 3759 Warn for obsolescent usages, according to the C Standard, in a 3760 declaration. For example, warn if storage-class specifiers like 3761 `static' are not the first things in a declaration. This warning 3762 is also enabled by `-Wextra'. 3763 3764 `-Wold-style-definition (C and Objective-C only)' 3765 Warn if an old-style function definition is used. A warning is 3766 given even if there is a previous prototype. 3767 3768 `-Wmissing-parameter-type (C and Objective-C only)' 3769 A function parameter is declared without a type specifier in 3770 K&R-style functions: 3771 3772 void foo(bar) { } 3773 3774 This warning is also enabled by `-Wextra'. 3775 3776 `-Wmissing-prototypes (C and Objective-C only)' 3777 Warn if a global function is defined without a previous prototype 3778 declaration. This warning is issued even if the definition itself 3779 provides a prototype. The aim is to detect global functions that 3780 fail to be declared in header files. 3781 3782 `-Wmissing-declarations' 3783 Warn if a global function is defined without a previous 3784 declaration. Do so even if the definition itself provides a 3785 prototype. Use this option to detect global functions that are 3786 not declared in header files. In C++, no warnings are issued for 3787 function templates, or for inline functions, or for functions in 3788 anonymous namespaces. 3789 3790 `-Wmissing-field-initializers' 3791 Warn if a structure's initializer has some fields missing. For 3792 example, the following code would cause such a warning, because 3793 `x.h' is implicitly zero: 3794 3795 struct s { int f, g, h; }; 3796 struct s x = { 3, 4 }; 3797 3798 This option does not warn about designated initializers, so the 3799 following modification would not trigger a warning: 3800 3801 struct s { int f, g, h; }; 3802 struct s x = { .f = 3, .g = 4 }; 3803 3804 This warning is included in `-Wextra'. To get other `-Wextra' 3805 warnings without this one, use `-Wextra 3806 -Wno-missing-field-initializers'. 3807 3808 `-Wmissing-noreturn' 3809 Warn about functions which might be candidates for attribute 3810 `noreturn'. Note these are only possible candidates, not absolute 3811 ones. Care should be taken to manually verify functions actually 3812 do not ever return before adding the `noreturn' attribute, 3813 otherwise subtle code generation bugs could be introduced. You 3814 will not get a warning for `main' in hosted C environments. 3815 3816 `-Wmissing-format-attribute' 3817 Warn about function pointers which might be candidates for `format' 3818 attributes. Note these are only possible candidates, not absolute 3819 ones. GCC will guess that function pointers with `format' 3820 attributes that are used in assignment, initialization, parameter 3821 passing or return statements should have a corresponding `format' 3822 attribute in the resulting type. I.e. the left-hand side of the 3823 assignment or initialization, the type of the parameter variable, 3824 or the return type of the containing function respectively should 3825 also have a `format' attribute to avoid the warning. 3826 3827 GCC will also warn about function definitions which might be 3828 candidates for `format' attributes. Again, these are only 3829 possible candidates. GCC will guess that `format' attributes 3830 might be appropriate for any function that calls a function like 3831 `vprintf' or `vscanf', but this might not always be the case, and 3832 some functions for which `format' attributes are appropriate may 3833 not be detected. 3834 3835 `-Wno-multichar' 3836 Do not warn if a multicharacter constant (`'FOOF'') is used. 3837 Usually they indicate a typo in the user's code, as they have 3838 implementation-defined values, and should not be used in portable 3839 code. 3840 3841 `-Wnormalized=<none|id|nfc|nfkc>' 3842 In ISO C and ISO C++, two identifiers are different if they are 3843 different sequences of characters. However, sometimes when 3844 characters outside the basic ASCII character set are used, you can 3845 have two different character sequences that look the same. To 3846 avoid confusion, the ISO 10646 standard sets out some 3847 "normalization rules" which when applied ensure that two sequences 3848 that look the same are turned into the same sequence. GCC can 3849 warn you if you are using identifiers which have not been 3850 normalized; this option controls that warning. 3851 3852 There are four levels of warning that GCC supports. The default is 3853 `-Wnormalized=nfc', which warns about any identifier which is not 3854 in the ISO 10646 "C" normalized form, "NFC". NFC is the 3855 recommended form for most uses. 3856 3857 Unfortunately, there are some characters which ISO C and ISO C++ 3858 allow in identifiers that when turned into NFC aren't allowable as 3859 identifiers. That is, there's no way to use these symbols in 3860 portable ISO C or C++ and have all your identifiers in NFC. 3861 `-Wnormalized=id' suppresses the warning for these characters. It 3862 is hoped that future versions of the standards involved will 3863 correct this, which is why this option is not the default. 3864 3865 You can switch the warning off for all characters by writing 3866 `-Wnormalized=none'. You would only want to do this if you were 3867 using some other normalization scheme (like "D"), because 3868 otherwise you can easily create bugs that are literally impossible 3869 to see. 3870 3871 Some characters in ISO 10646 have distinct meanings but look 3872 identical in some fonts or display methodologies, especially once 3873 formatting has been applied. For instance `\u207F', "SUPERSCRIPT 3874 LATIN SMALL LETTER N", will display just like a regular `n' which 3875 has been placed in a superscript. ISO 10646 defines the "NFKC" 3876 normalization scheme to convert all these into a standard form as 3877 well, and GCC will warn if your code is not in NFKC if you use 3878 `-Wnormalized=nfkc'. This warning is comparable to warning about 3879 every identifier that contains the letter O because it might be 3880 confused with the digit 0, and so is not the default, but may be 3881 useful as a local coding convention if the programming environment 3882 is unable to be fixed to display these characters distinctly. 3883 3884 `-Wno-deprecated' 3885 Do not warn about usage of deprecated features. *Note Deprecated 3886 Features::. 3887 3888 `-Wno-deprecated-declarations' 3889 Do not warn about uses of functions (*note Function Attributes::), 3890 variables (*note Variable Attributes::), and types (*note Type 3891 Attributes::) marked as deprecated by using the `deprecated' 3892 attribute. 3893 3894 `-Wno-overflow' 3895 Do not warn about compile-time overflow in constant expressions. 3896 3897 `-Woverride-init (C and Objective-C only)' 3898 Warn if an initialized field without side effects is overridden 3899 when using designated initializers (*note Designated Initializers: 3900 Designated Inits.). 3901 3902 This warning is included in `-Wextra'. To get other `-Wextra' 3903 warnings without this one, use `-Wextra -Wno-override-init'. 3904 3905 `-Wpacked' 3906 Warn if a structure is given the packed attribute, but the packed 3907 attribute has no effect on the layout or size of the structure. 3908 Such structures may be mis-aligned for little benefit. For 3909 instance, in this code, the variable `f.x' in `struct bar' will be 3910 misaligned even though `struct bar' does not itself have the 3911 packed attribute: 3912 3913 struct foo { 3914 int x; 3915 char a, b, c, d; 3916 } __attribute__((packed)); 3917 struct bar { 3918 char z; 3919 struct foo f; 3920 }; 3921 3922 `-Wpacked-bitfield-compat' 3923 The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' attribute 3924 on bit-fields of type `char'. This has been fixed in GCC 4.4 but 3925 the change can lead to differences in the structure layout. GCC 3926 informs you when the offset of such a field has changed in GCC 4.4. 3927 For example there is no longer a 4-bit padding between field `a' 3928 and `b' in this structure: 3929 3930 struct foo 3931 { 3932 char a:4; 3933 char b:8; 3934 } __attribute__ ((packed)); 3935 3936 This warning is enabled by default. Use 3937 `-Wno-packed-bitfield-compat' to disable this warning. 3938 3939 `-Wpadded' 3940 Warn if padding is included in a structure, either to align an 3941 element of the structure or to align the whole structure. 3942 Sometimes when this happens it is possible to rearrange the fields 3943 of the structure to reduce the padding and so make the structure 3944 smaller. 3945 3946 `-Wredundant-decls' 3947 Warn if anything is declared more than once in the same scope, 3948 even in cases where multiple declaration is valid and changes 3949 nothing. 3950 3951 `-Wnested-externs (C and Objective-C only)' 3952 Warn if an `extern' declaration is encountered within a function. 3953 3954 `-Wunreachable-code' 3955 Warn if the compiler detects that code will never be executed. 3956 3957 This option is intended to warn when the compiler detects that at 3958 least a whole line of source code will never be executed, because 3959 some condition is never satisfied or because it is after a 3960 procedure that never returns. 3961 3962 It is possible for this option to produce a warning even though 3963 there are circumstances under which part of the affected line can 3964 be executed, so care should be taken when removing 3965 apparently-unreachable code. 3966 3967 For instance, when a function is inlined, a warning may mean that 3968 the line is unreachable in only one inlined copy of the function. 3969 3970 This option is not made part of `-Wall' because in a debugging 3971 version of a program there is often substantial code which checks 3972 correct functioning of the program and is, hopefully, unreachable 3973 because the program does work. Another common use of unreachable 3974 code is to provide behavior which is selectable at compile-time. 3975 3976 `-Winline' 3977 Warn if a function can not be inlined and it was declared as 3978 inline. Even with this option, the compiler will not warn about 3979 failures to inline functions declared in system headers. 3980 3981 The compiler uses a variety of heuristics to determine whether or 3982 not to inline a function. For example, the compiler takes into 3983 account the size of the function being inlined and the amount of 3984 inlining that has already been done in the current function. 3985 Therefore, seemingly insignificant changes in the source program 3986 can cause the warnings produced by `-Winline' to appear or 3987 disappear. 3988 3989 `-Wno-invalid-offsetof (C++ and Objective-C++ only)' 3990 Suppress warnings from applying the `offsetof' macro to a non-POD 3991 type. According to the 1998 ISO C++ standard, applying `offsetof' 3992 to a non-POD type is undefined. In existing C++ implementations, 3993 however, `offsetof' typically gives meaningful results even when 3994 applied to certain kinds of non-POD types. (Such as a simple 3995 `struct' that fails to be a POD type only by virtue of having a 3996 constructor.) This flag is for users who are aware that they are 3997 writing nonportable code and who have deliberately chosen to 3998 ignore the warning about it. 3999 4000 The restrictions on `offsetof' may be relaxed in a future version 4001 of the C++ standard. 4002 4003 `-Wno-int-to-pointer-cast (C and Objective-C only)' 4004 Suppress warnings from casts to pointer type of an integer of a 4005 different size. 4006 4007 `-Wno-pointer-to-int-cast (C and Objective-C only)' 4008 Suppress warnings from casts from a pointer to an integer type of a 4009 different size. 4010 4011 `-Winvalid-pch' 4012 Warn if a precompiled header (*note Precompiled Headers::) is 4013 found in the search path but can't be used. 4014 4015 `-Wlong-long' 4016 Warn if `long long' type is used. This is default. To inhibit 4017 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long' 4018 and `-Wno-long-long' are taken into account only when `-pedantic' 4019 flag is used. 4020 4021 `-Wvariadic-macros' 4022 Warn if variadic macros are used in pedantic ISO C90 mode, or the 4023 GNU alternate syntax when in pedantic ISO C99 mode. This is 4024 default. To inhibit the warning messages, use 4025 `-Wno-variadic-macros'. 4026 4027 `-Wvla' 4028 Warn if variable length array is used in the code. `-Wno-vla' 4029 will prevent the `-pedantic' warning of the variable length array. 4030 4031 `-Wvolatile-register-var' 4032 Warn if a register variable is declared volatile. The volatile 4033 modifier does not inhibit all optimizations that may eliminate 4034 reads and/or writes to register variables. This warning is 4035 enabled by `-Wall'. 4036 4037 `-Wdisabled-optimization' 4038 Warn if a requested optimization pass is disabled. This warning 4039 does not generally indicate that there is anything wrong with your 4040 code; it merely indicates that GCC's optimizers were unable to 4041 handle the code effectively. Often, the problem is that your code 4042 is too big or too complex; GCC will refuse to optimize programs 4043 when the optimization itself is likely to take inordinate amounts 4044 of time. 4045 4046 `-Wpointer-sign (C and Objective-C only)' 4047 Warn for pointer argument passing or assignment with different 4048 signedness. This option is only supported for C and Objective-C. 4049 It is implied by `-Wall' and by `-pedantic', which can be disabled 4050 with `-Wno-pointer-sign'. 4051 4052 `-Wstack-protector' 4053 This option is only active when `-fstack-protector' is active. It 4054 warns about functions that will not be protected against stack 4055 smashing. 4056 4057 `-Wno-mudflap' 4058 Suppress warnings about constructs that cannot be instrumented by 4059 `-fmudflap'. 4060 4061 `-Woverlength-strings' 4062 Warn about string constants which are longer than the "minimum 4063 maximum" length specified in the C standard. Modern compilers 4064 generally allow string constants which are much longer than the 4065 standard's minimum limit, but very portable programs should avoid 4066 using longer strings. 4067 4068 The limit applies _after_ string constant concatenation, and does 4069 not count the trailing NUL. In C89, the limit was 509 characters; 4070 in C99, it was raised to 4095. C++98 does not specify a normative 4071 minimum maximum, so we do not diagnose overlength strings in C++. 4072 4073 This option is implied by `-pedantic', and can be disabled with 4074 `-Wno-overlength-strings'. 4075 4076 4077 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC 4078 4079 3.9 Options for Debugging Your Program or GCC 4080 ============================================= 4081 4082 GCC has various special options that are used for debugging either your 4083 program or GCC: 4084 4085 `-g' 4086 Produce debugging information in the operating system's native 4087 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this 4088 debugging information. 4089 4090 On most systems that use stabs format, `-g' enables use of extra 4091 debugging information that only GDB can use; this extra information 4092 makes debugging work better in GDB but will probably make other 4093 debuggers crash or refuse to read the program. If you want to 4094 control for certain whether to generate the extra information, use 4095 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see 4096 below). 4097 4098 GCC allows you to use `-g' with `-O'. The shortcuts taken by 4099 optimized code may occasionally produce surprising results: some 4100 variables you declared may not exist at all; flow of control may 4101 briefly move where you did not expect it; some statements may not 4102 be executed because they compute constant results or their values 4103 were already at hand; some statements may execute in different 4104 places because they were moved out of loops. 4105 4106 Nevertheless it proves possible to debug optimized output. This 4107 makes it reasonable to use the optimizer for programs that might 4108 have bugs. 4109 4110 The following options are useful when GCC is generated with the 4111 capability for more than one debugging format. 4112 4113 `-ggdb' 4114 Produce debugging information for use by GDB. This means to use 4115 the most expressive format available (DWARF 2, stabs, or the 4116 native format if neither of those are supported), including GDB 4117 extensions if at all possible. 4118 4119 `-gstabs' 4120 Produce debugging information in stabs format (if that is 4121 supported), without GDB extensions. This is the format used by 4122 DBX on most BSD systems. On MIPS, Alpha and System V Release 4 4123 systems this option produces stabs debugging output which is not 4124 understood by DBX or SDB. On System V Release 4 systems this 4125 option requires the GNU assembler. 4126 4127 `-feliminate-unused-debug-symbols' 4128 Produce debugging information in stabs format (if that is 4129 supported), for only symbols that are actually used. 4130 4131 `-femit-class-debug-always' 4132 Instead of emitting debugging information for a C++ class in only 4133 one object file, emit it in all object files using the class. 4134 This option should be used only with debuggers that are unable to 4135 handle the way GCC normally emits debugging information for 4136 classes because using this option will increase the size of 4137 debugging information by as much as a factor of two. 4138 4139 `-gstabs+' 4140 Produce debugging information in stabs format (if that is 4141 supported), using GNU extensions understood only by the GNU 4142 debugger (GDB). The use of these extensions is likely to make 4143 other debuggers crash or refuse to read the program. 4144 4145 `-gcoff' 4146 Produce debugging information in COFF format (if that is 4147 supported). This is the format used by SDB on most System V 4148 systems prior to System V Release 4. 4149 4150 `-gxcoff' 4151 Produce debugging information in XCOFF format (if that is 4152 supported). This is the format used by the DBX debugger on IBM 4153 RS/6000 systems. 4154 4155 `-gxcoff+' 4156 Produce debugging information in XCOFF format (if that is 4157 supported), using GNU extensions understood only by the GNU 4158 debugger (GDB). The use of these extensions is likely to make 4159 other debuggers crash or refuse to read the program, and may cause 4160 assemblers other than the GNU assembler (GAS) to fail with an 4161 error. 4162 4163 `-gdwarf-2' 4164 Produce debugging information in DWARF version 2 format (if that is 4165 supported). This is the format used by DBX on IRIX 6. With this 4166 option, GCC uses features of DWARF version 3 when they are useful; 4167 version 3 is upward compatible with version 2, but may still cause 4168 problems for older debuggers. 4169 4170 `-gdwarf-4' 4171 Produce debugging information in DWARF version 4 format (if that is 4172 supported). With this option, GCC uses features of DWARF version 4 4173 when they are useful, including the placement of most type 4174 information in separate comdat sections. The DWARF version 4 4175 format is still a draft specification, and this option is 4176 currently experimental. 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. This option currently disables only the output of 4183 discriminator information in line number tables when not using 4184 DWARF version 4. 4185 4186 `-gno-strict-dwarf' 4187 Allow using extensions of later DWARF standard version than 4188 selected with `-gdwarf-VERSION'. 4189 4190 `-gvms' 4191 Produce debugging information in VMS debug format (if that is 4192 supported). This is the format used by DEBUG on VMS systems. 4193 4194 `-gLEVEL' 4195 `-ggdbLEVEL' 4196 `-gstabsLEVEL' 4197 `-gcoffLEVEL' 4198 `-gxcoffLEVEL' 4199 `-gvmsLEVEL' 4200 Request debugging information and also use LEVEL to specify how 4201 much information. The default level is 2. 4202 4203 Level 0 produces no debug information at all. Thus, `-g0' negates 4204 `-g'. 4205 4206 Level 1 produces minimal information, enough for making backtraces 4207 in parts of the program that you don't plan to debug. This 4208 includes descriptions of functions and external variables, but no 4209 information about local variables and no line numbers. 4210 4211 Level 3 includes extra information, such as all the macro 4212 definitions present in the program. Some debuggers support macro 4213 expansion when you use `-g3'. 4214 4215 `-gdwarf-2' does not accept a concatenated debug level, because 4216 GCC used to support an option `-gdwarf' that meant to generate 4217 debug information in version 1 of the DWARF format (which is very 4218 different from version 2), and it would have been too confusing. 4219 That debug format is long obsolete, but the option cannot be 4220 changed now. Instead use an additional `-gLEVEL' option to change 4221 the debug level for DWARF2. 4222 4223 `-gmlt' 4224 Produce a minimal line table, with level 1 debugging information 4225 plus information about inlined functions and line numbers. 4226 4227 `-feliminate-dwarf2-dups' 4228 Compress DWARF2 debugging information by eliminating duplicated 4229 information about each symbol. This option only makes sense when 4230 generating DWARF2 debugging information with `-gdwarf-2'. 4231 4232 `-femit-struct-debug-baseonly' 4233 Emit debug information for struct-like types only when the base 4234 name of the compilation source file matches the base name of file 4235 in which the struct was defined. 4236 4237 This option substantially reduces the size of debugging 4238 information, but at significant potential loss in type information 4239 to the debugger. See `-femit-struct-debug-reduced' for a less 4240 aggressive option. See `-femit-struct-debug-detailed' for more 4241 detailed control. 4242 4243 This option works only with DWARF 2. 4244 4245 `-femit-struct-debug-reduced' 4246 Emit debug information for struct-like types only when the base 4247 name of the compilation source file matches the base name of file 4248 in which the type was defined, unless the struct is a template or 4249 defined in a system header. 4250 4251 This option significantly reduces the size of debugging 4252 information, with some potential loss in type information to the 4253 debugger. See `-femit-struct-debug-baseonly' for a more 4254 aggressive option. See `-femit-struct-debug-detailed' for more 4255 detailed control. 4256 4257 This option works only with DWARF 2. 4258 4259 `-femit-struct-debug-detailed[=SPEC-LIST]' 4260 Specify the struct-like types for which the compiler will generate 4261 debug information. The intent is to reduce duplicate struct debug 4262 information between different object files within the same program. 4263 4264 This option is a detailed version of `-femit-struct-debug-reduced' 4265 and `-femit-struct-debug-baseonly', which will serve for most 4266 needs. 4267 4268 A specification has the syntax 4269 [`dir:'|`ind:'][`ord:'|`gen:'](`any'|`sys'|`base'|`none') 4270 4271 The optional first word limits the specification to structs that 4272 are used directly (`dir:') or used indirectly (`ind:'). A struct 4273 type is used directly when it is the type of a variable, member. 4274 Indirect uses arise through pointers to structs. That is, when 4275 use of an incomplete struct would be legal, the use is indirect. 4276 An example is `struct one direct; struct two * indirect;'. 4277 4278 The optional second word limits the specification to ordinary 4279 structs (`ord:') or generic structs (`gen:'). Generic structs are 4280 a bit complicated to explain. For C++, these are non-explicit 4281 specializations of template classes, or non-template classes 4282 within the above. Other programming languages have generics, but 4283 `-femit-struct-debug-detailed' does not yet implement them. 4284 4285 The third word specifies the source files for those structs for 4286 which the compiler will emit debug information. The values `none' 4287 and `any' have the normal meaning. The value `base' means that 4288 the base of name of the file in which the type declaration appears 4289 must match the base of the name of the main compilation file. In 4290 practice, this means that types declared in `foo.c' and `foo.h' 4291 will have debug information, but types declared in other header 4292 will not. The value `sys' means those types satisfying `base' or 4293 declared in system or compiler headers. 4294 4295 You may need to experiment to determine the best settings for your 4296 application. 4297 4298 The default is `-femit-struct-debug-detailed=all'. 4299 4300 This option works only with DWARF 2. 4301 4302 `-fenable-icf-debug' 4303 Generate additional debug information to support identical code 4304 folding (ICF). This option only works with DWARF version 2 or 4305 higher. 4306 4307 `-fno-merge-debug-strings' 4308 Direct the linker to not merge together strings in the debugging 4309 information which are identical in different object files. 4310 Merging is not supported by all assemblers or linkers. Merging 4311 decreases the size of the debug information in the output file at 4312 the cost of increasing link processing time. Merging is enabled 4313 by default. 4314 4315 `-fdebug-prefix-map=OLD=NEW' 4316 When compiling files in directory `OLD', record debugging 4317 information describing them as in `NEW' instead. 4318 4319 `-fno-dwarf2-cfi-asm' 4320 Emit DWARF 2 unwind info as compiler generated `.eh_frame' section 4321 instead of using GAS `.cfi_*' directives. 4322 4323 `-p' 4324 Generate extra code to write profile information suitable for the 4325 analysis program `prof'. You must use this option when compiling 4326 the source files you want data about, and you must also use it when 4327 linking. 4328 4329 `-pg' 4330 Generate extra code to write profile information suitable for the 4331 analysis program `gprof'. You must use this option when compiling 4332 the source files you want data about, and you must also use it when 4333 linking. 4334 4335 `-Q' 4336 Makes the compiler print out each function name as it is compiled, 4337 and print some statistics about each pass when it finishes. 4338 4339 `-ftime-report' 4340 Makes the compiler print some statistics about the time consumed 4341 by each pass when it finishes. 4342 4343 `-fmem-report' 4344 Makes the compiler print some statistics about permanent memory 4345 allocation when it finishes. 4346 4347 `-fpre-ipa-mem-report' 4348 4349 `-fpost-ipa-mem-report' 4350 Makes the compiler print some statistics about permanent memory 4351 allocation before or after interprocedural optimization. 4352 4353 `-fprofile-arcs' 4354 Add code so that program flow "arcs" are instrumented. During 4355 execution the program records how many times each branch and call 4356 is executed and how many times it is taken or returns. When the 4357 compiled program exits it saves this data to a file called 4358 `AUXNAME.gcda' for each source file. The data may be used for 4359 profile-directed optimizations (`-fbranch-probabilities'), or for 4360 test coverage analysis (`-ftest-coverage'). Each object file's 4361 AUXNAME is generated from the name of the output file, if 4362 explicitly specified and it is not the final executable, otherwise 4363 it is the basename of the source file. In both cases any suffix 4364 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or 4365 `dir/foo.gcda' for output file specified as `-o dir/foo.o'). 4366 *Note Cross-profiling::. 4367 4368 `--coverage' 4369 This option is used to compile and link code instrumented for 4370 coverage analysis. The option is a synonym for `-fprofile-arcs' 4371 `-ftest-coverage' (when compiling) and `-lgcov' (when linking). 4372 See the documentation for those options for more details. 4373 4374 * Compile the source files with `-fprofile-arcs' plus 4375 optimization and code generation options. For test coverage 4376 analysis, use the additional `-ftest-coverage' option. You 4377 do not need to profile every source file in a program. 4378 4379 * Link your object files with `-lgcov' or `-fprofile-arcs' (the 4380 latter implies the former). 4381 4382 * Run the program on a representative workload to generate the 4383 arc profile information. This may be repeated any number of 4384 times. You can run concurrent instances of your program, and 4385 provided that the file system supports locking, the data 4386 files will be correctly updated. Also `fork' calls are 4387 detected and correctly handled (double counting will not 4388 happen). 4389 4390 * For profile-directed optimizations, compile the source files 4391 again with the same optimization and code generation options 4392 plus `-fbranch-probabilities' (*note Options that Control 4393 Optimization: Optimize Options.). 4394 4395 * For test coverage analysis, use `gcov' to produce human 4396 readable information from the `.gcno' and `.gcda' files. 4397 Refer to the `gcov' documentation for further information. 4398 4399 4400 With `-fprofile-arcs', for each function of your program GCC 4401 creates a program flow graph, then finds a spanning tree for the 4402 graph. Only arcs that are not on the spanning tree have to be 4403 instrumented: the compiler adds code to count the number of times 4404 that these arcs are executed. When an arc is the only exit or 4405 only entrance to a block, the instrumentation code can be added to 4406 the block; otherwise, a new basic block must be created to hold 4407 the instrumentation code. 4408 4409 `-ftest-coverage' 4410 Produce a notes file that the `gcov' code-coverage utility (*note 4411 `gcov'--a Test Coverage Program: Gcov.) can use to show program 4412 coverage. Each source file's note file is called `AUXNAME.gcno'. 4413 Refer to the `-fprofile-arcs' option above for a description of 4414 AUXNAME and instructions on how to generate test coverage data. 4415 Coverage data will match the source files more closely, if you do 4416 not optimize. 4417 4418 `-fdbg-cnt-list' 4419 Print the name and the counter upperbound for all debug counters. 4420 4421 `-fdbg-cnt=COUNTER-VALUE-LIST' 4422 Set the internal debug counter upperbound. COUNTER-VALUE-LIST is a 4423 comma-separated list of NAME:VALUE pairs which sets the upperbound 4424 of each debug counter NAME to VALUE. All debug counters have the 4425 initial upperbound of UINT_MAX, thus dbg_cnt() returns true always 4426 unless the upperbound is set by this option. e.g. With 4427 -fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) will return true only 4428 for first 10 invocations and dbg_cnt(tail_call) will return false 4429 always. 4430 4431 `-dLETTERS' 4432 `-fdump-rtl-PASS' 4433 Says to make debugging dumps during compilation at times specified 4434 by LETTERS. This is used for debugging the RTL-based passes of the 4435 compiler. The file names for most of the dumps are made by 4436 appending a pass number and a word to the DUMPNAME, and the files 4437 are created in the directory of the output file. DUMPNAME is 4438 generated from the name of the output file, if explicitly specified 4439 and it is not an executable, otherwise it is the basename of the 4440 source file. These switches may have different effects when `-E' 4441 is used for preprocessing. 4442 4443 Debug dumps can be enabled with a `-fdump-rtl' switch or some `-d' 4444 option LETTERS. Here are the possible letters for use in PASS and 4445 LETTERS, and their meanings: 4446 4447 `-fdump-rtl-alignments' 4448 Dump after branch alignments have been computed. 4449 4450 `-fdump-rtl-asmcons' 4451 Dump after fixing rtl statements that have unsatisfied in/out 4452 constraints. 4453 4454 `-fdump-rtl-auto_inc_dec' 4455 Dump after auto-inc-dec discovery. This pass is only run on 4456 architectures that have auto inc or auto dec instructions. 4457 4458 `-fdump-rtl-barriers' 4459 Dump after cleaning up the barrier instructions. 4460 4461 `-fdump-rtl-bbpart' 4462 Dump after partitioning hot and cold basic blocks. 4463 4464 `-fdump-rtl-bbro' 4465 Dump after block reordering. 4466 4467 `-fdump-rtl-btl1' 4468 `-fdump-rtl-btl2' 4469 `-fdump-rtl-btl1' and `-fdump-rtl-btl2' enable dumping after 4470 the two branch target load optimization passes. 4471 4472 `-fdump-rtl-bypass' 4473 Dump after jump bypassing and control flow optimizations. 4474 4475 `-fdump-rtl-combine' 4476 Dump after the RTL instruction combination pass. 4477 4478 `-fdump-rtl-compgotos' 4479 Dump after duplicating the computed gotos. 4480 4481 `-fdump-rtl-ce1' 4482 `-fdump-rtl-ce2' 4483 `-fdump-rtl-ce3' 4484 `-fdump-rtl-ce1', `-fdump-rtl-ce2', and `-fdump-rtl-ce3' 4485 enable dumping after the three if conversion passes. 4486 4487 `-fdump-rtl-cprop_hardreg' 4488 Dump after hard register copy propagation. 4489 4490 `-fdump-rtl-csa' 4491 Dump after combining stack adjustments. 4492 4493 `-fdump-rtl-cse1' 4494 `-fdump-rtl-cse2' 4495 `-fdump-rtl-cse1' and `-fdump-rtl-cse2' enable dumping after 4496 the two common sub-expression elimination passes. 4497 4498 `-fdump-rtl-dce' 4499 Dump after the standalone dead code elimination passes. 4500 4501 `-fdump-rtl-dbr' 4502 Dump after delayed branch scheduling. 4503 4504 `-fdump-rtl-dce1' 4505 `-fdump-rtl-dce2' 4506 `-fdump-rtl-dce1' and `-fdump-rtl-dce2' enable dumping after 4507 the two dead store elimination passes. 4508 4509 `-fdump-rtl-eh' 4510 Dump after finalization of EH handling code. 4511 4512 `-fdump-rtl-eh_ranges' 4513 Dump after conversion of EH handling range regions. 4514 4515 `-fdump-rtl-expand' 4516 Dump after RTL generation. 4517 4518 `-fdump-rtl-fwprop1' 4519 `-fdump-rtl-fwprop2' 4520 `-fdump-rtl-fwprop1' and `-fdump-rtl-fwprop2' enable dumping 4521 after the two forward propagation passes. 4522 4523 `-fdump-rtl-gcse1' 4524 `-fdump-rtl-gcse2' 4525 `-fdump-rtl-gcse1' and `-fdump-rtl-gcse2' enable dumping 4526 after global common subexpression elimination. 4527 4528 `-fdump-rtl-init-regs' 4529 Dump after the initialization of the registers. 4530 4531 `-fdump-rtl-initvals' 4532 Dump after the computation of the initial value sets. 4533 4534 `-fdump-rtl-into_cfglayout' 4535 Dump after converting to cfglayout mode. 4536 4537 `-fdump-rtl-ira' 4538 Dump after iterated register allocation. 4539 4540 `-fdump-rtl-jump' 4541 Dump after the second jump optimization. 4542 4543 `-fdump-rtl-loop2' 4544 `-fdump-rtl-loop2' enables dumping after the rtl loop 4545 optimization passes. 4546 4547 `-fdump-rtl-mach' 4548 Dump after performing the machine dependent reorganization 4549 pass, if that pass exists. 4550 4551 `-fdump-rtl-mode_sw' 4552 Dump after removing redundant mode switches. 4553 4554 `-fdump-rtl-rnreg' 4555 Dump after register renumbering. 4556 4557 `-fdump-rtl-outof_cfglayout' 4558 Dump after converting from cfglayout mode. 4559 4560 `-fdump-rtl-peephole2' 4561 Dump after the peephole pass. 4562 4563 `-fdump-rtl-postreload' 4564 Dump after post-reload optimizations. 4565 4566 `-fdump-rtl-pro_and_epilogue' 4567 Dump after generating the function pro and epilogues. 4568 4569 `-fdump-rtl-regmove' 4570 Dump after the register move pass. 4571 4572 `-fdump-rtl-sched1' 4573 `-fdump-rtl-sched2' 4574 `-fdump-rtl-sched1' and `-fdump-rtl-sched2' enable dumping 4575 after the basic block scheduling passes. 4576 4577 `-fdump-rtl-see' 4578 Dump after sign extension elimination. 4579 4580 `-fdump-rtl-seqabstr' 4581 Dump after common sequence discovery. 4582 4583 `-fdump-rtl-shorten' 4584 Dump after shortening branches. 4585 4586 `-fdump-rtl-sibling' 4587 Dump after sibling call optimizations. 4588 4589 `-fdump-rtl-split1' 4590 `-fdump-rtl-split2' 4591 `-fdump-rtl-split3' 4592 `-fdump-rtl-split4' 4593 `-fdump-rtl-split5' 4594 `-fdump-rtl-split1', `-fdump-rtl-split2', 4595 `-fdump-rtl-split3', `-fdump-rtl-split4' and 4596 `-fdump-rtl-split5' enable dumping after five rounds of 4597 instruction splitting. 4598 4599 `-fdump-rtl-sms' 4600 Dump after modulo scheduling. This pass is only run on some 4601 architectures. 4602 4603 `-fdump-rtl-stack' 4604 Dump after conversion from GCC's "flat register file" 4605 registers to the x87's stack-like registers. This pass is 4606 only run on x86 variants. 4607 4608 `-fdump-rtl-subreg1' 4609 `-fdump-rtl-subreg2' 4610 `-fdump-rtl-subreg1' and `-fdump-rtl-subreg2' enable dumping 4611 after the two subreg expansion passes. 4612 4613 `-fdump-rtl-unshare' 4614 Dump after all rtl has been unshared. 4615 4616 `-fdump-rtl-vartrack' 4617 Dump after variable tracking. 4618 4619 `-fdump-rtl-vregs' 4620 Dump after converting virtual registers to hard registers. 4621 4622 `-fdump-rtl-web' 4623 Dump after live range splitting. 4624 4625 `-fdump-rtl-regclass' 4626 `-fdump-rtl-subregs_of_mode_init' 4627 `-fdump-rtl-subregs_of_mode_finish' 4628 `-fdump-rtl-dfinit' 4629 `-fdump-rtl-dfinish' 4630 These dumps are defined but always produce empty files. 4631 4632 `-fdump-rtl-all' 4633 Produce all the dumps listed above. 4634 4635 `-dA' 4636 Annotate the assembler output with miscellaneous debugging 4637 information. 4638 4639 `-dD' 4640 Dump all macro definitions, at the end of preprocessing, in 4641 addition to normal output. 4642 4643 `-dH' 4644 Produce a core dump whenever an error occurs. 4645 4646 `-dm' 4647 Print statistics on memory usage, at the end of the run, to 4648 standard error. 4649 4650 `-dp' 4651 Annotate the assembler output with a comment indicating which 4652 pattern and alternative was used. The length of each 4653 instruction is also printed. 4654 4655 `-dP' 4656 Dump the RTL in the assembler output as a comment before each 4657 instruction. Also turns on `-dp' annotation. 4658 4659 `-dv' 4660 For each of the other indicated dump files 4661 (`-fdump-rtl-PASS'), dump a representation of the control 4662 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'. 4663 4664 `-dx' 4665 Just generate RTL for a function instead of compiling it. 4666 Usually used with `-fdump-rtl-expand'. 4667 4668 `-dy' 4669 Dump debugging information during parsing, to standard error. 4670 4671 `-fdump-noaddr' 4672 When doing debugging dumps, suppress address output. This makes 4673 it more feasible to use diff on debugging dumps for compiler 4674 invocations with different compiler binaries and/or different text 4675 / bss / data / heap / stack / dso start locations. 4676 4677 `-fdump-unnumbered' 4678 When doing debugging dumps, suppress instruction numbers and 4679 address output. This makes it more feasible to use diff on 4680 debugging dumps for compiler invocations with different options, 4681 in particular with and without `-g'. 4682 4683 `-fdump-translation-unit (C++ only)' 4684 `-fdump-translation-unit-OPTIONS (C++ only)' 4685 Dump a representation of the tree structure for the entire 4686 translation unit to a file. The file name is made by appending 4687 `.tu' to the source file name, and the file is created in the same 4688 directory as the output file. If the `-OPTIONS' form is used, 4689 OPTIONS controls the details of the dump as described for the 4690 `-fdump-tree' options. 4691 4692 `-fdump-class-hierarchy (C++ only)' 4693 `-fdump-class-hierarchy-OPTIONS (C++ only)' 4694 Dump a representation of each class's hierarchy and virtual 4695 function table layout to a file. The file name is made by 4696 appending `.class' to the source file name, and the file is 4697 created in the same directory as the output file. If the 4698 `-OPTIONS' form is used, OPTIONS controls the details of the dump 4699 as described for the `-fdump-tree' options. 4700 4701 `-fdump-ipa-SWITCH' 4702 `-fdump-ipa-SWITCH-OPTIONS' 4703 Control the dumping at various stages of inter-procedural analysis 4704 language tree to a file. The file name is generated by appending a 4705 switch specific suffix to the source file name, and the file is 4706 created in the same directory as the output file. If the 4707 `-OPTIONS' form is used, OPTIONS controls the details of the dump 4708 as described for the `-fdump-tree' options. The following dumps 4709 are possible: 4710 4711 `all' 4712 Enables all inter-procedural analysis dumps. 4713 4714 `cgraph' 4715 Dumps information about call-graph optimization, unused 4716 function removal, and inlining decisions. 4717 4718 `inline' 4719 Dump after function inlining. 4720 4721 4722 `-fdump-statistics-OPTION' 4723 Enable and control dumping of pass statistics in a separate file. 4724 The file name is generated by appending a suffix ending in 4725 `.statistics' to the source file name, and the file is created in 4726 the same directory as the output file. If the `-OPTION' form is 4727 used, `-stats' will cause counters to be summed over the whole 4728 compilation unit while `-details' will dump every event as the 4729 passes generate them. The default with no option is to sum 4730 counters for each function compiled. 4731 4732 `-fdump-tree-SWITCH' 4733 `-fdump-tree-SWITCH-OPTIONS' 4734 Control the dumping at various stages of processing the 4735 intermediate language tree to a file. The file name is generated 4736 by appending a switch specific suffix to the source file name, and 4737 the file is created in the same directory as the output file. If 4738 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated 4739 options that control the details of the dump. Not all options are 4740 applicable to all dumps, those which are not meaningful will be 4741 ignored. The following options are available 4742 4743 `address' 4744 Print the address of each node. Usually this is not 4745 meaningful as it changes according to the environment and 4746 source file. Its primary use is for tying up a dump file 4747 with a debug environment. 4748 4749 `slim' 4750 Inhibit dumping of members of a scope or body of a function 4751 merely because that scope has been reached. Only dump such 4752 items when they are directly reachable by some other path. 4753 When dumping pretty-printed trees, this option inhibits 4754 dumping the bodies of control structures. 4755 4756 `raw' 4757 Print a raw representation of the tree. By default, trees are 4758 pretty-printed into a C-like representation. 4759 4760 `details' 4761 Enable more detailed dumps (not honored by every dump option). 4762 4763 `stats' 4764 Enable dumping various statistics about the pass (not honored 4765 by every dump option). 4766 4767 `blocks' 4768 Enable showing basic block boundaries (disabled in raw dumps). 4769 4770 `vops' 4771 Enable showing virtual operands for every statement. 4772 4773 `lineno' 4774 Enable showing line numbers for statements. 4775 4776 `uid' 4777 Enable showing the unique ID (`DECL_UID') for each variable. 4778 4779 `cgraph' 4780 Dump the call graph of the compilation unit to a file in VCG 4781 format. The file name is made by appending `.cgraph.vcg' to 4782 the respective dump file name. This is primarily useful with 4783 `-fdump-ipa'. 4784 4785 `verbose' 4786 Enable showing the tree dump for each statement. 4787 4788 `all' 4789 Turn on all options, except `raw', `slim', `verbose' and 4790 `lineno'. 4791 4792 The following tree dumps are possible: 4793 `original' 4794 Dump before any tree based optimization, to `FILE.original'. 4795 4796 `optimized' 4797 Dump after all tree based optimization, to `FILE.optimized'. 4798 4799 `gimple' 4800 Dump each function before and after the gimplification pass 4801 to a file. The file name is made by appending `.gimple' to 4802 the source file name. 4803 4804 `cfg' 4805 Dump the control flow graph of each function to a file. The 4806 file name is made by appending `.cfg' to the source file name. 4807 4808 `vcg' 4809 Dump the control flow graph of each function to a file in VCG 4810 format. The file name is made by appending `.vcg' to the 4811 source file name. Note that if the file contains more than 4812 one function, the generated file cannot be used directly by 4813 VCG. You will need to cut and paste each function's graph 4814 into its own separate file first. 4815 4816 `ch' 4817 Dump each function after copying loop headers. The file name 4818 is made by appending `.ch' to the source file name. 4819 4820 `ssa' 4821 Dump SSA related information to a file. The file name is 4822 made by appending `.ssa' to the source file name. 4823 4824 `alias' 4825 Dump aliasing information for each function. The file name 4826 is made by appending `.alias' to the source file name. 4827 4828 `ccp' 4829 Dump each function after CCP. The file name is made by 4830 appending `.ccp' to the source file name. 4831 4832 `storeccp' 4833 Dump each function after STORE-CCP. The file name is made by 4834 appending `.storeccp' to the source file name. 4835 4836 `pre' 4837 Dump trees after partial redundancy elimination. The file 4838 name is made by appending `.pre' to the source file name. 4839 4840 `fre' 4841 Dump trees after full redundancy elimination. The file name 4842 is made by appending `.fre' to the source file name. 4843 4844 `copyprop' 4845 Dump trees after copy propagation. The file name is made by 4846 appending `.copyprop' to the source file name. 4847 4848 `store_copyprop' 4849 Dump trees after store copy-propagation. The file name is 4850 made by appending `.store_copyprop' to the source file name. 4851 4852 `dce' 4853 Dump each function after dead code elimination. The file 4854 name is made by appending `.dce' to the source file name. 4855 4856 `mudflap' 4857 Dump each function after adding mudflap instrumentation. The 4858 file name is made by appending `.mudflap' to the source file 4859 name. 4860 4861 `sra' 4862 Dump each function after performing scalar replacement of 4863 aggregates. The file name is made by appending `.sra' to the 4864 source file name. 4865 4866 `sink' 4867 Dump each function after performing code sinking. The file 4868 name is made by appending `.sink' to the source file name. 4869 4870 `dom' 4871 Dump each function after applying dominator tree 4872 optimizations. The file name is made by appending `.dom' to 4873 the source file name. 4874 4875 `dse' 4876 Dump each function after applying dead store elimination. 4877 The file name is made by appending `.dse' to the source file 4878 name. 4879 4880 `phiopt' 4881 Dump each function after optimizing PHI nodes into 4882 straightline code. The file name is made by appending 4883 `.phiopt' to the source file name. 4884 4885 `forwprop' 4886 Dump each function after forward propagating single use 4887 variables. The file name is made by appending `.forwprop' to 4888 the source file name. 4889 4890 `copyrename' 4891 Dump each function after applying the copy rename 4892 optimization. The file name is made by appending 4893 `.copyrename' to the source file name. 4894 4895 `nrv' 4896 Dump each function after applying the named return value 4897 optimization on generic trees. The file name is made by 4898 appending `.nrv' to the source file name. 4899 4900 `vect' 4901 Dump each function after applying vectorization of loops. 4902 The file name is made by appending `.vect' to the source file 4903 name. 4904 4905 `vrp' 4906 Dump each function after Value Range Propagation (VRP). The 4907 file name is made by appending `.vrp' to the source file name. 4908 4909 `all' 4910 Enable all the available tree dumps with the flags provided 4911 in this option. 4912 4913 `-ftree-vectorizer-verbose=N' 4914 This option controls the amount of debugging output the vectorizer 4915 prints. This information is written to standard error, unless 4916 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which 4917 case it is output to the usual dump listing file, `.vect'. For 4918 N=0 no diagnostic information is reported. If N=1 the vectorizer 4919 reports each loop that got vectorized, and the total number of 4920 loops that got vectorized. If N=2 the vectorizer also reports 4921 non-vectorized loops that passed the first analysis phase 4922 (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb, 4923 single-entry/exit loops. This is the same verbosity level that 4924 `-fdump-tree-vect-stats' uses. Higher verbosity levels mean 4925 either more information dumped for each reported loop, or same 4926 amount of information reported for more loops: If N=3, alignment 4927 related information is added to the reports. If N=4, 4928 data-references related information (e.g. memory dependences, 4929 memory access-patterns) is added to the reports. If N=5, the 4930 vectorizer reports also non-vectorized inner-most loops that did 4931 not pass the first analysis phase (i.e., may not be countable, or 4932 may have complicated control-flow). If N=6, the vectorizer 4933 reports also non-vectorized nested loops. For N=7, all the 4934 information the vectorizer generates during its analysis and 4935 transformation is reported. This is the same verbosity level that 4936 `-fdump-tree-vect-details' uses. 4937 4938 `-frandom-seed=STRING' 4939 This option provides a seed that GCC uses when it would otherwise 4940 use random numbers. It is used to generate certain symbol names 4941 that have to be different in every compiled file. It is also used 4942 to place unique stamps in coverage data files and the object files 4943 that produce them. You can use the `-frandom-seed' option to 4944 produce reproducibly identical object files. 4945 4946 The STRING should be different for every file you compile. 4947 4948 `-fsched-verbose=N' 4949 On targets that use instruction scheduling, this option controls 4950 the amount of debugging output the scheduler prints. This 4951 information is written to standard error, unless 4952 `-fdump-rtl-sched1' or `-fdump-rtl-sched2' is specified, in which 4953 case it is output to the usual dump listing file, `.sched' or 4954 `.sched2' respectively. However for N greater than nine, the 4955 output is always printed to standard error. 4956 4957 For N greater than zero, `-fsched-verbose' outputs the same 4958 information as `-fdump-rtl-sched1' and `-fdump-rtl-sched2'. For N 4959 greater than one, it also output basic block probabilities, 4960 detailed ready list information and unit/insn info. For N greater 4961 than two, it includes RTL at abort point, control-flow and regions 4962 info. And for N over four, `-fsched-verbose' also includes 4963 dependence info. 4964 4965 `-save-temps' 4966 Store the usual "temporary" intermediate files permanently; place 4967 them in the current directory and name them based on the source 4968 file. Thus, compiling `foo.c' with `-c -save-temps' would produce 4969 files `foo.i' and `foo.s', as well as `foo.o'. This creates a 4970 preprocessed `foo.i' output file even though the compiler now 4971 normally uses an integrated preprocessor. 4972 4973 When used in combination with the `-x' command line option, 4974 `-save-temps' is sensible enough to avoid over writing an input 4975 source file with the same extension as an intermediate file. The 4976 corresponding intermediate file may be obtained by renaming the 4977 source file before using `-save-temps'. 4978 4979 `-time' 4980 Report the CPU time taken by each subprocess in the compilation 4981 sequence. For C source files, this is the compiler proper and 4982 assembler (plus the linker if linking is done). The output looks 4983 like this: 4984 4985 # cc1 0.12 0.01 4986 # as 0.00 0.01 4987 4988 The first number on each line is the "user time", that is time 4989 spent executing the program itself. The second number is "system 4990 time", time spent executing operating system routines on behalf of 4991 the program. Both numbers are in seconds. 4992 4993 `-fvar-tracking' 4994 Run variable tracking pass. It computes where variables are 4995 stored at each position in code. Better debugging information is 4996 then generated (if the debugging information format supports this 4997 information). 4998 4999 It is enabled by default when compiling with optimization (`-Os', 5000 `-O', `-O2', ...), debugging information (`-g') and the debug info 5001 format supports it. 5002 5003 `-print-file-name=LIBRARY' 5004 Print the full absolute name of the library file LIBRARY that 5005 would be used when linking--and don't do anything else. With this 5006 option, GCC does not compile or link anything; it just prints the 5007 file name. 5008 5009 `-print-multi-directory' 5010 Print the directory name corresponding to the multilib selected by 5011 any other switches present in the command line. This directory is 5012 supposed to exist in `GCC_EXEC_PREFIX'. 5013 5014 `-print-multi-lib' 5015 Print the mapping from multilib directory names to compiler 5016 switches that enable them. The directory name is separated from 5017 the switches by `;', and each switch starts with an `@' instead of 5018 the `-', without spaces between multiple switches. This is 5019 supposed to ease shell-processing. 5020 5021 `-print-prog-name=PROGRAM' 5022 Like `-print-file-name', but searches for a program such as `cpp'. 5023 5024 `-print-libgcc-file-name' 5025 Same as `-print-file-name=libgcc.a'. 5026 5027 This is useful when you use `-nostdlib' or `-nodefaultlibs' but 5028 you do want to link with `libgcc.a'. You can do 5029 5030 gcc -nostdlib FILES... `gcc -print-libgcc-file-name` 5031 5032 `-print-search-dirs' 5033 Print the name of the configured installation directory and a list 5034 of program and library directories `gcc' will search--and don't do 5035 anything else. 5036 5037 This is useful when `gcc' prints the error message `installation 5038 problem, cannot exec cpp0: No such file or directory'. To resolve 5039 this you either need to put `cpp0' and the other compiler 5040 components where `gcc' expects to find them, or you can set the 5041 environment variable `GCC_EXEC_PREFIX' to the directory where you 5042 installed them. Don't forget the trailing `/'. *Note Environment 5043 Variables::. 5044 5045 `-print-sysroot' 5046 Print the target sysroot directory that will be used during 5047 compilation. This is the target sysroot specified either at 5048 configure time or using the `--sysroot' option, possibly with an 5049 extra suffix that depends on compilation options. If no target 5050 sysroot is specified, the option prints nothing. 5051 5052 `-print-sysroot-headers-suffix' 5053 Print the suffix added to the target sysroot when searching for 5054 headers, or give an error if the compiler is not configured with 5055 such a suffix--and don't do anything else. 5056 5057 `-dumpmachine' 5058 Print the compiler's target machine (for example, 5059 `i686-pc-linux-gnu')--and don't do anything else. 5060 5061 `-dumpversion' 5062 Print the compiler version (for example, `3.0')--and don't do 5063 anything else. 5064 5065 `-dumpspecs' 5066 Print the compiler's built-in specs--and don't do anything else. 5067 (This is used when GCC itself is being built.) *Note Spec Files::. 5068 5069 `-feliminate-unused-debug-types' 5070 Normally, when producing DWARF2 output, GCC will emit debugging 5071 information for all types declared in a compilation unit, 5072 regardless of whether or not they are actually used in that 5073 compilation unit. Sometimes this is useful, such as if, in the 5074 debugger, you want to cast a value to a type that is not actually 5075 used in your program (but is declared). More often, however, this 5076 results in a significant amount of wasted space. With this 5077 option, GCC will avoid producing debug symbol output for types 5078 that are nowhere used in the source file being compiled. 5079 5080 5081 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC 5082 5083 3.10 Options That Control Optimization 5084 ====================================== 5085 5086 These options control various sorts of optimizations. 5087 5088 Without any optimization option, the compiler's goal is to reduce the 5089 cost of compilation and to make debugging produce the expected results. 5090 Statements are independent: if you stop the program with a breakpoint 5091 between statements, you can then assign a new value to any variable or 5092 change the program counter to any other statement in the function and 5093 get exactly the results you would expect from the source code. 5094 5095 Turning on optimization flags makes the compiler attempt to improve 5096 the performance and/or code size at the expense of compilation time and 5097 possibly the ability to debug the program. 5098 5099 The compiler performs optimization based on the knowledge it has of the 5100 program. Compiling multiple files at once to a single output file mode 5101 allows the compiler to use information gained from all of the files 5102 when compiling each of them. 5103 5104 Not all optimizations are controlled directly by a flag. Only 5105 optimizations that have a flag are listed. 5106 5107 `-O' 5108 `-O1' 5109 Optimize. Optimizing compilation takes somewhat more time, and a 5110 lot more memory for a large function. 5111 5112 With `-O', the compiler tries to reduce code size and execution 5113 time, without performing any optimizations that take a great deal 5114 of compilation time. 5115 5116 `-O' turns on the following optimization flags: 5117 -fauto-inc-dec 5118 -fcprop-registers 5119 -fdce 5120 -fdefer-pop 5121 -fdelayed-branch 5122 -fdse 5123 -fguess-branch-probability 5124 -fif-conversion2 5125 -fif-conversion 5126 -finline-small-functions 5127 -fipa-pure-const 5128 -fipa-reference 5129 -fmerge-constants 5130 -fsplit-wide-types 5131 -ftree-builtin-call-dce 5132 -ftree-ccp 5133 -ftree-ch 5134 -ftree-copyrename 5135 -ftree-dce 5136 -ftree-dominator-opts 5137 -ftree-dse 5138 -ftree-fre 5139 -ftree-sra 5140 -ftree-ter 5141 -funit-at-a-time 5142 5143 `-O' also turns on `-fomit-frame-pointer' on machines where doing 5144 so does not interfere with debugging. 5145 5146 `-O2' 5147 Optimize even more. GCC performs nearly all supported 5148 optimizations that do not involve a space-speed tradeoff. As 5149 compared to `-O', this option increases both compilation time and 5150 the performance of the generated code. 5151 5152 `-O2' turns on all optimization flags specified by `-O'. It also 5153 turns on the following optimization flags: 5154 -fthread-jumps 5155 -falign-functions -falign-jumps 5156 -falign-loops -falign-labels 5157 -fcaller-saves 5158 -fcrossjumping 5159 -fcse-follow-jumps -fcse-skip-blocks 5160 -fdelete-null-pointer-checks 5161 -fexpensive-optimizations 5162 -fgcse -fgcse-lm 5163 -findirect-inlining 5164 -foptimize-sibling-calls 5165 -fpeephole2 5166 -fregmove 5167 -freorder-blocks -freorder-functions 5168 -frerun-cse-after-loop 5169 -fsched-interblock -fsched-spec 5170 -fschedule-insns -fschedule-insns2 5171 -fstrict-aliasing -fstrict-overflow 5172 -ftree-switch-conversion 5173 -ftree-pre 5174 -ftree-vrp 5175 5176 Please note the warning under `-fgcse' about invoking `-O2' on 5177 programs that use computed gotos. 5178 5179 `-O3' 5180 Optimize yet more. `-O3' turns on all optimizations specified by 5181 `-O2' and also turns on the `-finline-functions', 5182 `-funswitch-loops', `-fpredictive-commoning', 5183 `-fgcse-after-reload' and `-ftree-vectorize' options. 5184 5185 `-O0' 5186 Reduce compilation time and make debugging produce the expected 5187 results. This is the default. 5188 5189 `-Os' 5190 Optimize for size. `-Os' enables all `-O2' optimizations that do 5191 not typically increase code size. It also performs further 5192 optimizations designed to reduce code size. 5193 5194 `-Os' disables the following optimization flags: 5195 -falign-functions -falign-jumps -falign-loops 5196 -falign-labels -freorder-blocks -freorder-blocks-and-partition 5197 -fprefetch-loop-arrays -ftree-vect-loop-version 5198 5199 If you use multiple `-O' options, with or without level numbers, 5200 the last such option is the one that is effective. 5201 5202 Options of the form `-fFLAG' specify machine-independent flags. Most 5203 flags have both positive and negative forms; the negative form of 5204 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms 5205 is listed--the one you typically will use. You can figure out the 5206 other form by either removing `no-' or adding it. 5207 5208 The following options control specific optimizations. They are either 5209 activated by `-O' options or are related to ones that are. You can use 5210 the following flags in the rare cases when "fine-tuning" of 5211 optimizations to be performed is desired. 5212 5213 `-fno-default-inline' 5214 Do not make member functions inline by default merely because they 5215 are defined inside the class scope (C++ only). Otherwise, when 5216 you specify `-O', member functions defined inside class scope are 5217 compiled inline by default; i.e., you don't need to add `inline' 5218 in front of the member function name. 5219 5220 `-fno-defer-pop' 5221 Always pop the arguments to each function call as soon as that 5222 function returns. For machines which must pop arguments after a 5223 function call, the compiler normally lets arguments accumulate on 5224 the stack for several function calls and pops them all at once. 5225 5226 Disabled at levels `-O', `-O2', `-O3', `-Os'. 5227 5228 `-fforward-propagate' 5229 Perform a forward propagation pass on RTL. The pass tries to 5230 combine two instructions and checks if the result can be 5231 simplified. If loop unrolling is active, two passes are performed 5232 and the second is scheduled after loop unrolling. 5233 5234 This option is enabled by default at optimization levels `-O2', 5235 `-O3', `-Os'. 5236 5237 `-fomit-frame-pointer' 5238 Don't keep the frame pointer in a register for functions that 5239 don't need one. This avoids the instructions to save, set up and 5240 restore frame pointers; it also makes an extra register available 5241 in many functions. *It also makes debugging impossible on some 5242 machines.* 5243 5244 On some machines, such as the VAX, this flag has no effect, because 5245 the standard calling sequence automatically handles the frame 5246 pointer and nothing is saved by pretending it doesn't exist. The 5247 machine-description macro `FRAME_POINTER_REQUIRED' controls 5248 whether a target machine supports this flag. *Note Register 5249 Usage: (gccint)Registers. 5250 5251 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5252 5253 `-foptimize-sibling-calls' 5254 Optimize sibling and tail recursive calls. 5255 5256 Enabled at levels `-O2', `-O3', `-Os'. 5257 5258 `-fno-inline' 5259 Don't pay attention to the `inline' keyword. Normally this option 5260 is used to keep the compiler from expanding any functions inline. 5261 Note that if you are not optimizing, no functions can be expanded 5262 inline. 5263 5264 `-finline-small-functions' 5265 Integrate functions into their callers when their body is smaller 5266 than expected function call code (so overall size of program gets 5267 smaller). The compiler heuristically decides which functions are 5268 simple enough to be worth integrating in this way. 5269 5270 Enabled at level `-O2'. 5271 5272 `-findirect-inlining' 5273 Inline also indirect calls that are discovered to be known at 5274 compile time thanks to previous inlining. This option has any 5275 effect only when inlining itself is turned on by the 5276 `-finline-functions' or `-finline-small-functions' options. 5277 5278 Enabled at level `-O2'. 5279 5280 `-finline-functions' 5281 Integrate all simple functions into their callers. The compiler 5282 heuristically decides which functions are simple enough to be worth 5283 integrating in this way. 5284 5285 If all calls to a given function are integrated, and the function 5286 is declared `static', then the function is normally not output as 5287 assembler code in its own right. 5288 5289 Enabled at level `-O3'. 5290 5291 `-finline-functions-called-once' 5292 Consider all `static' functions called once for inlining into their 5293 caller even if they are not marked `inline'. If a call to a given 5294 function is integrated, then the function is not output as 5295 assembler code in its own right. 5296 5297 Enabled at levels `-O1', `-O2', `-O3' and `-Os'. 5298 5299 `-fearly-inlining' 5300 Inline functions marked by `always_inline' and functions whose 5301 body seems smaller than the function call overhead early before 5302 doing `-fprofile-generate' instrumentation and real inlining pass. 5303 Doing so makes profiling significantly cheaper and usually 5304 inlining faster on programs having large chains of nested wrapper 5305 functions. 5306 5307 Enabled by default. 5308 5309 `-finline-limit=N' 5310 By default, GCC limits the size of functions that can be inlined. 5311 This flag allows coarse control of this limit. N is the size of 5312 functions that can be inlined in number of pseudo instructions. 5313 5314 Inlining is actually controlled by a number of parameters, which 5315 may be specified individually by using `--param NAME=VALUE'. The 5316 `-finline-limit=N' option sets some of these parameters as follows: 5317 5318 `max-inline-insns-single' 5319 is set to N/2. 5320 5321 `max-inline-insns-auto' 5322 is set to N/2. 5323 5324 See below for a documentation of the individual parameters 5325 controlling inlining and for the defaults of these parameters. 5326 5327 _Note:_ there may be no value to `-finline-limit' that results in 5328 default behavior. 5329 5330 _Note:_ pseudo instruction represents, in this particular context, 5331 an abstract measurement of function's size. In no way does it 5332 represent a count of assembly instructions and as such its exact 5333 meaning might change from one release to an another. 5334 5335 `-fkeep-inline-functions' 5336 In C, emit `static' functions that are declared `inline' into the 5337 object file, even if the function has been inlined into all of its 5338 callers. This switch does not affect functions using the `extern 5339 inline' extension in GNU C89. In C++, emit any and all inline 5340 functions into the object file. 5341 5342 `-fkeep-static-consts' 5343 Emit variables declared `static const' when optimization isn't 5344 turned on, even if the variables aren't referenced. 5345 5346 GCC enables this option by default. If you want to force the 5347 compiler to check if the variable was referenced, regardless of 5348 whether or not optimization is turned on, use the 5349 `-fno-keep-static-consts' option. 5350 5351 `-fmerge-constants' 5352 Attempt to merge identical constants (string constants and 5353 floating point constants) across compilation units. 5354 5355 This option is the default for optimized compilation if the 5356 assembler and linker support it. Use `-fno-merge-constants' to 5357 inhibit this behavior. 5358 5359 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5360 5361 `-fmerge-all-constants' 5362 Attempt to merge identical constants and identical variables. 5363 5364 This option implies `-fmerge-constants'. In addition to 5365 `-fmerge-constants' this considers e.g. even constant initialized 5366 arrays or initialized constant variables with integral or floating 5367 point types. Languages like C or C++ require each variable, 5368 including multiple instances of the same variable in recursive 5369 calls, to have distinct locations, so using this option will 5370 result in non-conforming behavior. 5371 5372 `-fmodulo-sched' 5373 Perform swing modulo scheduling immediately before the first 5374 scheduling pass. This pass looks at innermost loops and reorders 5375 their instructions by overlapping different iterations. 5376 5377 `-fmodulo-sched-allow-regmoves' 5378 Perform more aggressive SMS based modulo scheduling with register 5379 moves allowed. By setting this flag certain anti-dependences 5380 edges will be deleted which will trigger the generation of 5381 reg-moves based on the life-range analysis. This option is 5382 effective only with `-fmodulo-sched' enabled. 5383 5384 `-fno-branch-count-reg' 5385 Do not use "decrement and branch" instructions on a count register, 5386 but instead generate a sequence of instructions that decrement a 5387 register, compare it against zero, then branch based upon the 5388 result. This option is only meaningful on architectures that 5389 support such instructions, which include x86, PowerPC, IA-64 and 5390 S/390. 5391 5392 The default is `-fbranch-count-reg'. 5393 5394 `-fno-function-cse' 5395 Do not put function addresses in registers; make each instruction 5396 that calls a constant function contain the function's address 5397 explicitly. 5398 5399 This option results in less efficient code, but some strange hacks 5400 that alter the assembler output may be confused by the 5401 optimizations performed when this option is not used. 5402 5403 The default is `-ffunction-cse' 5404 5405 `-fno-zero-initialized-in-bss' 5406 If the target supports a BSS section, GCC by default puts 5407 variables that are initialized to zero into BSS. This can save 5408 space in the resulting code. 5409 5410 This option turns off this behavior because some programs 5411 explicitly rely on variables going to the data section. E.g., so 5412 that the resulting executable can find the beginning of that 5413 section and/or make assumptions based on that. 5414 5415 The default is `-fzero-initialized-in-bss'. 5416 5417 `-fmudflap -fmudflapth -fmudflapir' 5418 For front-ends that support it (C and C++), instrument all risky 5419 pointer/array dereferencing operations, some standard library 5420 string/heap functions, and some other associated constructs with 5421 range/validity tests. Modules so instrumented should be immune to 5422 buffer overflows, invalid heap use, and some other classes of C/C++ 5423 programming errors. The instrumentation relies on a separate 5424 runtime library (`libmudflap'), which will be linked into a 5425 program if `-fmudflap' is given at link time. Run-time behavior 5426 of the instrumented program is controlled by the `MUDFLAP_OPTIONS' 5427 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for 5428 its options. 5429 5430 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if 5431 your program is multi-threaded. Use `-fmudflapir', in addition to 5432 `-fmudflap' or `-fmudflapth', if instrumentation should ignore 5433 pointer reads. This produces less instrumentation (and therefore 5434 faster execution) and still provides some protection against 5435 outright memory corrupting writes, but allows erroneously read 5436 data to propagate within a program. 5437 5438 `-fthread-jumps' 5439 Perform optimizations where we check to see if a jump branches to a 5440 location where another comparison subsumed by the first is found. 5441 If so, the first branch is redirected to either the destination of 5442 the second branch or a point immediately following it, depending 5443 on whether the condition is known to be true or false. 5444 5445 Enabled at levels `-O2', `-O3', `-Os'. 5446 5447 `-fsplit-wide-types' 5448 When using a type that occupies multiple registers, such as `long 5449 long' on a 32-bit system, split the registers apart and allocate 5450 them independently. This normally generates better code for those 5451 types, but may make debugging more difficult. 5452 5453 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5454 5455 `-fcse-follow-jumps' 5456 In common subexpression elimination (CSE), scan through jump 5457 instructions when the target of the jump is not reached by any 5458 other path. For example, when CSE encounters an `if' statement 5459 with an `else' clause, CSE will follow the jump when the condition 5460 tested is false. 5461 5462 Enabled at levels `-O2', `-O3', `-Os'. 5463 5464 `-fcse-skip-blocks' 5465 This is similar to `-fcse-follow-jumps', but causes CSE to follow 5466 jumps which conditionally skip over blocks. When CSE encounters a 5467 simple `if' statement with no else clause, `-fcse-skip-blocks' 5468 causes CSE to follow the jump around the body of the `if'. 5469 5470 Enabled at levels `-O2', `-O3', `-Os'. 5471 5472 `-frerun-cse-after-loop' 5473 Re-run common subexpression elimination after loop optimizations 5474 has been performed. 5475 5476 Enabled at levels `-O2', `-O3', `-Os'. 5477 5478 `-fgcse' 5479 Perform a global common subexpression elimination pass. This pass 5480 also performs global constant and copy propagation. 5481 5482 _Note:_ When compiling a program using computed gotos, a GCC 5483 extension, you may get better runtime performance if you disable 5484 the global common subexpression elimination pass by adding 5485 `-fno-gcse' to the command line. 5486 5487 Enabled at levels `-O2', `-O3', `-Os'. 5488 5489 `-fgcse-lm' 5490 When `-fgcse-lm' is enabled, global common subexpression 5491 elimination will attempt to move loads which are only killed by 5492 stores into themselves. This allows a loop containing a 5493 load/store sequence to be changed to a load outside the loop, and 5494 a copy/store within the loop. 5495 5496 Enabled by default when gcse is enabled. 5497 5498 `-fgcse-sm' 5499 When `-fgcse-sm' is enabled, a store motion pass is run after 5500 global common subexpression elimination. This pass will attempt 5501 to move stores out of loops. When used in conjunction with 5502 `-fgcse-lm', loops containing a load/store sequence can be changed 5503 to a load before the loop and a store after the loop. 5504 5505 Not enabled at any optimization level. 5506 5507 `-fgcse-las' 5508 When `-fgcse-las' is enabled, the global common subexpression 5509 elimination pass eliminates redundant loads that come after stores 5510 to the same memory location (both partial and full redundancies). 5511 5512 Not enabled at any optimization level. 5513 5514 `-fgcse-after-reload' 5515 When `-fgcse-after-reload' is enabled, a redundant load elimination 5516 pass is performed after reload. The purpose of this pass is to 5517 cleanup redundant spilling. 5518 5519 `-funsafe-loop-optimizations' 5520 If given, the loop optimizer will assume that loop indices do not 5521 overflow, and that the loops with nontrivial exit condition are not 5522 infinite. This enables a wider range of loop optimizations even if 5523 the loop optimizer itself cannot prove that these assumptions are 5524 valid. Using `-Wunsafe-loop-optimizations', the compiler will 5525 warn you if it finds this kind of loop. 5526 5527 `-fcrossjumping' 5528 Perform cross-jumping transformation. This transformation unifies 5529 equivalent code and save code size. The resulting code may or may 5530 not perform better than without cross-jumping. 5531 5532 Enabled at levels `-O2', `-O3', `-Os'. 5533 5534 `-fauto-inc-dec' 5535 Combine increments or decrements of addresses with memory accesses. 5536 This pass is always skipped on architectures that do not have 5537 instructions to support this. Enabled by default at `-O' and 5538 higher on architectures that support this. 5539 5540 `-fdce' 5541 Perform dead code elimination (DCE) on RTL. Enabled by default at 5542 `-O' and higher. 5543 5544 `-fdse' 5545 Perform dead store elimination (DSE) on RTL. Enabled by default 5546 at `-O' and higher. 5547 5548 `-fif-conversion' 5549 Attempt to transform conditional jumps into branch-less 5550 equivalents. This include use of conditional moves, min, max, set 5551 flags and abs instructions, and some tricks doable by standard 5552 arithmetics. The use of conditional execution on chips where it 5553 is available is controlled by `if-conversion2'. 5554 5555 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5556 5557 `-fif-conversion2' 5558 Use conditional execution (where available) to transform 5559 conditional jumps into branch-less equivalents. 5560 5561 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5562 5563 `-fdelete-null-pointer-checks' 5564 Use global dataflow analysis to identify and eliminate useless 5565 checks for null pointers. The compiler assumes that dereferencing 5566 a null pointer would have halted the program. If a pointer is 5567 checked after it has already been dereferenced, it cannot be null. 5568 5569 In some environments, this assumption is not true, and programs can 5570 safely dereference null pointers. Use 5571 `-fno-delete-null-pointer-checks' to disable this optimization for 5572 programs which depend on that behavior. 5573 5574 Enabled at levels `-O2', `-O3', `-Os'. 5575 5576 `-fexpensive-optimizations' 5577 Perform a number of minor optimizations that are relatively 5578 expensive. 5579 5580 Enabled at levels `-O2', `-O3', `-Os'. 5581 5582 `-foptimize-register-move' 5583 `-fregmove' 5584 Attempt to reassign register numbers in move instructions and as 5585 operands of other simple instructions in order to maximize the 5586 amount of register tying. This is especially helpful on machines 5587 with two-operand instructions. 5588 5589 Note `-fregmove' and `-foptimize-register-move' are the same 5590 optimization. 5591 5592 Enabled at levels `-O2', `-O3', `-Os'. 5593 5594 `-fira-algorithm=ALGORITHM' 5595 Use specified coloring algorithm for the integrated register 5596 allocator. The ALGORITHM argument should be `priority' or `CB'. 5597 The first algorithm specifies Chow's priority coloring, the second 5598 one specifies Chaitin-Briggs coloring. The second algorithm can 5599 be unimplemented for some architectures. If it is implemented, it 5600 is the default because Chaitin-Briggs coloring as a rule generates 5601 a better code. 5602 5603 `-fira-region=REGION' 5604 Use specified regions for the integrated register allocator. The 5605 REGION argument should be one of `all', `mixed', or `one'. The 5606 first value means using all loops as register allocation regions, 5607 the second value which is the default means using all loops except 5608 for loops with small register pressure as the regions, and third 5609 one means using all function as a single region. The first value 5610 can give best result for machines with small size and irregular 5611 register set, the third one results in faster and generates decent 5612 code and the smallest size code, and the default value usually 5613 give the best results in most cases and for most architectures. 5614 5615 `-fira-coalesce' 5616 Do optimistic register coalescing. This option might be 5617 profitable for architectures with big regular register files. 5618 5619 `-fno-ira-share-save-slots' 5620 Switch off sharing stack slots used for saving call used hard 5621 registers living through a call. Each hard register will get a 5622 separate stack slot and as a result function stack frame will be 5623 bigger. 5624 5625 `-fno-ira-share-spill-slots' 5626 Switch off sharing stack slots allocated for pseudo-registers. 5627 Each pseudo-register which did not get a hard register will get a 5628 separate stack slot and as a result function stack frame will be 5629 bigger. 5630 5631 `-fira-verbose=N' 5632 Set up how verbose dump file for the integrated register allocator 5633 will be. Default value is 5. If the value is greater or equal to 5634 10, the dump file will be stderr as if the value were N minus 10. 5635 5636 `-fdelayed-branch' 5637 If supported for the target machine, attempt to reorder 5638 instructions to exploit instruction slots available after delayed 5639 branch instructions. 5640 5641 Enabled at levels `-O', `-O2', `-O3', `-Os'. 5642 5643 `-fschedule-insns' 5644 If supported for the target machine, attempt to reorder 5645 instructions to eliminate execution stalls due to required data 5646 being unavailable. This helps machines that have slow floating 5647 point or memory load instructions by allowing other instructions 5648 to be issued until the result of the load or floating point 5649 instruction is required. 5650 5651 Enabled at levels `-O2', `-O3', `-Os'. 5652 5653 `-fschedule-insns2' 5654 Similar to `-fschedule-insns', but requests an additional pass of 5655 instruction scheduling after register allocation has been done. 5656 This is especially useful on machines with a relatively small 5657 number of registers and where memory load instructions take more 5658 than one cycle. 5659 5660 Enabled at levels `-O2', `-O3', `-Os'. 5661 5662 `-fno-sched-interblock' 5663 Don't schedule instructions across basic blocks. This is normally 5664 enabled by default when scheduling before register allocation, i.e. 5665 with `-fschedule-insns' or at `-O2' or higher. 5666 5667 `-fno-sched-spec' 5668 Don't allow speculative motion of non-load instructions. This is 5669 normally enabled by default when scheduling before register 5670 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher. 5671 5672 `-fsched-spec-load' 5673 Allow speculative motion of some load instructions. This only 5674 makes sense when scheduling before register allocation, i.e. with 5675 `-fschedule-insns' or at `-O2' or higher. 5676 5677 `-fsched-spec-load-dangerous' 5678 Allow speculative motion of more load instructions. This only 5679 makes sense when scheduling before register allocation, i.e. with 5680 `-fschedule-insns' or at `-O2' or higher. 5681 5682 `-fsched-stalled-insns' 5683 `-fsched-stalled-insns=N' 5684 Define how many insns (if any) can be moved prematurely from the 5685 queue of stalled insns into the ready list, during the second 5686 scheduling pass. `-fno-sched-stalled-insns' means that no insns 5687 will be moved prematurely, `-fsched-stalled-insns=0' means there 5688 is no limit on how many queued insns can be moved prematurely. 5689 `-fsched-stalled-insns' without a value is equivalent to 5690 `-fsched-stalled-insns=1'. 5691 5692 `-fsched-stalled-insns-dep' 5693 `-fsched-stalled-insns-dep=N' 5694 Define how many insn groups (cycles) will be examined for a 5695 dependency on a stalled insn that is candidate for premature 5696 removal from the queue of stalled insns. This has an effect only 5697 during the second scheduling pass, and only if 5698 `-fsched-stalled-insns' is used. `-fno-sched-stalled-insns-dep' 5699 is equivalent to `-fsched-stalled-insns-dep=0'. 5700 `-fsched-stalled-insns-dep' without a value is equivalent to 5701 `-fsched-stalled-insns-dep=1'. 5702 5703 `-fsched2-use-superblocks' 5704 When scheduling after register allocation, do use superblock 5705 scheduling algorithm. Superblock scheduling allows motion across 5706 basic block boundaries resulting on faster schedules. This option 5707 is experimental, as not all machine descriptions used by GCC model 5708 the CPU closely enough to avoid unreliable results from the 5709 algorithm. 5710 5711 This only makes sense when scheduling after register allocation, 5712 i.e. with `-fschedule-insns2' or at `-O2' or higher. 5713 5714 `-fsched2-use-traces' 5715 Use `-fsched2-use-superblocks' algorithm when scheduling after 5716 register allocation and additionally perform code duplication in 5717 order to increase the size of superblocks using tracer pass. See 5718 `-ftracer' for details on trace formation. 5719 5720 This mode should produce faster but significantly longer programs. 5721 Also without `-fbranch-probabilities' the traces constructed may 5722 not match the reality and hurt the performance. This only makes 5723 sense when scheduling after register allocation, i.e. with 5724 `-fschedule-insns2' or at `-O2' or higher. 5725 5726 `-fsee' 5727 Eliminate redundant sign extension instructions and move the 5728 non-redundant ones to optimal placement using lazy code motion 5729 (LCM). 5730 5731 `-freschedule-modulo-scheduled-loops' 5732 The modulo scheduling comes before the traditional scheduling, if 5733 a loop was modulo scheduled we may want to prevent the later 5734 scheduling passes from changing its schedule, we use this option 5735 to control that. 5736 5737 `-fselective-scheduling' 5738 Schedule instructions using selective scheduling algorithm. 5739 Selective scheduling runs instead of the first scheduler pass. 5740 5741 `-fselective-scheduling2' 5742 Schedule instructions using selective scheduling algorithm. 5743 Selective scheduling runs instead of the second scheduler pass. 5744 5745 `-fsel-sched-pipelining' 5746 Enable software pipelining of innermost loops during selective 5747 scheduling. This option has no effect until one of 5748 `-fselective-scheduling' or `-fselective-scheduling2' is turned on. 5749 5750 `-fsel-sched-pipelining-outer-loops' 5751 When pipelining loops during selective scheduling, also pipeline 5752 outer loops. This option has no effect until 5753 `-fsel-sched-pipelining' is turned on. 5754 5755 `-fcaller-saves' 5756 Enable values to be allocated in registers that will be clobbered 5757 by function calls, by emitting extra instructions to save and 5758 restore the registers around such calls. Such allocation is done 5759 only when it seems to result in better code than would otherwise 5760 be produced. 5761 5762 This option is always enabled by default on certain machines, 5763 usually those which have no call-preserved registers to use 5764 instead. 5765 5766 Enabled at levels `-O2', `-O3', `-Os'. 5767 5768 `-fconserve-stack' 5769 Attempt to minimize stack usage. The compiler will attempt to use 5770 less stack space, even if that makes the program slower. This 5771 option implies setting the `large-stack-frame' parameter to 100 5772 and the `large-stack-frame-growth' parameter to 400. 5773 5774 `-ftree-reassoc' 5775 Perform reassociation on trees. This flag is enabled by default 5776 at `-O' and higher. 5777 5778 `-ftree-pre' 5779 Perform partial redundancy elimination (PRE) on trees. This flag 5780 is enabled by default at `-O2' and `-O3'. 5781 5782 `-ftree-fre' 5783 Perform full redundancy elimination (FRE) on trees. The difference 5784 between FRE and PRE is that FRE only considers expressions that 5785 are computed on all paths leading to the redundant computation. 5786 This analysis is faster than PRE, though it exposes fewer 5787 redundancies. This flag is enabled by default at `-O' and higher. 5788 5789 `-ftree-copy-prop' 5790 Perform copy propagation on trees. This pass eliminates 5791 unnecessary copy operations. This flag is enabled by default at 5792 `-O' and higher. 5793 5794 `-fipa-pure-const' 5795 Discover which functions are pure or constant. Enabled by default 5796 at `-O' and higher. 5797 5798 `-fipa-reference' 5799 Discover which static variables do not escape cannot escape the 5800 compilation unit. Enabled by default at `-O' and higher. 5801 5802 `-fipa-struct-reorg' 5803 Perform structure reorganization optimization, that change C-like 5804 structures layout in order to better utilize spatial locality. 5805 This transformation is affective for programs containing arrays of 5806 structures. Available in two compilation modes: profile-based 5807 (enabled with `-fprofile-generate') or static (which uses built-in 5808 heuristics). Require `-fipa-type-escape' to provide the safety of 5809 this transformation. It works only in whole program mode, so it 5810 requires `-fwhole-program' and `-combine' to be enabled. 5811 Structures considered `cold' by this transformation are not 5812 affected (see `--param struct-reorg-cold-struct-ratio=VALUE'). 5813 5814 With this flag, the program debug info reflects a new structure 5815 layout. 5816 5817 `-fipa-pta' 5818 Perform interprocedural pointer analysis. This option is 5819 experimental and does not affect generated code. 5820 5821 `-fipa-cp' 5822 Perform interprocedural constant propagation. This optimization 5823 analyzes the program to determine when values passed to functions 5824 are constants and then optimizes accordingly. This optimization 5825 can substantially increase performance if the application has 5826 constants passed to functions. This flag is enabled by default at 5827 `-O2', `-Os' and `-O3'. 5828 5829 `-fipa-cp-clone' 5830 Perform function cloning to make interprocedural constant 5831 propagation stronger. When enabled, interprocedural constant 5832 propagation will perform function cloning when externally visible 5833 function can be called with constant arguments. Because this 5834 optimization can create multiple copies of functions, it may 5835 significantly increase code size (see `--param 5836 ipcp-unit-growth=VALUE'). This flag is enabled by default at 5837 `-O3'. 5838 5839 `-fipa-matrix-reorg' 5840 Perform matrix flattening and transposing. Matrix flattening 5841 tries to replace a m-dimensional matrix with its equivalent 5842 n-dimensional matrix, where n < m. This reduces the level of 5843 indirection needed for accessing the elements of the matrix. The 5844 second optimization is matrix transposing that attempts to change 5845 the order of the matrix's dimensions in order to improve cache 5846 locality. Both optimizations need the `-fwhole-program' flag. 5847 Transposing is enabled only if profiling information is available. 5848 5849 `-ftree-sink' 5850 Perform forward store motion on trees. This flag is enabled by 5851 default at `-O' and higher. 5852 5853 `-ftree-ccp' 5854 Perform sparse conditional constant propagation (CCP) on trees. 5855 This pass only operates on local scalar variables and is enabled 5856 by default at `-O' and higher. 5857 5858 `-ftree-switch-conversion' 5859 Perform conversion of simple initializations in a switch to 5860 initializations from a scalar array. This flag is enabled by 5861 default at `-O2' and higher. 5862 5863 `-ftree-dce' 5864 Perform dead code elimination (DCE) on trees. This flag is 5865 enabled by default at `-O' and higher. 5866 5867 `-ftree-builtin-call-dce' 5868 Perform conditional dead code elimination (DCE) for calls to 5869 builtin functions that may set `errno' but are otherwise 5870 side-effect free. This flag is enabled by default at `-O2' and 5871 higher if `-Os' is not also specified. 5872 5873 `-ftree-dominator-opts' 5874 Perform a variety of simple scalar cleanups (constant/copy 5875 propagation, redundancy elimination, range propagation and 5876 expression simplification) based on a dominator tree traversal. 5877 This also performs jump threading (to reduce jumps to jumps). This 5878 flag is enabled by default at `-O' and higher. 5879 5880 `-ftree-dse' 5881 Perform dead store elimination (DSE) on trees. A dead store is a 5882 store into a memory location which will later be overwritten by 5883 another store without any intervening loads. In this case the 5884 earlier store can be deleted. This flag is enabled by default at 5885 `-O' and higher. 5886 5887 `-ftree-ch' 5888 Perform loop header copying on trees. This is beneficial since it 5889 increases effectiveness of code motion optimizations. It also 5890 saves one jump. This flag is enabled by default at `-O' and 5891 higher. It is not enabled for `-Os', since it usually increases 5892 code size. 5893 5894 `-ftree-lr-shrinking' 5895 Enable live range shrinking optimization on trees. This 5896 optimization is used to help reducing register pressure. 5897 5898 `-ftree-loop-optimize' 5899 Perform loop optimizations on trees. This flag is enabled by 5900 default at `-O' and higher. 5901 5902 `-ftree-loop-linear' 5903 Perform linear loop transformations on tree. This flag can 5904 improve cache performance and allow further loop optimizations to 5905 take place. 5906 5907 `-floop-interchange' 5908 Perform loop interchange transformations on loops. Interchanging 5909 two nested loops switches the inner and outer loops. For example, 5910 given a loop like: 5911 DO J = 1, M 5912 DO I = 1, N 5913 A(J, I) = A(J, I) * C 5914 ENDDO 5915 ENDDO 5916 loop interchange will transform the loop as if the user had 5917 written: 5918 DO I = 1, N 5919 DO J = 1, M 5920 A(J, I) = A(J, I) * C 5921 ENDDO 5922 ENDDO 5923 which can be beneficial when `N' is larger than the caches, 5924 because in Fortran, the elements of an array are stored in memory 5925 contiguously by column, and the original loop iterates over rows, 5926 potentially creating at each access a cache miss. This 5927 optimization applies to all the languages supported by GCC and is 5928 not limited to Fortran. To use this code transformation, GCC has 5929 to be configured with `--with-ppl' and `--with-cloog' to enable the 5930 Graphite loop transformation infrastructure. 5931 5932 `-floop-strip-mine' 5933 Perform loop strip mining transformations on loops. Strip mining 5934 splits a loop into two nested loops. The outer loop has strides 5935 equal to the strip size and the inner loop has strides of the 5936 original loop within a strip. For example, given a loop like: 5937 DO I = 1, N 5938 A(I) = A(I) + C 5939 ENDDO 5940 loop strip mining will transform the loop as if the user had 5941 written: 5942 DO II = 1, N, 4 5943 DO I = II, min (II + 3, N) 5944 A(I) = A(I) + C 5945 ENDDO 5946 ENDDO 5947 This optimization applies to all the languages supported by GCC 5948 and is not limited to Fortran. To use this code transformation, 5949 GCC has to be configured with `--with-ppl' and `--with-cloog' to 5950 enable the Graphite loop transformation infrastructure. 5951 5952 `-floop-block' 5953 Perform loop blocking transformations on loops. Blocking strip 5954 mines each loop in the loop nest such that the memory accesses of 5955 the element loops fit inside caches. For example, given a loop 5956 like: 5957 DO I = 1, N 5958 DO J = 1, M 5959 A(J, I) = B(I) + C(J) 5960 ENDDO 5961 ENDDO 5962 loop blocking will transform the loop as if the user had written: 5963 DO II = 1, N, 64 5964 DO JJ = 1, M, 64 5965 DO I = II, min (II + 63, N) 5966 DO J = JJ, min (JJ + 63, M) 5967 A(J, I) = B(I) + C(J) 5968 ENDDO 5969 ENDDO 5970 ENDDO 5971 ENDDO 5972 which can be beneficial when `M' is larger than the caches, 5973 because the innermost loop will iterate over a smaller amount of 5974 data that can be kept in the caches. This optimization applies to 5975 all the languages supported by GCC and is not limited to Fortran. 5976 To use this code transformation, GCC has to be configured with 5977 `--with-ppl' and `--with-cloog' to enable the Graphite loop 5978 transformation infrastructure. 5979 5980 `-fcheck-data-deps' 5981 Compare the results of several data dependence analyzers. This 5982 option is used for debugging the data dependence analyzers. 5983 5984 `-ftree-loop-distribution' 5985 Perform loop distribution. This flag can improve cache 5986 performance on big loop bodies and allow further loop 5987 optimizations, like parallelization or vectorization, to take 5988 place. For example, the loop 5989 DO I = 1, N 5990 A(I) = B(I) + C 5991 D(I) = E(I) * F 5992 ENDDO 5993 is transformed to 5994 DO I = 1, N 5995 A(I) = B(I) + C 5996 ENDDO 5997 DO I = 1, N 5998 D(I) = E(I) * F 5999 ENDDO 6000 6001 `-ftree-loop-im' 6002 Perform loop invariant motion on trees. This pass moves only 6003 invariants that would be hard to handle at RTL level (function 6004 calls, operations that expand to nontrivial sequences of insns). 6005 With `-funswitch-loops' it also moves operands of conditions that 6006 are invariant out of the loop, so that we can use just trivial 6007 invariantness analysis in loop unswitching. The pass also includes 6008 store motion. 6009 6010 `-ftree-loop-ivcanon' 6011 Create a canonical counter for number of iterations in the loop 6012 for that determining number of iterations requires complicated 6013 analysis. Later optimizations then may determine the number 6014 easily. Useful especially in connection with unrolling. 6015 6016 `-fivopts' 6017 Perform induction variable optimizations (strength reduction, 6018 induction variable merging and induction variable elimination) on 6019 trees. 6020 6021 `-ftree-parallelize-loops=n' 6022 Parallelize loops, i.e., split their iteration space to run in n 6023 threads. This is only possible for loops whose iterations are 6024 independent and can be arbitrarily reordered. The optimization is 6025 only profitable on multiprocessor machines, for loops that are 6026 CPU-intensive, rather than constrained e.g. by memory bandwidth. 6027 This option implies `-pthread', and thus is only supported on 6028 targets that have support for `-pthread'. 6029 6030 `-ftree-sra' 6031 Perform scalar replacement of aggregates. This pass replaces 6032 structure references with scalars to prevent committing structures 6033 to memory too early. This flag is enabled by default at `-O' and 6034 higher. 6035 6036 `-ftree-copyrename' 6037 Perform copy renaming on trees. This pass attempts to rename 6038 compiler temporaries to other variables at copy locations, usually 6039 resulting in variable names which more closely resemble the 6040 original variables. This flag is enabled by default at `-O' and 6041 higher. 6042 6043 `-ftree-ter' 6044 Perform temporary expression replacement during the SSA->normal 6045 phase. Single use/single def temporaries are replaced at their 6046 use location with their defining expression. This results in 6047 non-GIMPLE code, but gives the expanders much more complex trees 6048 to work on resulting in better RTL generation. This is enabled by 6049 default at `-O' and higher. 6050 6051 `-ftree-vectorize' 6052 Perform loop vectorization on trees. This flag is enabled by 6053 default at `-O3'. 6054 6055 `-ftree-vect-loop-version' 6056 Perform loop versioning when doing loop vectorization on trees. 6057 When a loop appears to be vectorizable except that data alignment 6058 or data dependence cannot be determined at compile time then 6059 vectorized and non-vectorized versions of the loop are generated 6060 along with runtime checks for alignment or dependence to control 6061 which version is executed. This option is enabled by default 6062 except at level `-Os' where it is disabled. 6063 6064 `-fvect-cost-model' 6065 Enable cost model for vectorization. 6066 6067 `-ftree-vrp' 6068 Perform Value Range Propagation on trees. This is similar to the 6069 constant propagation pass, but instead of values, ranges of values 6070 are propagated. This allows the optimizers to remove unnecessary 6071 range checks like array bound checks and null pointer checks. 6072 This is enabled by default at `-O2' and higher. Null pointer check 6073 elimination is only done if `-fdelete-null-pointer-checks' is 6074 enabled. 6075 6076 `-ftracer' 6077 Perform tail duplication to enlarge superblock size. This 6078 transformation simplifies the control flow of the function 6079 allowing other optimizations to do better job. 6080 6081 `-funroll-loops' 6082 Unroll loops whose number of iterations can be determined at 6083 compile time or upon entry to the loop. `-funroll-loops' implies 6084 `-frerun-cse-after-loop'. This option makes code larger, and may 6085 or may not make it run faster. 6086 6087 `-funroll-all-loops' 6088 Unroll all loops, even if their number of iterations is uncertain 6089 when the loop is entered. This usually makes programs run more 6090 slowly. `-funroll-all-loops' implies the same options as 6091 `-funroll-loops', 6092 6093 `-fsplit-ivs-in-unroller' 6094 Enables expressing of values of induction variables in later 6095 iterations of the unrolled loop using the value in the first 6096 iteration. This breaks long dependency chains, thus improving 6097 efficiency of the scheduling passes. 6098 6099 Combination of `-fweb' and CSE is often sufficient to obtain the 6100 same effect. However in cases the loop body is more complicated 6101 than a single basic block, this is not reliable. It also does not 6102 work at all on some of the architectures due to restrictions in 6103 the CSE pass. 6104 6105 This optimization is enabled by default. 6106 6107 `-fvariable-expansion-in-unroller' 6108 With this option, the compiler will create multiple copies of some 6109 local variables when unrolling a loop which can result in superior 6110 code. 6111 6112 `-fpredictive-commoning' 6113 Perform predictive commoning optimization, i.e., reusing 6114 computations (especially memory loads and stores) performed in 6115 previous iterations of loops. 6116 6117 This option is enabled at level `-O3'. 6118 6119 `-fprefetch-loop-arrays' 6120 If supported by the target machine, generate instructions to 6121 prefetch memory to improve the performance of loops that access 6122 large arrays. 6123 6124 This option may generate better or worse code; results are highly 6125 dependent on the structure of loops within the source code. 6126 6127 Disabled at level `-Os'. 6128 6129 `-fno-peephole' 6130 `-fno-peephole2' 6131 Disable any machine-specific peephole optimizations. The 6132 difference between `-fno-peephole' and `-fno-peephole2' is in how 6133 they are implemented in the compiler; some targets use one, some 6134 use the other, a few use both. 6135 6136 `-fpeephole' is enabled by default. `-fpeephole2' enabled at 6137 levels `-O2', `-O3', `-Os'. 6138 6139 `-fno-guess-branch-probability' 6140 Do not guess branch probabilities using heuristics. 6141 6142 GCC will use heuristics to guess branch probabilities if they are 6143 not provided by profiling feedback (`-fprofile-arcs'). These 6144 heuristics are based on the control flow graph. If some branch 6145 probabilities are specified by `__builtin_expect', then the 6146 heuristics will be used to guess branch probabilities for the rest 6147 of the control flow graph, taking the `__builtin_expect' info into 6148 account. The interactions between the heuristics and 6149 `__builtin_expect' can be complex, and in some cases, it may be 6150 useful to disable the heuristics so that the effects of 6151 `__builtin_expect' are easier to understand. 6152 6153 The default is `-fguess-branch-probability' at levels `-O', `-O2', 6154 `-O3', `-Os'. 6155 6156 `-freorder-blocks' 6157 Reorder basic blocks in the compiled function in order to reduce 6158 number of taken branches and improve code locality. 6159 6160 Enabled at levels `-O2', `-O3'. 6161 6162 `-freorder-blocks-and-partition' 6163 In addition to reordering basic blocks in the compiled function, 6164 in order to reduce number of taken branches, partitions hot and 6165 cold basic blocks into separate sections of the assembly and .o 6166 files, to improve paging and cache locality performance. 6167 6168 This optimization is automatically turned off in the presence of 6169 exception handling, for linkonce sections, for functions with a 6170 user-defined section attribute and on any architecture that does 6171 not support named sections. 6172 6173 `-freorder-functions' 6174 Reorder functions in the object file in order to improve code 6175 locality. This is implemented by using special subsections 6176 `.text.hot' for most frequently executed functions and 6177 `.text.unlikely' for unlikely executed functions. Reordering is 6178 done by the linker so object file format must support named 6179 sections and linker must place them in a reasonable way. 6180 6181 Also profile feedback must be available in to make this option 6182 effective. See `-fprofile-arcs' for details. 6183 6184 Enabled at levels `-O2', `-O3', `-Os'. 6185 6186 `-fstrict-aliasing' 6187 Allow the compiler to assume the strictest aliasing rules 6188 applicable to the language being compiled. For C (and C++), this 6189 activates optimizations based on the type of expressions. In 6190 particular, an object of one type is assumed never to reside at 6191 the same address as an object of a different type, unless the 6192 types are almost the same. For example, an `unsigned int' can 6193 alias an `int', but not a `void*' or a `double'. A character type 6194 may alias any other type. 6195 6196 Pay special attention to code like this: 6197 union a_union { 6198 int i; 6199 double d; 6200 }; 6201 6202 int f() { 6203 union a_union t; 6204 t.d = 3.0; 6205 return t.i; 6206 } 6207 The practice of reading from a different union member than the one 6208 most recently written to (called "type-punning") is common. Even 6209 with `-fstrict-aliasing', type-punning is allowed, provided the 6210 memory is accessed through the union type. So, the code above 6211 will work as expected. *Note Structures unions enumerations and 6212 bit-fields implementation::. However, this code might not: 6213 int f() { 6214 union a_union t; 6215 int* ip; 6216 t.d = 3.0; 6217 ip = &t.i; 6218 return *ip; 6219 } 6220 6221 Similarly, access by taking the address, casting the resulting 6222 pointer and dereferencing the result has undefined behavior, even 6223 if the cast uses a union type, e.g.: 6224 int f() { 6225 double d = 3.0; 6226 return ((union a_union *) &d)->i; 6227 } 6228 6229 The `-fstrict-aliasing' option is enabled at levels `-O2', `-O3', 6230 `-Os'. 6231 6232 `-fstrict-overflow' 6233 Allow the compiler to assume strict signed overflow rules, 6234 depending on the language being compiled. For C (and C++) this 6235 means that overflow when doing arithmetic with signed numbers is 6236 undefined, which means that the compiler may assume that it will 6237 not happen. This permits various optimizations. For example, the 6238 compiler will assume that an expression like `i + 10 > i' will 6239 always be true for signed `i'. This assumption is only valid if 6240 signed overflow is undefined, as the expression is false if `i + 6241 10' overflows when using twos complement arithmetic. When this 6242 option is in effect any attempt to determine whether an operation 6243 on signed numbers will overflow must be written carefully to not 6244 actually involve overflow. 6245 6246 This option also allows the compiler to assume strict pointer 6247 semantics: given a pointer to an object, if adding an offset to 6248 that pointer does not produce a pointer to the same object, the 6249 addition is undefined. This permits the compiler to conclude that 6250 `p + u > p' is always true for a pointer `p' and unsigned integer 6251 `u'. This assumption is only valid because pointer wraparound is 6252 undefined, as the expression is false if `p + u' overflows using 6253 twos complement arithmetic. 6254 6255 See also the `-fwrapv' option. Using `-fwrapv' means that integer 6256 signed overflow is fully defined: it wraps. When `-fwrapv' is 6257 used, there is no difference between `-fstrict-overflow' and 6258 `-fno-strict-overflow' for integers. With `-fwrapv' certain types 6259 of overflow are permitted. For example, if the compiler gets an 6260 overflow when doing arithmetic on constants, the overflowed value 6261 can still be used with `-fwrapv', but not otherwise. 6262 6263 The `-fstrict-overflow' option is enabled at levels `-O2', `-O3', 6264 `-Os'. 6265 6266 `-falign-functions' 6267 `-falign-functions=N' 6268 Align the start of functions to the next power-of-two greater than 6269 N, skipping up to N bytes. For instance, `-falign-functions=32' 6270 aligns functions to the next 32-byte boundary, but 6271 `-falign-functions=24' would align to the next 32-byte boundary 6272 only if this can be done by skipping 23 bytes or less. 6273 6274 `-fno-align-functions' and `-falign-functions=1' are equivalent 6275 and mean that functions will not be aligned. 6276 6277 Some assemblers only support this flag when N is a power of two; 6278 in that case, it is rounded up. 6279 6280 If N is not specified or is zero, use a machine-dependent default. 6281 6282 Enabled at levels `-O2', `-O3'. 6283 6284 `-falign-labels' 6285 `-falign-labels=N' 6286 Align all branch targets to a power-of-two boundary, skipping up to 6287 N bytes like `-falign-functions'. This option can easily make 6288 code slower, because it must insert dummy operations for when the 6289 branch target is reached in the usual flow of the code. 6290 6291 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean 6292 that labels will not be aligned. 6293 6294 If `-falign-loops' or `-falign-jumps' are applicable and are 6295 greater than this value, then their values are used instead. 6296 6297 If N is not specified or is zero, use a machine-dependent default 6298 which is very likely to be `1', meaning no alignment. 6299 6300 Enabled at levels `-O2', `-O3'. 6301 6302 `-falign-loops' 6303 `-falign-loops=N' 6304 Align loops to a power-of-two boundary, skipping up to N bytes 6305 like `-falign-functions'. The hope is that the loop will be 6306 executed many times, which will make up for any execution of the 6307 dummy operations. 6308 6309 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean 6310 that loops will not be aligned. 6311 6312 If N is not specified or is zero, use a machine-dependent default. 6313 6314 Enabled at levels `-O2', `-O3'. 6315 6316 `-falign-jumps' 6317 `-falign-jumps=N' 6318 Align branch targets to a power-of-two boundary, for branch targets 6319 where the targets can only be reached by jumping, skipping up to N 6320 bytes like `-falign-functions'. In this case, no dummy operations 6321 need be executed. 6322 6323 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean 6324 that loops will not be aligned. 6325 6326 If N is not specified or is zero, use a machine-dependent default. 6327 6328 Enabled at levels `-O2', `-O3'. 6329 6330 `-funit-at-a-time' 6331 This option is left for compatibility reasons. `-funit-at-a-time' 6332 has no effect, while `-fno-unit-at-a-time' implies 6333 `-fno-toplevel-reorder' and `-fno-section-anchors'. 6334 6335 Enabled by default. 6336 6337 `-fno-toplevel-reorder' 6338 Do not reorder top-level functions, variables, and `asm' 6339 statements. Output them in the same order that they appear in the 6340 input file. When this option is used, unreferenced static 6341 variables will not be removed. This option is intended to support 6342 existing code which relies on a particular ordering. For new 6343 code, it is better to use attributes. 6344 6345 Enabled at level `-O0'. When disabled explicitly, it also imply 6346 `-fno-section-anchors' that is otherwise enabled at `-O0' on some 6347 targets. 6348 6349 `-fweb' 6350 Constructs webs as commonly used for register allocation purposes 6351 and assign each web individual pseudo register. This allows the 6352 register allocation pass to operate on pseudos directly, but also 6353 strengthens several other optimization passes, such as CSE, loop 6354 optimizer and trivial dead code remover. It can, however, make 6355 debugging impossible, since variables will no longer stay in a 6356 "home register". 6357 6358 Enabled by default with `-funroll-loops'. 6359 6360 `-fwhole-program' 6361 Assume that the current compilation unit represents whole program 6362 being compiled. All public functions and variables with the 6363 exception of `main' and those merged by attribute 6364 `externally_visible' become static functions and in a affect gets 6365 more aggressively optimized by interprocedural optimizers. While 6366 this option is equivalent to proper use of `static' keyword for 6367 programs consisting of single file, in combination with option 6368 `--combine' this flag can be used to compile most of smaller scale 6369 C programs since the functions and variables become local for the 6370 whole combined compilation unit, not for the single source file 6371 itself. 6372 6373 This option is not supported for Fortran programs. 6374 6375 `-fuse-ld=gold' 6376 Use the `ld.gold' linker instead of the default linker. This 6377 option is only necessary if GCC has been configured with 6378 `--enable-gold=both' or `--enable-gold=both/ld'. 6379 6380 `-fuse-ld=bfd' 6381 Use the `ld.bfd' linker instead of the default linker. This 6382 option is only necessary if GCC has been configured with 6383 `--enable-gold=both/gold'. 6384 6385 `-fcprop-registers' 6386 After register allocation and post-register allocation instruction 6387 splitting, we perform a copy-propagation pass to try to reduce 6388 scheduling dependencies and occasionally eliminate the copy. 6389 6390 Enabled at levels `-O', `-O2', `-O3', `-Os'. 6391 6392 `-fprofile-correction' 6393 Profiles collected using an instrumented binary for multi-threaded 6394 programs may be inconsistent due to missed counter updates. When 6395 this option is specified, GCC will use heuristics to correct or 6396 smooth out such inconsistencies. By default, GCC will emit an 6397 error message when an inconsistent profile is detected. 6398 6399 `-fprofile-dir=PATH' 6400 Set the directory to search the profile data files in to PATH. 6401 This option affects only the profile data generated by 6402 `-fprofile-generate', `-ftest-coverage', `-fprofile-arcs' and used 6403 by `-fprofile-use' and `-fbranch-probabilities' and its related 6404 options. By default, GCC will use the current directory as PATH 6405 thus the profile data file will appear in the same directory as 6406 the object file. 6407 6408 `-fprofile-generate' 6409 `-fprofile-generate=PATH' 6410 Enable options usually used for instrumenting application to 6411 produce profile useful for later recompilation with profile 6412 feedback based optimization. You must use `-fprofile-generate' 6413 both when compiling and when linking your program. 6414 6415 The following options are enabled: `-fprofile-arcs', 6416 `-fprofile-values', `-fvpt'. 6417 6418 If PATH is specified, GCC will look at the PATH to find the 6419 profile feedback data files. See `-fprofile-dir'. 6420 6421 `-fprofile-generate-sampling' 6422 Enable sampling for instrumented binaries. Instead of recording 6423 every event, record only every N-th event, where N (the sampling 6424 rate) can be set either at compile time using `--param 6425 profile-generate-sampling-rate=VALUE', or at execution start time 6426 through environment variable `GCOV_SAMPLING_RATE'. 6427 6428 At this time sampling applies only to branch counters. A sampling 6429 rate of 100 decreases instrumentated binary slowdown from up to 6430 20x for heavily threaded applications down to around 2x. 6431 `-fprofile-correction' is always needed with sampling. 6432 6433 `-fprofile-use' 6434 `-fprofile-use=PATH' 6435 Enable profile feedback directed optimizations, and optimizations 6436 generally profitable only with profile feedback available. 6437 6438 The following options are enabled: `-fbranch-probabilities', 6439 `-fvpt', `-funroll-loops', `-fpeel-loops' 6440 6441 By default, GCC emits an error message if the feedback profiles do 6442 not match the source code. This error can be turned into a 6443 warning by using `-Wcoverage-mismatch'. Note this may result in 6444 poorly optimized code. 6445 6446 If PATH is specified, GCC will look at the PATH to find the 6447 profile feedback data files. See `-fprofile-dir'. 6448 6449 `-fpmu-profile-generate=PMUOPTION' 6450 Enable performance monitoring unit (PMU) profiling. This collects 6451 hardware counter data corresponding to PMUOPTION. Currently only 6452 LOAD-LATENCY and BRANCH-MISPREDICT are supported using pfmon tool. 6453 You must use `-fpmu-profile-generate' both when compiling and 6454 when linking your program. This PMU profile data may later be 6455 used by the compiler during optimizations as well can be displayed 6456 using coverage tool gcov. The params variable 6457 "pmu_profile_n_addresses" can be used to restrict PMU data 6458 collection to only this many addresses. 6459 6460 `-fpmu-profile-use=PMUOPTION' 6461 Enable performance monitoring unit (PMU) profiling based 6462 optimizations. Currently only LOAD-LATENCY and BRANCH-MISPREDICT 6463 are supported. 6464 6465 `-fcgraph-section' 6466 Emit call graph edge profile counts in .note.callgraph.text 6467 sections. This is used in conjunction with `-fprofile-use'. A new 6468 .note.callgraph.text section is created for each function. This 6469 section lists every callee and the number of times it is called. 6470 The params variable "note-cgraph-section-edge-threshold" can be 6471 used to only list edges above a certain threshold. 6472 6473 `-fripa' 6474 Perform dynamic inter-procedural analysis. This is used in 6475 conjunction with the `-fprofile-generate' and `-fprofile-use' 6476 options. During the `-fprofile-generate' phase, this flag turns 6477 on some additional instrumentation code that enables dynamic 6478 call-graph analysis. During the `-fprofile-use' phase, this flag 6479 enables cross-module optimizations such as inlining. 6480 6481 `-fripa-disallow-asm-modules' 6482 During profile-gen, if this flag is enabled, and the module has 6483 asm statements, arrange so that a bit recording this information 6484 will be set in the profile feedback data file. During 6485 profile-use, if this flag is enabled, and the same bit in auxiliary 6486 module's profile feedback data is set, don't import this auxiliary 6487 module. If this is the primary module, don't export it. 6488 6489 `-fripa-disallow-opt-mismatch' 6490 Don't import an auxiliary module, if the GCC command line options 6491 used for this auxiliary module during the profile-generate stage 6492 were different from those used for the primary module. Note that 6493 any mismatches in warning-related options are ignored for this 6494 comparison. 6495 6496 `-fripa-verbose' 6497 Enable printing of verbose information about dynamic 6498 inter-procedural optimizations. This is used in conjunction with 6499 the `-fripa'. 6500 6501 `-fripa-no-promote-always-inline-func' 6502 Do not promote static functions with always inline attribute in 6503 LIPO compilation. 6504 6505 `-fsample-profile' 6506 `-fsample-profile=PATH' 6507 Enable profile feedback directed optimizations using profiles 6508 obtained via sampling, and optimizations generally profitable only 6509 with profile feedback available. 6510 6511 `-fsample-profile-use-entry' 6512 Use the entry count to annotate the entry basic block. This will 6513 improve the profile precision for LBR based sampling. This 6514 parameter is only useful when using `-fsample-profile' and 6515 `-fprofile-correction'. 6516 6517 `-fsample-profile-aggregate-using=METHOD' 6518 Select the method for (average or maximum) for converting 6519 instruction-level profiles into basic block level profiles. 6520 6521 `-frecord-options-in-elf' 6522 Record the command line options in the .note elf section for 6523 sample FDO to do module grouping. 6524 6525 The following options control compiler behavior regarding floating 6526 point arithmetic. These options trade off between speed and 6527 correctness. All must be specifically enabled. 6528 6529 `-ffloat-store' 6530 Do not store floating point variables in registers, and inhibit 6531 other options that might change whether a floating point value is 6532 taken from a register or memory. 6533 6534 This option prevents undesirable excess precision on machines such 6535 as the 68000 where the floating registers (of the 68881) keep more 6536 precision than a `double' is supposed to have. Similarly for the 6537 x86 architecture. For most programs, the excess precision does 6538 only good, but a few programs rely on the precise definition of 6539 IEEE floating point. Use `-ffloat-store' for such programs, after 6540 modifying them to store all pertinent intermediate computations 6541 into variables. 6542 6543 `-ffast-math' 6544 Sets `-fno-math-errno', `-funsafe-math-optimizations', 6545 `-ffinite-math-only', `-fno-rounding-math', `-fno-signaling-nans' 6546 and `-fcx-limited-range'. 6547 6548 This option causes the preprocessor macro `__FAST_MATH__' to be 6549 defined. 6550 6551 This option is not turned on by any `-O' option since it can 6552 result in incorrect output for programs which depend on an exact 6553 implementation of IEEE or ISO rules/specifications for math 6554 functions. It may, however, yield faster code for programs that do 6555 not require the guarantees of these specifications. 6556 6557 `-fno-math-errno' 6558 Do not set ERRNO after calling math functions that are executed 6559 with a single instruction, e.g., sqrt. A program that relies on 6560 IEEE exceptions for math error handling may want to use this flag 6561 for speed while maintaining IEEE arithmetic compatibility. 6562 6563 This option is not turned on by any `-O' option since it can 6564 result in incorrect output for programs which depend on an exact 6565 implementation of IEEE or ISO rules/specifications for math 6566 functions. It may, however, yield faster code for programs that do 6567 not require the guarantees of these specifications. 6568 6569 The default is `-fmath-errno'. 6570 6571 On Darwin systems, the math library never sets `errno'. There is 6572 therefore no reason for the compiler to consider the possibility 6573 that it might, and `-fno-math-errno' is the default. 6574 6575 `-funsafe-math-optimizations' 6576 Allow optimizations for floating-point arithmetic that (a) assume 6577 that arguments and results are valid and (b) may violate IEEE or 6578 ANSI standards. When used at link-time, it may include libraries 6579 or startup files that change the default FPU control word or other 6580 similar optimizations. 6581 6582 This option is not turned on by any `-O' option since it can 6583 result in incorrect output for programs which depend on an exact 6584 implementation of IEEE or ISO rules/specifications for math 6585 functions. It may, however, yield faster code for programs that do 6586 not require the guarantees of these specifications. Enables 6587 `-fno-signed-zeros', `-fno-trapping-math', `-fassociative-math' 6588 and `-freciprocal-math'. 6589 6590 The default is `-fno-unsafe-math-optimizations'. 6591 6592 `-fassociative-math' 6593 Allow re-association of operands in series of floating-point 6594 operations. This violates the ISO C and C++ language standard by 6595 possibly changing computation result. NOTE: re-ordering may 6596 change the sign of zero as well as ignore NaNs and inhibit or 6597 create underflow or overflow (and thus cannot be used on a code 6598 which relies on rounding behavior like `(x + 2**52) - 2**52)'. 6599 May also reorder floating-point comparisons and thus may not be 6600 used when ordered comparisons are required. This option requires 6601 that both `-fno-signed-zeros' and `-fno-trapping-math' be in 6602 effect. Moreover, it doesn't make much sense with 6603 `-frounding-math'. 6604 6605 The default is `-fno-associative-math'. 6606 6607 `-freciprocal-math' 6608 Allow the reciprocal of a value to be used instead of dividing by 6609 the value if this enables optimizations. For example `x / y' can 6610 be replaced with `x * (1/y)' which is useful if `(1/y)' is subject 6611 to common subexpression elimination. Note that this loses 6612 precision and increases the number of flops operating on the value. 6613 6614 The default is `-fno-reciprocal-math'. 6615 6616 `-ffinite-math-only' 6617 Allow optimizations for floating-point arithmetic that assume that 6618 arguments and results are not NaNs or +-Infs. 6619 6620 This option is not turned on by any `-O' option since it can 6621 result in incorrect output for programs which depend on an exact 6622 implementation of IEEE or ISO rules/specifications for math 6623 functions. It may, however, yield faster code for programs that do 6624 not require the guarantees of these specifications. 6625 6626 The default is `-fno-finite-math-only'. 6627 6628 `-fno-signed-zeros' 6629 Allow optimizations for floating point arithmetic that ignore the 6630 signedness of zero. IEEE arithmetic specifies the behavior of 6631 distinct +0.0 and -0.0 values, which then prohibits simplification 6632 of expressions such as x+0.0 or 0.0*x (even with 6633 `-ffinite-math-only'). This option implies that the sign of a 6634 zero result isn't significant. 6635 6636 The default is `-fsigned-zeros'. 6637 6638 `-fno-trapping-math' 6639 Compile code assuming that floating-point operations cannot 6640 generate user-visible traps. These traps include division by 6641 zero, overflow, underflow, inexact result and invalid operation. 6642 This option requires that `-fno-signaling-nans' be in effect. 6643 Setting this option may allow faster code if one relies on 6644 "non-stop" IEEE arithmetic, for example. 6645 6646 This option should never be turned on by any `-O' option since it 6647 can result in incorrect output for programs which depend on an 6648 exact implementation of IEEE or ISO rules/specifications for math 6649 functions. 6650 6651 The default is `-ftrapping-math'. 6652 6653 `-frounding-math' 6654 Disable transformations and optimizations that assume default 6655 floating point rounding behavior. This is round-to-zero for all 6656 floating point to integer conversions, and round-to-nearest for 6657 all other arithmetic truncations. This option should be specified 6658 for programs that change the FP rounding mode dynamically, or that 6659 may be executed with a non-default rounding mode. This option 6660 disables constant folding of floating point expressions at 6661 compile-time (which may be affected by rounding mode) and 6662 arithmetic transformations that are unsafe in the presence of 6663 sign-dependent rounding modes. 6664 6665 The default is `-fno-rounding-math'. 6666 6667 This option is experimental and does not currently guarantee to 6668 disable all GCC optimizations that are affected by rounding mode. 6669 Future versions of GCC may provide finer control of this setting 6670 using C99's `FENV_ACCESS' pragma. This command line option will 6671 be used to specify the default state for `FENV_ACCESS'. 6672 6673 `-fsignaling-nans' 6674 Compile code assuming that IEEE signaling NaNs may generate 6675 user-visible traps during floating-point operations. Setting this 6676 option disables optimizations that may change the number of 6677 exceptions visible with signaling NaNs. This option implies 6678 `-ftrapping-math'. 6679 6680 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be 6681 defined. 6682 6683 The default is `-fno-signaling-nans'. 6684 6685 This option is experimental and does not currently guarantee to 6686 disable all GCC optimizations that affect signaling NaN behavior. 6687 6688 `-fsingle-precision-constant' 6689 Treat floating point constant as single precision constant instead 6690 of implicitly converting it to double precision constant. 6691 6692 `-fcx-limited-range' 6693 When enabled, this option states that a range reduction step is not 6694 needed when performing complex division. Also, there is no 6695 checking whether the result of a complex multiplication or 6696 division is `NaN + I*NaN', with an attempt to rescue the situation 6697 in that case. The default is `-fno-cx-limited-range', but is 6698 enabled by `-ffast-math'. 6699 6700 This option controls the default setting of the ISO C99 6701 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to 6702 all languages. 6703 6704 `-fcx-fortran-rules' 6705 Complex multiplication and division follow Fortran rules. Range 6706 reduction is done as part of complex division, but there is no 6707 checking whether the result of a complex multiplication or 6708 division is `NaN + I*NaN', with an attempt to rescue the situation 6709 in that case. 6710 6711 The default is `-fno-cx-fortran-rules'. 6712 6713 6714 The following options control optimizations that may improve 6715 performance, but are not enabled by any `-O' options. This section 6716 includes experimental options that may produce broken code. 6717 6718 `-fbranch-probabilities' 6719 After running a program compiled with `-fprofile-arcs' (*note 6720 Options for Debugging Your Program or `gcc': Debugging Options.), 6721 you can compile it a second time using `-fbranch-probabilities', 6722 to improve optimizations based on the number of times each branch 6723 was taken. When the program compiled with `-fprofile-arcs' exits 6724 it saves arc execution counts to a file called `SOURCENAME.gcda' 6725 for each source file. The information in this data file is very 6726 dependent on the structure of the generated code, so you must use 6727 the same source code and the same optimization options for both 6728 compilations. 6729 6730 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on 6731 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve 6732 optimization. Currently, they are only used in one place: in 6733 `reorg.c', instead of guessing which path a branch is mostly to 6734 take, the `REG_BR_PROB' values are used to exactly determine which 6735 path is taken more often. 6736 6737 `-fprofile-values' 6738 If combined with `-fprofile-arcs', it adds code so that some data 6739 about values of expressions in the program is gathered. 6740 6741 With `-fbranch-probabilities', it reads back the data gathered 6742 from profiling values of expressions and adds `REG_VALUE_PROFILE' 6743 notes to instructions for their later usage in optimizations. 6744 6745 Enabled with `-fprofile-generate' and `-fprofile-use'. 6746 6747 `-fvpt' 6748 If combined with `-fprofile-arcs', it instructs the compiler to add 6749 a code to gather information about values of expressions. 6750 6751 With `-fbranch-probabilities', it reads back the data gathered and 6752 actually performs the optimizations based on them. Currently the 6753 optimizations include specialization of division operation using 6754 the knowledge about the value of the denominator. 6755 6756 `-ffvpt' 6757 If combined with `-fvpt and -ffvpt_functions', it instructs the 6758 compiler to add a code to gather information about math library 6759 calls. 6760 6761 With `-fbranch-probabilities', it reads back the data gathered and 6762 actually performs the optimizations based on them. Currently the 6763 optimizations include specialization of function calls using 6764 precalculated values of common inputs. 6765 6766 `-ffvpt-functions=FFVPTFUNCTIONS' 6767 This options takes a comma separated list of math functions to be 6768 profiled/optimized by `-ffvpt'. The special name "all" can be used 6769 to specify all supported math functions. Currently, exp, log, pow, 6770 and sqrt are supported. 6771 6772 `-frename-registers' 6773 Attempt to avoid false dependencies in scheduled code by making use 6774 of registers left over after register allocation. This 6775 optimization will most benefit processors with lots of registers. 6776 Depending on the debug information format adopted by the target, 6777 however, it can make debugging impossible, since variables will no 6778 longer stay in a "home register". 6779 6780 Enabled by default with `-funroll-loops'. 6781 6782 `-ftracer' 6783 Perform tail duplication to enlarge superblock size. This 6784 transformation simplifies the control flow of the function 6785 allowing other optimizations to do better job. 6786 6787 Enabled with `-fprofile-use'. 6788 6789 `-funroll-loops' 6790 Unroll loops whose number of iterations can be determined at 6791 compile time or upon entry to the loop. `-funroll-loops' implies 6792 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It 6793 also turns on complete loop peeling (i.e. complete removal of 6794 loops with small constant number of iterations). This option 6795 makes code larger, and may or may not make it run faster. 6796 6797 Enabled with `-fprofile-use'. 6798 6799 `-funroll-all-loops' 6800 Unroll all loops, even if their number of iterations is uncertain 6801 when the loop is entered. This usually makes programs run more 6802 slowly. `-funroll-all-loops' implies the same options as 6803 `-funroll-loops'. 6804 6805 `-fpeel-loops' 6806 Peels the loops for that there is enough information that they do 6807 not roll much (from profile feedback). It also turns on complete 6808 loop peeling (i.e. complete removal of loops with small constant 6809 number of iterations). 6810 6811 Enabled with `-fprofile-use'. 6812 6813 `-fmove-loop-invariants' 6814 Enables the loop invariant motion pass in the RTL loop optimizer. 6815 Enabled at level `-O1' 6816 6817 `-funswitch-loops' 6818 Move branches with loop invariant conditions out of the loop, with 6819 duplicates of the loop on both branches (modified according to 6820 result of the condition). 6821 6822 `-ffunction-sections' 6823 `-fdata-sections' 6824 Place each function or data item into its own section in the output 6825 file if the target supports arbitrary sections. The name of the 6826 function or the name of the data item determines the section's name 6827 in the output file. 6828 6829 Use these options on systems where the linker can perform 6830 optimizations to improve locality of reference in the instruction 6831 space. Most systems using the ELF object format and SPARC 6832 processors running Solaris 2 have linkers with such optimizations. 6833 AIX may have these optimizations in the future. 6834 6835 Only use these options when there are significant benefits from 6836 doing so. When you specify these options, the assembler and 6837 linker will create larger object and executable files and will 6838 also be slower. You will not be able to use `gprof' on all 6839 systems if you specify this option and you may have problems with 6840 debugging if you specify both this option and `-g'. 6841 6842 `-fbranch-target-load-optimize' 6843 Perform branch target register load optimization before prologue / 6844 epilogue threading. The use of target registers can typically be 6845 exposed only during reload, thus hoisting loads out of loops and 6846 doing inter-block scheduling needs a separate optimization pass. 6847 6848 `-fbranch-target-load-optimize2' 6849 Perform branch target register load optimization after prologue / 6850 epilogue threading. 6851 6852 `-fbtr-bb-exclusive' 6853 When performing branch target register load optimization, don't 6854 reuse branch target registers in within any basic block. 6855 6856 `-fstack-protector' 6857 Emit extra code to check for buffer overflows, such as stack 6858 smashing attacks. This is done by adding a guard variable to 6859 functions with vulnerable objects. This includes functions that 6860 call alloca, and functions with buffers larger than 8 bytes. The 6861 guards are initialized when a function is entered and then checked 6862 when the function exits. If a guard check fails, an error message 6863 is printed and the program exits. 6864 6865 `-fstack-protector-all' 6866 Like `-fstack-protector' except that all functions are protected. 6867 6868 NOTE: When -enable-esp this option is enabled by default for C, 6869 C++, ObjC, ObjC++, if neither `-fno-stack-protector' or 6870 `-nostdlib' or `-nodefaultlibs' or `-fstack-protector' are found. 6871 6872 `-fsection-anchors' 6873 Try to reduce the number of symbolic address calculations by using 6874 shared "anchor" symbols to address nearby objects. This 6875 transformation can help to reduce the number of GOT entries and 6876 GOT accesses on some targets. 6877 6878 For example, the implementation of the following function `foo': 6879 6880 static int a, b, c; 6881 int foo (void) { return a + b + c; } 6882 6883 would usually calculate the addresses of all three variables, but 6884 if you compile it with `-fsection-anchors', it will access the 6885 variables from a common anchor point instead. The effect is 6886 similar to the following pseudocode (which isn't valid C): 6887 6888 int foo (void) 6889 { 6890 register int *xr = &x; 6891 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 6892 } 6893 6894 Not all targets support this option. 6895 6896 `--param NAME=VALUE' 6897 In some places, GCC uses various constants to control the amount of 6898 optimization that is done. For example, GCC will not inline 6899 functions that contain more that a certain number of instructions. 6900 You can control some of these constants on the command-line using 6901 the `--param' option. 6902 6903 The names of specific parameters, and the meaning of the values, 6904 are tied to the internals of the compiler, and are subject to 6905 change without notice in future releases. 6906 6907 In each case, the VALUE is an integer. The allowable choices for 6908 NAME are given in the following table: 6909 6910 `sra-max-structure-size' 6911 The maximum structure size, in bytes, at which the scalar 6912 replacement of aggregates (SRA) optimization will perform 6913 block copies. The default value, 0, implies that GCC will 6914 select the most appropriate size itself. 6915 6916 `sra-field-structure-ratio' 6917 The threshold ratio (as a percentage) between instantiated 6918 fields and the complete structure size. We say that if the 6919 ratio of the number of bytes in instantiated fields to the 6920 number of bytes in the complete structure exceeds this 6921 parameter, then block copies are not used. The default is 75. 6922 6923 `struct-reorg-cold-struct-ratio' 6924 The threshold ratio (as a percentage) between a structure 6925 frequency and the frequency of the hottest structure in the 6926 program. This parameter is used by struct-reorg optimization 6927 enabled by `-fipa-struct-reorg'. We say that if the ratio of 6928 a structure frequency, calculated by profiling, to the 6929 hottest structure frequency in the program is less than this 6930 parameter, then structure reorganization is not applied to 6931 this structure. The default is 10. 6932 6933 `predictable-branch-cost-outcome' 6934 When branch is predicted to be taken with probability lower 6935 than this threshold (in percent), then it is considered well 6936 predictable. The default is 10. 6937 6938 `max-crossjump-edges' 6939 The maximum number of incoming edges to consider for 6940 crossjumping. The algorithm used by `-fcrossjumping' is 6941 O(N^2) in the number of edges incoming to each block. 6942 Increasing values mean more aggressive optimization, making 6943 the compile time increase with probably small improvement in 6944 executable size. 6945 6946 `min-crossjump-insns' 6947 The minimum number of instructions which must be matched at 6948 the end of two blocks before crossjumping will be performed 6949 on them. This value is ignored in the case where all 6950 instructions in the block being crossjumped from are matched. 6951 The default value is 5. 6952 6953 `max-grow-copy-bb-insns' 6954 The maximum code size expansion factor when copying basic 6955 blocks instead of jumping. The expansion is relative to a 6956 jump instruction. The default value is 8. 6957 6958 `max-goto-duplication-insns' 6959 The maximum number of instructions to duplicate to a block 6960 that jumps to a computed goto. To avoid O(N^2) behavior in a 6961 number of passes, GCC factors computed gotos early in the 6962 compilation process, and unfactors them as late as possible. 6963 Only computed jumps at the end of a basic blocks with no more 6964 than max-goto-duplication-insns are unfactored. The default 6965 value is 8. 6966 6967 `max-delay-slot-insn-search' 6968 The maximum number of instructions to consider when looking 6969 for an instruction to fill a delay slot. If more than this 6970 arbitrary number of instructions is searched, the time 6971 savings from filling the delay slot will be minimal so stop 6972 searching. Increasing values mean more aggressive 6973 optimization, making the compile time increase with probably 6974 small improvement in executable run time. 6975 6976 `max-delay-slot-live-search' 6977 When trying to fill delay slots, the maximum number of 6978 instructions to consider when searching for a block with 6979 valid live register information. Increasing this arbitrarily 6980 chosen value means more aggressive optimization, increasing 6981 the compile time. This parameter should be removed when the 6982 delay slot code is rewritten to maintain the control-flow 6983 graph. 6984 6985 `max-gcse-memory' 6986 The approximate maximum amount of memory that will be 6987 allocated in order to perform the global common subexpression 6988 elimination optimization. If more memory than specified is 6989 required, the optimization will not be done. 6990 6991 `max-gcse-passes' 6992 The maximum number of passes of GCSE to run. The default is 6993 1. 6994 6995 `max-pending-list-length' 6996 The maximum number of pending dependencies scheduling will 6997 allow before flushing the current state and starting over. 6998 Large functions with few branches or calls can create 6999 excessively large lists which needlessly consume memory and 7000 resources. 7001 7002 `max-inline-insns-single' 7003 Several parameters control the tree inliner used in gcc. 7004 This number sets the maximum number of instructions (counted 7005 in GCC's internal representation) in a single function that 7006 the tree inliner will consider for inlining. This only 7007 affects functions declared inline and methods implemented in 7008 a class declaration (C++). The default value is 450. 7009 7010 `max-inline-insns-auto' 7011 When you use `-finline-functions' (included in `-O3'), a lot 7012 of functions that would otherwise not be considered for 7013 inlining by the compiler will be investigated. To those 7014 functions, a different (potentially more restrictive) limit 7015 compared to functions declared inline can be applied. The 7016 default value is 450. 7017 7018 `inline-limit-increase-with-profile' 7019 When profile information is available, such as when compiling 7020 with `-fprofile-use', the maximum function size limits 7021 `--param max-inline-insns-single' and `--param 7022 max-inline-insns-auto' are increased by this percentage 7023 amount. Profile information increases the selectivity and 7024 quality of the inlining decisions, so having a larger set of 7025 candidate functions available for inlining can improve 7026 performance. The default value is 100. 7027 7028 `large-function-insns' 7029 The limit specifying really large functions. For functions 7030 larger than this limit after inlining, inlining is 7031 constrained by `--param large-function-growth'. This 7032 parameter is useful primarily to avoid extreme compilation 7033 time caused by non-linear algorithms used by the backend. 7034 The default value is 2700. 7035 7036 `large-function-growth' 7037 Specifies maximal growth of large function caused by inlining 7038 in percents. The default value is 100 which limits large 7039 function growth to 2.0 times the original size. 7040 7041 `large-unit-insns' 7042 The limit specifying large translation unit. Growth caused 7043 by inlining of units larger than this limit is limited by 7044 `--param inline-unit-growth'. For small units this might be 7045 too tight (consider unit consisting of function A that is 7046 inline and B that just calls A three time. If B is small 7047 relative to A, the growth of unit is 300\% and yet such 7048 inlining is very sane. For very large units consisting of 7049 small inlineable functions however the overall unit growth 7050 limit is needed to avoid exponential explosion of code size. 7051 Thus for smaller units, the size is increased to `--param 7052 large-unit-insns' before applying `--param 7053 inline-unit-growth'. The default is 10000 7054 7055 `inline-unit-growth' 7056 Specifies maximal overall growth of the compilation unit 7057 caused by inlining. The default value is 30 which limits 7058 unit growth to 1.3 times the original size. 7059 7060 `ipcp-unit-growth' 7061 Specifies maximal overall growth of the compilation unit 7062 caused by interprocedural constant propagation. The default 7063 value is 10 which limits unit growth to 1.1 times the 7064 original size. 7065 7066 `large-stack-frame' 7067 The limit specifying large stack frames. While inlining the 7068 algorithm is trying to not grow past this limit too much. 7069 Default value is 256 bytes. 7070 7071 `large-stack-frame-growth' 7072 Specifies maximal growth of large stack frames caused by 7073 inlining in percents. The default value is 1000 which limits 7074 large stack frame growth to 11 times the original size. 7075 7076 `max-inline-insns-recursive' 7077 `max-inline-insns-recursive-auto' 7078 Specifies maximum number of instructions out-of-line copy of 7079 self recursive inline function can grow into by performing 7080 recursive inlining. 7081 7082 For functions declared inline `--param 7083 max-inline-insns-recursive' is taken into account. For 7084 function not declared inline, recursive inlining happens only 7085 when `-finline-functions' (included in `-O3') is enabled and 7086 `--param max-inline-insns-recursive-auto' is used. The 7087 default value is 450. 7088 7089 `max-inline-recursive-depth' 7090 `max-inline-recursive-depth-auto' 7091 Specifies maximum recursion depth used by the recursive 7092 inlining. 7093 7094 For functions declared inline `--param 7095 max-inline-recursive-depth' is taken into account. For 7096 function not declared inline, recursive inlining happens only 7097 when `-finline-functions' (included in `-O3') is enabled and 7098 `--param max-inline-recursive-depth-auto' is used. The 7099 default value is 8. 7100 7101 `min-inline-recursive-probability' 7102 Recursive inlining is profitable only for function having 7103 deep recursion in average and can hurt for function having 7104 little recursion depth by increasing the prologue size or 7105 complexity of function body to other optimizers. 7106 7107 When profile feedback is available (see `-fprofile-generate') 7108 the actual recursion depth can be guessed from probability 7109 that function will recurse via given call expression. This 7110 parameter limits inlining only to call expression whose 7111 probability exceeds given threshold (in percents). The 7112 default value is 10. 7113 7114 `min-count-fraction-for-inline-cold' 7115 Generally cold callsites are not candidates for inlining. 7116 However, if the callee contains hot code then inlining can 7117 propagate useful context to this hot region. This parameter, 7118 given as a fraction of the global maximum count, specifies 7119 the minimum expected count in the callee called from a cold 7120 callsite for the callsite to be considered for inlining, 7121 where the expected count in the callee from a callsite is the 7122 maximum count of any basic block in the callee times the 7123 callsite count divided by the callee count. 7124 7125 `inline-call-cost' 7126 Specify cost of call instruction relative to simple 7127 arithmetics operations (having cost of 1). Increasing this 7128 cost disqualifies inlining of non-leaf functions and at the 7129 same time increases size of leaf function that is believed to 7130 reduce function size by being inlined. In effect it 7131 increases amount of inlining for code having large 7132 abstraction penalty (many functions that just pass the 7133 arguments to other functions) and decrease inlining for code 7134 with low abstraction penalty. The default value is 12. 7135 7136 `min-vect-loop-bound' 7137 The minimum number of iterations under which a loop will not 7138 get vectorized when `-ftree-vectorize' is used. The number 7139 of iterations after vectorization needs to be greater than 7140 the value specified by this option to allow vectorization. 7141 The default value is 0. 7142 7143 `max-unrolled-insns' 7144 The maximum number of instructions that a loop should have if 7145 that loop is unrolled, and if the loop is unrolled, it 7146 determines how many times the loop code is unrolled. 7147 7148 `max-average-unrolled-insns' 7149 The maximum number of instructions biased by probabilities of 7150 their execution that a loop should have if that loop is 7151 unrolled, and if the loop is unrolled, it determines how many 7152 times the loop code is unrolled. 7153 7154 `max-unroll-times' 7155 The maximum number of unrollings of a single loop. 7156 7157 `max-peeled-insns' 7158 The maximum number of instructions that a loop should have if 7159 that loop is peeled, and if the loop is peeled, it determines 7160 how many times the loop code is peeled. 7161 7162 `max-peel-times' 7163 The maximum number of peelings of a single loop. 7164 7165 `max-completely-peeled-insns' 7166 7167 `max-completely-peeled-insns-feedback' 7168 The maximum number of insns of a completely peeled loop. 7169 7170 The `max-completely-peeled-insns-feedback' is used only when 7171 profile feedback is available and the loop is hot. Because of 7172 the real profiles, this value may set to be larger for hot 7173 loops. 7174 7175 `max-once-peeled-insns' 7176 7177 `max-once-peeled-insns-feedback' 7178 The maximum number of insns of a peeled loop that rolls only 7179 once. The `max-once-peeled-insns-feedback' is used only 7180 when profile feedback is available and the loop is hot. 7181 Because of the real profiles, this value may set to be larger 7182 for hot loops. 7183 7184 `max-completely-peel-times' 7185 7186 `max-completely-peel-times-feedback' 7187 The maximum number of iterations of a loop to be suitable for 7188 complete peeling. 7189 7190 The `max-completely-peel-times-feedback' is used only when 7191 profile feedback is available and the loop is hot. Because of 7192 the real profiles, this value may set to be larger for hot 7193 loops. 7194 7195 `max-unswitch-insns' 7196 The maximum number of insns of an unswitched loop. 7197 7198 `max-unswitch-level' 7199 The maximum number of branches unswitched in a single loop. 7200 7201 `lim-expensive' 7202 The minimum cost of an expensive expression in the loop 7203 invariant motion. 7204 7205 `iv-consider-all-candidates-bound' 7206 Bound on number of candidates for induction variables below 7207 that all candidates are considered for each use in induction 7208 variable optimizations. Only the most relevant candidates 7209 are considered if there are more candidates, to avoid 7210 quadratic time complexity. 7211 7212 `iv-max-considered-uses' 7213 The induction variable optimizations give up on loops that 7214 contain more induction variable uses. 7215 7216 `iv-always-prune-cand-set-bound' 7217 If number of candidates in the set is smaller than this value, 7218 we always try to remove unnecessary ivs from the set during 7219 its optimization when a new iv is added to the set. 7220 7221 `scev-max-expr-size' 7222 Bound on size of expressions used in the scalar evolutions 7223 analyzer. Large expressions slow the analyzer. 7224 7225 `omega-max-vars' 7226 The maximum number of variables in an Omega constraint system. 7227 The default value is 128. 7228 7229 `omega-max-geqs' 7230 The maximum number of inequalities in an Omega constraint 7231 system. The default value is 256. 7232 7233 `omega-max-eqs' 7234 The maximum number of equalities in an Omega constraint 7235 system. The default value is 128. 7236 7237 `omega-max-wild-cards' 7238 The maximum number of wildcard variables that the Omega 7239 solver will be able to insert. The default value is 18. 7240 7241 `omega-hash-table-size' 7242 The size of the hash table in the Omega solver. The default 7243 value is 550. 7244 7245 `omega-max-keys' 7246 The maximal number of keys used by the Omega solver. The 7247 default value is 500. 7248 7249 `omega-eliminate-redundant-constraints' 7250 When set to 1, use expensive methods to eliminate all 7251 redundant constraints. The default value is 0. 7252 7253 `vect-max-version-for-alignment-checks' 7254 The maximum number of runtime checks that can be performed 7255 when doing loop versioning for alignment in the vectorizer. 7256 See option ftree-vect-loop-version for more information. 7257 7258 `vect-max-version-for-alias-checks' 7259 The maximum number of runtime checks that can be performed 7260 when doing loop versioning for alias in the vectorizer. See 7261 option ftree-vect-loop-version for more information. 7262 7263 `max-iterations-to-track' 7264 The maximum number of iterations of a loop the brute force 7265 algorithm for analysis of # of iterations of the loop tries 7266 to evaluate. 7267 7268 `hot-bb-count-fraction' 7269 Select fraction of the maximal count of repetitions of basic 7270 block in program given basic block needs to have to be 7271 considered hot. 7272 7273 `hot-bb-frequency-fraction' 7274 Select fraction of the maximal frequency of executions of 7275 basic block in function given basic block needs to have to be 7276 considered hot 7277 7278 `max-predicted-iterations' 7279 The maximum number of loop iterations we predict statically. 7280 This is useful in cases where function contain single loop 7281 with known bound and other loop with unknown. We predict the 7282 known number of iterations correctly, while the unknown 7283 number of iterations average to roughly 10. This means that 7284 the loop without bounds would appear artificially cold 7285 relative to the other one. 7286 7287 `align-threshold' 7288 Select fraction of the maximal frequency of executions of 7289 basic block in function given basic block will get aligned. 7290 7291 `align-loop-iterations' 7292 A loop expected to iterate at lest the selected number of 7293 iterations will get aligned. 7294 7295 `tracer-dynamic-coverage' 7296 `tracer-dynamic-coverage-feedback' 7297 This value is used to limit superblock formation once the 7298 given percentage of executed instructions is covered. This 7299 limits unnecessary code size expansion. 7300 7301 The `tracer-dynamic-coverage-feedback' is used only when 7302 profile feedback is available. The real profiles (as opposed 7303 to statically estimated ones) are much less balanced allowing 7304 the threshold to be larger value. 7305 7306 `tracer-max-code-growth' 7307 Stop tail duplication once code growth has reached given 7308 percentage. This is rather hokey argument, as most of the 7309 duplicates will be eliminated later in cross jumping, so it 7310 may be set to much higher values than is the desired code 7311 growth. 7312 7313 `tracer-min-branch-ratio' 7314 Stop reverse growth when the reverse probability of best edge 7315 is less than this threshold (in percent). 7316 7317 `tracer-min-branch-ratio' 7318 `tracer-min-branch-ratio-feedback' 7319 Stop forward growth if the best edge do have probability 7320 lower than this threshold. 7321 7322 Similarly to `tracer-dynamic-coverage' two values are 7323 present, one for compilation for profile feedback and one for 7324 compilation without. The value for compilation with profile 7325 feedback needs to be more conservative (higher) in order to 7326 make tracer effective. 7327 7328 `max-cse-path-length' 7329 Maximum number of basic blocks on path that cse considers. 7330 The default is 10. 7331 7332 `max-cse-insns' 7333 The maximum instructions CSE process before flushing. The 7334 default is 1000. 7335 7336 `max-aliased-vops' 7337 Maximum number of virtual operands per function allowed to 7338 represent aliases before triggering the alias partitioning 7339 heuristic. Alias partitioning reduces compile times and 7340 memory consumption needed for aliasing at the expense of 7341 precision loss in alias information. The default value for 7342 this parameter is 100 for -O1, 500 for -O2 and 1000 for -O3. 7343 7344 Notice that if a function contains more memory statements 7345 than the value of this parameter, it is not really possible 7346 to achieve this reduction. In this case, the compiler will 7347 use the number of memory statements as the value for 7348 `max-aliased-vops'. 7349 7350 `avg-aliased-vops' 7351 Average number of virtual operands per statement allowed to 7352 represent aliases before triggering the alias partitioning 7353 heuristic. This works in conjunction with 7354 `max-aliased-vops'. If a function contains more than 7355 `max-aliased-vops' virtual operators, then memory symbols 7356 will be grouped into memory partitions until either the total 7357 number of virtual operators is below `max-aliased-vops' or 7358 the average number of virtual operators per memory statement 7359 is below `avg-aliased-vops'. The default value for this 7360 parameter is 1 for -O1 and -O2, and 3 for -O3. 7361 7362 `ggc-min-expand' 7363 GCC uses a garbage collector to manage its own memory 7364 allocation. This parameter specifies the minimum percentage 7365 by which the garbage collector's heap should be allowed to 7366 expand between collections. Tuning this may improve 7367 compilation speed; it has no effect on code generation. 7368 7369 The default is 30% + 70% * (RAM/1GB) with an upper bound of 7370 100% when RAM >= 1GB. If `getrlimit' is available, the 7371 notion of "RAM" is the smallest of actual RAM and 7372 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to 7373 calculate RAM on a particular platform, the lower bound of 7374 30% is used. Setting this parameter and `ggc-min-heapsize' 7375 to zero causes a full collection to occur at every 7376 opportunity. This is extremely slow, but can be useful for 7377 debugging. 7378 7379 `ggc-min-heapsize' 7380 Minimum size of the garbage collector's heap before it begins 7381 bothering to collect garbage. The first collection occurs 7382 after the heap expands by `ggc-min-expand'% beyond 7383 `ggc-min-heapsize'. Again, tuning this may improve 7384 compilation speed, and has no effect on code generation. 7385 7386 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit 7387 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not 7388 exceeded, but with a lower bound of 4096 (four megabytes) and 7389 an upper bound of 131072 (128 megabytes). If GCC is not able 7390 to calculate RAM on a particular platform, the lower bound is 7391 used. Setting this parameter very large effectively disables 7392 garbage collection. Setting this parameter and 7393 `ggc-min-expand' to zero causes a full collection to occur at 7394 every opportunity. 7395 7396 `max-reload-search-insns' 7397 The maximum number of instruction reload should look backward 7398 for equivalent register. Increasing values mean more 7399 aggressive optimization, making the compile time increase 7400 with probably slightly better performance. The default value 7401 is 100. 7402 7403 `max-cselib-memory-locations' 7404 The maximum number of memory locations cselib should take 7405 into account. Increasing values mean more aggressive 7406 optimization, making the compile time increase with probably 7407 slightly better performance. The default value is 500. 7408 7409 `reorder-blocks-duplicate' 7410 `reorder-blocks-duplicate-feedback' 7411 Used by basic block reordering pass to decide whether to use 7412 unconditional branch or duplicate the code on its 7413 destination. Code is duplicated when its estimated size is 7414 smaller than this value multiplied by the estimated size of 7415 unconditional jump in the hot spots of the program. 7416 7417 The `reorder-block-duplicate-feedback' is used only when 7418 profile feedback is available and may be set to higher values 7419 than `reorder-block-duplicate' since information about the 7420 hot spots is more accurate. 7421 7422 `max-sched-ready-insns' 7423 The maximum number of instructions ready to be issued the 7424 scheduler should consider at any given time during the first 7425 scheduling pass. Increasing values mean more thorough 7426 searches, making the compilation time increase with probably 7427 little benefit. The default value is 100. 7428 7429 `max-sched-region-blocks' 7430 The maximum number of blocks in a region to be considered for 7431 interblock scheduling. The default value is 10. 7432 7433 `max-pipeline-region-blocks' 7434 The maximum number of blocks in a region to be considered for 7435 pipelining in the selective scheduler. The default value is 7436 15. 7437 7438 `max-sched-region-insns' 7439 The maximum number of insns in a region to be considered for 7440 interblock scheduling. The default value is 100. 7441 7442 `max-pipeline-region-insns' 7443 The maximum number of insns in a region to be considered for 7444 pipelining in the selective scheduler. The default value is 7445 200. 7446 7447 `min-spec-prob' 7448 The minimum probability (in percents) of reaching a source 7449 block for interblock speculative scheduling. The default 7450 value is 40. 7451 7452 `max-sched-extend-regions-iters' 7453 The maximum number of iterations through CFG to extend 7454 regions. 0 - disable region extension, N - do at most N 7455 iterations. The default value is 0. 7456 7457 `max-sched-insn-conflict-delay' 7458 The maximum conflict delay for an insn to be considered for 7459 speculative motion. The default value is 3. 7460 7461 `sched-spec-prob-cutoff' 7462 The minimal probability of speculation success (in percents), 7463 so that speculative insn will be scheduled. The default 7464 value is 40. 7465 7466 `sched-mem-true-dep-cost' 7467 Minimal distance (in CPU cycles) between store and load 7468 targeting same memory locations. The default value is 1. 7469 7470 `selsched-max-lookahead' 7471 The maximum size of the lookahead window of selective 7472 scheduling. It is a depth of search for available 7473 instructions. The default value is 50. 7474 7475 `selsched-max-sched-times' 7476 The maximum number of times that an instruction will be 7477 scheduled during selective scheduling. This is the limit on 7478 the number of iterations through which the instruction may be 7479 pipelined. The default value is 2. 7480 7481 `selsched-max-insns-to-rename' 7482 The maximum number of best instructions in the ready list 7483 that are considered for renaming in the selective scheduler. 7484 The default value is 2. 7485 7486 `max-last-value-rtl' 7487 The maximum size measured as number of RTLs that can be 7488 recorded in an expression in combiner for a pseudo register 7489 as last known value of that register. The default is 10000. 7490 7491 `integer-share-limit' 7492 Small integer constants can use a shared data structure, 7493 reducing the compiler's memory usage and increasing its 7494 speed. This sets the maximum value of a shared integer 7495 constant. The default value is 256. 7496 7497 `min-virtual-mappings' 7498 Specifies the minimum number of virtual mappings in the 7499 incremental SSA updater that should be registered to trigger 7500 the virtual mappings heuristic defined by 7501 virtual-mappings-ratio. The default value is 100. 7502 7503 `virtual-mappings-ratio' 7504 If the number of virtual mappings is virtual-mappings-ratio 7505 bigger than the number of virtual symbols to be updated, then 7506 the incremental SSA updater switches to a full update for 7507 those symbols. The default ratio is 3. 7508 7509 `ssp-buffer-size' 7510 The minimum size of buffers (i.e. arrays) that will receive 7511 stack smashing protection when `-fstack-protection' is used. 7512 7513 `max-jump-thread-duplication-stmts' 7514 Maximum number of statements allowed in a block that needs to 7515 be duplicated when threading jumps. 7516 7517 `max-fields-for-field-sensitive' 7518 Maximum number of fields in a structure we will treat in a 7519 field sensitive manner during pointer analysis. The default 7520 is zero for -O0, and -O1 and 100 for -Os, -O2, and -O3. 7521 7522 `prefetch-latency' 7523 Estimate on average number of instructions that are executed 7524 before prefetch finishes. The distance we prefetch ahead is 7525 proportional to this constant. Increasing this number may 7526 also lead to less streams being prefetched (see 7527 `simultaneous-prefetches'). 7528 7529 `simultaneous-prefetches' 7530 Maximum number of prefetches that can run at the same time. 7531 7532 `l1-cache-line-size' 7533 The size of cache line in L1 cache, in bytes. 7534 7535 `l1-cache-size' 7536 The size of L1 cache, in kilobytes. 7537 7538 `l2-cache-size' 7539 The size of L2 cache, in kilobytes. 7540 7541 `min-insn-to-prefetch-ratio' 7542 The minimum ratio between the number of instructions and the 7543 number of prefetches to enable prefetching in a loop with an 7544 unknown trip count. 7545 7546 `prefetch-min-insn-to-mem-ratio' 7547 The minimum ratio between the number of instructions and the 7548 number of memory references to enable prefetching in a loop. 7549 7550 `use-canonical-types' 7551 Whether the compiler should use the "canonical" type system. 7552 By default, this should always be 1, which uses a more 7553 efficient internal mechanism for comparing types in C++ and 7554 Objective-C++. However, if bugs in the canonical type system 7555 are causing compilation failures, set this value to 0 to 7556 disable canonical types. 7557 7558 `switch-conversion-max-branch-ratio' 7559 Switch initialization conversion will refuse to create arrays 7560 that are bigger than `switch-conversion-max-branch-ratio' 7561 times the number of branches in the switch. 7562 7563 `max-partial-antic-length' 7564 Maximum length of the partial antic set computed during the 7565 tree partial redundancy elimination optimization 7566 (`-ftree-pre') when optimizing at `-O3' and above. For some 7567 sorts of source code the enhanced partial redundancy 7568 elimination optimization can run away, consuming all of the 7569 memory available on the host machine. This parameter sets a 7570 limit on the length of the sets that are computed, which 7571 prevents the runaway behavior. Setting a value of 0 for this 7572 parameter will allow an unlimited set length. 7573 7574 `sccvn-max-scc-size' 7575 Maximum size of a strongly connected component (SCC) during 7576 SCCVN processing. If this limit is hit, SCCVN processing for 7577 the whole function will not be done and optimizations 7578 depending on it will be disabled. The default maximum SCC 7579 size is 10000. 7580 7581 `ira-max-loops-num' 7582 IRA uses a regional register allocation by default. If a 7583 function contains loops more than number given by the 7584 parameter, only at most given number of the most frequently 7585 executed loops will form regions for the regional register 7586 allocation. The default value of the parameter is 100. 7587 7588 `ira-max-conflict-table-size' 7589 Although IRA uses a sophisticated algorithm of compression 7590 conflict table, the table can be still big for huge 7591 functions. If the conflict table for a function could be 7592 more than size in MB given by the parameter, the conflict 7593 table is not built and faster, simpler, and lower quality 7594 register allocation algorithm will be used. The algorithm do 7595 not use pseudo-register conflicts. The default value of the 7596 parameter is 2000. 7597 7598 `loop-invariant-max-bbs-in-loop' 7599 Loop invariant motion can be very expensive, both in compile 7600 time and in amount of needed compile time memory, with very 7601 large loops. Loops with more basic blocks than this 7602 parameter won't have loop invariant motion optimization 7603 performed on them. The default value of the parameter is 7604 1000 for -O1 and 10000 for -O2 and above. 7605 7606 `ctrl-regpre' 7607 This is a switch to turn on live range shrinking optimization. 7608 7609 `ctrl-regpre-mode' 7610 This is used as a control knob to enable different 7611 transformations in the live range shrinking phase. Values of 7612 1, 2, and 4 are used to enable upward motion, downward 7613 motion, and tree reshaping transformations respectively. The 7614 values can be bitwise ORed. 7615 7616 `reg-pressure-min-bb-factor' 7617 A performance tuning knob to control register pressure. When 7618 the size (in the number of gimple statements) of a basic 7619 block in a loop is larger than the threshold specified by 7620 this parameter multiplied by the number of available 7621 registers, live range shrinking optimization is enabled. 7622 7623 `reg-pressure-max-region' 7624 A parameter to control the maximal allowed region size for 7625 live range shrinking. 7626 7627 `reg-pressure-min-tree' 7628 The minimal size (number of leaves) of a tree to be reshaped 7629 in the Live Range Shrinking optimization. 7630 7631 `min-mcf-cancel-iters' 7632 The minimum number of iterations of negative cycle 7633 cancellation during MCF profile correction before early 7634 termination. This parameter is only useful when using 7635 `-fprofile-correction'. 7636 7637 `samplefdo-mcf-high-confidence-cost-mult' 7638 Multiply the cost used by MCF during profile correction by 7639 this factor for all input profile data that is determined to 7640 be high confidence. This parameter is only useful when using 7641 `-fsample-profile' and `-fprofile-correction'. 7642 7643 `samplefdo-use-discrim' 7644 When attributing samples to the CFG, use discriminators to 7645 identify which CFG nodes correspond to which samples. This 7646 parameter is only useful when using `-fsample-profile'. 7647 7648 `samplefdo-large-block-thresh' 7649 Consider a basic block large if it has more than this many 7650 gimple statements in it. If a block is large and has no 7651 profile samples attributed to it, it will be assigned a 7652 weight of 0 with high confidence. This parameter is only 7653 useful when using `-fsample-profile'. 7654 7655 `max-lipo-mem' 7656 When importing auxiliary modules during profile-use, check 7657 current memory consumption after parsing each auxiliary 7658 module. If it exceeds this limit (specified in kb), don't 7659 import any more auxiliary modules. Specifying a value of 0 7660 means don't enforce this limit. This parameter is only useful 7661 when using `-fprofile-use' and `-fripa'. 7662 7663 `profile-generate-sampling-rate' 7664 Set the sampling rate with `-fprofile-generate-sampling'. 7665 7666 7667 7668 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC 7669 7670 3.11 Options Controlling the Preprocessor 7671 ========================================= 7672 7673 These options control the C preprocessor, which is run on each C source 7674 file before actual compilation. 7675 7676 If you use the `-E' option, nothing is done except preprocessing. 7677 Some of these options make sense only together with `-E' because they 7678 cause the preprocessor output to be unsuitable for actual compilation. 7679 7680 `-Wp,OPTION' 7681 You can use `-Wp,OPTION' to bypass the compiler driver and pass 7682 OPTION directly through to the preprocessor. If OPTION contains 7683 commas, it is split into multiple options at the commas. However, 7684 many options are modified, translated or interpreted by the 7685 compiler driver before being passed to the preprocessor, and `-Wp' 7686 forcibly bypasses this phase. The preprocessor's direct interface 7687 is undocumented and subject to change, so whenever possible you 7688 should avoid using `-Wp' and let the driver handle the options 7689 instead. 7690 7691 `-Xpreprocessor OPTION' 7692 Pass OPTION as an option to the preprocessor. You can use this to 7693 supply system-specific preprocessor options which GCC does not 7694 know how to recognize. 7695 7696 If you want to pass an option that takes an argument, you must use 7697 `-Xpreprocessor' twice, once for the option and once for the 7698 argument. 7699 7700 `-D NAME' 7701 Predefine NAME as a macro, with definition `1'. 7702 7703 `-D NAME=DEFINITION' 7704 The contents of DEFINITION are tokenized and processed as if they 7705 appeared during translation phase three in a `#define' directive. 7706 In particular, the definition will be truncated by embedded 7707 newline characters. 7708 7709 If you are invoking the preprocessor from a shell or shell-like 7710 program you may need to use the shell's quoting syntax to protect 7711 characters such as spaces that have a meaning in the shell syntax. 7712 7713 If you wish to define a function-like macro on the command line, 7714 write its argument list with surrounding parentheses before the 7715 equals sign (if any). Parentheses are meaningful to most shells, 7716 so you will need to quote the option. With `sh' and `csh', 7717 `-D'NAME(ARGS...)=DEFINITION'' works. 7718 7719 `-D' and `-U' options are processed in the order they are given on 7720 the command line. All `-imacros FILE' and `-include FILE' options 7721 are processed after all `-D' and `-U' options. 7722 7723 `-U NAME' 7724 Cancel any previous definition of NAME, either built in or 7725 provided with a `-D' option. 7726 7727 `-undef' 7728 Do not predefine any system-specific or GCC-specific macros. The 7729 standard predefined macros remain defined. 7730 7731 `-I DIR' 7732 Add the directory DIR to the list of directories to be searched 7733 for header files. Directories named by `-I' are searched before 7734 the standard system include directories. If the directory DIR is 7735 a standard system include directory, the option is ignored to 7736 ensure that the default search order for system directories and 7737 the special treatment of system headers are not defeated . If DIR 7738 begins with `=', then the `=' will be replaced by the sysroot 7739 prefix; see `--sysroot' and `-isysroot'. 7740 7741 `-o FILE' 7742 Write output to FILE. This is the same as specifying FILE as the 7743 second non-option argument to `cpp'. `gcc' has a different 7744 interpretation of a second non-option argument, so you must use 7745 `-o' to specify the output file. 7746 7747 `-Wall' 7748 Turns on all optional warnings which are desirable for normal code. 7749 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a 7750 warning about integer promotion causing a change of sign in `#if' 7751 expressions. Note that many of the preprocessor's warnings are on 7752 by default and have no options to control them. 7753 7754 `-Wcomment' 7755 `-Wcomments' 7756 Warn whenever a comment-start sequence `/*' appears in a `/*' 7757 comment, or whenever a backslash-newline appears in a `//' comment. 7758 (Both forms have the same effect.) 7759 7760 `-Wtrigraphs' 7761 Most trigraphs in comments cannot affect the meaning of the 7762 program. However, a trigraph that would form an escaped newline 7763 (`??/' at the end of a line) can, by changing where the comment 7764 begins or ends. Therefore, only trigraphs that would form escaped 7765 newlines produce warnings inside a comment. 7766 7767 This option is implied by `-Wall'. If `-Wall' is not given, this 7768 option is still enabled unless trigraphs are enabled. To get 7769 trigraph conversion without warnings, but get the other `-Wall' 7770 warnings, use `-trigraphs -Wall -Wno-trigraphs'. 7771 7772 `-Wtraditional' 7773 Warn about certain constructs that behave differently in 7774 traditional and ISO C. Also warn about ISO C constructs that have 7775 no traditional C equivalent, and problematic constructs which 7776 should be avoided. 7777 7778 `-Wundef' 7779 Warn whenever an identifier which is not a macro is encountered in 7780 an `#if' directive, outside of `defined'. Such identifiers are 7781 replaced with zero. 7782 7783 `-Wunused-macros' 7784 Warn about macros defined in the main file that are unused. A 7785 macro is "used" if it is expanded or tested for existence at least 7786 once. The preprocessor will also warn if the macro has not been 7787 used at the time it is redefined or undefined. 7788 7789 Built-in macros, macros defined on the command line, and macros 7790 defined in include files are not warned about. 7791 7792 _Note:_ If a macro is actually used, but only used in skipped 7793 conditional blocks, then CPP will report it as unused. To avoid 7794 the warning in such a case, you might improve the scope of the 7795 macro's definition by, for example, moving it into the first 7796 skipped block. Alternatively, you could provide a dummy use with 7797 something like: 7798 7799 #if defined the_macro_causing_the_warning 7800 #endif 7801 7802 `-Wendif-labels' 7803 Warn whenever an `#else' or an `#endif' are followed by text. 7804 This usually happens in code of the form 7805 7806 #if FOO 7807 ... 7808 #else FOO 7809 ... 7810 #endif FOO 7811 7812 The second and third `FOO' should be in comments, but often are not 7813 in older programs. This warning is on by default. 7814 7815 `-Werror' 7816 Make all warnings into hard errors. Source code which triggers 7817 warnings will be rejected. 7818 7819 `-Wsystem-headers' 7820 Issue warnings for code in system headers. These are normally 7821 unhelpful in finding bugs in your own code, therefore suppressed. 7822 If you are responsible for the system library, you may want to see 7823 them. 7824 7825 `-w' 7826 Suppress all warnings, including those which GNU CPP issues by 7827 default. 7828 7829 `-pedantic' 7830 Issue all the mandatory diagnostics listed in the C standard. 7831 Some of them are left out by default, since they trigger 7832 frequently on harmless code. 7833 7834 `-pedantic-errors' 7835 Issue all the mandatory diagnostics, and make all mandatory 7836 diagnostics into errors. This includes mandatory diagnostics that 7837 GCC issues without `-pedantic' but treats as warnings. 7838 7839 `-M' 7840 Instead of outputting the result of preprocessing, output a rule 7841 suitable for `make' describing the dependencies of the main source 7842 file. The preprocessor outputs one `make' rule containing the 7843 object file name for that source file, a colon, and the names of 7844 all the included files, including those coming from `-include' or 7845 `-imacros' command line options. 7846 7847 Unless specified explicitly (with `-MT' or `-MQ'), the object file 7848 name consists of the name of the source file with any suffix 7849 replaced with object file suffix and with any leading directory 7850 parts removed. If there are many included files then the rule is 7851 split into several lines using `\'-newline. The rule has no 7852 commands. 7853 7854 This option does not suppress the preprocessor's debug output, 7855 such as `-dM'. To avoid mixing such debug output with the 7856 dependency rules you should explicitly specify the dependency 7857 output file with `-MF', or use an environment variable like 7858 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug 7859 output will still be sent to the regular output stream as normal. 7860 7861 Passing `-M' to the driver implies `-E', and suppresses warnings 7862 with an implicit `-w'. 7863 7864 `-MM' 7865 Like `-M' but do not mention header files that are found in system 7866 header directories, nor header files that are included, directly 7867 or indirectly, from such a header. 7868 7869 This implies that the choice of angle brackets or double quotes in 7870 an `#include' directive does not in itself determine whether that 7871 header will appear in `-MM' dependency output. This is a slight 7872 change in semantics from GCC versions 3.0 and earlier. 7873 7874 `-MF FILE' 7875 When used with `-M' or `-MM', specifies a file to write the 7876 dependencies to. If no `-MF' switch is given the preprocessor 7877 sends the rules to the same place it would have sent preprocessed 7878 output. 7879 7880 When used with the driver options `-MD' or `-MMD', `-MF' overrides 7881 the default dependency output file. 7882 7883 `-MG' 7884 In conjunction with an option such as `-M' requesting dependency 7885 generation, `-MG' assumes missing header files are generated files 7886 and adds them to the dependency list without raising an error. 7887 The dependency filename is taken directly from the `#include' 7888 directive without prepending any path. `-MG' also suppresses 7889 preprocessed output, as a missing header file renders this useless. 7890 7891 This feature is used in automatic updating of makefiles. 7892 7893 `-MP' 7894 This option instructs CPP to add a phony target for each dependency 7895 other than the main file, causing each to depend on nothing. These 7896 dummy rules work around errors `make' gives if you remove header 7897 files without updating the `Makefile' to match. 7898 7899 This is typical output: 7900 7901 test.o: test.c test.h 7902 7903 test.h: 7904 7905 `-MT TARGET' 7906 Change the target of the rule emitted by dependency generation. By 7907 default CPP takes the name of the main input file, deletes any 7908 directory components and any file suffix such as `.c', and appends 7909 the platform's usual object suffix. The result is the target. 7910 7911 An `-MT' option will set the target to be exactly the string you 7912 specify. If you want multiple targets, you can specify them as a 7913 single argument to `-MT', or use multiple `-MT' options. 7914 7915 For example, `-MT '$(objpfx)foo.o'' might give 7916 7917 $(objpfx)foo.o: foo.c 7918 7919 `-MQ TARGET' 7920 Same as `-MT', but it quotes any characters which are special to 7921 Make. `-MQ '$(objpfx)foo.o'' gives 7922 7923 $$(objpfx)foo.o: foo.c 7924 7925 The default target is automatically quoted, as if it were given 7926 with `-MQ'. 7927 7928 `-MD' 7929 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not 7930 implied. The driver determines FILE based on whether an `-o' 7931 option is given. If it is, the driver uses its argument but with 7932 a suffix of `.d', otherwise it takes the name of the input file, 7933 removes any directory components and suffix, and applies a `.d' 7934 suffix. 7935 7936 If `-MD' is used in conjunction with `-E', any `-o' switch is 7937 understood to specify the dependency output file (*note -MF: 7938 dashMF.), but if used without `-E', each `-o' is understood to 7939 specify a target object file. 7940 7941 Since `-E' is not implied, `-MD' can be used to generate a 7942 dependency output file as a side-effect of the compilation process. 7943 7944 `-MMD' 7945 Like `-MD' except mention only user header files, not system 7946 header files. 7947 7948 `-fpch-deps' 7949 When using precompiled headers (*note Precompiled Headers::), this 7950 flag will cause the dependency-output flags to also list the files 7951 from the precompiled header's dependencies. If not specified only 7952 the precompiled header would be listed and not the files that were 7953 used to create it because those files are not consulted when a 7954 precompiled header is used. 7955 7956 `-fpch-preprocess' 7957 This option allows use of a precompiled header (*note Precompiled 7958 Headers::) together with `-E'. It inserts a special `#pragma', 7959 `#pragma GCC pch_preprocess "<filename>"' in the output to mark 7960 the place where the precompiled header was found, and its 7961 filename. When `-fpreprocessed' is in use, GCC recognizes this 7962 `#pragma' and loads the PCH. 7963 7964 This option is off by default, because the resulting preprocessed 7965 output is only really suitable as input to GCC. It is switched on 7966 by `-save-temps'. 7967 7968 You should not write this `#pragma' in your own code, but it is 7969 safe to edit the filename if the PCH file is available in a 7970 different location. The filename may be absolute or it may be 7971 relative to GCC's current directory. 7972 7973 `-x c' 7974 `-x c++' 7975 `-x objective-c' 7976 `-x assembler-with-cpp' 7977 Specify the source language: C, C++, Objective-C, or assembly. 7978 This has nothing to do with standards conformance or extensions; 7979 it merely selects which base syntax to expect. If you give none 7980 of these options, cpp will deduce the language from the extension 7981 of the source file: `.c', `.cc', `.m', or `.S'. Some other common 7982 extensions for C++ and assembly are also recognized. If cpp does 7983 not recognize the extension, it will treat the file as C; this is 7984 the most generic mode. 7985 7986 _Note:_ Previous versions of cpp accepted a `-lang' option which 7987 selected both the language and the standards conformance level. 7988 This option has been removed, because it conflicts with the `-l' 7989 option. 7990 7991 `-std=STANDARD' 7992 `-ansi' 7993 Specify the standard to which the code should conform. Currently 7994 CPP knows about C and C++ standards; others may be added in the 7995 future. 7996 7997 STANDARD may be one of: 7998 `iso9899:1990' 7999 `c89' 8000 The ISO C standard from 1990. `c89' is the customary 8001 shorthand for this version of the standard. 8002 8003 The `-ansi' option is equivalent to `-std=c89'. 8004 8005 `iso9899:199409' 8006 The 1990 C standard, as amended in 1994. 8007 8008 `iso9899:1999' 8009 `c99' 8010 `iso9899:199x' 8011 `c9x' 8012 The revised ISO C standard, published in December 1999. 8013 Before publication, this was known as C9X. 8014 8015 `gnu89' 8016 The 1990 C standard plus GNU extensions. This is the default. 8017 8018 `gnu99' 8019 `gnu9x' 8020 The 1999 C standard plus GNU extensions. 8021 8022 `c++98' 8023 The 1998 ISO C++ standard plus amendments. 8024 8025 `gnu++98' 8026 The same as `-std=c++98' plus GNU extensions. This is the 8027 default for C++ code. 8028 8029 `-I-' 8030 Split the include path. Any directories specified with `-I' 8031 options before `-I-' are searched only for headers requested with 8032 `#include "FILE"'; they are not searched for `#include <FILE>'. 8033 If additional directories are specified with `-I' options after 8034 the `-I-', those directories are searched for all `#include' 8035 directives. 8036 8037 In addition, `-I-' inhibits the use of the directory of the current 8038 file directory as the first search directory for `#include "FILE"'. 8039 This option has been deprecated. 8040 8041 `-nostdinc' 8042 Do not search the standard system directories for header files. 8043 Only the directories you have specified with `-I' options (and the 8044 directory of the current file, if appropriate) are searched. 8045 8046 `-nostdinc++' 8047 Do not search for header files in the C++-specific standard 8048 directories, but do still search the other standard directories. 8049 (This option is used when building the C++ library.) 8050 8051 `-include FILE' 8052 Process FILE as if `#include "file"' appeared as the first line of 8053 the primary source file. However, the first directory searched 8054 for FILE is the preprocessor's working directory _instead of_ the 8055 directory containing the main source file. If not found there, it 8056 is searched for in the remainder of the `#include "..."' search 8057 chain as normal. 8058 8059 If multiple `-include' options are given, the files are included 8060 in the order they appear on the command line. 8061 8062 `-imacros FILE' 8063 Exactly like `-include', except that any output produced by 8064 scanning FILE is thrown away. Macros it defines remain defined. 8065 This allows you to acquire all the macros from a header without 8066 also processing its declarations. 8067 8068 All files specified by `-imacros' are processed before all files 8069 specified by `-include'. 8070 8071 `-idirafter DIR' 8072 Search DIR for header files, but do it _after_ all directories 8073 specified with `-I' and the standard system directories have been 8074 exhausted. DIR is treated as a system include directory. If DIR 8075 begins with `=', then the `=' will be replaced by the sysroot 8076 prefix; see `--sysroot' and `-isysroot'. 8077 8078 `-iprefix PREFIX' 8079 Specify PREFIX as the prefix for subsequent `-iwithprefix' 8080 options. If the prefix represents a directory, you should include 8081 the final `/'. 8082 8083 `-iwithprefix DIR' 8084 `-iwithprefixbefore DIR' 8085 Append DIR to the prefix specified previously with `-iprefix', and 8086 add the resulting directory to the include search path. 8087 `-iwithprefixbefore' puts it in the same place `-I' would; 8088 `-iwithprefix' puts it where `-idirafter' would. 8089 8090 `-isysroot DIR' 8091 This option is like the `--sysroot' option, but applies only to 8092 header files. See the `--sysroot' option for more information. 8093 8094 `-imultilib DIR' 8095 Use DIR as a subdirectory of the directory containing 8096 target-specific C++ headers. 8097 8098 `-isystem DIR' 8099 Search DIR for header files, after all directories specified by 8100 `-I' but before the standard system directories. Mark it as a 8101 system directory, so that it gets the same special treatment as is 8102 applied to the standard system directories. If DIR begins with 8103 `=', then the `=' will be replaced by the sysroot prefix; see 8104 `--sysroot' and `-isysroot'. 8105 8106 `-iquote DIR' 8107 Search DIR only for header files requested with `#include "FILE"'; 8108 they are not searched for `#include <FILE>', before all 8109 directories specified by `-I' and before the standard system 8110 directories. If DIR begins with `=', then the `=' will be replaced 8111 by the sysroot prefix; see `--sysroot' and `-isysroot'. 8112 8113 `-fdirectives-only' 8114 When preprocessing, handle directives, but do not expand macros. 8115 8116 The option's behavior depends on the `-E' and `-fpreprocessed' 8117 options. 8118 8119 With `-E', preprocessing is limited to the handling of directives 8120 such as `#define', `#ifdef', and `#error'. Other preprocessor 8121 operations, such as macro expansion and trigraph conversion are 8122 not performed. In addition, the `-dD' option is implicitly 8123 enabled. 8124 8125 With `-fpreprocessed', predefinition of command line and most 8126 builtin macros is disabled. Macros such as `__LINE__', which are 8127 contextually dependent, are handled normally. This enables 8128 compilation of files previously preprocessed with `-E 8129 -fdirectives-only'. 8130 8131 With both `-E' and `-fpreprocessed', the rules for 8132 `-fpreprocessed' take precedence. This enables full preprocessing 8133 of files previously preprocessed with `-E -fdirectives-only'. 8134 8135 `-fdollars-in-identifiers' 8136 Accept `$' in identifiers. 8137 8138 `-fextended-identifiers' 8139 Accept universal character names in identifiers. This option is 8140 experimental; in a future version of GCC, it will be enabled by 8141 default for C99 and C++. 8142 8143 `-fpreprocessed' 8144 Indicate to the preprocessor that the input file has already been 8145 preprocessed. This suppresses things like macro expansion, 8146 trigraph conversion, escaped newline splicing, and processing of 8147 most directives. The preprocessor still recognizes and removes 8148 comments, so that you can pass a file preprocessed with `-C' to 8149 the compiler without problems. In this mode the integrated 8150 preprocessor is little more than a tokenizer for the front ends. 8151 8152 `-fpreprocessed' is implicit if the input file has one of the 8153 extensions `.i', `.ii' or `.mi'. These are the extensions that 8154 GCC uses for preprocessed files created by `-save-temps'. 8155 8156 `-ftabstop=WIDTH' 8157 Set the distance between tab stops. This helps the preprocessor 8158 report correct column numbers in warnings or errors, even if tabs 8159 appear on the line. If the value is less than 1 or greater than 8160 100, the option is ignored. The default is 8. 8161 8162 `-fexec-charset=CHARSET' 8163 Set the execution character set, used for string and character 8164 constants. The default is UTF-8. CHARSET can be any encoding 8165 supported by the system's `iconv' library routine. 8166 8167 `-fwide-exec-charset=CHARSET' 8168 Set the wide execution character set, used for wide string and 8169 character constants. The default is UTF-32 or UTF-16, whichever 8170 corresponds to the width of `wchar_t'. As with `-fexec-charset', 8171 CHARSET can be any encoding supported by the system's `iconv' 8172 library routine; however, you will have problems with encodings 8173 that do not fit exactly in `wchar_t'. 8174 8175 `-finput-charset=CHARSET' 8176 Set the input character set, used for translation from the 8177 character set of the input file to the source character set used 8178 by GCC. If the locale does not specify, or GCC cannot get this 8179 information from the locale, the default is UTF-8. This can be 8180 overridden by either the locale or this command line option. 8181 Currently the command line option takes precedence if there's a 8182 conflict. CHARSET can be any encoding supported by the system's 8183 `iconv' library routine. 8184 8185 `-fworking-directory' 8186 Enable generation of linemarkers in the preprocessor output that 8187 will let the compiler know the current working directory at the 8188 time of preprocessing. When this option is enabled, the 8189 preprocessor will emit, after the initial linemarker, a second 8190 linemarker with the current working directory followed by two 8191 slashes. GCC will use this directory, when it's present in the 8192 preprocessed input, as the directory emitted as the current 8193 working directory in some debugging information formats. This 8194 option is implicitly enabled if debugging information is enabled, 8195 but this can be inhibited with the negated form 8196 `-fno-working-directory'. If the `-P' flag is present in the 8197 command line, this option has no effect, since no `#line' 8198 directives are emitted whatsoever. 8199 8200 `-fno-show-column' 8201 Do not print column numbers in diagnostics. This may be necessary 8202 if diagnostics are being scanned by a program that does not 8203 understand the column numbers, such as `dejagnu'. 8204 8205 `-A PREDICATE=ANSWER' 8206 Make an assertion with the predicate PREDICATE and answer ANSWER. 8207 This form is preferred to the older form `-A PREDICATE(ANSWER)', 8208 which is still supported, because it does not use shell special 8209 characters. 8210 8211 `-A -PREDICATE=ANSWER' 8212 Cancel an assertion with the predicate PREDICATE and answer ANSWER. 8213 8214 `-dCHARS' 8215 CHARS is a sequence of one or more of the following characters, 8216 and must not be preceded by a space. Other characters are 8217 interpreted by the compiler proper, or reserved for future 8218 versions of GCC, and so are silently ignored. If you specify 8219 characters whose behavior conflicts, the result is undefined. 8220 8221 `M' 8222 Instead of the normal output, generate a list of `#define' 8223 directives for all the macros defined during the execution of 8224 the preprocessor, including predefined macros. This gives 8225 you a way of finding out what is predefined in your version 8226 of the preprocessor. Assuming you have no file `foo.h', the 8227 command 8228 8229 touch foo.h; cpp -dM foo.h 8230 8231 will show all the predefined macros. 8232 8233 If you use `-dM' without the `-E' option, `-dM' is 8234 interpreted as a synonym for `-fdump-rtl-mach'. *Note 8235 Debugging Options: (gcc)Debugging Options. 8236 8237 `D' 8238 Like `M' except in two respects: it does _not_ include the 8239 predefined macros, and it outputs _both_ the `#define' 8240 directives and the result of preprocessing. Both kinds of 8241 output go to the standard output file. 8242 8243 `N' 8244 Like `D', but emit only the macro names, not their expansions. 8245 8246 `I' 8247 Output `#include' directives in addition to the result of 8248 preprocessing. 8249 8250 `U' 8251 Like `D' except that only macros that are expanded, or whose 8252 definedness is tested in preprocessor directives, are output; 8253 the output is delayed until the use or test of the macro; and 8254 `#undef' directives are also output for macros tested but 8255 undefined at the time. 8256 8257 `-P' 8258 Inhibit generation of linemarkers in the output from the 8259 preprocessor. This might be useful when running the preprocessor 8260 on something that is not C code, and will be sent to a program 8261 which might be confused by the linemarkers. 8262 8263 `-C' 8264 Do not discard comments. All comments are passed through to the 8265 output file, except for comments in processed directives, which 8266 are deleted along with the directive. 8267 8268 You should be prepared for side effects when using `-C'; it causes 8269 the preprocessor to treat comments as tokens in their own right. 8270 For example, comments appearing at the start of what would be a 8271 directive line have the effect of turning that line into an 8272 ordinary source line, since the first token on the line is no 8273 longer a `#'. 8274 8275 `-CC' 8276 Do not discard comments, including during macro expansion. This is 8277 like `-C', except that comments contained within macros are also 8278 passed through to the output file where the macro is expanded. 8279 8280 In addition to the side-effects of the `-C' option, the `-CC' 8281 option causes all C++-style comments inside a macro to be 8282 converted to C-style comments. This is to prevent later use of 8283 that macro from inadvertently commenting out the remainder of the 8284 source line. 8285 8286 The `-CC' option is generally used to support lint comments. 8287 8288 `-traditional-cpp' 8289 Try to imitate the behavior of old-fashioned C preprocessors, as 8290 opposed to ISO C preprocessors. 8291 8292 `-trigraphs' 8293 Process trigraph sequences. These are three-character sequences, 8294 all starting with `??', that are defined by ISO C to stand for 8295 single characters. For example, `??/' stands for `\', so `'??/n'' 8296 is a character constant for a newline. By default, GCC ignores 8297 trigraphs, but in standard-conforming modes it converts them. See 8298 the `-std' and `-ansi' options. 8299 8300 The nine trigraphs and their replacements are 8301 8302 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 8303 Replacement: [ ] { } # \ ^ | ~ 8304 8305 `-remap' 8306 Enable special code to work around file systems which only permit 8307 very short file names, such as MS-DOS. 8308 8309 `--help' 8310 `--target-help' 8311 Print text describing all the command line options instead of 8312 preprocessing anything. 8313 8314 `-v' 8315 Verbose mode. Print out GNU CPP's version number at the beginning 8316 of execution, and report the final form of the include path. 8317 8318 `-H' 8319 Print the name of each header file used, in addition to other 8320 normal activities. Each name is indented to show how deep in the 8321 `#include' stack it is. Precompiled header files are also 8322 printed, even if they are found to be invalid; an invalid 8323 precompiled header file is printed with `...x' and a valid one 8324 with `...!' . 8325 8326 `-version' 8327 `--version' 8328 Print out GNU CPP's version number. With one dash, proceed to 8329 preprocess as normal. With two dashes, exit immediately. 8330 8331 8332 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC 8333 8334 3.12 Passing Options to the Assembler 8335 ===================================== 8336 8337 You can pass options to the assembler. 8338 8339 `-Wa,OPTION' 8340 Pass OPTION as an option to the assembler. If OPTION contains 8341 commas, it is split into multiple options at the commas. 8342 8343 `-Xassembler OPTION' 8344 Pass OPTION as an option to the assembler. You can use this to 8345 supply system-specific assembler options which GCC does not know 8346 how to recognize. 8347 8348 If you want to pass an option that takes an argument, you must use 8349 `-Xassembler' twice, once for the option and once for the argument. 8350 8351 8352 8353 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC 8354 8355 3.13 Options for Linking 8356 ======================== 8357 8358 These options come into play when the compiler links object files into 8359 an executable output file. They are meaningless if the compiler is not 8360 doing a link step. 8361 8362 `OBJECT-FILE-NAME' 8363 A file name that does not end in a special recognized suffix is 8364 considered to name an object file or library. (Object files are 8365 distinguished from libraries by the linker according to the file 8366 contents.) If linking is done, these object files are used as 8367 input to the linker. 8368 8369 `-c' 8370 `-S' 8371 `-E' 8372 If any of these options is used, then the linker is not run, and 8373 object file names should not be used as arguments. *Note Overall 8374 Options::. 8375 8376 `-lLIBRARY' 8377 `-l LIBRARY' 8378 Search the library named LIBRARY when linking. (The second 8379 alternative with the library as a separate argument is only for 8380 POSIX compliance and is not recommended.) 8381 8382 It makes a difference where in the command you write this option; 8383 the linker searches and processes libraries and object files in 8384 the order they are specified. Thus, `foo.o -lz bar.o' searches 8385 library `z' after file `foo.o' but before `bar.o'. If `bar.o' 8386 refers to functions in `z', those functions may not be loaded. 8387 8388 The linker searches a standard list of directories for the library, 8389 which is actually a file named `libLIBRARY.a'. The linker then 8390 uses this file as if it had been specified precisely by name. 8391 8392 The directories searched include several standard system 8393 directories plus any that you specify with `-L'. 8394 8395 Normally the files found this way are library files--archive files 8396 whose members are object files. The linker handles an archive 8397 file by scanning through it for members which define symbols that 8398 have so far been referenced but not defined. But if the file that 8399 is found is an ordinary object file, it is linked in the usual 8400 fashion. The only difference between using an `-l' option and 8401 specifying a file name is that `-l' surrounds LIBRARY with `lib' 8402 and `.a' and searches several directories. 8403 8404 `-lobjc' 8405 You need this special case of the `-l' option in order to link an 8406 Objective-C or Objective-C++ program. 8407 8408 `-nostartfiles' 8409 Do not use the standard system startup files when linking. The 8410 standard system libraries are used normally, unless `-nostdlib' or 8411 `-nodefaultlibs' is used. 8412 8413 `-nodefaultlibs' 8414 Do not use the standard system libraries when linking. Only the 8415 libraries you specify will be passed to the linker. The standard 8416 startup files are used normally, unless `-nostartfiles' is used. 8417 The compiler may generate calls to `memcmp', `memset', `memcpy' 8418 and `memmove'. These entries are usually resolved by entries in 8419 libc. These entry points should be supplied through some other 8420 mechanism when this option is specified. 8421 8422 `-nostdlib' 8423 Do not use the standard system startup files or libraries when 8424 linking. No startup files and only the libraries you specify will 8425 be passed to the linker. The compiler may generate calls to 8426 `memcmp', `memset', `memcpy' and `memmove'. These entries are 8427 usually resolved by entries in libc. These entry points should be 8428 supplied through some other mechanism when this option is 8429 specified. 8430 8431 One of the standard libraries bypassed by `-nostdlib' and 8432 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines 8433 that GCC uses to overcome shortcomings of particular machines, or 8434 special needs for some languages. (*Note Interfacing to GCC 8435 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In 8436 most cases, you need `libgcc.a' even when you want to avoid other 8437 standard libraries. In other words, when you specify `-nostdlib' 8438 or `-nodefaultlibs' you should usually specify `-lgcc' as well. 8439 This ensures that you have no unresolved references to internal GCC 8440 library subroutines. (For example, `__main', used to ensure C++ 8441 constructors will be called; *note `collect2': (gccint)Collect2.) 8442 8443 `-pie' 8444 Produce a position independent executable on targets which support 8445 it. For predictable results, you must also specify the same set 8446 of options that were used to generate code (`-fpie', `-fPIE', or 8447 model suboptions) when you specify this option. 8448 8449 NOTE: When -enable-esp this option is enabled by default for C, 8450 C++, ObjC, ObjC++, if neither `-fno-pie' or `-fno-PIE' or 8451 `-fno-pic' or `-fno-PIC' or `-nostdlib' or `-nostartfiles' or 8452 `-shared' or `-pg' or `-p' are found. 8453 8454 `-rdynamic' 8455 Pass the flag `-export-dynamic' to the ELF linker, on targets that 8456 support it. This instructs the linker to add all symbols, not only 8457 used ones, to the dynamic symbol table. This option is needed for 8458 some uses of `dlopen' or to allow obtaining backtraces from within 8459 a program. 8460 8461 `-s' 8462 Remove all symbol table and relocation information from the 8463 executable. 8464 8465 `-static' 8466 On systems that support dynamic linking, this prevents linking 8467 with the shared libraries. On other systems, this option has no 8468 effect. 8469 8470 `-shared' 8471 Produce a shared object which can then be linked with other 8472 objects to form an executable. Not all systems support this 8473 option. For predictable results, you must also specify the same 8474 set of options that were used to generate code (`-fpic', `-fPIC', 8475 or model suboptions) when you specify this option.(1) 8476 8477 `-shared-libgcc' 8478 `-static-libgcc' 8479 On systems that provide `libgcc' as a shared library, these options 8480 force the use of either the shared or static version respectively. 8481 If no shared version of `libgcc' was built when the compiler was 8482 configured, these options have no effect. 8483 8484 There are several situations in which an application should use the 8485 shared `libgcc' instead of the static version. The most common of 8486 these is when the application wishes to throw and catch exceptions 8487 across different shared libraries. In that case, each of the 8488 libraries as well as the application itself should use the shared 8489 `libgcc'. 8490 8491 Therefore, the G++ and GCJ drivers automatically add 8492 `-shared-libgcc' whenever you build a shared library or a main 8493 executable, because C++ and Java programs typically use 8494 exceptions, so this is the right thing to do. 8495 8496 If, instead, you use the GCC driver to create shared libraries, 8497 you may find that they will not always be linked with the shared 8498 `libgcc'. If GCC finds, at its configuration time, that you have 8499 a non-GNU linker or a GNU linker that does not support option 8500 `--eh-frame-hdr', it will link the shared version of `libgcc' into 8501 shared libraries by default. Otherwise, it will take advantage of 8502 the linker and optimize away the linking with the shared version 8503 of `libgcc', linking with the static version of libgcc by default. 8504 This allows exceptions to propagate through such shared 8505 libraries, without incurring relocation costs at library load time. 8506 8507 However, if a library or main executable is supposed to throw or 8508 catch exceptions, you must link it using the G++ or GCJ driver, as 8509 appropriate for the languages used in the program, or using the 8510 option `-shared-libgcc', such that it is linked with the shared 8511 `libgcc'. 8512 8513 `-symbolic' 8514 Bind references to global symbols when building a shared object. 8515 Warn about any unresolved references (unless overridden by the 8516 link editor option `-Xlinker -z -Xlinker defs'). Only a few 8517 systems support this option. 8518 8519 `-T SCRIPT' 8520 Use SCRIPT as the linker script. This option is supported by most 8521 systems using the GNU linker. On some targets, such as bare-board 8522 targets without an operating system, the `-T' option may be 8523 required when linking to avoid references to undefined symbols. 8524 8525 `-Xlinker OPTION' 8526 Pass OPTION as an option to the linker. You can use this to 8527 supply system-specific linker options which GCC does not know how 8528 to recognize. 8529 8530 If you want to pass an option that takes a separate argument, you 8531 must use `-Xlinker' twice, once for the option and once for the 8532 argument. For example, to pass `-assert definitions', you must 8533 write `-Xlinker -assert -Xlinker definitions'. It does not work 8534 to write `-Xlinker "-assert definitions"', because this passes the 8535 entire string as a single argument, which is not what the linker 8536 expects. 8537 8538 When using the GNU linker, it is usually more convenient to pass 8539 arguments to linker options using the `OPTION=VALUE' syntax than 8540 as separate arguments. For example, you can specify `-Xlinker 8541 -Map=output.map' rather than `-Xlinker -Map -Xlinker output.map'. 8542 Other linkers may not support this syntax for command-line options. 8543 8544 `-Wl,OPTION' 8545 Pass OPTION as an option to the linker. If OPTION contains 8546 commas, it is split into multiple options at the commas. You can 8547 use this syntax to pass an argument to the option. For example, 8548 `-Wl,-Map,output.map' passes `-Map output.map' to the linker. 8549 When using the GNU linker, you can also get the same effect with 8550 `-Wl,-Map=output.map'. 8551 8552 `-u SYMBOL' 8553 Pretend the symbol SYMBOL is undefined, to force linking of 8554 library modules to define it. You can use `-u' multiple times with 8555 different symbols to force loading of additional library modules. 8556 8557 ---------- Footnotes ---------- 8558 8559 (1) On some systems, `gcc -shared' needs to build supplementary stub 8560 code for constructors to work. On multi-libbed systems, `gcc -shared' 8561 must select the correct support libraries to link against. Failing to 8562 supply the correct flags may lead to subtle defects. Supplying them in 8563 cases where they are not necessary is innocuous. 8564 8565 8566 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC 8567 8568 3.14 Options for Directory Search 8569 ================================= 8570 8571 These options specify directories to search for header files, for 8572 libraries and for parts of the compiler: 8573 8574 `-IDIR' 8575 Add the directory DIR to the head of the list of directories to be 8576 searched for header files. This can be used to override a system 8577 header file, substituting your own version, since these 8578 directories are searched before the system header file 8579 directories. However, you should not use this option to add 8580 directories that contain vendor-supplied system header files (use 8581 `-isystem' for that). If you use more than one `-I' option, the 8582 directories are scanned in left-to-right order; the standard 8583 system directories come after. 8584 8585 If a standard system include directory, or a directory specified 8586 with `-isystem', is also specified with `-I', the `-I' option will 8587 be ignored. The directory will still be searched but as a system 8588 directory at its normal position in the system include chain. 8589 This is to ensure that GCC's procedure to fix buggy system headers 8590 and the ordering for the include_next directive are not 8591 inadvertently changed. If you really need to change the search 8592 order for system directories, use the `-nostdinc' and/or 8593 `-isystem' options. 8594 8595 `-iquoteDIR' 8596 Add the directory DIR to the head of the list of directories to be 8597 searched for header files only for the case of `#include "FILE"'; 8598 they are not searched for `#include <FILE>', otherwise just like 8599 `-I'. 8600 8601 `-LDIR' 8602 Add directory DIR to the list of directories to be searched for 8603 `-l'. 8604 8605 `-BPREFIX' 8606 This option specifies where to find the executables, libraries, 8607 include files, and data files of the compiler itself. 8608 8609 The compiler driver program runs one or more of the subprograms 8610 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each 8611 program it tries to run, both with and without `MACHINE/VERSION/' 8612 (*note Target Options::). 8613 8614 For each subprogram to be run, the compiler driver first tries the 8615 `-B' prefix, if any. If that name is not found, or if `-B' was 8616 not specified, the driver tries two standard prefixes, which are 8617 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those 8618 results in a file name that is found, the unmodified program name 8619 is searched for using the directories specified in your `PATH' 8620 environment variable. 8621 8622 The compiler will check to see if the path provided by the `-B' 8623 refers to a directory, and if necessary it will add a directory 8624 separator character at the end of the path. 8625 8626 `-B' prefixes that effectively specify directory names also apply 8627 to libraries in the linker, because the compiler translates these 8628 options into `-L' options for the linker. They also apply to 8629 includes files in the preprocessor, because the compiler 8630 translates these options into `-isystem' options for the 8631 preprocessor. In this case, the compiler appends `include' to the 8632 prefix. 8633 8634 The run-time support file `libgcc.a' can also be searched for using 8635 the `-B' prefix, if needed. If it is not found there, the two 8636 standard prefixes above are tried, and that is all. The file is 8637 left out of the link if it is not found by those means. 8638 8639 Another way to specify a prefix much like the `-B' prefix is to use 8640 the environment variable `GCC_EXEC_PREFIX'. *Note Environment 8641 Variables::. 8642 8643 As a special kludge, if the path provided by `-B' is 8644 `[dir/]stageN/', where N is a number in the range 0 to 9, then it 8645 will be replaced by `[dir/]include'. This is to help with 8646 boot-strapping the compiler. 8647 8648 `-specs=FILE' 8649 Process FILE after the compiler reads in the standard `specs' 8650 file, in order to override the defaults that the `gcc' driver 8651 program uses when determining what switches to pass to `cc1', 8652 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be 8653 specified on the command line, and they are processed in order, 8654 from left to right. 8655 8656 `--sysroot=DIR' 8657 Use DIR as the logical root directory for headers and libraries. 8658 For example, if the compiler would normally search for headers in 8659 `/usr/include' and libraries in `/usr/lib', it will instead search 8660 `DIR/usr/include' and `DIR/usr/lib'. 8661 8662 If you use both this option and the `-isysroot' option, then the 8663 `--sysroot' option will apply to libraries, but the `-isysroot' 8664 option will apply to header files. 8665 8666 The GNU linker (beginning with version 2.16) has the necessary 8667 support for this option. If your linker does not support this 8668 option, the header file aspect of `--sysroot' will still work, but 8669 the library aspect will not. 8670 8671 `-I-' 8672 This option has been deprecated. Please use `-iquote' instead for 8673 `-I' directories before the `-I-' and remove the `-I-'. Any 8674 directories you specify with `-I' options before the `-I-' option 8675 are searched only for the case of `#include "FILE"'; they are not 8676 searched for `#include <FILE>'. 8677 8678 If additional directories are specified with `-I' options after 8679 the `-I-', these directories are searched for all `#include' 8680 directives. (Ordinarily _all_ `-I' directories are used this way.) 8681 8682 In addition, the `-I-' option inhibits the use of the current 8683 directory (where the current input file came from) as the first 8684 search directory for `#include "FILE"'. There is no way to 8685 override this effect of `-I-'. With `-I.' you can specify 8686 searching the directory which was current when the compiler was 8687 invoked. That is not exactly the same as what the preprocessor 8688 does by default, but it is often satisfactory. 8689 8690 `-I-' does not inhibit the use of the standard system directories 8691 for header files. Thus, `-I-' and `-nostdinc' are independent. 8692 8693 8694 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC 8695 8696 3.15 Specifying subprocesses and the switches to pass to them 8697 ============================================================= 8698 8699 `gcc' is a driver program. It performs its job by invoking a sequence 8700 of other programs to do the work of compiling, assembling and linking. 8701 GCC interprets its command-line parameters and uses these to deduce 8702 which programs it should invoke, and which command-line options it 8703 ought to place on their command lines. This behavior is controlled by 8704 "spec strings". In most cases there is one spec string for each 8705 program that GCC can invoke, but a few programs have multiple spec 8706 strings to control their behavior. The spec strings built into GCC can 8707 be overridden by using the `-specs=' command-line switch to specify a 8708 spec file. 8709 8710 "Spec files" are plaintext files that are used to construct spec 8711 strings. They consist of a sequence of directives separated by blank 8712 lines. The type of directive is determined by the first non-whitespace 8713 character on the line and it can be one of the following: 8714 8715 `%COMMAND' 8716 Issues a COMMAND to the spec file processor. The commands that can 8717 appear here are: 8718 8719 `%include <FILE>' 8720 Search for FILE and insert its text at the current point in 8721 the specs file. 8722 8723 `%include_noerr <FILE>' 8724 Just like `%include', but do not generate an error message if 8725 the include file cannot be found. 8726 8727 `%rename OLD_NAME NEW_NAME' 8728 Rename the spec string OLD_NAME to NEW_NAME. 8729 8730 8731 `*[SPEC_NAME]:' 8732 This tells the compiler to create, override or delete the named 8733 spec string. All lines after this directive up to the next 8734 directive or blank line are considered to be the text for the spec 8735 string. If this results in an empty string then the spec will be 8736 deleted. (Or, if the spec did not exist, then nothing will 8737 happened.) Otherwise, if the spec does not currently exist a new 8738 spec will be created. If the spec does exist then its contents 8739 will be overridden by the text of this directive, unless the first 8740 character of that text is the `+' character, in which case the 8741 text will be appended to the spec. 8742 8743 `[SUFFIX]:' 8744 Creates a new `[SUFFIX] spec' pair. All lines after this directive 8745 and up to the next directive or blank line are considered to make 8746 up the spec string for the indicated suffix. When the compiler 8747 encounters an input file with the named suffix, it will processes 8748 the spec string in order to work out how to compile that file. 8749 For example: 8750 8751 .ZZ: 8752 z-compile -input %i 8753 8754 This says that any input file whose name ends in `.ZZ' should be 8755 passed to the program `z-compile', which should be invoked with the 8756 command-line switch `-input' and with the result of performing the 8757 `%i' substitution. (See below.) 8758 8759 As an alternative to providing a spec string, the text that 8760 follows a suffix directive can be one of the following: 8761 8762 `@LANGUAGE' 8763 This says that the suffix is an alias for a known LANGUAGE. 8764 This is similar to using the `-x' command-line switch to GCC 8765 to specify a language explicitly. For example: 8766 8767 .ZZ: 8768 @c++ 8769 8770 Says that .ZZ files are, in fact, C++ source files. 8771 8772 `#NAME' 8773 This causes an error messages saying: 8774 8775 NAME compiler not installed on this system. 8776 8777 GCC already has an extensive list of suffixes built into it. This 8778 directive will add an entry to the end of the list of suffixes, but 8779 since the list is searched from the end backwards, it is 8780 effectively possible to override earlier entries using this 8781 technique. 8782 8783 8784 GCC has the following spec strings built into it. Spec files can 8785 override these strings or create their own. Note that individual 8786 targets can also add their own spec strings to this list. 8787 8788 asm Options to pass to the assembler 8789 asm_final Options to pass to the assembler post-processor 8790 cpp Options to pass to the C preprocessor 8791 cc1 Options to pass to the C compiler 8792 cc1plus Options to pass to the C++ compiler 8793 endfile Object files to include at the end of the link 8794 link Options to pass to the linker 8795 lib Libraries to include on the command line to the linker 8796 libgcc Decides which GCC support library to pass to the linker 8797 linker Sets the name of the linker 8798 predefines Defines to be passed to the C preprocessor 8799 signed_char Defines to pass to CPP to say whether `char' is signed 8800 by default 8801 startfile Object files to include at the start of the link 8802 8803 Here is a small example of a spec file: 8804 8805 %rename lib old_lib 8806 8807 *lib: 8808 --start-group -lgcc -lc -leval1 --end-group %(old_lib) 8809 8810 This example renames the spec called `lib' to `old_lib' and then 8811 overrides the previous definition of `lib' with a new one. The new 8812 definition adds in some extra command-line options before including the 8813 text of the old definition. 8814 8815 "Spec strings" are a list of command-line options to be passed to their 8816 corresponding program. In addition, the spec strings can contain 8817 `%'-prefixed sequences to substitute variable text or to conditionally 8818 insert text into the command line. Using these constructs it is 8819 possible to generate quite complex command lines. 8820 8821 Here is a table of all defined `%'-sequences for spec strings. Note 8822 that spaces are not generated automatically around the results of 8823 expanding these sequences. Therefore you can concatenate them together 8824 or combine them with constant text in a single argument. 8825 8826 `%%' 8827 Substitute one `%' into the program name or argument. 8828 8829 `%i' 8830 Substitute the name of the input file being processed. 8831 8832 `%b' 8833 Substitute the basename of the input file being processed. This 8834 is the substring up to (and not including) the last period and not 8835 including the directory. 8836 8837 `%B' 8838 This is the same as `%b', but include the file suffix (text after 8839 the last period). 8840 8841 `%d' 8842 Marks the argument containing or following the `%d' as a temporary 8843 file name, so that that file will be deleted if GCC exits 8844 successfully. Unlike `%g', this contributes no text to the 8845 argument. 8846 8847 `%gSUFFIX' 8848 Substitute a file name that has suffix SUFFIX and is chosen once 8849 per compilation, and mark the argument in the same way as `%d'. 8850 To reduce exposure to denial-of-service attacks, the file name is 8851 now chosen in a way that is hard to predict even when previously 8852 chosen file names are known. For example, `%g.s ... %g.o ... %g.s' 8853 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX 8854 matches the regexp `[.A-Za-z]*' or the special string `%O', which 8855 is treated exactly as if `%O' had been preprocessed. Previously, 8856 `%g' was simply substituted with a file name chosen once per 8857 compilation, without regard to any appended suffix (which was 8858 therefore treated just like ordinary text), making such attacks 8859 more likely to succeed. 8860 8861 `%uSUFFIX' 8862 Like `%g', but generates a new temporary file name even if 8863 `%uSUFFIX' was already seen. 8864 8865 `%USUFFIX' 8866 Substitutes the last file name generated with `%uSUFFIX', 8867 generating a new one if there is no such last file name. In the 8868 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except 8869 they don't share the same suffix _space_, so `%g.s ... %U.s ... 8870 %g.s ... %U.s' would involve the generation of two distinct file 8871 names, one for each `%g.s' and another for each `%U.s'. 8872 Previously, `%U' was simply substituted with a file name chosen 8873 for the previous `%u', without regard to any appended suffix. 8874 8875 `%jSUFFIX' 8876 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is 8877 writable, and if save-temps is off; otherwise, substitute the name 8878 of a temporary file, just like `%u'. This temporary file is not 8879 meant for communication between processes, but rather as a junk 8880 disposal mechanism. 8881 8882 `%|SUFFIX' 8883 `%mSUFFIX' 8884 Like `%g', except if `-pipe' is in effect. In that case `%|' 8885 substitutes a single dash and `%m' substitutes nothing at all. 8886 These are the two most common ways to instruct a program that it 8887 should read from standard input or write to standard output. If 8888 you need something more elaborate you can use an `%{pipe:`X'}' 8889 construct: see for example `f/lang-specs.h'. 8890 8891 `%.SUFFIX' 8892 Substitutes .SUFFIX for the suffixes of a matched switch's args 8893 when it is subsequently output with `%*'. SUFFIX is terminated by 8894 the next space or %. 8895 8896 `%w' 8897 Marks the argument containing or following the `%w' as the 8898 designated output file of this compilation. This puts the argument 8899 into the sequence of arguments that `%o' will substitute later. 8900 8901 `%o' 8902 Substitutes the names of all the output files, with spaces 8903 automatically placed around them. You should write spaces around 8904 the `%o' as well or the results are undefined. `%o' is for use in 8905 the specs for running the linker. Input files whose names have no 8906 recognized suffix are not compiled at all, but they are included 8907 among the output files, so they will be linked. 8908 8909 `%O' 8910 Substitutes the suffix for object files. Note that this is 8911 handled specially when it immediately follows `%g, %u, or %U', 8912 because of the need for those to form complete file names. The 8913 handling is such that `%O' is treated exactly as if it had already 8914 been substituted, except that `%g, %u, and %U' do not currently 8915 support additional SUFFIX characters following `%O' as they would 8916 following, for example, `.o'. 8917 8918 `%p' 8919 Substitutes the standard macro predefinitions for the current 8920 target machine. Use this when running `cpp'. 8921 8922 `%P' 8923 Like `%p', but puts `__' before and after the name of each 8924 predefined macro, except for macros that start with `__' or with 8925 `_L', where L is an uppercase letter. This is for ISO C. 8926 8927 `%I' 8928 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'), 8929 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made 8930 from `COMPILER_PATH' and `-B' options) and `-imultilib' as 8931 necessary. 8932 8933 `%s' 8934 Current argument is the name of a library or startup file of some 8935 sort. Search for that file in a standard list of directories and 8936 substitute the full name found. 8937 8938 `%eSTR' 8939 Print STR as an error message. STR is terminated by a newline. 8940 Use this when inconsistent options are detected. 8941 8942 `%(NAME)' 8943 Substitute the contents of spec string NAME at this point. 8944 8945 `%[NAME]' 8946 Like `%(...)' but put `__' around `-D' arguments. 8947 8948 `%x{OPTION}' 8949 Accumulate an option for `%X'. 8950 8951 `%X' 8952 Output the accumulated linker options specified by `-Wl' or a `%x' 8953 spec string. 8954 8955 `%Y' 8956 Output the accumulated assembler options specified by `-Wa'. 8957 8958 `%Z' 8959 Output the accumulated preprocessor options specified by `-Wp'. 8960 8961 `%a' 8962 Process the `asm' spec. This is used to compute the switches to 8963 be passed to the assembler. 8964 8965 `%A' 8966 Process the `asm_final' spec. This is a spec string for passing 8967 switches to an assembler post-processor, if such a program is 8968 needed. 8969 8970 `%l' 8971 Process the `link' spec. This is the spec for computing the 8972 command line passed to the linker. Typically it will make use of 8973 the `%L %G %S %D and %E' sequences. 8974 8975 `%D' 8976 Dump out a `-L' option for each directory that GCC believes might 8977 contain startup files. If the target supports multilibs then the 8978 current multilib directory will be prepended to each of these 8979 paths. 8980 8981 `%L' 8982 Process the `lib' spec. This is a spec string for deciding which 8983 libraries should be included on the command line to the linker. 8984 8985 `%G' 8986 Process the `libgcc' spec. This is a spec string for deciding 8987 which GCC support library should be included on the command line 8988 to the linker. 8989 8990 `%S' 8991 Process the `startfile' spec. This is a spec for deciding which 8992 object files should be the first ones passed to the linker. 8993 Typically this might be a file named `crt0.o'. 8994 8995 `%E' 8996 Process the `endfile' spec. This is a spec string that specifies 8997 the last object files that will be passed to the linker. 8998 8999 `%C' 9000 Process the `cpp' spec. This is used to construct the arguments 9001 to be passed to the C preprocessor. 9002 9003 `%1' 9004 Process the `cc1' spec. This is used to construct the options to 9005 be passed to the actual C compiler (`cc1'). 9006 9007 `%2' 9008 Process the `cc1plus' spec. This is used to construct the options 9009 to be passed to the actual C++ compiler (`cc1plus'). 9010 9011 `%*' 9012 Substitute the variable part of a matched option. See below. 9013 Note that each comma in the substituted string is replaced by a 9014 single space. 9015 9016 `%<`S'' 9017 Remove all occurrences of `-S' from the command line. Note--this 9018 command is position dependent. `%' commands in the spec string 9019 before this one will see `-S', `%' commands in the spec string 9020 after this one will not. 9021 9022 `%:FUNCTION(ARGS)' 9023 Call the named function FUNCTION, passing it ARGS. ARGS is first 9024 processed as a nested spec string, then split into an argument 9025 vector in the usual fashion. The function returns a string which 9026 is processed as if it had appeared literally as part of the 9027 current spec. 9028 9029 The following built-in spec functions are provided: 9030 9031 ``getenv'' 9032 The `getenv' spec function takes two arguments: an environment 9033 variable name and a string. If the environment variable is 9034 not defined, a fatal error is issued. Otherwise, the return 9035 value is the value of the environment variable concatenated 9036 with the string. For example, if `TOPDIR' is defined as 9037 `/path/to/top', then: 9038 9039 %:getenv(TOPDIR /include) 9040 9041 expands to `/path/to/top/include'. 9042 9043 ``if-exists'' 9044 The `if-exists' spec function takes one argument, an absolute 9045 pathname to a file. If the file exists, `if-exists' returns 9046 the pathname. Here is a small example of its usage: 9047 9048 *startfile: 9049 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s 9050 9051 ``if-exists-else'' 9052 The `if-exists-else' spec function is similar to the 9053 `if-exists' spec function, except that it takes two 9054 arguments. The first argument is an absolute pathname to a 9055 file. If the file exists, `if-exists-else' returns the 9056 pathname. If it does not exist, it returns the second 9057 argument. This way, `if-exists-else' can be used to select 9058 one file or another, based on the existence of the first. 9059 Here is a small example of its usage: 9060 9061 *startfile: 9062 crt0%O%s %:if-exists(crti%O%s) \ 9063 %:if-exists-else(crtbeginT%O%s crtbegin%O%s) 9064 9065 ``replace-outfile'' 9066 The `replace-outfile' spec function takes two arguments. It 9067 looks for the first argument in the outfiles array and 9068 replaces it with the second argument. Here is a small 9069 example of its usage: 9070 9071 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)} 9072 9073 ``print-asm-header'' 9074 The `print-asm-header' function takes no arguments and simply 9075 prints a banner like: 9076 9077 Assembler options 9078 ================= 9079 9080 Use "-Wa,OPTION" to pass "OPTION" to the assembler. 9081 9082 It is used to separate compiler options from assembler options 9083 in the `--target-help' output. 9084 9085 `%{`S'}' 9086 Substitutes the `-S' switch, if that switch was given to GCC. If 9087 that switch was not specified, this substitutes nothing. Note that 9088 the leading dash is omitted when specifying this option, and it is 9089 automatically inserted if the substitution is performed. Thus the 9090 spec string `%{foo}' would match the command-line option `-foo' 9091 and would output the command line option `-foo'. 9092 9093 `%W{`S'}' 9094 Like %{`S'} but mark last argument supplied within as a file to be 9095 deleted on failure. 9096 9097 `%{`S'*}' 9098 Substitutes all the switches specified to GCC whose names start 9099 with `-S', but which also take an argument. This is used for 9100 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as 9101 being one switch whose names starts with `o'. %{o*} would 9102 substitute this text, including the space. Thus two arguments 9103 would be generated. 9104 9105 `%{`S'*&`T'*}' 9106 Like %{`S'*}, but preserve order of `S' and `T' options (the order 9107 of `S' and `T' in the spec is not significant). There can be any 9108 number of ampersand-separated variables; for each the wild card is 9109 optional. Useful for CPP as `%{D*&U*&A*}'. 9110 9111 `%{`S':`X'}' 9112 Substitutes `X', if the `-S' switch was given to GCC. 9113 9114 `%{!`S':`X'}' 9115 Substitutes `X', if the `-S' switch was _not_ given to GCC. 9116 9117 `%{`S'*:`X'}' 9118 Substitutes `X' if one or more switches whose names start with 9119 `-S' are specified to GCC. Normally `X' is substituted only once, 9120 no matter how many such switches appeared. However, if `%*' 9121 appears somewhere in `X', then `X' will be substituted once for 9122 each matching switch, with the `%*' replaced by the part of that 9123 switch that matched the `*'. 9124 9125 `%{.`S':`X'}' 9126 Substitutes `X', if processing a file with suffix `S'. 9127 9128 `%{!.`S':`X'}' 9129 Substitutes `X', if _not_ processing a file with suffix `S'. 9130 9131 `%{,`S':`X'}' 9132 Substitutes `X', if processing a file for language `S'. 9133 9134 `%{!,`S':`X'}' 9135 Substitutes `X', if not processing a file for language `S'. 9136 9137 `%{`S'|`P':`X'}' 9138 Substitutes `X' if either `-S' or `-P' was given to GCC. This may 9139 be combined with `!', `.', `,', and `*' sequences as well, 9140 although they have a stronger binding than the `|'. If `%*' 9141 appears in `X', all of the alternatives must be starred, and only 9142 the first matching alternative is substituted. 9143 9144 For example, a spec string like this: 9145 9146 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle} 9147 9148 will output the following command-line options from the following 9149 input command-line options: 9150 9151 fred.c -foo -baz 9152 jim.d -bar -boggle 9153 -d fred.c -foo -baz -boggle 9154 -d jim.d -bar -baz -boggle 9155 9156 `%{S:X; T:Y; :D}' 9157 If `S' was given to GCC, substitutes `X'; else if `T' was given to 9158 GCC, substitutes `Y'; else substitutes `D'. There can be as many 9159 clauses as you need. This may be combined with `.', `,', `!', 9160 `|', and `*' as needed. 9161 9162 9163 The conditional text `X' in a %{`S':`X'} or similar construct may 9164 contain other nested `%' constructs or spaces, or even newlines. They 9165 are processed as usual, as described above. Trailing white space in 9166 `X' is ignored. White space may also appear anywhere on the left side 9167 of the colon in these constructs, except between `.' or `*' and the 9168 corresponding word. 9169 9170 The `-O', `-f', `-m', and `-W' switches are handled specifically in 9171 these constructs. If another value of `-O' or the negated form of a 9172 `-f', `-m', or `-W' switch is found later in the command line, the 9173 earlier switch value is ignored, except with {`S'*} where `S' is just 9174 one letter, which passes all matching options. 9175 9176 The character `|' at the beginning of the predicate text is used to 9177 indicate that a command should be piped to the following command, but 9178 only if `-pipe' is specified. 9179 9180 It is built into GCC which switches take arguments and which do not. 9181 (You might think it would be useful to generalize this to allow each 9182 compiler's spec to say which switches take arguments. But this cannot 9183 be done in a consistent fashion. GCC cannot even decide which input 9184 files have been specified without knowing which switches take arguments, 9185 and it must know which input files to compile in order to tell which 9186 compilers to run). 9187 9188 GCC also knows implicitly that arguments starting in `-l' are to be 9189 treated as compiler output files, and passed to the linker in their 9190 proper position among the other output files. 9191 9192 9193 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC 9194 9195 3.16 Specifying Target Machine and Compiler Version 9196 =================================================== 9197 9198 The usual way to run GCC is to run the executable called `gcc', or 9199 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to 9200 run a version other than the one that was installed last. Sometimes 9201 this is inconvenient, so GCC provides options that will switch to 9202 another cross-compiler or version. 9203 9204 `-b MACHINE' 9205 The argument MACHINE specifies the target machine for compilation. 9206 9207 The value to use for MACHINE is the same as was specified as the 9208 machine type when configuring GCC as a cross-compiler. For 9209 example, if a cross-compiler was configured with `configure 9210 arm-elf', meaning to compile for an arm processor with elf 9211 binaries, then you would specify `-b arm-elf' to run that cross 9212 compiler. Because there are other options beginning with `-b', the 9213 configuration must contain a hyphen, or `-b' alone should be one 9214 argument followed by the configuration in the next argument. 9215 9216 `-V VERSION' 9217 The argument VERSION specifies which version of GCC to run. This 9218 is useful when multiple versions are installed. For example, 9219 VERSION might be `4.0', meaning to run GCC version 4.0. 9220 9221 The `-V' and `-b' options work by running the 9222 `<machine>-gcc-<version>' executable, so there's no real reason to use 9223 them if you can just run that directly. 9224 9225 9226 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC 9227 9228 3.17 Hardware Models and Configurations 9229 ======================================= 9230 9231 Earlier we discussed the standard option `-b' which chooses among 9232 different installed compilers for completely different target machines, 9233 such as VAX vs. 68000 vs. 80386. 9234 9235 In addition, each of these target machine types can have its own 9236 special options, starting with `-m', to choose among various hardware 9237 models or configurations--for example, 68010 vs 68020, floating 9238 coprocessor or none. A single installed version of the compiler can 9239 compile for any model or configuration, according to the options 9240 specified. 9241 9242 Some configurations of the compiler also support additional special 9243 options, usually for compatibility with other compilers on the same 9244 platform. 9245 9246 * Menu: 9247 9248 * ARC Options:: 9249 * ARM Options:: 9250 * AVR Options:: 9251 * Blackfin Options:: 9252 * CRIS Options:: 9253 * CRX Options:: 9254 * Darwin Options:: 9255 * DEC Alpha Options:: 9256 * DEC Alpha/VMS Options:: 9257 * FR30 Options:: 9258 * FRV Options:: 9259 * GNU/Linux Options:: 9260 * H8/300 Options:: 9261 * HPPA Options:: 9262 * i386 and x86-64 Options:: 9263 * i386 and x86-64 Windows Options:: 9264 * IA-64 Options:: 9265 * M32C Options:: 9266 * M32R/D Options:: 9267 * M680x0 Options:: 9268 * M68hc1x Options:: 9269 * MCore Options:: 9270 * MIPS Options:: 9271 * MMIX Options:: 9272 * MN10300 Options:: 9273 * PDP-11 Options:: 9274 * picoChip Options:: 9275 * PowerPC Options:: 9276 * RS/6000 and PowerPC Options:: 9277 * S/390 and zSeries Options:: 9278 * Score Options:: 9279 * SH Options:: 9280 * SPARC Options:: 9281 * SPU Options:: 9282 * System V Options:: 9283 * V850 Options:: 9284 * VAX Options:: 9285 * VxWorks Options:: 9286 * x86-64 Options:: 9287 * Xstormy16 Options:: 9288 * Xtensa Options:: 9289 * zSeries Options:: 9290 9291 9292 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options 9293 9294 3.17.1 ARC Options 9295 ------------------ 9296 9297 These options are defined for ARC implementations: 9298 9299 `-EL' 9300 Compile code for little endian mode. This is the default. 9301 9302 `-EB' 9303 Compile code for big endian mode. 9304 9305 `-mmangle-cpu' 9306 Prepend the name of the cpu to all public symbol names. In 9307 multiple-processor systems, there are many ARC variants with 9308 different instruction and register set characteristics. This flag 9309 prevents code compiled for one cpu to be linked with code compiled 9310 for another. No facility exists for handling variants that are 9311 "almost identical". This is an all or nothing option. 9312 9313 `-mcpu=CPU' 9314 Compile code for ARC variant CPU. Which variants are supported 9315 depend on the configuration. All variants support `-mcpu=base', 9316 this is the default. 9317 9318 `-mtext=TEXT-SECTION' 9319 `-mdata=DATA-SECTION' 9320 `-mrodata=READONLY-DATA-SECTION' 9321 Put functions, data, and readonly data in TEXT-SECTION, 9322 DATA-SECTION, and READONLY-DATA-SECTION respectively by default. 9323 This can be overridden with the `section' attribute. *Note 9324 Variable Attributes::. 9325 9326 `-mfix-cortex-m3-ldrd' 9327 Some Cortex-M3 cores can cause data corruption when `ldrd' 9328 instructions with overlapping destination and base registers are 9329 used. This option avoids generating these instructions. This 9330 option is enabled by default when `-mcpu=cortex-m3' is specified. 9331 9332 9333 9334 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options 9335 9336 3.17.2 ARM Options 9337 ------------------ 9338 9339 These `-m' options are defined for Advanced RISC Machines (ARM) 9340 architectures: 9341 9342 `-mabi=NAME' 9343 Generate code for the specified ABI. Permissible values are: 9344 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 9345 9346 `-mapcs-frame' 9347 Generate a stack frame that is compliant with the ARM Procedure 9348 Call Standard for all functions, even if this is not strictly 9349 necessary for correct execution of the code. Specifying 9350 `-fomit-frame-pointer' with this option will cause the stack 9351 frames not to be generated for leaf functions. The default is 9352 `-mno-apcs-frame'. 9353 9354 `-mapcs' 9355 This is a synonym for `-mapcs-frame'. 9356 9357 `-mthumb-interwork' 9358 Generate code which supports calling between the ARM and Thumb 9359 instruction sets. Without this option the two instruction sets 9360 cannot be reliably used inside one program. The default is 9361 `-mno-thumb-interwork', since slightly larger code is generated 9362 when `-mthumb-interwork' is specified. 9363 9364 `-mno-sched-prolog' 9365 Prevent the reordering of instructions in the function prolog, or 9366 the merging of those instruction with the instructions in the 9367 function's body. This means that all functions will start with a 9368 recognizable set of instructions (or in fact one of a choice from 9369 a small set of different function prologues), and this information 9370 can be used to locate the start if functions inside an executable 9371 piece of code. The default is `-msched-prolog'. 9372 9373 `-mfloat-abi=NAME' 9374 Specifies which floating-point ABI to use. Permissible values 9375 are: `soft', `softfp' and `hard'. 9376 9377 Specifying `soft' causes GCC to generate output containing library 9378 calls for floating-point operations. `softfp' allows the 9379 generation of code using hardware floating-point instructions, but 9380 still uses the soft-float calling conventions. `hard' allows 9381 generation of floating-point instructions and uses FPU-specific 9382 calling conventions. 9383 9384 The default depends on the specific target configuration. Note 9385 that the hard-float and soft-float ABIs are not link-compatible; 9386 you must compile your entire program with the same ABI, and link 9387 with a compatible set of libraries. 9388 9389 `-mhard-float' 9390 Equivalent to `-mfloat-abi=hard'. 9391 9392 `-msoft-float' 9393 Equivalent to `-mfloat-abi=soft'. 9394 9395 `-mlittle-endian' 9396 Generate code for a processor running in little-endian mode. This 9397 is the default for all standard configurations. 9398 9399 `-mbig-endian' 9400 Generate code for a processor running in big-endian mode; the 9401 default is to compile code for a little-endian processor. 9402 9403 `-mwords-little-endian' 9404 This option only applies when generating code for big-endian 9405 processors. Generate code for a little-endian word order but a 9406 big-endian byte order. That is, a byte order of the form 9407 `32107654'. Note: this option should only be used if you require 9408 compatibility with code for big-endian ARM processors generated by 9409 versions of the compiler prior to 2.8. 9410 9411 `-mcpu=NAME' 9412 This specifies the name of the target ARM processor. GCC uses 9413 this name to determine what kind of instructions it can emit when 9414 generating assembly code. Permissible names are: `arm2', `arm250', 9415 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', 9416 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', 9417 `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', 9418 `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', 9419 `arm740t', `strongarm', `strongarm110', `strongarm1100', 9420 `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', 9421 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', 9422 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', 9423 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', 9424 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', 9425 `arm1176jz-s', `arm1176jzf-s', `cortex-a8', `cortex-a9', 9426 `cortex-r4', `cortex-r4f', `cortex-m3', `cortex-m1', `xscale', 9427 `iwmmxt', `iwmmxt2', `ep9312'. 9428 9429 `-mtune=NAME' 9430 This option is very similar to the `-mcpu=' option, except that 9431 instead of specifying the actual target processor type, and hence 9432 restricting which instructions can be used, it specifies that GCC 9433 should tune the performance of the code as if the target were of 9434 the type specified in this option, but still choosing the 9435 instructions that it will generate based on the cpu specified by a 9436 `-mcpu=' option. For some ARM implementations better performance 9437 can be obtained by using this option. 9438 9439 `-march=NAME' 9440 This specifies the name of the target ARM architecture. GCC uses 9441 this name to determine what kind of instructions it can emit when 9442 generating assembly code. This option can be used in conjunction 9443 with or instead of the `-mcpu=' option. Permissible names are: 9444 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5', 9445 `armv5t', `armv5e', `armv5te', `armv6', `armv6j', `armv6t2', 9446 `armv6z', `armv6zk', `armv6-m', `armv7', `armv7-a', `armv7-r', 9447 `armv7-m', `iwmmxt', `iwmmxt2', `ep9312'. 9448 9449 `-mfpu=NAME' 9450 `-mfpe=NUMBER' 9451 `-mfp=NUMBER' 9452 This specifies what floating point hardware (or hardware 9453 emulation) is available on the target. Permissible names are: 9454 `fpa', `fpe2', `fpe3', `maverick', `vfp', `vfpv3', `vfpv3-d16' and 9455 `neon'. `-mfp' and `-mfpe' are synonyms for `-mfpu'=`fpe'NUMBER, 9456 for compatibility with older versions of GCC. 9457 9458 If `-msoft-float' is specified this specifies the format of 9459 floating point values. 9460 9461 `-mstructure-size-boundary=N' 9462 The size of all structures and unions will be rounded up to a 9463 multiple of the number of bits set by this option. Permissible 9464 values are 8, 32 and 64. The default value varies for different 9465 toolchains. For the COFF targeted toolchain the default value is 9466 8. A value of 64 is only allowed if the underlying ABI supports 9467 it. 9468 9469 Specifying the larger number can produce faster, more efficient 9470 code, but can also increase the size of the program. Different 9471 values are potentially incompatible. Code compiled with one value 9472 cannot necessarily expect to work with code or libraries compiled 9473 with another value, if they exchange information using structures 9474 or unions. 9475 9476 `-mabort-on-noreturn' 9477 Generate a call to the function `abort' at the end of a `noreturn' 9478 function. It will be executed if the function tries to return. 9479 9480 `-mlong-calls' 9481 `-mno-long-calls' 9482 Tells the compiler to perform function calls by first loading the 9483 address of the function into a register and then performing a 9484 subroutine call on this register. This switch is needed if the 9485 target function will lie outside of the 64 megabyte addressing 9486 range of the offset based version of subroutine call instruction. 9487 9488 Even if this switch is enabled, not all function calls will be 9489 turned into long calls. The heuristic is that static functions, 9490 functions which have the `short-call' attribute, functions that 9491 are inside the scope of a `#pragma no_long_calls' directive and 9492 functions whose definitions have already been compiled within the 9493 current compilation unit, will not be turned into long calls. The 9494 exception to this rule is that weak function definitions, 9495 functions with the `long-call' attribute or the `section' 9496 attribute, and functions that are within the scope of a `#pragma 9497 long_calls' directive, will always be turned into long calls. 9498 9499 This feature is not enabled by default. Specifying 9500 `-mno-long-calls' will restore the default behavior, as will 9501 placing the function calls within the scope of a `#pragma 9502 long_calls_off' directive. Note these switches have no effect on 9503 how the compiler generates code to handle function calls via 9504 function pointers. 9505 9506 `-msingle-pic-base' 9507 Treat the register used for PIC addressing as read-only, rather 9508 than loading it in the prologue for each function. The run-time 9509 system is responsible for initializing this register with an 9510 appropriate value before execution begins. 9511 9512 `-mpic-register=REG' 9513 Specify the register to be used for PIC addressing. The default 9514 is R10 unless stack-checking is enabled, when R9 is used. 9515 9516 `-mcirrus-fix-invalid-insns' 9517 Insert NOPs into the instruction stream to in order to work around 9518 problems with invalid Maverick instruction combinations. This 9519 option is only valid if the `-mcpu=ep9312' option has been used to 9520 enable generation of instructions for the Cirrus Maverick floating 9521 point co-processor. This option is not enabled by default, since 9522 the problem is only present in older Maverick implementations. 9523 The default can be re-enabled by use of the 9524 `-mno-cirrus-fix-invalid-insns' switch. 9525 9526 `-mpoke-function-name' 9527 Write the name of each function into the text section, directly 9528 preceding the function prologue. The generated code is similar to 9529 this: 9530 9531 t0 9532 .ascii "arm_poke_function_name", 0 9533 .align 9534 t1 9535 .word 0xff000000 + (t1 - t0) 9536 arm_poke_function_name 9537 mov ip, sp 9538 stmfd sp!, {fp, ip, lr, pc} 9539 sub fp, ip, #4 9540 9541 When performing a stack backtrace, code can inspect the value of 9542 `pc' stored at `fp + 0'. If the trace function then looks at 9543 location `pc - 12' and the top 8 bits are set, then we know that 9544 there is a function name embedded immediately preceding this 9545 location and has length `((pc[-3]) & 0xff000000)'. 9546 9547 `-mthumb' 9548 Generate code for the Thumb instruction set. The default is to 9549 use the 32-bit ARM instruction set. This option automatically 9550 enables either 16-bit Thumb-1 or mixed 16/32-bit Thumb-2 9551 instructions based on the `-mcpu=NAME' and `-march=NAME' options. 9552 9553 `-mtpcs-frame' 9554 Generate a stack frame that is compliant with the Thumb Procedure 9555 Call Standard for all non-leaf functions. (A leaf function is one 9556 that does not call any other functions.) The default is 9557 `-mno-tpcs-frame'. 9558 9559 `-mtpcs-leaf-frame' 9560 Generate a stack frame that is compliant with the Thumb Procedure 9561 Call Standard for all leaf functions. (A leaf function is one 9562 that does not call any other functions.) The default is 9563 `-mno-apcs-leaf-frame'. 9564 9565 `-mcallee-super-interworking' 9566 Gives all externally visible functions in the file being compiled 9567 an ARM instruction set header which switches to Thumb mode before 9568 executing the rest of the function. This allows these functions 9569 to be called from non-interworking code. 9570 9571 `-mcaller-super-interworking' 9572 Allows calls via function pointers (including virtual functions) to 9573 execute correctly regardless of whether the target code has been 9574 compiled for interworking or not. There is a small overhead in 9575 the cost of executing a function pointer if this option is enabled. 9576 9577 `-mtp=NAME' 9578 Specify the access model for the thread local storage pointer. 9579 The valid models are `soft', which generates calls to 9580 `__aeabi_read_tp', `cp15', which fetches the thread pointer from 9581 `cp15' directly (supported in the arm6k architecture), and `auto', 9582 which uses the best available method for the selected processor. 9583 The default setting is `auto'. 9584 9585 `-mword-relocations' 9586 Only generate absolute relocations on word sized values (i.e. 9587 R_ARM_ABS32). This is enabled by default on targets (uClinux, 9588 SymbianOS) where the runtime loader imposes this restriction, and 9589 when `-fpic' or `-fPIC' is specified. 9590 9591 9592 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options 9593 9594 3.17.3 AVR Options 9595 ------------------ 9596 9597 These options are defined for AVR implementations: 9598 9599 `-mmcu=MCU' 9600 Specify ATMEL AVR instruction set or MCU type. 9601 9602 Instruction set avr1 is for the minimal AVR core, not supported by 9603 the C compiler, only for assembler programs (MCU types: at90s1200, 9604 attiny10, attiny11, attiny12, attiny15, attiny28). 9605 9606 Instruction set avr2 (default) is for the classic AVR core with up 9607 to 8K program memory space (MCU types: at90s2313, at90s2323, 9608 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, 9609 at90s8515, at90c8534, at90s8535). 9610 9611 Instruction set avr3 is for the classic AVR core with up to 128K 9612 program memory space (MCU types: atmega103, atmega603, at43usb320, 9613 at76c711). 9614 9615 Instruction set avr4 is for the enhanced AVR core with up to 8K 9616 program memory space (MCU types: atmega8, atmega83, atmega85). 9617 9618 Instruction set avr5 is for the enhanced AVR core with up to 128K 9619 program memory space (MCU types: atmega16, atmega161, atmega163, 9620 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k). 9621 9622 `-msize' 9623 Output instruction sizes to the asm file. 9624 9625 `-mno-interrupts' 9626 Generated code is not compatible with hardware interrupts. Code 9627 size will be smaller. 9628 9629 `-mcall-prologues' 9630 Functions prologues/epilogues expanded as call to appropriate 9631 subroutines. Code size will be smaller. 9632 9633 `-mno-tablejump' 9634 Do not generate tablejump insns which sometimes increase code size. 9635 The option is now deprecated in favor of the equivalent 9636 `-fno-jump-tables' 9637 9638 `-mtiny-stack' 9639 Change only the low 8 bits of the stack pointer. 9640 9641 `-mint8' 9642 Assume int to be 8 bit integer. This affects the sizes of all 9643 types: A char will be 1 byte, an int will be 1 byte, an long will 9644 be 2 bytes and long long will be 4 bytes. Please note that this 9645 option does not comply to the C standards, but it will provide you 9646 with smaller code size. 9647 9648 9649 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options 9650 9651 3.17.4 Blackfin Options 9652 ----------------------- 9653 9654 `-mcpu=CPU[-SIREVISION]' 9655 Specifies the name of the target Blackfin processor. Currently, 9656 CPU can be one of `bf512', `bf514', `bf516', `bf518', `bf522', 9657 `bf523', `bf524', `bf525', `bf526', `bf527', `bf531', `bf532', 9658 `bf533', `bf534', `bf536', `bf537', `bf538', `bf539', `bf542', 9659 `bf544', `bf547', `bf548', `bf549', `bf561'. The optional 9660 SIREVISION specifies the silicon revision of the target Blackfin 9661 processor. Any workarounds available for the targeted silicon 9662 revision will be enabled. If SIREVISION is `none', no workarounds 9663 are enabled. If SIREVISION is `any', all workarounds for the 9664 targeted processor will be enabled. The `__SILICON_REVISION__' 9665 macro is defined to two hexadecimal digits representing the major 9666 and minor numbers in the silicon revision. If SIREVISION is 9667 `none', the `__SILICON_REVISION__' is not defined. If SIREVISION 9668 is `any', the `__SILICON_REVISION__' is defined to be `0xffff'. 9669 If this optional SIREVISION is not used, GCC assumes the latest 9670 known silicon revision of the targeted Blackfin processor. 9671 9672 Support for `bf561' is incomplete. For `bf561', Only the 9673 processor macro is defined. Without this option, `bf532' is used 9674 as the processor by default. The corresponding predefined 9675 processor macros for CPU is to be defined. And for `bfin-elf' 9676 toolchain, this causes the hardware BSP provided by libgloss to be 9677 linked in if `-msim' is not given. 9678 9679 `-msim' 9680 Specifies that the program will be run on the simulator. This 9681 causes the simulator BSP provided by libgloss to be linked in. 9682 This option has effect only for `bfin-elf' toolchain. Certain 9683 other options, such as `-mid-shared-library' and `-mfdpic', imply 9684 `-msim'. 9685 9686 `-momit-leaf-frame-pointer' 9687 Don't keep the frame pointer in a register for leaf functions. 9688 This avoids the instructions to save, set up and restore frame 9689 pointers and makes an extra register available in leaf functions. 9690 The option `-fomit-frame-pointer' removes the frame pointer for 9691 all functions which might make debugging harder. 9692 9693 `-mspecld-anomaly' 9694 When enabled, the compiler will ensure that the generated code 9695 does not contain speculative loads after jump instructions. If 9696 this option is used, `__WORKAROUND_SPECULATIVE_LOADS' is defined. 9697 9698 `-mno-specld-anomaly' 9699 Don't generate extra code to prevent speculative loads from 9700 occurring. 9701 9702 `-mcsync-anomaly' 9703 When enabled, the compiler will ensure that the generated code 9704 does not contain CSYNC or SSYNC instructions too soon after 9705 conditional branches. If this option is used, 9706 `__WORKAROUND_SPECULATIVE_SYNCS' is defined. 9707 9708 `-mno-csync-anomaly' 9709 Don't generate extra code to prevent CSYNC or SSYNC instructions 9710 from occurring too soon after a conditional branch. 9711 9712 `-mlow-64k' 9713 When enabled, the compiler is free to take advantage of the 9714 knowledge that the entire program fits into the low 64k of memory. 9715 9716 `-mno-low-64k' 9717 Assume that the program is arbitrarily large. This is the default. 9718 9719 `-mstack-check-l1' 9720 Do stack checking using information placed into L1 scratchpad 9721 memory by the uClinux kernel. 9722 9723 `-mid-shared-library' 9724 Generate code that supports shared libraries via the library ID 9725 method. This allows for execute in place and shared libraries in 9726 an environment without virtual memory management. This option 9727 implies `-fPIC'. With a `bfin-elf' target, this option implies 9728 `-msim'. 9729 9730 `-mno-id-shared-library' 9731 Generate code that doesn't assume ID based shared libraries are 9732 being used. This is the default. 9733 9734 `-mleaf-id-shared-library' 9735 Generate code that supports shared libraries via the library ID 9736 method, but assumes that this library or executable won't link 9737 against any other ID shared libraries. That allows the compiler 9738 to use faster code for jumps and calls. 9739 9740 `-mno-leaf-id-shared-library' 9741 Do not assume that the code being compiled won't link against any 9742 ID shared libraries. Slower code will be generated for jump and 9743 call insns. 9744 9745 `-mshared-library-id=n' 9746 Specified the identification number of the ID based shared library 9747 being compiled. Specifying a value of 0 will generate more 9748 compact code, specifying other values will force the allocation of 9749 that number to the current library but is no more space or time 9750 efficient than omitting this option. 9751 9752 `-msep-data' 9753 Generate code that allows the data segment to be located in a 9754 different area of memory from the text segment. This allows for 9755 execute in place in an environment without virtual memory 9756 management by eliminating relocations against the text section. 9757 9758 `-mno-sep-data' 9759 Generate code that assumes that the data segment follows the text 9760 segment. This is the default. 9761 9762 `-mlong-calls' 9763 `-mno-long-calls' 9764 Tells the compiler to perform function calls by first loading the 9765 address of the function into a register and then performing a 9766 subroutine call on this register. This switch is needed if the 9767 target function will lie outside of the 24 bit addressing range of 9768 the offset based version of subroutine call instruction. 9769 9770 This feature is not enabled by default. Specifying 9771 `-mno-long-calls' will restore the default behavior. Note these 9772 switches have no effect on how the compiler generates code to 9773 handle function calls via function pointers. 9774 9775 `-mfast-fp' 9776 Link with the fast floating-point library. This library relaxes 9777 some of the IEEE floating-point standard's rules for checking 9778 inputs against Not-a-Number (NAN), in the interest of performance. 9779 9780 `-minline-plt' 9781 Enable inlining of PLT entries in function calls to functions that 9782 are not known to bind locally. It has no effect without `-mfdpic'. 9783 9784 `-mmulticore' 9785 Build standalone application for multicore Blackfin processor. 9786 Proper start files and link scripts will be used to support 9787 multicore. This option defines `__BFIN_MULTICORE'. It can only be 9788 used with `-mcpu=bf561[-SIREVISION]'. It can be used with 9789 `-mcorea' or `-mcoreb'. If it's used without `-mcorea' or 9790 `-mcoreb', single application/dual core programming model is used. 9791 In this model, the main function of Core B should be named as 9792 coreb_main. If it's used with `-mcorea' or `-mcoreb', one 9793 application per core programming model is used. If this option is 9794 not used, single core application programming model is used. 9795 9796 `-mcorea' 9797 Build standalone application for Core A of BF561 when using one 9798 application per core programming model. Proper start files and 9799 link scripts will be used to support Core A. This option defines 9800 `__BFIN_COREA'. It must be used with `-mmulticore'. 9801 9802 `-mcoreb' 9803 Build standalone application for Core B of BF561 when using one 9804 application per core programming model. Proper start files and 9805 link scripts will be used to support Core B. This option defines 9806 `__BFIN_COREB'. When this option is used, coreb_main should be 9807 used instead of main. It must be used with `-mmulticore'. 9808 9809 `-msdram' 9810 Build standalone application for SDRAM. Proper start files and 9811 link scripts will be used to put the application into SDRAM. 9812 Loader should initialize SDRAM before loading the application into 9813 SDRAM. This option defines `__BFIN_SDRAM'. 9814 9815 `-micplb' 9816 Assume that ICPLBs are enabled at runtime. This has an effect on 9817 certain anomaly workarounds. For Linux targets, the default is to 9818 assume ICPLBs are enabled; for standalone applications the default 9819 is off. 9820 9821 9822 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options 9823 9824 3.17.5 CRIS Options 9825 ------------------- 9826 9827 These options are defined specifically for the CRIS ports. 9828 9829 `-march=ARCHITECTURE-TYPE' 9830 `-mcpu=ARCHITECTURE-TYPE' 9831 Generate code for the specified architecture. The choices for 9832 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively 9833 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for 9834 cris-axis-linux-gnu, where the default is `v10'. 9835 9836 `-mtune=ARCHITECTURE-TYPE' 9837 Tune to ARCHITECTURE-TYPE everything applicable about the generated 9838 code, except for the ABI and the set of available instructions. 9839 The choices for ARCHITECTURE-TYPE are the same as for 9840 `-march=ARCHITECTURE-TYPE'. 9841 9842 `-mmax-stack-frame=N' 9843 Warn when the stack frame of a function exceeds N bytes. 9844 9845 `-metrax4' 9846 `-metrax100' 9847 The options `-metrax4' and `-metrax100' are synonyms for 9848 `-march=v3' and `-march=v8' respectively. 9849 9850 `-mmul-bug-workaround' 9851 `-mno-mul-bug-workaround' 9852 Work around a bug in the `muls' and `mulu' instructions for CPU 9853 models where it applies. This option is active by default. 9854 9855 `-mpdebug' 9856 Enable CRIS-specific verbose debug-related information in the 9857 assembly code. This option also has the effect to turn off the 9858 `#NO_APP' formatted-code indicator to the assembler at the 9859 beginning of the assembly file. 9860 9861 `-mcc-init' 9862 Do not use condition-code results from previous instruction; 9863 always emit compare and test instructions before use of condition 9864 codes. 9865 9866 `-mno-side-effects' 9867 Do not emit instructions with side-effects in addressing modes 9868 other than post-increment. 9869 9870 `-mstack-align' 9871 `-mno-stack-align' 9872 `-mdata-align' 9873 `-mno-data-align' 9874 `-mconst-align' 9875 `-mno-const-align' 9876 These options (no-options) arranges (eliminate arrangements) for 9877 the stack-frame, individual data and constants to be aligned for 9878 the maximum single data access size for the chosen CPU model. The 9879 default is to arrange for 32-bit alignment. ABI details such as 9880 structure layout are not affected by these options. 9881 9882 `-m32-bit' 9883 `-m16-bit' 9884 `-m8-bit' 9885 Similar to the stack- data- and const-align options above, these 9886 options arrange for stack-frame, writable data and constants to 9887 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit 9888 alignment. 9889 9890 `-mno-prologue-epilogue' 9891 `-mprologue-epilogue' 9892 With `-mno-prologue-epilogue', the normal function prologue and 9893 epilogue that sets up the stack-frame are omitted and no return 9894 instructions or return sequences are generated in the code. Use 9895 this option only together with visual inspection of the compiled 9896 code: no warnings or errors are generated when call-saved 9897 registers must be saved, or storage for local variable needs to be 9898 allocated. 9899 9900 `-mno-gotplt' 9901 `-mgotplt' 9902 With `-fpic' and `-fPIC', don't generate (do generate) instruction 9903 sequences that load addresses for functions from the PLT part of 9904 the GOT rather than (traditional on other architectures) calls to 9905 the PLT. The default is `-mgotplt'. 9906 9907 `-melf' 9908 Legacy no-op option only recognized with the cris-axis-elf and 9909 cris-axis-linux-gnu targets. 9910 9911 `-mlinux' 9912 Legacy no-op option only recognized with the cris-axis-linux-gnu 9913 target. 9914 9915 `-sim' 9916 This option, recognized for the cris-axis-elf arranges to link 9917 with input-output functions from a simulator library. Code, 9918 initialized data and zero-initialized data are allocated 9919 consecutively. 9920 9921 `-sim2' 9922 Like `-sim', but pass linker options to locate initialized data at 9923 0x40000000 and zero-initialized data at 0x80000000. 9924 9925 9926 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options 9927 9928 3.17.6 CRX Options 9929 ------------------ 9930 9931 These options are defined specifically for the CRX ports. 9932 9933 `-mmac' 9934 Enable the use of multiply-accumulate instructions. Disabled by 9935 default. 9936 9937 `-mpush-args' 9938 Push instructions will be used to pass outgoing arguments when 9939 functions are called. Enabled by default. 9940 9941 9942 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options 9943 9944 3.17.7 Darwin Options 9945 --------------------- 9946 9947 These options are defined for all architectures running the Darwin 9948 operating system. 9949 9950 FSF GCC on Darwin does not create "fat" object files; it will create 9951 an object file for the single architecture that it was built to target. 9952 Apple's GCC on Darwin does create "fat" files if multiple `-arch' 9953 options are used; it does so by running the compiler or linker multiple 9954 times and joining the results together with `lipo'. 9955 9956 The subtype of the file created (like `ppc7400' or `ppc970' or `i686') 9957 is determined by the flags that specify the ISA that GCC is targetting, 9958 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be 9959 used to override this. 9960 9961 The Darwin tools vary in their behavior when presented with an ISA 9962 mismatch. The assembler, `as', will only permit instructions to be 9963 used that are valid for the subtype of the file it is generating, so 9964 you cannot put 64-bit instructions in an `ppc750' object file. The 9965 linker for shared libraries, `/usr/bin/libtool', will fail and print an 9966 error if asked to create a shared library with a less restrictive 9967 subtype than its input files (for instance, trying to put a `ppc970' 9968 object file in a `ppc7400' library). The linker for executables, `ld', 9969 will quietly give the executable the most restrictive subtype of any of 9970 its input files. 9971 9972 `-FDIR' 9973 Add the framework directory DIR to the head of the list of 9974 directories to be searched for header files. These directories are 9975 interleaved with those specified by `-I' options and are scanned 9976 in a left-to-right order. 9977 9978 A framework directory is a directory with frameworks in it. A 9979 framework is a directory with a `"Headers"' and/or 9980 `"PrivateHeaders"' directory contained directly in it that ends in 9981 `".framework"'. The name of a framework is the name of this 9982 directory excluding the `".framework"'. Headers associated with 9983 the framework are found in one of those two directories, with 9984 `"Headers"' being searched first. A subframework is a framework 9985 directory that is in a framework's `"Frameworks"' directory. 9986 Includes of subframework headers can only appear in a header of a 9987 framework that contains the subframework, or in a sibling 9988 subframework header. Two subframeworks are siblings if they occur 9989 in the same framework. A subframework should not have the same 9990 name as a framework, a warning will be issued if this is violated. 9991 Currently a subframework cannot have subframeworks, in the 9992 future, the mechanism may be extended to support this. The 9993 standard frameworks can be found in `"/System/Library/Frameworks"' 9994 and `"/Library/Frameworks"'. An example include looks like 9995 `#include <Framework/header.h>', where `Framework' denotes the 9996 name of the framework and header.h is found in the 9997 `"PrivateHeaders"' or `"Headers"' directory. 9998 9999 `-iframeworkDIR' 10000 Like `-F' except the directory is a treated as a system directory. 10001 The main difference between this `-iframework' and `-F' is that 10002 with `-iframework' the compiler does not warn about constructs 10003 contained within header files found via DIR. This option is valid 10004 only for the C family of languages. 10005 10006 `-gused' 10007 Emit debugging information for symbols that are used. For STABS 10008 debugging format, this enables `-feliminate-unused-debug-symbols'. 10009 This is by default ON. 10010 10011 `-gfull' 10012 Emit debugging information for all symbols and types. 10013 10014 `-mmacosx-version-min=VERSION' 10015 The earliest version of MacOS X that this executable will run on 10016 is VERSION. Typical values of VERSION include `10.1', `10.2', and 10017 `10.3.9'. 10018 10019 If the compiler was built to use the system's headers by default, 10020 then the default for this option is the system version on which the 10021 compiler is running, otherwise the default is to make choices which 10022 are compatible with as many systems and code bases as possible. 10023 10024 `-mkernel' 10025 Enable kernel development mode. The `-mkernel' option sets 10026 `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions', 10027 `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and 10028 `-fno-rtti' where applicable. This mode also sets `-mno-altivec', 10029 `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC 10030 targets. 10031 10032 `-mone-byte-bool' 10033 Override the defaults for `bool' so that `sizeof(bool)==1'. By 10034 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC 10035 and `1' when compiling for Darwin/x86, so this option has no 10036 effect on x86. 10037 10038 *Warning:* The `-mone-byte-bool' switch causes GCC to generate 10039 code that is not binary compatible with code generated without 10040 that switch. Using this switch may require recompiling all other 10041 modules in a program, including system libraries. Use this switch 10042 to conform to a non-default data model. 10043 10044 `-mfix-and-continue' 10045 `-ffix-and-continue' 10046 `-findirect-data' 10047 Generate code suitable for fast turn around development. Needed to 10048 enable gdb to dynamically load `.o' files into already running 10049 programs. `-findirect-data' and `-ffix-and-continue' are provided 10050 for backwards compatibility. 10051 10052 `-all_load' 10053 Loads all members of static archive libraries. See man ld(1) for 10054 more information. 10055 10056 `-arch_errors_fatal' 10057 Cause the errors having to do with files that have the wrong 10058 architecture to be fatal. 10059 10060 `-bind_at_load' 10061 Causes the output file to be marked such that the dynamic linker 10062 will bind all undefined references when the file is loaded or 10063 launched. 10064 10065 `-bundle' 10066 Produce a Mach-o bundle format file. See man ld(1) for more 10067 information. 10068 10069 `-bundle_loader EXECUTABLE' 10070 This option specifies the EXECUTABLE that will be loading the build 10071 output file being linked. See man ld(1) for more information. 10072 10073 `-dynamiclib' 10074 When passed this option, GCC will produce a dynamic library 10075 instead of an executable when linking, using the Darwin `libtool' 10076 command. 10077 10078 `-force_cpusubtype_ALL' 10079 This causes GCC's output file to have the ALL subtype, instead of 10080 one controlled by the `-mcpu' or `-march' option. 10081 10082 `-allowable_client CLIENT_NAME' 10083 `-client_name' 10084 `-compatibility_version' 10085 `-current_version' 10086 `-dead_strip' 10087 `-dependency-file' 10088 `-dylib_file' 10089 `-dylinker_install_name' 10090 `-dynamic' 10091 `-exported_symbols_list' 10092 `-filelist' 10093 `-flat_namespace' 10094 `-force_flat_namespace' 10095 `-headerpad_max_install_names' 10096 `-image_base' 10097 `-init' 10098 `-install_name' 10099 `-keep_private_externs' 10100 `-multi_module' 10101 `-multiply_defined' 10102 `-multiply_defined_unused' 10103 `-noall_load' 10104 `-no_dead_strip_inits_and_terms' 10105 `-nofixprebinding' 10106 `-nomultidefs' 10107 `-noprebind' 10108 `-noseglinkedit' 10109 `-pagezero_size' 10110 `-prebind' 10111 `-prebind_all_twolevel_modules' 10112 `-private_bundle' 10113 `-read_only_relocs' 10114 `-sectalign' 10115 `-sectobjectsymbols' 10116 `-whyload' 10117 `-seg1addr' 10118 `-sectcreate' 10119 `-sectobjectsymbols' 10120 `-sectorder' 10121 `-segaddr' 10122 `-segs_read_only_addr' 10123 `-segs_read_write_addr' 10124 `-seg_addr_table' 10125 `-seg_addr_table_filename' 10126 `-seglinkedit' 10127 `-segprot' 10128 `-segs_read_only_addr' 10129 `-segs_read_write_addr' 10130 `-single_module' 10131 `-static' 10132 `-sub_library' 10133 `-sub_umbrella' 10134 `-twolevel_namespace' 10135 `-umbrella' 10136 `-undefined' 10137 `-unexported_symbols_list' 10138 `-weak_reference_mismatches' 10139 `-whatsloaded' 10140 These options are passed to the Darwin linker. The Darwin linker 10141 man page describes them in detail. 10142 10143 10144 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options 10145 10146 3.17.8 DEC Alpha Options 10147 ------------------------ 10148 10149 These `-m' options are defined for the DEC Alpha implementations: 10150 10151 `-mno-soft-float' 10152 `-msoft-float' 10153 Use (do not use) the hardware floating-point instructions for 10154 floating-point operations. When `-msoft-float' is specified, 10155 functions in `libgcc.a' will be used to perform floating-point 10156 operations. Unless they are replaced by routines that emulate the 10157 floating-point operations, or compiled in such a way as to call 10158 such emulations routines, these routines will issue floating-point 10159 operations. If you are compiling for an Alpha without 10160 floating-point operations, you must ensure that the library is 10161 built so as not to call them. 10162 10163 Note that Alpha implementations without floating-point operations 10164 are required to have floating-point registers. 10165 10166 `-mfp-reg' 10167 `-mno-fp-regs' 10168 Generate code that uses (does not use) the floating-point register 10169 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point 10170 register set is not used, floating point operands are passed in 10171 integer registers as if they were integers and floating-point 10172 results are passed in `$0' instead of `$f0'. This is a 10173 non-standard calling sequence, so any function with a 10174 floating-point argument or return value called by code compiled 10175 with `-mno-fp-regs' must also be compiled with that option. 10176 10177 A typical use of this option is building a kernel that does not 10178 use, and hence need not save and restore, any floating-point 10179 registers. 10180 10181 `-mieee' 10182 The Alpha architecture implements floating-point hardware 10183 optimized for maximum performance. It is mostly compliant with 10184 the IEEE floating point standard. However, for full compliance, 10185 software assistance is required. This option generates code fully 10186 IEEE compliant code _except_ that the INEXACT-FLAG is not 10187 maintained (see below). If this option is turned on, the 10188 preprocessor macro `_IEEE_FP' is defined during compilation. The 10189 resulting code is less efficient but is able to correctly support 10190 denormalized numbers and exceptional IEEE values such as 10191 not-a-number and plus/minus infinity. Other Alpha compilers call 10192 this option `-ieee_with_no_inexact'. 10193 10194 `-mieee-with-inexact' 10195 This is like `-mieee' except the generated code also maintains the 10196 IEEE INEXACT-FLAG. Turning on this option causes the generated 10197 code to implement fully-compliant IEEE math. In addition to 10198 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro. 10199 On some Alpha implementations the resulting code may execute 10200 significantly slower than the code generated by default. Since 10201 there is very little code that depends on the INEXACT-FLAG, you 10202 should normally not specify this option. Other Alpha compilers 10203 call this option `-ieee_with_inexact'. 10204 10205 `-mfp-trap-mode=TRAP-MODE' 10206 This option controls what floating-point related traps are enabled. 10207 Other Alpha compilers call this option `-fptm TRAP-MODE'. The 10208 trap mode can be set to one of four values: 10209 10210 `n' 10211 This is the default (normal) setting. The only traps that 10212 are enabled are the ones that cannot be disabled in software 10213 (e.g., division by zero trap). 10214 10215 `u' 10216 In addition to the traps enabled by `n', underflow traps are 10217 enabled as well. 10218 10219 `su' 10220 Like `u', but the instructions are marked to be safe for 10221 software completion (see Alpha architecture manual for 10222 details). 10223 10224 `sui' 10225 Like `su', but inexact traps are enabled as well. 10226 10227 `-mfp-rounding-mode=ROUNDING-MODE' 10228 Selects the IEEE rounding mode. Other Alpha compilers call this 10229 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of: 10230 10231 `n' 10232 Normal IEEE rounding mode. Floating point numbers are 10233 rounded towards the nearest machine number or towards the 10234 even machine number in case of a tie. 10235 10236 `m' 10237 Round towards minus infinity. 10238 10239 `c' 10240 Chopped rounding mode. Floating point numbers are rounded 10241 towards zero. 10242 10243 `d' 10244 Dynamic rounding mode. A field in the floating point control 10245 register (FPCR, see Alpha architecture reference manual) 10246 controls the rounding mode in effect. The C library 10247 initializes this register for rounding towards plus infinity. 10248 Thus, unless your program modifies the FPCR, `d' corresponds 10249 to round towards plus infinity. 10250 10251 `-mtrap-precision=TRAP-PRECISION' 10252 In the Alpha architecture, floating point traps are imprecise. 10253 This means without software assistance it is impossible to recover 10254 from a floating trap and program execution normally needs to be 10255 terminated. GCC can generate code that can assist operating 10256 system trap handlers in determining the exact location that caused 10257 a floating point trap. Depending on the requirements of an 10258 application, different levels of precisions can be selected: 10259 10260 `p' 10261 Program precision. This option is the default and means a 10262 trap handler can only identify which program caused a 10263 floating point exception. 10264 10265 `f' 10266 Function precision. The trap handler can determine the 10267 function that caused a floating point exception. 10268 10269 `i' 10270 Instruction precision. The trap handler can determine the 10271 exact instruction that caused a floating point exception. 10272 10273 Other Alpha compilers provide the equivalent options called 10274 `-scope_safe' and `-resumption_safe'. 10275 10276 `-mieee-conformant' 10277 This option marks the generated code as IEEE conformant. You must 10278 not use this option unless you also specify `-mtrap-precision=i' 10279 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only 10280 effect is to emit the line `.eflag 48' in the function prologue of 10281 the generated assembly file. Under DEC Unix, this has the effect 10282 that IEEE-conformant math library routines will be linked in. 10283 10284 `-mbuild-constants' 10285 Normally GCC examines a 32- or 64-bit integer constant to see if 10286 it can construct it from smaller constants in two or three 10287 instructions. If it cannot, it will output the constant as a 10288 literal and generate code to load it from the data segment at 10289 runtime. 10290 10291 Use this option to require GCC to construct _all_ integer constants 10292 using code, even if it takes more instructions (the maximum is 10293 six). 10294 10295 You would typically use this option to build a shared library 10296 dynamic loader. Itself a shared library, it must relocate itself 10297 in memory before it can find the variables and constants in its 10298 own data segment. 10299 10300 `-malpha-as' 10301 `-mgas' 10302 Select whether to generate code to be assembled by the 10303 vendor-supplied assembler (`-malpha-as') or by the GNU assembler 10304 `-mgas'. 10305 10306 `-mbwx' 10307 `-mno-bwx' 10308 `-mcix' 10309 `-mno-cix' 10310 `-mfix' 10311 `-mno-fix' 10312 `-mmax' 10313 `-mno-max' 10314 Indicate whether GCC should generate code to use the optional BWX, 10315 CIX, FIX and MAX instruction sets. The default is to use the 10316 instruction sets supported by the CPU type specified via `-mcpu=' 10317 option or that of the CPU on which GCC was built if none was 10318 specified. 10319 10320 `-mfloat-vax' 10321 `-mfloat-ieee' 10322 Generate code that uses (does not use) VAX F and G floating point 10323 arithmetic instead of IEEE single and double precision. 10324 10325 `-mexplicit-relocs' 10326 `-mno-explicit-relocs' 10327 Older Alpha assemblers provided no way to generate symbol 10328 relocations except via assembler macros. Use of these macros does 10329 not allow optimal instruction scheduling. GNU binutils as of 10330 version 2.12 supports a new syntax that allows the compiler to 10331 explicitly mark which relocations should apply to which 10332 instructions. This option is mostly useful for debugging, as GCC 10333 detects the capabilities of the assembler when it is built and 10334 sets the default accordingly. 10335 10336 `-msmall-data' 10337 `-mlarge-data' 10338 When `-mexplicit-relocs' is in effect, static data is accessed via 10339 "gp-relative" relocations. When `-msmall-data' is used, objects 8 10340 bytes long or smaller are placed in a "small data area" (the 10341 `.sdata' and `.sbss' sections) and are accessed via 16-bit 10342 relocations off of the `$gp' register. This limits the size of 10343 the small data area to 64KB, but allows the variables to be 10344 directly accessed via a single instruction. 10345 10346 The default is `-mlarge-data'. With this option the data area is 10347 limited to just below 2GB. Programs that require more than 2GB of 10348 data must use `malloc' or `mmap' to allocate the data in the heap 10349 instead of in the program's data segment. 10350 10351 When generating code for shared libraries, `-fpic' implies 10352 `-msmall-data' and `-fPIC' implies `-mlarge-data'. 10353 10354 `-msmall-text' 10355 `-mlarge-text' 10356 When `-msmall-text' is used, the compiler assumes that the code of 10357 the entire program (or shared library) fits in 4MB, and is thus 10358 reachable with a branch instruction. When `-msmall-data' is used, 10359 the compiler can assume that all local symbols share the same 10360 `$gp' value, and thus reduce the number of instructions required 10361 for a function call from 4 to 1. 10362 10363 The default is `-mlarge-text'. 10364 10365 `-mcpu=CPU_TYPE' 10366 Set the instruction set and instruction scheduling parameters for 10367 machine type CPU_TYPE. You can specify either the `EV' style name 10368 or the corresponding chip number. GCC supports scheduling 10369 parameters for the EV4, EV5 and EV6 family of processors and will 10370 choose the default values for the instruction set from the 10371 processor you specify. If you do not specify a processor type, 10372 GCC will default to the processor on which the compiler was built. 10373 10374 Supported values for CPU_TYPE are 10375 10376 `ev4' 10377 `ev45' 10378 `21064' 10379 Schedules as an EV4 and has no instruction set extensions. 10380 10381 `ev5' 10382 `21164' 10383 Schedules as an EV5 and has no instruction set extensions. 10384 10385 `ev56' 10386 `21164a' 10387 Schedules as an EV5 and supports the BWX extension. 10388 10389 `pca56' 10390 `21164pc' 10391 `21164PC' 10392 Schedules as an EV5 and supports the BWX and MAX extensions. 10393 10394 `ev6' 10395 `21264' 10396 Schedules as an EV6 and supports the BWX, FIX, and MAX 10397 extensions. 10398 10399 `ev67' 10400 `21264a' 10401 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX 10402 extensions. 10403 10404 Native Linux/GNU toolchains also support the value `native', which 10405 selects the best architecture option for the host processor. 10406 `-mcpu=native' has no effect if GCC does not recognize the 10407 processor. 10408 10409 `-mtune=CPU_TYPE' 10410 Set only the instruction scheduling parameters for machine type 10411 CPU_TYPE. The instruction set is not changed. 10412 10413 Native Linux/GNU toolchains also support the value `native', which 10414 selects the best architecture option for the host processor. 10415 `-mtune=native' has no effect if GCC does not recognize the 10416 processor. 10417 10418 `-mmemory-latency=TIME' 10419 Sets the latency the scheduler should assume for typical memory 10420 references as seen by the application. This number is highly 10421 dependent on the memory access patterns used by the application 10422 and the size of the external cache on the machine. 10423 10424 Valid options for TIME are 10425 10426 `NUMBER' 10427 A decimal number representing clock cycles. 10428 10429 `L1' 10430 `L2' 10431 `L3' 10432 `main' 10433 The compiler contains estimates of the number of clock cycles 10434 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches 10435 (also called Dcache, Scache, and Bcache), as well as to main 10436 memory. Note that L3 is only valid for EV5. 10437 10438 10439 10440 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FR30 Options, Prev: DEC Alpha Options, Up: Submodel Options 10441 10442 3.17.9 DEC Alpha/VMS Options 10443 ---------------------------- 10444 10445 These `-m' options are defined for the DEC Alpha/VMS implementations: 10446 10447 `-mvms-return-codes' 10448 Return VMS condition codes from main. The default is to return 10449 POSIX style condition (e.g. error) codes. 10450 10451 10452 File: gcc.info, Node: FR30 Options, Next: FRV Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options 10453 10454 3.17.10 FR30 Options 10455 -------------------- 10456 10457 These options are defined specifically for the FR30 port. 10458 10459 `-msmall-model' 10460 Use the small address space model. This can produce smaller code, 10461 but it does assume that all symbolic values and addresses will fit 10462 into a 20-bit range. 10463 10464 `-mno-lsim' 10465 Assume that run-time support has been provided and so there is no 10466 need to include the simulator library (`libsim.a') on the linker 10467 command line. 10468 10469 10470 10471 File: gcc.info, Node: FRV Options, Next: GNU/Linux Options, Prev: FR30 Options, Up: Submodel Options 10472 10473 3.17.11 FRV Options 10474 ------------------- 10475 10476 `-mgpr-32' 10477 Only use the first 32 general purpose registers. 10478 10479 `-mgpr-64' 10480 Use all 64 general purpose registers. 10481 10482 `-mfpr-32' 10483 Use only the first 32 floating point registers. 10484 10485 `-mfpr-64' 10486 Use all 64 floating point registers 10487 10488 `-mhard-float' 10489 Use hardware instructions for floating point operations. 10490 10491 `-msoft-float' 10492 Use library routines for floating point operations. 10493 10494 `-malloc-cc' 10495 Dynamically allocate condition code registers. 10496 10497 `-mfixed-cc' 10498 Do not try to dynamically allocate condition code registers, only 10499 use `icc0' and `fcc0'. 10500 10501 `-mdword' 10502 Change ABI to use double word insns. 10503 10504 `-mno-dword' 10505 Do not use double word instructions. 10506 10507 `-mdouble' 10508 Use floating point double instructions. 10509 10510 `-mno-double' 10511 Do not use floating point double instructions. 10512 10513 `-mmedia' 10514 Use media instructions. 10515 10516 `-mno-media' 10517 Do not use media instructions. 10518 10519 `-mmuladd' 10520 Use multiply and add/subtract instructions. 10521 10522 `-mno-muladd' 10523 Do not use multiply and add/subtract instructions. 10524 10525 `-mfdpic' 10526 Select the FDPIC ABI, that uses function descriptors to represent 10527 pointers to functions. Without any PIC/PIE-related options, it 10528 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries 10529 and small data are within a 12-bit range from the GOT base 10530 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32 10531 bits. With a `bfin-elf' target, this option implies `-msim'. 10532 10533 `-minline-plt' 10534 Enable inlining of PLT entries in function calls to functions that 10535 are not known to bind locally. It has no effect without `-mfdpic'. 10536 It's enabled by default if optimizing for speed and compiling for 10537 shared libraries (i.e., `-fPIC' or `-fpic'), or when an 10538 optimization option such as `-O3' or above is present in the 10539 command line. 10540 10541 `-mTLS' 10542 Assume a large TLS segment when generating thread-local code. 10543 10544 `-mtls' 10545 Do not assume a large TLS segment when generating thread-local 10546 code. 10547 10548 `-mgprel-ro' 10549 Enable the use of `GPREL' relocations in the FDPIC ABI for data 10550 that is known to be in read-only sections. It's enabled by 10551 default, except for `-fpic' or `-fpie': even though it may help 10552 make the global offset table smaller, it trades 1 instruction for 10553 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one 10554 of which may be shared by multiple symbols, and it avoids the need 10555 for a GOT entry for the referenced symbol, so it's more likely to 10556 be a win. If it is not, `-mno-gprel-ro' can be used to disable it. 10557 10558 `-multilib-library-pic' 10559 Link with the (library, not FD) pic libraries. It's implied by 10560 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without 10561 `-mfdpic'. You should never have to use it explicitly. 10562 10563 `-mlinked-fp' 10564 Follow the EABI requirement of always creating a frame pointer 10565 whenever a stack frame is allocated. This option is enabled by 10566 default and can be disabled with `-mno-linked-fp'. 10567 10568 `-mlong-calls' 10569 Use indirect addressing to call functions outside the current 10570 compilation unit. This allows the functions to be placed anywhere 10571 within the 32-bit address space. 10572 10573 `-malign-labels' 10574 Try to align labels to an 8-byte boundary by inserting nops into 10575 the previous packet. This option only has an effect when VLIW 10576 packing is enabled. It doesn't create new packets; it merely adds 10577 nops to existing ones. 10578 10579 `-mlibrary-pic' 10580 Generate position-independent EABI code. 10581 10582 `-macc-4' 10583 Use only the first four media accumulator registers. 10584 10585 `-macc-8' 10586 Use all eight media accumulator registers. 10587 10588 `-mpack' 10589 Pack VLIW instructions. 10590 10591 `-mno-pack' 10592 Do not pack VLIW instructions. 10593 10594 `-mno-eflags' 10595 Do not mark ABI switches in e_flags. 10596 10597 `-mcond-move' 10598 Enable the use of conditional-move instructions (default). 10599 10600 This switch is mainly for debugging the compiler and will likely 10601 be removed in a future version. 10602 10603 `-mno-cond-move' 10604 Disable the use of conditional-move instructions. 10605 10606 This switch is mainly for debugging the compiler and will likely 10607 be removed in a future version. 10608 10609 `-mscc' 10610 Enable the use of conditional set instructions (default). 10611 10612 This switch is mainly for debugging the compiler and will likely 10613 be removed in a future version. 10614 10615 `-mno-scc' 10616 Disable the use of conditional set instructions. 10617 10618 This switch is mainly for debugging the compiler and will likely 10619 be removed in a future version. 10620 10621 `-mcond-exec' 10622 Enable the use of conditional execution (default). 10623 10624 This switch is mainly for debugging the compiler and will likely 10625 be removed in a future version. 10626 10627 `-mno-cond-exec' 10628 Disable the use of conditional execution. 10629 10630 This switch is mainly for debugging the compiler and will likely 10631 be removed in a future version. 10632 10633 `-mvliw-branch' 10634 Run a pass to pack branches into VLIW instructions (default). 10635 10636 This switch is mainly for debugging the compiler and will likely 10637 be removed in a future version. 10638 10639 `-mno-vliw-branch' 10640 Do not run a pass to pack branches into VLIW instructions. 10641 10642 This switch is mainly for debugging the compiler and will likely 10643 be removed in a future version. 10644 10645 `-mmulti-cond-exec' 10646 Enable optimization of `&&' and `||' in conditional execution 10647 (default). 10648 10649 This switch is mainly for debugging the compiler and will likely 10650 be removed in a future version. 10651 10652 `-mno-multi-cond-exec' 10653 Disable optimization of `&&' and `||' in conditional execution. 10654 10655 This switch is mainly for debugging the compiler and will likely 10656 be removed in a future version. 10657 10658 `-mnested-cond-exec' 10659 Enable nested conditional execution optimizations (default). 10660 10661 This switch is mainly for debugging the compiler and will likely 10662 be removed in a future version. 10663 10664 `-mno-nested-cond-exec' 10665 Disable nested conditional execution optimizations. 10666 10667 This switch is mainly for debugging the compiler and will likely 10668 be removed in a future version. 10669 10670 `-moptimize-membar' 10671 This switch removes redundant `membar' instructions from the 10672 compiler generated code. It is enabled by default. 10673 10674 `-mno-optimize-membar' 10675 This switch disables the automatic removal of redundant `membar' 10676 instructions from the generated code. 10677 10678 `-mtomcat-stats' 10679 Cause gas to print out tomcat statistics. 10680 10681 `-mcpu=CPU' 10682 Select the processor type for which to generate code. Possible 10683 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405', 10684 `fr400', `fr300' and `simple'. 10685 10686 10687 10688 File: gcc.info, Node: GNU/Linux Options, Next: H8/300 Options, Prev: FRV Options, Up: Submodel Options 10689 10690 3.17.12 GNU/Linux Options 10691 ------------------------- 10692 10693 These `-m' options are defined for GNU/Linux targets: 10694 10695 `-mglibc' 10696 Use the GNU C library. This is the default except on 10697 `*-*-linux-*uclibc*' and `*-*-linux-*android*' targets. 10698 10699 `-muclibc' 10700 Use uClibc C library. This is the default on `*-*-linux-*uclibc*' 10701 targets. 10702 10703 `-mbionic' 10704 Use Bionic C library. This is the default on 10705 `*-*-linux-*android*' targets. 10706 10707 `-mandroid' 10708 Compile code compatible with Android platform. This is the 10709 default on `*-*-linux-*android*' targets. 10710 10711 When compiling, this option enables `-mbionic', `-fPIC', 10712 `-fno-exceptions' and `-fno-rtti' by default. When linking, this 10713 option makes the GCC driver pass Android-specific options to the 10714 linker. Finally, this option causes the preprocessor macro 10715 `__ANDROID__' to be defined. 10716 10717 `-tno-android-cc' 10718 Disable compilation effects of `-mandroid', i.e., do not enable 10719 `-mbionic', `-fPIC', `-fno-exceptions' and `-fno-rtti' by default. 10720 10721 `-tno-android-ld' 10722 Disable linking effects of `-mandroid', i.e., pass standard Linux 10723 linking options to the linker. 10724 10725 10726 10727 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: GNU/Linux Options, Up: Submodel Options 10728 10729 3.17.13 H8/300 Options 10730 ---------------------- 10731 10732 These `-m' options are defined for the H8/300 implementations: 10733 10734 `-mrelax' 10735 Shorten some address references at link time, when possible; uses 10736 the linker option `-relax'. *Note `ld' and the H8/300: 10737 (ld)H8/300, for a fuller description. 10738 10739 `-mh' 10740 Generate code for the H8/300H. 10741 10742 `-ms' 10743 Generate code for the H8S. 10744 10745 `-mn' 10746 Generate code for the H8S and H8/300H in the normal mode. This 10747 switch must be used either with `-mh' or `-ms'. 10748 10749 `-ms2600' 10750 Generate code for the H8S/2600. This switch must be used with 10751 `-ms'. 10752 10753 `-mint32' 10754 Make `int' data 32 bits by default. 10755 10756 `-malign-300' 10757 On the H8/300H and H8S, use the same alignment rules as for the 10758 H8/300. The default for the H8/300H and H8S is to align longs and 10759 floats on 4 byte boundaries. `-malign-300' causes them to be 10760 aligned on 2 byte boundaries. This option has no effect on the 10761 H8/300. 10762 10763 10764 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options 10765 10766 3.17.14 HPPA Options 10767 -------------------- 10768 10769 These `-m' options are defined for the HPPA family of computers: 10770 10771 `-march=ARCHITECTURE-TYPE' 10772 Generate code for the specified architecture. The choices for 10773 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and 10774 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on 10775 an HP-UX system to determine the proper architecture option for 10776 your machine. Code compiled for lower numbered architectures will 10777 run on higher numbered architectures, but not the other way around. 10778 10779 `-mpa-risc-1-0' 10780 `-mpa-risc-1-1' 10781 `-mpa-risc-2-0' 10782 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0' 10783 respectively. 10784 10785 `-mbig-switch' 10786 Generate code suitable for big switch tables. Use this option 10787 only if the assembler/linker complain about out of range branches 10788 within a switch table. 10789 10790 `-mjump-in-delay' 10791 Fill delay slots of function calls with unconditional jump 10792 instructions by modifying the return pointer for the function call 10793 to be the target of the conditional jump. 10794 10795 `-mdisable-fpregs' 10796 Prevent floating point registers from being used in any manner. 10797 This is necessary for compiling kernels which perform lazy context 10798 switching of floating point registers. If you use this option and 10799 attempt to perform floating point operations, the compiler will 10800 abort. 10801 10802 `-mdisable-indexing' 10803 Prevent the compiler from using indexing address modes. This 10804 avoids some rather obscure problems when compiling MIG generated 10805 code under MACH. 10806 10807 `-mno-space-regs' 10808 Generate code that assumes the target has no space registers. 10809 This allows GCC to generate faster indirect calls and use unscaled 10810 index address modes. 10811 10812 Such code is suitable for level 0 PA systems and kernels. 10813 10814 `-mfast-indirect-calls' 10815 Generate code that assumes calls never cross space boundaries. 10816 This allows GCC to emit code which performs faster indirect calls. 10817 10818 This option will not work in the presence of shared libraries or 10819 nested functions. 10820 10821 `-mfixed-range=REGISTER-RANGE' 10822 Generate code treating the given register range as fixed registers. 10823 A fixed register is one that the register allocator can not use. 10824 This is useful when compiling kernel code. A register range is 10825 specified as two registers separated by a dash. Multiple register 10826 ranges can be specified separated by a comma. 10827 10828 `-mlong-load-store' 10829 Generate 3-instruction load and store sequences as sometimes 10830 required by the HP-UX 10 linker. This is equivalent to the `+k' 10831 option to the HP compilers. 10832 10833 `-mportable-runtime' 10834 Use the portable calling conventions proposed by HP for ELF 10835 systems. 10836 10837 `-mgas' 10838 Enable the use of assembler directives only GAS understands. 10839 10840 `-mschedule=CPU-TYPE' 10841 Schedule code according to the constraints for the machine type 10842 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC', 10843 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an 10844 HP-UX system to determine the proper scheduling option for your 10845 machine. The default scheduling is `8000'. 10846 10847 `-mlinker-opt' 10848 Enable the optimization pass in the HP-UX linker. Note this makes 10849 symbolic debugging impossible. It also triggers a bug in the 10850 HP-UX 8 and HP-UX 9 linkers in which they give bogus error 10851 messages when linking some programs. 10852 10853 `-msoft-float' 10854 Generate output containing library calls for floating point. 10855 *Warning:* the requisite libraries are not available for all HPPA 10856 targets. Normally the facilities of the machine's usual C 10857 compiler are used, but this cannot be done directly in 10858 cross-compilation. You must make your own arrangements to provide 10859 suitable library functions for cross-compilation. 10860 10861 `-msoft-float' changes the calling convention in the output file; 10862 therefore, it is only useful if you compile _all_ of a program with 10863 this option. In particular, you need to compile `libgcc.a', the 10864 library that comes with GCC, with `-msoft-float' in order for this 10865 to work. 10866 10867 `-msio' 10868 Generate the predefine, `_SIO', for server IO. The default is 10869 `-mwsio'. This generates the predefines, `__hp9000s700', 10870 `__hp9000s700__' and `_WSIO', for workstation IO. These options 10871 are available under HP-UX and HI-UX. 10872 10873 `-mgnu-ld' 10874 Use GNU ld specific options. This passes `-shared' to ld when 10875 building a shared library. It is the default when GCC is 10876 configured, explicitly or implicitly, with the GNU linker. This 10877 option does not have any affect on which ld is called, it only 10878 changes what parameters are passed to that ld. The ld that is 10879 called is determined by the `--with-ld' configure option, GCC's 10880 program search path, and finally by the user's `PATH'. The linker 10881 used by GCC can be printed using `which `gcc 10882 -print-prog-name=ld`'. This option is only available on the 64 10883 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'. 10884 10885 `-mhp-ld' 10886 Use HP ld specific options. This passes `-b' to ld when building 10887 a shared library and passes `+Accept TypeMismatch' to ld on all 10888 links. It is the default when GCC is configured, explicitly or 10889 implicitly, with the HP linker. This option does not have any 10890 affect on which ld is called, it only changes what parameters are 10891 passed to that ld. The ld that is called is determined by the 10892 `--with-ld' configure option, GCC's program search path, and 10893 finally by the user's `PATH'. The linker used by GCC can be 10894 printed using `which `gcc -print-prog-name=ld`'. This option is 10895 only available on the 64 bit HP-UX GCC, i.e. configured with 10896 `hppa*64*-*-hpux*'. 10897 10898 `-mlong-calls' 10899 Generate code that uses long call sequences. This ensures that a 10900 call is always able to reach linker generated stubs. The default 10901 is to generate long calls only when the distance from the call 10902 site to the beginning of the function or translation unit, as the 10903 case may be, exceeds a predefined limit set by the branch type 10904 being used. The limits for normal calls are 7,600,000 and 240,000 10905 bytes, respectively for the PA 2.0 and PA 1.X architectures. 10906 Sibcalls are always limited at 240,000 bytes. 10907 10908 Distances are measured from the beginning of functions when using 10909 the `-ffunction-sections' option, or when using the `-mgas' and 10910 `-mno-portable-runtime' options together under HP-UX with the SOM 10911 linker. 10912 10913 It is normally not desirable to use this option as it will degrade 10914 performance. However, it may be useful in large applications, 10915 particularly when partial linking is used to build the application. 10916 10917 The types of long calls used depends on the capabilities of the 10918 assembler and linker, and the type of code being generated. The 10919 impact on systems that support long absolute calls, and long pic 10920 symbol-difference or pc-relative calls should be relatively small. 10921 However, an indirect call is used on 32-bit ELF systems in pic code 10922 and it is quite long. 10923 10924 `-munix=UNIX-STD' 10925 Generate compiler predefines and select a startfile for the 10926 specified UNIX standard. The choices for UNIX-STD are `93', `95' 10927 and `98'. `93' is supported on all HP-UX versions. `95' is 10928 available on HP-UX 10.10 and later. `98' is available on HP-UX 10929 11.11 and later. The default values are `93' for HP-UX 10.00, 10930 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and 10931 later. 10932 10933 `-munix=93' provides the same predefines as GCC 3.3 and 3.4. 10934 `-munix=95' provides additional predefines for `XOPEN_UNIX' and 10935 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'. 10936 `-munix=98' provides additional predefines for `_XOPEN_UNIX', 10937 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and 10938 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'. 10939 10940 It is _important_ to note that this option changes the interfaces 10941 for various library routines. It also affects the operational 10942 behavior of the C library. Thus, _extreme_ care is needed in 10943 using this option. 10944 10945 Library code that is intended to operate with more than one UNIX 10946 standard must test, set and restore the variable 10947 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't 10948 provide this capability. 10949 10950 `-nolibdld' 10951 Suppress the generation of link options to search libdld.sl when 10952 the `-static' option is specified on HP-UX 10 and later. 10953 10954 `-static' 10955 The HP-UX implementation of setlocale in libc has a dependency on 10956 libdld.sl. There isn't an archive version of libdld.sl. Thus, 10957 when the `-static' option is specified, special link options are 10958 needed to resolve this dependency. 10959 10960 On HP-UX 10 and later, the GCC driver adds the necessary options to 10961 link with libdld.sl when the `-static' option is specified. This 10962 causes the resulting binary to be dynamic. On the 64-bit port, 10963 the linkers generate dynamic binaries by default in any case. The 10964 `-nolibdld' option can be used to prevent the GCC driver from 10965 adding these link options. 10966 10967 `-threads' 10968 Add support for multithreading with the "dce thread" library under 10969 HP-UX. This option sets flags for both the preprocessor and 10970 linker. 10971 10972 10973 File: gcc.info, Node: i386 and x86-64 Options, Next: i386 and x86-64 Windows Options, Prev: HPPA Options, Up: Submodel Options 10974 10975 3.17.15 Intel 386 and AMD x86-64 Options 10976 ---------------------------------------- 10977 10978 These `-m' options are defined for the i386 and x86-64 family of 10979 computers: 10980 10981 `-mtune=CPU-TYPE' 10982 Tune to CPU-TYPE everything applicable about the generated code, 10983 except for the ABI and the set of available instructions. The 10984 choices for CPU-TYPE are: 10985 _generic_ 10986 Produce code optimized for the most common IA32/AMD64/EM64T 10987 processors. If you know the CPU on which your code will run, 10988 then you should use the corresponding `-mtune' option instead 10989 of `-mtune=generic'. But, if you do not know exactly what 10990 CPU users of your application will have, then you should use 10991 this option. 10992 10993 As new processors are deployed in the marketplace, the 10994 behavior of this option will change. Therefore, if you 10995 upgrade to a newer version of GCC, the code generated option 10996 will change to reflect the processors that were most common 10997 when that version of GCC was released. 10998 10999 There is no `-march=generic' option because `-march' 11000 indicates the instruction set the compiler can use, and there 11001 is no generic instruction set applicable to all processors. 11002 In contrast, `-mtune' indicates the processor (or, in this 11003 case, collection of processors) for which the code is 11004 optimized. 11005 11006 _native_ 11007 This selects the CPU to tune for at compilation time by 11008 determining the processor type of the compiling machine. 11009 Using `-mtune=native' will produce code optimized for the 11010 local machine under the constraints of the selected 11011 instruction set. Using `-march=native' will enable all 11012 instruction subsets supported by the local machine (hence the 11013 result might not run on different machines). 11014 11015 _i386_ 11016 Original Intel's i386 CPU. 11017 11018 _i486_ 11019 Intel's i486 CPU. (No scheduling is implemented for this 11020 chip.) 11021 11022 _i586, pentium_ 11023 Intel Pentium CPU with no MMX support. 11024 11025 _pentium-mmx_ 11026 Intel PentiumMMX CPU based on Pentium core with MMX 11027 instruction set support. 11028 11029 _pentiumpro_ 11030 Intel PentiumPro CPU. 11031 11032 _i686_ 11033 Same as `generic', but when used as `march' option, PentiumPro 11034 instruction set will be used, so the code will run on all 11035 i686 family chips. 11036 11037 _pentium2_ 11038 Intel Pentium2 CPU based on PentiumPro core with MMX 11039 instruction set support. 11040 11041 _pentium3, pentium3m_ 11042 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE 11043 instruction set support. 11044 11045 _pentium-m_ 11046 Low power version of Intel Pentium3 CPU with MMX, SSE and 11047 SSE2 instruction set support. Used by Centrino notebooks. 11048 11049 _pentium4, pentium4m_ 11050 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set 11051 support. 11052 11053 _prescott_ 11054 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 11055 and SSE3 instruction set support. 11056 11057 _nocona_ 11058 Improved version of Intel Pentium4 CPU with 64-bit 11059 extensions, MMX, SSE, SSE2 and SSE3 instruction set support. 11060 11061 _core2_ 11062 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11063 and SSSE3 instruction set support. 11064 11065 _atom_ 11066 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 11067 and SSSE3 instruction set support. 11068 11069 _k6_ 11070 AMD K6 CPU with MMX instruction set support. 11071 11072 _k6-2, k6-3_ 11073 Improved versions of AMD K6 CPU with MMX and 3dNOW! 11074 instruction set support. 11075 11076 _athlon, athlon-tbird_ 11077 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE 11078 prefetch instructions support. 11079 11080 _athlon-4, athlon-xp, athlon-mp_ 11081 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and 11082 full SSE instruction set support. 11083 11084 _k8, opteron, athlon64, athlon-fx_ 11085 AMD K8 core based CPUs with x86-64 instruction set support. 11086 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 11087 64-bit instruction set extensions.) 11088 11089 _k8-sse3, opteron-sse3, athlon64-sse3_ 11090 Improved versions of k8, opteron and athlon64 with SSE3 11091 instruction set support. 11092 11093 _amdfam10, barcelona_ 11094 AMD Family 10h core based CPUs with x86-64 instruction set 11095 support. (This supersets MMX, SSE, SSE2, SSE3, SSE4A, 11096 3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set 11097 extensions.) 11098 11099 _winchip-c6_ 11100 IDT Winchip C6 CPU, dealt in same way as i486 with additional 11101 MMX instruction set support. 11102 11103 _winchip2_ 11104 IDT Winchip2 CPU, dealt in same way as i486 with additional 11105 MMX and 3dNOW! instruction set support. 11106 11107 _c3_ 11108 Via C3 CPU with MMX and 3dNOW! instruction set support. (No 11109 scheduling is implemented for this chip.) 11110 11111 _c3-2_ 11112 Via C3-2 CPU with MMX and SSE instruction set support. (No 11113 scheduling is implemented for this chip.) 11114 11115 _geode_ 11116 Embedded AMD CPU with MMX and 3dNOW! instruction set support. 11117 11118 While picking a specific CPU-TYPE will schedule things 11119 appropriately for that particular chip, the compiler will not 11120 generate any code that does not run on the i386 without the 11121 `-march=CPU-TYPE' option being used. 11122 11123 `-march=CPU-TYPE' 11124 Generate instructions for the machine type CPU-TYPE. The choices 11125 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying 11126 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'. 11127 11128 `-mcpu=CPU-TYPE' 11129 A deprecated synonym for `-mtune'. 11130 11131 `-mfpmath=UNIT' 11132 Generate floating point arithmetics for selected unit UNIT. The 11133 choices for UNIT are: 11134 11135 `387' 11136 Use the standard 387 floating point coprocessor present 11137 majority of chips and emulated otherwise. Code compiled with 11138 this option will run almost everywhere. The temporary 11139 results are computed in 80bit precision instead of precision 11140 specified by the type resulting in slightly different results 11141 compared to most of other chips. See `-ffloat-store' for 11142 more detailed description. 11143 11144 This is the default choice for i386 compiler. 11145 11146 `sse' 11147 Use scalar floating point instructions present in the SSE 11148 instruction set. This instruction set is supported by 11149 Pentium3 and newer chips, in the AMD line by Athlon-4, 11150 Athlon-xp and Athlon-mp chips. The earlier version of SSE 11151 instruction set supports only single precision arithmetics, 11152 thus the double and extended precision arithmetics is still 11153 done using 387. Later version, present only in Pentium4 and 11154 the future AMD x86-64 chips supports double precision 11155 arithmetics too. 11156 11157 For the i386 compiler, you need to use `-march=CPU-TYPE', 11158 `-msse' or `-msse2' switches to enable SSE extensions and 11159 make this option effective. For the x86-64 compiler, these 11160 extensions are enabled by default. 11161 11162 The resulting code should be considerably faster in the 11163 majority of cases and avoid the numerical instability 11164 problems of 387 code, but may break some existing code that 11165 expects temporaries to be 80bit. 11166 11167 This is the default choice for the x86-64 compiler. 11168 11169 `sse,387' 11170 `sse+387' 11171 `both' 11172 Attempt to utilize both instruction sets at once. This 11173 effectively double the amount of available registers and on 11174 chips with separate execution units for 387 and SSE the 11175 execution resources too. Use this option with care, as it is 11176 still experimental, because the GCC register allocator does 11177 not model separate functional units well resulting in 11178 instable performance. 11179 11180 `-masm=DIALECT' 11181 Output asm instructions using selected DIALECT. Supported choices 11182 are `intel' or `att' (the default one). Darwin does not support 11183 `intel'. 11184 11185 `-mieee-fp' 11186 `-mno-ieee-fp' 11187 Control whether or not the compiler uses IEEE floating point 11188 comparisons. These handle correctly the case where the result of a 11189 comparison is unordered. 11190 11191 `-msoft-float' 11192 Generate output containing library calls for floating point. 11193 *Warning:* the requisite libraries are not part of GCC. Normally 11194 the facilities of the machine's usual C compiler are used, but 11195 this can't be done directly in cross-compilation. You must make 11196 your own arrangements to provide suitable library functions for 11197 cross-compilation. 11198 11199 On machines where a function returns floating point results in the 11200 80387 register stack, some floating point opcodes may be emitted 11201 even if `-msoft-float' is used. 11202 11203 `-mno-fp-ret-in-387' 11204 Do not use the FPU registers for return values of functions. 11205 11206 The usual calling convention has functions return values of types 11207 `float' and `double' in an FPU register, even if there is no FPU. 11208 The idea is that the operating system should emulate an FPU. 11209 11210 The option `-mno-fp-ret-in-387' causes such values to be returned 11211 in ordinary CPU registers instead. 11212 11213 `-mno-fancy-math-387' 11214 Some 387 emulators do not support the `sin', `cos' and `sqrt' 11215 instructions for the 387. Specify this option to avoid generating 11216 those instructions. This option is the default on FreeBSD, 11217 OpenBSD and NetBSD. This option is overridden when `-march' 11218 indicates that the target cpu will always have an FPU and so the 11219 instruction will not need emulation. As of revision 2.6.1, these 11220 instructions are not generated unless you also use the 11221 `-funsafe-math-optimizations' switch. 11222 11223 `-malign-double' 11224 `-mno-align-double' 11225 Control whether GCC aligns `double', `long double', and `long 11226 long' variables on a two word boundary or a one word boundary. 11227 Aligning `double' variables on a two word boundary will produce 11228 code that runs somewhat faster on a `Pentium' at the expense of 11229 more memory. 11230 11231 On x86-64, `-malign-double' is enabled by default. 11232 11233 *Warning:* if you use the `-malign-double' switch, structures 11234 containing the above types will be aligned differently than the 11235 published application binary interface specifications for the 386 11236 and will not be binary compatible with structures in code compiled 11237 without that switch. 11238 11239 `-m96bit-long-double' 11240 `-m128bit-long-double' 11241 These switches control the size of `long double' type. The i386 11242 application binary interface specifies the size to be 96 bits, so 11243 `-m96bit-long-double' is the default in 32 bit mode. 11244 11245 Modern architectures (Pentium and newer) would prefer `long double' 11246 to be aligned to an 8 or 16 byte boundary. In arrays or structures 11247 conforming to the ABI, this would not be possible. So specifying a 11248 `-m128bit-long-double' will align `long double' to a 16 byte 11249 boundary by padding the `long double' with an additional 32 bit 11250 zero. 11251 11252 In the x86-64 compiler, `-m128bit-long-double' is the default 11253 choice as its ABI specifies that `long double' is to be aligned on 11254 16 byte boundary. 11255 11256 Notice that neither of these options enable any extra precision 11257 over the x87 standard of 80 bits for a `long double'. 11258 11259 *Warning:* if you override the default value for your target ABI, 11260 the structures and arrays containing `long double' variables will 11261 change their size as well as function calling convention for 11262 function taking `long double' will be modified. Hence they will 11263 not be binary compatible with arrays or structures in code 11264 compiled without that switch. 11265 11266 `-mlarge-data-threshold=NUMBER' 11267 When `-mcmodel=medium' is specified, the data greater than 11268 THRESHOLD are placed in large data section. This value must be the 11269 same across all object linked into the binary and defaults to 11270 65535. 11271 11272 `-mrtd' 11273 Use a different function-calling convention, in which functions 11274 that take a fixed number of arguments return with the `ret' NUM 11275 instruction, which pops their arguments while returning. This 11276 saves one instruction in the caller since there is no need to pop 11277 the arguments there. 11278 11279 You can specify that an individual function is called with this 11280 calling sequence with the function attribute `stdcall'. You can 11281 also override the `-mrtd' option by using the function attribute 11282 `cdecl'. *Note Function Attributes::. 11283 11284 *Warning:* this calling convention is incompatible with the one 11285 normally used on Unix, so you cannot use it if you need to call 11286 libraries compiled with the Unix compiler. 11287 11288 Also, you must provide function prototypes for all functions that 11289 take variable numbers of arguments (including `printf'); otherwise 11290 incorrect code will be generated for calls to those functions. 11291 11292 In addition, seriously incorrect code will result if you call a 11293 function with too many arguments. (Normally, extra arguments are 11294 harmlessly ignored.) 11295 11296 `-mregparm=NUM' 11297 Control how many registers are used to pass integer arguments. By 11298 default, no registers are used to pass arguments, and at most 3 11299 registers can be used. You can control this behavior for a 11300 specific function by using the function attribute `regparm'. 11301 *Note Function Attributes::. 11302 11303 *Warning:* if you use this switch, and NUM is nonzero, then you 11304 must build all modules with the same value, including any 11305 libraries. This includes the system libraries and startup modules. 11306 11307 `-msseregparm' 11308 Use SSE register passing conventions for float and double arguments 11309 and return values. You can control this behavior for a specific 11310 function by using the function attribute `sseregparm'. *Note 11311 Function Attributes::. 11312 11313 *Warning:* if you use this switch then you must build all modules 11314 with the same value, including any libraries. This includes the 11315 system libraries and startup modules. 11316 11317 `-mpc32' 11318 `-mpc64' 11319 `-mpc80' 11320 Set 80387 floating-point precision to 32, 64 or 80 bits. When 11321 `-mpc32' is specified, the significands of results of 11322 floating-point operations are rounded to 24 bits (single 11323 precision); `-mpc64' rounds the significands of results of 11324 floating-point operations to 53 bits (double precision) and 11325 `-mpc80' rounds the significands of results of floating-point 11326 operations to 64 bits (extended double precision), which is the 11327 default. When this option is used, floating-point operations in 11328 higher precisions are not available to the programmer without 11329 setting the FPU control word explicitly. 11330 11331 Setting the rounding of floating-point operations to less than the 11332 default 80 bits can speed some programs by 2% or more. Note that 11333 some mathematical libraries assume that extended precision (80 11334 bit) floating-point operations are enabled by default; routines in 11335 such libraries could suffer significant loss of accuracy, 11336 typically through so-called "catastrophic cancellation", when this 11337 option is used to set the precision to less than extended 11338 precision. 11339 11340 `-mstackrealign' 11341 Realign the stack at entry. On the Intel x86, the `-mstackrealign' 11342 option will generate an alternate prologue and epilogue that 11343 realigns the runtime stack if necessary. This supports mixing 11344 legacy codes that keep a 4-byte aligned stack with modern codes 11345 that keep a 16-byte stack for SSE compatibility. See also the 11346 attribute `force_align_arg_pointer', applicable to individual 11347 functions. 11348 11349 `-mpreferred-stack-boundary=NUM' 11350 Attempt to keep the stack boundary aligned to a 2 raised to NUM 11351 byte boundary. If `-mpreferred-stack-boundary' is not specified, 11352 the default is 4 (16 bytes or 128 bits). 11353 11354 `-mincoming-stack-boundary=NUM' 11355 Assume the incoming stack is aligned to a 2 raised to NUM byte 11356 boundary. If `-mincoming-stack-boundary' is not specified, the 11357 one specified by `-mpreferred-stack-boundary' will be used. 11358 11359 On Pentium and PentiumPro, `double' and `long double' values 11360 should be aligned to an 8 byte boundary (see `-malign-double') or 11361 suffer significant run time performance penalties. On Pentium 11362 III, the Streaming SIMD Extension (SSE) data type `__m128' may not 11363 work properly if it is not 16 byte aligned. 11364 11365 To ensure proper alignment of this values on the stack, the stack 11366 boundary must be as aligned as that required by any value stored 11367 on the stack. Further, every function must be generated such that 11368 it keeps the stack aligned. Thus calling a function compiled with 11369 a higher preferred stack boundary from a function compiled with a 11370 lower preferred stack boundary will most likely misalign the 11371 stack. It is recommended that libraries that use callbacks always 11372 use the default setting. 11373 11374 This extra alignment does consume extra stack space, and generally 11375 increases code size. Code that is sensitive to stack space usage, 11376 such as embedded systems and operating system kernels, may want to 11377 reduce the preferred alignment to `-mpreferred-stack-boundary=2'. 11378 11379 `-mmmx' 11380 `-mno-mmx' 11381 `-msse' 11382 `-mno-sse' 11383 `-msse2' 11384 `-mno-sse2' 11385 `-msse3' 11386 `-mno-sse3' 11387 `-mssse3' 11388 `-mno-ssse3' 11389 `-msse4.1' 11390 `-mno-sse4.1' 11391 `-msse4.2' 11392 `-mno-sse4.2' 11393 `-msse4' 11394 `-mno-sse4' 11395 `-mavx' 11396 `-mno-avx' 11397 `-maes' 11398 `-mno-aes' 11399 `-mpclmul' 11400 `-mno-pclmul' 11401 `-msse4a' 11402 `-mno-sse4a' 11403 `-msse5' 11404 `-mno-sse5' 11405 `-mlwp' 11406 `-mno-lwp' 11407 `-m3dnow' 11408 `-mno-3dnow' 11409 `-mpopcnt' 11410 `-mno-popcnt' 11411 `-mabm' 11412 `-mno-abm' 11413 These switches enable or disable the use of instructions in the 11414 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, 11415 SSE5, LWP, ABM or 3DNow! extended instruction sets. These 11416 extensions are also available as built-in functions: see *Note X86 11417 Built-in Functions::, for details of the functions enabled and 11418 disabled by these switches. 11419 11420 To have SSE/SSE2 instructions generated automatically from 11421 floating-point code (as opposed to 387 instructions), see 11422 `-mfpmath=sse'. 11423 11424 GCC depresses SSEx instructions when `-mavx' is used. Instead, it 11425 generates new AVX instructions or AVX equivalence for all SSEx 11426 instructions when needed. 11427 11428 These options will enable GCC to use these extended instructions in 11429 generated code, even without `-mfpmath=sse'. Applications which 11430 perform runtime CPU detection must compile separate files for each 11431 supported architecture, using the appropriate flags. In 11432 particular, the file containing the CPU detection code should be 11433 compiled without these options. 11434 11435 `-mcld' 11436 This option instructs GCC to emit a `cld' instruction in the 11437 prologue of functions that use string instructions. String 11438 instructions depend on the DF flag to select between autoincrement 11439 or autodecrement mode. While the ABI specifies the DF flag to be 11440 cleared on function entry, some operating systems violate this 11441 specification by not clearing the DF flag in their exception 11442 dispatchers. The exception handler can be invoked with the DF flag 11443 set which leads to wrong direction mode, when string instructions 11444 are used. This option can be enabled by default on 32-bit x86 11445 targets by configuring GCC with the `--enable-cld' configure 11446 option. Generation of `cld' instructions can be suppressed with 11447 the `-mno-cld' compiler option in this case. 11448 11449 `-mcx16' 11450 This option will enable GCC to use CMPXCHG16B instruction in 11451 generated code. CMPXCHG16B allows for atomic operations on 11452 128-bit double quadword (or oword) data types. This is useful for 11453 high resolution counters that could be updated by multiple 11454 processors (or cores). This instruction is generated as part of 11455 atomic built-in functions: see *Note Atomic Builtins:: for details. 11456 11457 `-msahf' 11458 This option will enable GCC to use SAHF instruction in generated 11459 64-bit code. Early Intel CPUs with Intel 64 lacked LAHF and SAHF 11460 instructions supported by AMD64 until introduction of Pentium 4 G1 11461 step in December 2005. LAHF and SAHF are load and store 11462 instructions, respectively, for certain status flags. In 64-bit 11463 mode, SAHF instruction is used to optimize `fmod', `drem' or 11464 `remainder' built-in functions: see *Note Other Builtins:: for 11465 details. 11466 11467 `-mmovbe' 11468 This option will enable GCC to use movbe instruction to implement 11469 `__builtin_bswap32' and `__builtin_bswap64'. 11470 11471 `-mrecip' 11472 This option will enable GCC to use RCPSS and RSQRTSS instructions 11473 (and their vectorized variants RCPPS and RSQRTPS) with an 11474 additional Newton-Raphson step to increase precision instead of 11475 DIVSS and SQRTSS (and their vectorized variants) for single 11476 precision floating point arguments. These instructions are 11477 generated only when `-funsafe-math-optimizations' is enabled 11478 together with `-finite-math-only' and `-fno-trapping-math'. Note 11479 that while the throughput of the sequence is higher than the 11480 throughput of the non-reciprocal instruction, the precision of the 11481 sequence can be decreased by up to 2 ulp (i.e. the inverse of 1.0 11482 equals 0.99999994). 11483 11484 `-mveclibabi=TYPE' 11485 Specifies the ABI type to use for vectorizing intrinsics using an 11486 external library. Supported types are `svml' for the Intel short 11487 vector math library and `acml' for the AMD math core library style 11488 of interfacing. GCC will currently emit calls to `vmldExp2', 11489 `vmldLn2', `vmldLog102', `vmldLog102', `vmldPow2', `vmldTanh2', 11490 `vmldTan2', `vmldAtan2', `vmldAtanh2', `vmldCbrt2', `vmldSinh2', 11491 `vmldSin2', `vmldAsinh2', `vmldAsin2', `vmldCosh2', `vmldCos2', 11492 `vmldAcosh2', `vmldAcos2', `vmlsExp4', `vmlsLn4', `vmlsLog104', 11493 `vmlsLog104', `vmlsPow4', `vmlsTanh4', `vmlsTan4', `vmlsAtan4', 11494 `vmlsAtanh4', `vmlsCbrt4', `vmlsSinh4', `vmlsSin4', `vmlsAsinh4', 11495 `vmlsAsin4', `vmlsCosh4', `vmlsCos4', `vmlsAcosh4' and `vmlsAcos4' 11496 for corresponding function type when `-mveclibabi=svml' is used 11497 and `__vrd2_sin', `__vrd2_cos', `__vrd2_exp', `__vrd2_log', 11498 `__vrd2_log2', `__vrd2_log10', `__vrs4_sinf', `__vrs4_cosf', 11499 `__vrs4_expf', `__vrs4_logf', `__vrs4_log2f', `__vrs4_log10f' and 11500 `__vrs4_powf' for corresponding function type when 11501 `-mveclibabi=acml' is used. Both `-ftree-vectorize' and 11502 `-funsafe-math-optimizations' have to be enabled. A SVML or ACML 11503 ABI compatible library will have to be specified at link time. 11504 11505 `-mabi=NAME' 11506 Generate code for the specified calling convention. Permissible 11507 values are: `sysv' for the ABI used on GNU/Linux and other systems 11508 and `ms' for the Microsoft ABI. The default is to use the 11509 Microsoft ABI when targeting Windows. On all other systems, the 11510 default is the SYSV ABI. You can control this behavior for a 11511 specific function by using the function attribute 11512 `ms_abi'/`sysv_abi'. *Note Function Attributes::. 11513 11514 `-mpush-args' 11515 `-mno-push-args' 11516 Use PUSH operations to store outgoing parameters. This method is 11517 shorter and usually equally fast as method using SUB/MOV 11518 operations and is enabled by default. In some cases disabling it 11519 may improve performance because of improved scheduling and reduced 11520 dependencies. 11521 11522 `-maccumulate-outgoing-args' 11523 If enabled, the maximum amount of space required for outgoing 11524 arguments will be computed in the function prologue. This is 11525 faster on most modern CPUs because of reduced dependencies, 11526 improved scheduling and reduced stack usage when preferred stack 11527 boundary is not equal to 2. The drawback is a notable increase in 11528 code size. This switch implies `-mno-push-args'. 11529 11530 `-mthreads' 11531 Support thread-safe exception handling on `Mingw32'. Code that 11532 relies on thread-safe exception handling must compile and link all 11533 code with the `-mthreads' option. When compiling, `-mthreads' 11534 defines `-D_MT'; when linking, it links in a special thread helper 11535 library `-lmingwthrd' which cleans up per thread exception 11536 handling data. 11537 11538 `-mno-align-stringops' 11539 Do not align destination of inlined string operations. This 11540 switch reduces code size and improves performance in case the 11541 destination is already aligned, but GCC doesn't know about it. 11542 11543 `-minline-all-stringops' 11544 By default GCC inlines string operations only when destination is 11545 known to be aligned at least to 4 byte boundary. This enables 11546 more inlining, increase code size, but may improve performance of 11547 code that depends on fast memcpy, strlen and memset for short 11548 lengths. 11549 11550 `-minline-stringops-dynamically' 11551 For string operation of unknown size, inline runtime checks so for 11552 small blocks inline code is used, while for large blocks library 11553 call is used. 11554 11555 `-minline-compares' 11556 This option enables GCC to inline calls to memcmp and strcmp. The 11557 inlined version does a byte-by-byte comparion using a repeat string 11558 operation prefix. 11559 11560 `-mstringop-strategy=ALG' 11561 Overwrite internal decision heuristic about particular algorithm 11562 to inline string operation with. The allowed values are 11563 `rep_byte', `rep_4byte', `rep_8byte' for expanding using i386 11564 `rep' prefix of specified size, `byte_loop', `loop', 11565 `unrolled_loop' for expanding inline loop, `libcall' for always 11566 expanding library call. 11567 11568 `-momit-leaf-frame-pointer' 11569 Don't keep the frame pointer in a register for leaf functions. 11570 This avoids the instructions to save, set up and restore frame 11571 pointers and makes an extra register available in leaf functions. 11572 The option `-fomit-frame-pointer' removes the frame pointer for 11573 all functions which might make debugging harder. 11574 11575 `-mtls-direct-seg-refs' 11576 `-mno-tls-direct-seg-refs' 11577 Controls whether TLS variables may be accessed with offsets from 11578 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or 11579 whether the thread base pointer must be added. Whether or not this 11580 is legal depends on the operating system, and whether it maps the 11581 segment to cover the entire TLS area. 11582 11583 For systems that use GNU libc, the default is on. 11584 11585 `-mfused-madd' 11586 `-mno-fused-madd' 11587 Enable automatic generation of fused floating point multiply-add 11588 instructions if the ISA supports such instructions. The 11589 -mfused-madd option is on by default. The fused multiply-add 11590 instructions have a different rounding behavior compared to 11591 executing a multiply followed by an add. 11592 11593 `-msse2avx' 11594 `-mno-sse2avx' 11595 Specify that the assembler should encode SSE instructions with VEX 11596 prefix. The option `-mavx' turns this on by default. 11597 11598 These `-m' switches are supported in addition to the above on AMD 11599 x86-64 processors in 64-bit environments. 11600 11601 `-m32' 11602 `-m64' 11603 Generate code for a 32-bit or 64-bit environment. The 32-bit 11604 environment sets int, long and pointer to 32 bits and generates 11605 code that runs on any i386 system. The 64-bit environment sets 11606 int to 32 bits and long and pointer to 64 bits and generates code 11607 for AMD's x86-64 architecture. For darwin only the -m64 option 11608 turns off the `-fno-pic' and `-mdynamic-no-pic' options. 11609 11610 `-mno-red-zone' 11611 Do not use a so called red zone for x86-64 code. The red zone is 11612 mandated by the x86-64 ABI, it is a 128-byte area beyond the 11613 location of the stack pointer that will not be modified by signal 11614 or interrupt handlers and therefore can be used for temporary data 11615 without adjusting the stack pointer. The flag `-mno-red-zone' 11616 disables this red zone. 11617 11618 `-mcmodel=small' 11619 Generate code for the small code model: the program and its 11620 symbols must be linked in the lower 2 GB of the address space. 11621 Pointers are 64 bits. Programs can be statically or dynamically 11622 linked. This is the default code model. 11623 11624 `-mcmodel=kernel' 11625 Generate code for the kernel code model. The kernel runs in the 11626 negative 2 GB of the address space. This model has to be used for 11627 Linux kernel code. 11628 11629 `-mcmodel=medium' 11630 Generate code for the medium model: The program is linked in the 11631 lower 2 GB of the address space. Small symbols are also placed 11632 there. Symbols with sizes larger than `-mlarge-data-threshold' 11633 are put into large data or bss sections and can be located above 11634 2GB. Programs can be statically or dynamically linked. 11635 11636 `-mcmodel=large' 11637 Generate code for the large model: This model makes no assumptions 11638 about addresses and sizes of sections. 11639 11640 11641 File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Windows Options, Up: Submodel Options 11642 11643 3.17.16 IA-64 Options 11644 --------------------- 11645 11646 These are the `-m' options defined for the Intel IA-64 architecture. 11647 11648 `-mbig-endian' 11649 Generate code for a big endian target. This is the default for 11650 HP-UX. 11651 11652 `-mlittle-endian' 11653 Generate code for a little endian target. This is the default for 11654 AIX5 and GNU/Linux. 11655 11656 `-mgnu-as' 11657 `-mno-gnu-as' 11658 Generate (or don't) code for the GNU assembler. This is the 11659 default. 11660 11661 `-mgnu-ld' 11662 `-mno-gnu-ld' 11663 Generate (or don't) code for the GNU linker. This is the default. 11664 11665 `-mno-pic' 11666 Generate code that does not use a global pointer register. The 11667 result is not position independent code, and violates the IA-64 11668 ABI. 11669 11670 `-mvolatile-asm-stop' 11671 `-mno-volatile-asm-stop' 11672 Generate (or don't) a stop bit immediately before and after 11673 volatile asm statements. 11674 11675 `-mregister-names' 11676 `-mno-register-names' 11677 Generate (or don't) `in', `loc', and `out' register names for the 11678 stacked registers. This may make assembler output more readable. 11679 11680 `-mno-sdata' 11681 `-msdata' 11682 Disable (or enable) optimizations that use the small data section. 11683 This may be useful for working around optimizer bugs. 11684 11685 `-mconstant-gp' 11686 Generate code that uses a single constant global pointer value. 11687 This is useful when compiling kernel code. 11688 11689 `-mauto-pic' 11690 Generate code that is self-relocatable. This implies 11691 `-mconstant-gp'. This is useful when compiling firmware code. 11692 11693 `-minline-float-divide-min-latency' 11694 Generate code for inline divides of floating point values using 11695 the minimum latency algorithm. 11696 11697 `-minline-float-divide-max-throughput' 11698 Generate code for inline divides of floating point values using 11699 the maximum throughput algorithm. 11700 11701 `-minline-int-divide-min-latency' 11702 Generate code for inline divides of integer values using the 11703 minimum latency algorithm. 11704 11705 `-minline-int-divide-max-throughput' 11706 Generate code for inline divides of integer values using the 11707 maximum throughput algorithm. 11708 11709 `-minline-sqrt-min-latency' 11710 Generate code for inline square roots using the minimum latency 11711 algorithm. 11712 11713 `-minline-sqrt-max-throughput' 11714 Generate code for inline square roots using the maximum throughput 11715 algorithm. 11716 11717 `-mno-dwarf2-asm' 11718 `-mdwarf2-asm' 11719 Don't (or do) generate assembler code for the DWARF2 line number 11720 debugging info. This may be useful when not using the GNU 11721 assembler. 11722 11723 `-mearly-stop-bits' 11724 `-mno-early-stop-bits' 11725 Allow stop bits to be placed earlier than immediately preceding the 11726 instruction that triggered the stop bit. This can improve 11727 instruction scheduling, but does not always do so. 11728 11729 `-mfixed-range=REGISTER-RANGE' 11730 Generate code treating the given register range as fixed registers. 11731 A fixed register is one that the register allocator can not use. 11732 This is useful when compiling kernel code. A register range is 11733 specified as two registers separated by a dash. Multiple register 11734 ranges can be specified separated by a comma. 11735 11736 `-mtls-size=TLS-SIZE' 11737 Specify bit size of immediate TLS offsets. Valid values are 14, 11738 22, and 64. 11739 11740 `-mtune=CPU-TYPE' 11741 Tune the instruction scheduling for a particular CPU, Valid values 11742 are itanium, itanium1, merced, itanium2, and mckinley. 11743 11744 `-mt' 11745 `-pthread' 11746 Add support for multithreading using the POSIX threads library. 11747 This option sets flags for both the preprocessor and linker. It 11748 does not affect the thread safety of object code produced by the 11749 compiler or that of libraries supplied with it. These are HP-UX 11750 specific flags. 11751 11752 `-milp32' 11753 `-mlp64' 11754 Generate code for a 32-bit or 64-bit environment. The 32-bit 11755 environment sets int, long and pointer to 32 bits. The 64-bit 11756 environment sets int to 32 bits and long and pointer to 64 bits. 11757 These are HP-UX specific flags. 11758 11759 `-mno-sched-br-data-spec' 11760 `-msched-br-data-spec' 11761 (Dis/En)able data speculative scheduling before reload. This will 11762 result in generation of the ld.a instructions and the 11763 corresponding check instructions (ld.c / chk.a). The default is 11764 'disable'. 11765 11766 `-msched-ar-data-spec' 11767 `-mno-sched-ar-data-spec' 11768 (En/Dis)able data speculative scheduling after reload. This will 11769 result in generation of the ld.a instructions and the 11770 corresponding check instructions (ld.c / chk.a). The default is 11771 'enable'. 11772 11773 `-mno-sched-control-spec' 11774 `-msched-control-spec' 11775 (Dis/En)able control speculative scheduling. This feature is 11776 available only during region scheduling (i.e. before reload). 11777 This will result in generation of the ld.s instructions and the 11778 corresponding check instructions chk.s . The default is 'disable'. 11779 11780 `-msched-br-in-data-spec' 11781 `-mno-sched-br-in-data-spec' 11782 (En/Dis)able speculative scheduling of the instructions that are 11783 dependent on the data speculative loads before reload. This is 11784 effective only with `-msched-br-data-spec' enabled. The default 11785 is 'enable'. 11786 11787 `-msched-ar-in-data-spec' 11788 `-mno-sched-ar-in-data-spec' 11789 (En/Dis)able speculative scheduling of the instructions that are 11790 dependent on the data speculative loads after reload. This is 11791 effective only with `-msched-ar-data-spec' enabled. The default 11792 is 'enable'. 11793 11794 `-msched-in-control-spec' 11795 `-mno-sched-in-control-spec' 11796 (En/Dis)able speculative scheduling of the instructions that are 11797 dependent on the control speculative loads. This is effective 11798 only with `-msched-control-spec' enabled. The default is 'enable'. 11799 11800 `-msched-ldc' 11801 `-mno-sched-ldc' 11802 (En/Dis)able use of simple data speculation checks ld.c . If 11803 disabled, only chk.a instructions will be emitted to check data 11804 speculative loads. The default is 'enable'. 11805 11806 `-mno-sched-control-ldc' 11807 `-msched-control-ldc' 11808 (Dis/En)able use of ld.c instructions to check control speculative 11809 loads. If enabled, in case of control speculative load with no 11810 speculatively scheduled dependent instructions this load will be 11811 emitted as ld.sa and ld.c will be used to check it. The default 11812 is 'disable'. 11813 11814 `-mno-sched-spec-verbose' 11815 `-msched-spec-verbose' 11816 (Dis/En)able printing of the information about speculative motions. 11817 11818 `-mno-sched-prefer-non-data-spec-insns' 11819 `-msched-prefer-non-data-spec-insns' 11820 If enabled, data speculative instructions will be chosen for 11821 schedule only if there are no other choices at the moment. This 11822 will make the use of the data speculation much more conservative. 11823 The default is 'disable'. 11824 11825 `-mno-sched-prefer-non-control-spec-insns' 11826 `-msched-prefer-non-control-spec-insns' 11827 If enabled, control speculative instructions will be chosen for 11828 schedule only if there are no other choices at the moment. This 11829 will make the use of the control speculation much more 11830 conservative. The default is 'disable'. 11831 11832 `-mno-sched-count-spec-in-critical-path' 11833 `-msched-count-spec-in-critical-path' 11834 If enabled, speculative dependencies will be considered during 11835 computation of the instructions priorities. This will make the 11836 use of the speculation a bit more conservative. The default is 11837 'disable'. 11838 11839 11840 11841 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options 11842 11843 3.17.17 M32C Options 11844 -------------------- 11845 11846 `-mcpu=NAME' 11847 Select the CPU for which code is generated. NAME may be one of 11848 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60) 11849 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80 11850 series. 11851 11852 `-msim' 11853 Specifies that the program will be run on the simulator. This 11854 causes an alternate runtime library to be linked in which 11855 supports, for example, file I/O. You must not use this option 11856 when generating programs that will run on real hardware; you must 11857 provide your own runtime library for whatever I/O functions are 11858 needed. 11859 11860 `-memregs=NUMBER' 11861 Specifies the number of memory-based pseudo-registers GCC will use 11862 during code generation. These pseudo-registers will be used like 11863 real registers, so there is a tradeoff between GCC's ability to 11864 fit the code into available registers, and the performance penalty 11865 of using memory instead of registers. Note that all modules in a 11866 program must be compiled with the same value for this option. 11867 Because of that, you must not use this option with the default 11868 runtime libraries gcc builds. 11869 11870 11871 11872 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options 11873 11874 3.17.18 M32R/D Options 11875 ---------------------- 11876 11877 These `-m' options are defined for Renesas M32R/D architectures: 11878 11879 `-m32r2' 11880 Generate code for the M32R/2. 11881 11882 `-m32rx' 11883 Generate code for the M32R/X. 11884 11885 `-m32r' 11886 Generate code for the M32R. This is the default. 11887 11888 `-mmodel=small' 11889 Assume all objects live in the lower 16MB of memory (so that their 11890 addresses can be loaded with the `ld24' instruction), and assume 11891 all subroutines are reachable with the `bl' instruction. This is 11892 the default. 11893 11894 The addressability of a particular object can be set with the 11895 `model' attribute. 11896 11897 `-mmodel=medium' 11898 Assume objects may be anywhere in the 32-bit address space (the 11899 compiler will generate `seth/add3' instructions to load their 11900 addresses), and assume all subroutines are reachable with the `bl' 11901 instruction. 11902 11903 `-mmodel=large' 11904 Assume objects may be anywhere in the 32-bit address space (the 11905 compiler will generate `seth/add3' instructions to load their 11906 addresses), and assume subroutines may not be reachable with the 11907 `bl' instruction (the compiler will generate the much slower 11908 `seth/add3/jl' instruction sequence). 11909 11910 `-msdata=none' 11911 Disable use of the small data area. Variables will be put into 11912 one of `.data', `bss', or `.rodata' (unless the `section' 11913 attribute has been specified). This is the default. 11914 11915 The small data area consists of sections `.sdata' and `.sbss'. 11916 Objects may be explicitly put in the small data area with the 11917 `section' attribute using one of these sections. 11918 11919 `-msdata=sdata' 11920 Put small global and static data in the small data area, but do not 11921 generate special code to reference them. 11922 11923 `-msdata=use' 11924 Put small global and static data in the small data area, and 11925 generate special instructions to reference them. 11926 11927 `-G NUM' 11928 Put global and static objects less than or equal to NUM bytes into 11929 the small data or bss sections instead of the normal data or bss 11930 sections. The default value of NUM is 8. The `-msdata' option 11931 must be set to one of `sdata' or `use' for this option to have any 11932 effect. 11933 11934 All modules should be compiled with the same `-G NUM' value. 11935 Compiling with different values of NUM may or may not work; if it 11936 doesn't the linker will give an error message--incorrect code will 11937 not be generated. 11938 11939 `-mdebug' 11940 Makes the M32R specific code in the compiler display some 11941 statistics that might help in debugging programs. 11942 11943 `-malign-loops' 11944 Align all loops to a 32-byte boundary. 11945 11946 `-mno-align-loops' 11947 Do not enforce a 32-byte alignment for loops. This is the default. 11948 11949 `-missue-rate=NUMBER' 11950 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2. 11951 11952 `-mbranch-cost=NUMBER' 11953 NUMBER can only be 1 or 2. If it is 1 then branches will be 11954 preferred over conditional code, if it is 2, then the opposite will 11955 apply. 11956 11957 `-mflush-trap=NUMBER' 11958 Specifies the trap number to use to flush the cache. The default 11959 is 12. Valid numbers are between 0 and 15 inclusive. 11960 11961 `-mno-flush-trap' 11962 Specifies that the cache cannot be flushed by using a trap. 11963 11964 `-mflush-func=NAME' 11965 Specifies the name of the operating system function to call to 11966 flush the cache. The default is __flush_cache_, but a function 11967 call will only be used if a trap is not available. 11968 11969 `-mno-flush-func' 11970 Indicates that there is no OS function for flushing the cache. 11971 11972 11973 11974 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options 11975 11976 3.17.19 M680x0 Options 11977 ---------------------- 11978 11979 These are the `-m' options defined for M680x0 and ColdFire processors. 11980 The default settings depend on which architecture was selected when the 11981 compiler was configured; the defaults for the most common choices are 11982 given below. 11983 11984 `-march=ARCH' 11985 Generate code for a specific M680x0 or ColdFire instruction set 11986 architecture. Permissible values of ARCH for M680x0 architectures 11987 are: `68000', `68010', `68020', `68030', `68040', `68060' and 11988 `cpu32'. ColdFire architectures are selected according to 11989 Freescale's ISA classification and the permissible values are: 11990 `isaa', `isaaplus', `isab' and `isac'. 11991 11992 gcc defines a macro `__mcfARCH__' whenever it is generating code 11993 for a ColdFire target. The ARCH in this macro is one of the 11994 `-march' arguments given above. 11995 11996 When used together, `-march' and `-mtune' select code that runs on 11997 a family of similar processors but that is optimized for a 11998 particular microarchitecture. 11999 12000 `-mcpu=CPU' 12001 Generate code for a specific M680x0 or ColdFire processor. The 12002 M680x0 CPUs are: `68000', `68010', `68020', `68030', `68040', 12003 `68060', `68302', `68332' and `cpu32'. The ColdFire CPUs are 12004 given by the table below, which also classifies the CPUs into 12005 families: 12006 12007 *Family* *`-mcpu' arguments* 12008 `51qe' `51qe' 12009 `5206' `5202' `5204' `5206' 12010 `5206e' `5206e' 12011 `5208' `5207' `5208' 12012 `5211a' `5210a' `5211a' 12013 `5213' `5211' `5212' `5213' 12014 `5216' `5214' `5216' 12015 `52235' `52230' `52231' `52232' `52233' `52234' `52235' 12016 `5225' `5224' `5225' 12017 `5235' `5232' `5233' `5234' `5235' `523x' 12018 `5249' `5249' 12019 `5250' `5250' 12020 `5271' `5270' `5271' 12021 `5272' `5272' 12022 `5275' `5274' `5275' 12023 `5282' `5280' `5281' `5282' `528x' 12024 `5307' `5307' 12025 `5329' `5327' `5328' `5329' `532x' 12026 `5373' `5372' `5373' `537x' 12027 `5407' `5407' 12028 `5475' `5470' `5471' `5472' `5473' `5474' `5475' `547x' 12029 `5480' `5481' `5482' `5483' `5484' `5485' 12030 12031 `-mcpu=CPU' overrides `-march=ARCH' if ARCH is compatible with 12032 CPU. Other combinations of `-mcpu' and `-march' are rejected. 12033 12034 gcc defines the macro `__mcf_cpu_CPU' when ColdFire target CPU is 12035 selected. It also defines `__mcf_family_FAMILY', where the value 12036 of FAMILY is given by the table above. 12037 12038 `-mtune=TUNE' 12039 Tune the code for a particular microarchitecture, within the 12040 constraints set by `-march' and `-mcpu'. The M680x0 12041 microarchitectures are: `68000', `68010', `68020', `68030', 12042 `68040', `68060' and `cpu32'. The ColdFire microarchitectures 12043 are: `cfv1', `cfv2', `cfv3', `cfv4' and `cfv4e'. 12044 12045 You can also use `-mtune=68020-40' for code that needs to run 12046 relatively well on 68020, 68030 and 68040 targets. 12047 `-mtune=68020-60' is similar but includes 68060 targets as well. 12048 These two options select the same tuning decisions as `-m68020-40' 12049 and `-m68020-60' respectively. 12050 12051 gcc defines the macros `__mcARCH' and `__mcARCH__' when tuning for 12052 680x0 architecture ARCH. It also defines `mcARCH' unless either 12053 `-ansi' or a non-GNU `-std' option is used. If gcc is tuning for 12054 a range of architectures, as selected by `-mtune=68020-40' or 12055 `-mtune=68020-60', it defines the macros for every architecture in 12056 the range. 12057 12058 gcc also defines the macro `__mUARCH__' when tuning for ColdFire 12059 microarchitecture UARCH, where UARCH is one of the arguments given 12060 above. 12061 12062 `-m68000' 12063 `-mc68000' 12064 Generate output for a 68000. This is the default when the 12065 compiler is configured for 68000-based systems. It is equivalent 12066 to `-march=68000'. 12067 12068 Use this option for microcontrollers with a 68000 or EC000 core, 12069 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356. 12070 12071 `-m68010' 12072 Generate output for a 68010. This is the default when the 12073 compiler is configured for 68010-based systems. It is equivalent 12074 to `-march=68010'. 12075 12076 `-m68020' 12077 `-mc68020' 12078 Generate output for a 68020. This is the default when the 12079 compiler is configured for 68020-based systems. It is equivalent 12080 to `-march=68020'. 12081 12082 `-m68030' 12083 Generate output for a 68030. This is the default when the 12084 compiler is configured for 68030-based systems. It is equivalent 12085 to `-march=68030'. 12086 12087 `-m68040' 12088 Generate output for a 68040. This is the default when the 12089 compiler is configured for 68040-based systems. It is equivalent 12090 to `-march=68040'. 12091 12092 This option inhibits the use of 68881/68882 instructions that have 12093 to be emulated by software on the 68040. Use this option if your 12094 68040 does not have code to emulate those instructions. 12095 12096 `-m68060' 12097 Generate output for a 68060. This is the default when the 12098 compiler is configured for 68060-based systems. It is equivalent 12099 to `-march=68060'. 12100 12101 This option inhibits the use of 68020 and 68881/68882 instructions 12102 that have to be emulated by software on the 68060. Use this 12103 option if your 68060 does not have code to emulate those 12104 instructions. 12105 12106 `-mcpu32' 12107 Generate output for a CPU32. This is the default when the 12108 compiler is configured for CPU32-based systems. It is equivalent 12109 to `-march=cpu32'. 12110 12111 Use this option for microcontrollers with a CPU32 or CPU32+ core, 12112 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340, 12113 68341, 68349 and 68360. 12114 12115 `-m5200' 12116 Generate output for a 520X ColdFire CPU. This is the default when 12117 the compiler is configured for 520X-based systems. It is 12118 equivalent to `-mcpu=5206', and is now deprecated in favor of that 12119 option. 12120 12121 Use this option for microcontroller with a 5200 core, including 12122 the MCF5202, MCF5203, MCF5204 and MCF5206. 12123 12124 `-m5206e' 12125 Generate output for a 5206e ColdFire CPU. The option is now 12126 deprecated in favor of the equivalent `-mcpu=5206e'. 12127 12128 `-m528x' 12129 Generate output for a member of the ColdFire 528X family. The 12130 option is now deprecated in favor of the equivalent `-mcpu=528x'. 12131 12132 `-m5307' 12133 Generate output for a ColdFire 5307 CPU. The option is now 12134 deprecated in favor of the equivalent `-mcpu=5307'. 12135 12136 `-m5407' 12137 Generate output for a ColdFire 5407 CPU. The option is now 12138 deprecated in favor of the equivalent `-mcpu=5407'. 12139 12140 `-mcfv4e' 12141 Generate output for a ColdFire V4e family CPU (e.g. 547x/548x). 12142 This includes use of hardware floating point instructions. The 12143 option is equivalent to `-mcpu=547x', and is now deprecated in 12144 favor of that option. 12145 12146 `-m68020-40' 12147 Generate output for a 68040, without using any of the new 12148 instructions. This results in code which can run relatively 12149 efficiently on either a 68020/68881 or a 68030 or a 68040. The 12150 generated code does use the 68881 instructions that are emulated 12151 on the 68040. 12152 12153 The option is equivalent to `-march=68020' `-mtune=68020-40'. 12154 12155 `-m68020-60' 12156 Generate output for a 68060, without using any of the new 12157 instructions. This results in code which can run relatively 12158 efficiently on either a 68020/68881 or a 68030 or a 68040. The 12159 generated code does use the 68881 instructions that are emulated 12160 on the 68060. 12161 12162 The option is equivalent to `-march=68020' `-mtune=68020-60'. 12163 12164 `-mhard-float' 12165 `-m68881' 12166 Generate floating-point instructions. This is the default for 12167 68020 and above, and for ColdFire devices that have an FPU. It 12168 defines the macro `__HAVE_68881__' on M680x0 targets and 12169 `__mcffpu__' on ColdFire targets. 12170 12171 `-msoft-float' 12172 Do not generate floating-point instructions; use library calls 12173 instead. This is the default for 68000, 68010, and 68832 targets. 12174 It is also the default for ColdFire devices that have no FPU. 12175 12176 `-mdiv' 12177 `-mno-div' 12178 Generate (do not generate) ColdFire hardware divide and remainder 12179 instructions. If `-march' is used without `-mcpu', the default is 12180 "on" for ColdFire architectures and "off" for M680x0 12181 architectures. Otherwise, the default is taken from the target CPU 12182 (either the default CPU, or the one specified by `-mcpu'). For 12183 example, the default is "off" for `-mcpu=5206' and "on" for 12184 `-mcpu=5206e'. 12185 12186 gcc defines the macro `__mcfhwdiv__' when this option is enabled. 12187 12188 `-mshort' 12189 Consider type `int' to be 16 bits wide, like `short int'. 12190 Additionally, parameters passed on the stack are also aligned to a 12191 16-bit boundary even on targets whose API mandates promotion to 12192 32-bit. 12193 12194 `-mno-short' 12195 Do not consider type `int' to be 16 bits wide. This is the 12196 default. 12197 12198 `-mnobitfield' 12199 `-mno-bitfield' 12200 Do not use the bit-field instructions. The `-m68000', `-mcpu32' 12201 and `-m5200' options imply `-mnobitfield'. 12202 12203 `-mbitfield' 12204 Do use the bit-field instructions. The `-m68020' option implies 12205 `-mbitfield'. This is the default if you use a configuration 12206 designed for a 68020. 12207 12208 `-mrtd' 12209 Use a different function-calling convention, in which functions 12210 that take a fixed number of arguments return with the `rtd' 12211 instruction, which pops their arguments while returning. This 12212 saves one instruction in the caller since there is no need to pop 12213 the arguments there. 12214 12215 This calling convention is incompatible with the one normally used 12216 on Unix, so you cannot use it if you need to call libraries 12217 compiled with the Unix compiler. 12218 12219 Also, you must provide function prototypes for all functions that 12220 take variable numbers of arguments (including `printf'); otherwise 12221 incorrect code will be generated for calls to those functions. 12222 12223 In addition, seriously incorrect code will result if you call a 12224 function with too many arguments. (Normally, extra arguments are 12225 harmlessly ignored.) 12226 12227 The `rtd' instruction is supported by the 68010, 68020, 68030, 12228 68040, 68060 and CPU32 processors, but not by the 68000 or 5200. 12229 12230 `-mno-rtd' 12231 Do not use the calling conventions selected by `-mrtd'. This is 12232 the default. 12233 12234 `-malign-int' 12235 `-mno-align-int' 12236 Control whether GCC aligns `int', `long', `long long', `float', 12237 `double', and `long double' variables on a 32-bit boundary 12238 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning 12239 variables on 32-bit boundaries produces code that runs somewhat 12240 faster on processors with 32-bit busses at the expense of more 12241 memory. 12242 12243 *Warning:* if you use the `-malign-int' switch, GCC will align 12244 structures containing the above types differently than most 12245 published application binary interface specifications for the m68k. 12246 12247 `-mpcrel' 12248 Use the pc-relative addressing mode of the 68000 directly, instead 12249 of using a global offset table. At present, this option implies 12250 `-fpic', allowing at most a 16-bit offset for pc-relative 12251 addressing. `-fPIC' is not presently supported with `-mpcrel', 12252 though this could be supported for 68020 and higher processors. 12253 12254 `-mno-strict-align' 12255 `-mstrict-align' 12256 Do not (do) assume that unaligned memory references will be 12257 handled by the system. 12258 12259 `-msep-data' 12260 Generate code that allows the data segment to be located in a 12261 different area of memory from the text segment. This allows for 12262 execute in place in an environment without virtual memory 12263 management. This option implies `-fPIC'. 12264 12265 `-mno-sep-data' 12266 Generate code that assumes that the data segment follows the text 12267 segment. This is the default. 12268 12269 `-mid-shared-library' 12270 Generate code that supports shared libraries via the library ID 12271 method. This allows for execute in place and shared libraries in 12272 an environment without virtual memory management. This option 12273 implies `-fPIC'. 12274 12275 `-mno-id-shared-library' 12276 Generate code that doesn't assume ID based shared libraries are 12277 being used. This is the default. 12278 12279 `-mshared-library-id=n' 12280 Specified the identification number of the ID based shared library 12281 being compiled. Specifying a value of 0 will generate more 12282 compact code, specifying other values will force the allocation of 12283 that number to the current library but is no more space or time 12284 efficient than omitting this option. 12285 12286 `-mxgot' 12287 `-mno-xgot' 12288 When generating position-independent code for ColdFire, generate 12289 code that works if the GOT has more than 8192 entries. This code 12290 is larger and slower than code generated without this option. On 12291 M680x0 processors, this option is not needed; `-fPIC' suffices. 12292 12293 GCC normally uses a single instruction to load values from the GOT. 12294 While this is relatively efficient, it only works if the GOT is 12295 smaller than about 64k. Anything larger causes the linker to 12296 report an error such as: 12297 12298 relocation truncated to fit: R_68K_GOT16O foobar 12299 12300 If this happens, you should recompile your code with `-mxgot'. It 12301 should then work with very large GOTs. However, code generated 12302 with `-mxgot' is less efficient, since it takes 4 instructions to 12303 fetch the value of a global symbol. 12304 12305 Note that some linkers, including newer versions of the GNU linker, 12306 can create multiple GOTs and sort GOT entries. If you have such a 12307 linker, you should only need to use `-mxgot' when compiling a 12308 single object file that accesses more than 8192 GOT entries. Very 12309 few do. 12310 12311 These options have no effect unless GCC is generating 12312 position-independent code. 12313 12314 12315 12316 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options 12317 12318 3.17.20 M68hc1x Options 12319 ----------------------- 12320 12321 These are the `-m' options defined for the 68hc11 and 68hc12 12322 microcontrollers. The default values for these options depends on 12323 which style of microcontroller was selected when the compiler was 12324 configured; the defaults for the most common choices are given below. 12325 12326 `-m6811' 12327 `-m68hc11' 12328 Generate output for a 68HC11. This is the default when the 12329 compiler is configured for 68HC11-based systems. 12330 12331 `-m6812' 12332 `-m68hc12' 12333 Generate output for a 68HC12. This is the default when the 12334 compiler is configured for 68HC12-based systems. 12335 12336 `-m68S12' 12337 `-m68hcs12' 12338 Generate output for a 68HCS12. 12339 12340 `-mauto-incdec' 12341 Enable the use of 68HC12 pre and post auto-increment and 12342 auto-decrement addressing modes. 12343 12344 `-minmax' 12345 `-nominmax' 12346 Enable the use of 68HC12 min and max instructions. 12347 12348 `-mlong-calls' 12349 `-mno-long-calls' 12350 Treat all calls as being far away (near). If calls are assumed to 12351 be far away, the compiler will use the `call' instruction to call 12352 a function and the `rtc' instruction for returning. 12353 12354 `-mshort' 12355 Consider type `int' to be 16 bits wide, like `short int'. 12356 12357 `-msoft-reg-count=COUNT' 12358 Specify the number of pseudo-soft registers which are used for the 12359 code generation. The maximum number is 32. Using more pseudo-soft 12360 register may or may not result in better code depending on the 12361 program. The default is 4 for 68HC11 and 2 for 68HC12. 12362 12363 12364 12365 File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options 12366 12367 3.17.21 MCore Options 12368 --------------------- 12369 12370 These are the `-m' options defined for the Motorola M*Core processors. 12371 12372 `-mhardlit' 12373 `-mno-hardlit' 12374 Inline constants into the code stream if it can be done in two 12375 instructions or less. 12376 12377 `-mdiv' 12378 `-mno-div' 12379 Use the divide instruction. (Enabled by default). 12380 12381 `-mrelax-immediate' 12382 `-mno-relax-immediate' 12383 Allow arbitrary sized immediates in bit operations. 12384 12385 `-mwide-bitfields' 12386 `-mno-wide-bitfields' 12387 Always treat bit-fields as int-sized. 12388 12389 `-m4byte-functions' 12390 `-mno-4byte-functions' 12391 Force all functions to be aligned to a four byte boundary. 12392 12393 `-mcallgraph-data' 12394 `-mno-callgraph-data' 12395 Emit callgraph information. 12396 12397 `-mslow-bytes' 12398 `-mno-slow-bytes' 12399 Prefer word access when reading byte quantities. 12400 12401 `-mlittle-endian' 12402 `-mbig-endian' 12403 Generate code for a little endian target. 12404 12405 `-m210' 12406 `-m340' 12407 Generate code for the 210 processor. 12408 12409 `-mno-lsim' 12410 Assume that run-time support has been provided and so omit the 12411 simulator library (`libsim.a)' from the linker command line. 12412 12413 `-mstack-increment=SIZE' 12414 Set the maximum amount for a single stack increment operation. 12415 Large values can increase the speed of programs which contain 12416 functions that need a large amount of stack space, but they can 12417 also trigger a segmentation fault if the stack is extended too 12418 much. The default value is 0x1000. 12419 12420 12421 12422 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options 12423 12424 3.17.22 MIPS Options 12425 -------------------- 12426 12427 `-EB' 12428 Generate big-endian code. 12429 12430 `-EL' 12431 Generate little-endian code. This is the default for `mips*el-*-*' 12432 configurations. 12433 12434 `-march=ARCH' 12435 Generate code that will run on ARCH, which can be the name of a 12436 generic MIPS ISA, or the name of a particular processor. The ISA 12437 names are: `mips1', `mips2', `mips3', `mips4', `mips32', 12438 `mips32r2', `mips64' and `mips64r2'. The processor names are: 12439 `4kc', `4km', `4kp', `4ksc', `4kec', `4kem', `4kep', `4ksd', 12440 `5kc', `5kf', `20kc', `24kc', `24kf2_1', `24kf1_1', `24kec', 12441 `24kef2_1', `24kef1_1', `34kc', `34kf2_1', `34kf1_1', `74kc', 12442 `74kf2_1', `74kf1_1', `74kf3_2', `loongson2e', `loongson2f', `m4k', 12443 `octeon', `orion', `r2000', `r3000', `r3900', `r4000', `r4400', 12444 `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `r10000', 12445 `r12000', `r14000', `r16000', `sb1', `sr71000', `vr4100', 12446 `vr4111', `vr4120', `vr4130', `vr4300', `vr5000', `vr5400', 12447 `vr5500' and `xlr'. The special value `from-abi' selects the most 12448 compatible architecture for the selected ABI (that is, `mips1' for 12449 32-bit ABIs and `mips3' for 64-bit ABIs). 12450 12451 Native Linux/GNU toolchains also support the value `native', which 12452 selects the best architecture option for the host processor. 12453 `-march=native' has no effect if GCC does not recognize the 12454 processor. 12455 12456 In processor names, a final `000' can be abbreviated as `k' (for 12457 example, `-march=r2k'). Prefixes are optional, and `vr' may be 12458 written `r'. 12459 12460 Names of the form `Nf2_1' refer to processors with FPUs clocked at 12461 half the rate of the core, names of the form `Nf1_1' refer to 12462 processors with FPUs clocked at the same rate as the core, and 12463 names of the form `Nf3_2' refer to processors with FPUs clocked a 12464 ratio of 3:2 with respect to the core. For compatibility reasons, 12465 `Nf' is accepted as a synonym for `Nf2_1' while `Nx' and `Bfx' are 12466 accepted as synonyms for `Nf1_1'. 12467 12468 GCC defines two macros based on the value of this option. The 12469 first is `_MIPS_ARCH', which gives the name of target 12470 architecture, as a string. The second has the form 12471 `_MIPS_ARCH_FOO', where FOO is the capitalized value of 12472 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH' 12473 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'. 12474 12475 Note that the `_MIPS_ARCH' macro uses the processor names given 12476 above. In other words, it will have the full prefix and will not 12477 abbreviate `000' as `k'. In the case of `from-abi', the macro 12478 names the resolved architecture (either `"mips1"' or `"mips3"'). 12479 It names the default architecture when no `-march' option is given. 12480 12481 `-mtune=ARCH' 12482 Optimize for ARCH. Among other things, this option controls the 12483 way instructions are scheduled, and the perceived cost of 12484 arithmetic operations. The list of ARCH values is the same as for 12485 `-march'. 12486 12487 When this option is not used, GCC will optimize for the processor 12488 specified by `-march'. By using `-march' and `-mtune' together, 12489 it is possible to generate code that will run on a family of 12490 processors, but optimize the code for one particular member of 12491 that family. 12492 12493 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO', 12494 which work in the same way as the `-march' ones described above. 12495 12496 `-mips1' 12497 Equivalent to `-march=mips1'. 12498 12499 `-mips2' 12500 Equivalent to `-march=mips2'. 12501 12502 `-mips3' 12503 Equivalent to `-march=mips3'. 12504 12505 `-mips4' 12506 Equivalent to `-march=mips4'. 12507 12508 `-mips32' 12509 Equivalent to `-march=mips32'. 12510 12511 `-mips32r2' 12512 Equivalent to `-march=mips32r2'. 12513 12514 `-mips64' 12515 Equivalent to `-march=mips64'. 12516 12517 `-mips64r2' 12518 Equivalent to `-march=mips64r2'. 12519 12520 `-mips16' 12521 `-mno-mips16' 12522 Generate (do not generate) MIPS16 code. If GCC is targetting a 12523 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE. 12524 12525 MIPS16 code generation can also be controlled on a per-function 12526 basis by means of `mips16' and `nomips16' attributes. *Note 12527 Function Attributes::, for more information. 12528 12529 `-mflip-mips16' 12530 Generate MIPS16 code on alternating functions. This option is 12531 provided for regression testing of mixed MIPS16/non-MIPS16 code 12532 generation, and is not intended for ordinary use in compiling user 12533 code. 12534 12535 `-minterlink-mips16' 12536 `-mno-interlink-mips16' 12537 Require (do not require) that non-MIPS16 code be link-compatible 12538 with MIPS16 code. 12539 12540 For example, non-MIPS16 code cannot jump directly to MIPS16 code; 12541 it must either use a call or an indirect jump. 12542 `-minterlink-mips16' therefore disables direct jumps unless GCC 12543 knows that the target of the jump is not MIPS16. 12544 12545 `-mabi=32' 12546 `-mabi=o64' 12547 `-mabi=n32' 12548 `-mabi=64' 12549 `-mabi=eabi' 12550 Generate code for the given ABI. 12551 12552 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally 12553 generates 64-bit code when you select a 64-bit architecture, but 12554 you can use `-mgp32' to get 32-bit code instead. 12555 12556 For information about the O64 ABI, see 12557 `http://gcc.gnu.org/projects/mipso64-abi.html'. 12558 12559 GCC supports a variant of the o32 ABI in which floating-point 12560 registers are 64 rather than 32 bits wide. You can select this 12561 combination with `-mabi=32' `-mfp64'. This ABI relies on the 12562 `mthc1' and `mfhc1' instructions and is therefore only supported 12563 for MIPS32R2 processors. 12564 12565 The register assignments for arguments and return values remain the 12566 same, but each scalar value is passed in a single 64-bit register 12567 rather than a pair of 32-bit registers. For example, scalar 12568 floating-point values are returned in `$f0' only, not a 12569 `$f0'/`$f1' pair. The set of call-saved registers also remains 12570 the same, but all 64 bits are saved. 12571 12572 `-mabicalls' 12573 `-mno-abicalls' 12574 Generate (do not generate) code that is suitable for SVR4-style 12575 dynamic objects. `-mabicalls' is the default for SVR4-based 12576 systems. 12577 12578 `-mshared' 12579 `-mno-shared' 12580 Generate (do not generate) code that is fully position-independent, 12581 and that can therefore be linked into shared libraries. This 12582 option only affects `-mabicalls'. 12583 12584 All `-mabicalls' code has traditionally been position-independent, 12585 regardless of options like `-fPIC' and `-fpic'. However, as an 12586 extension, the GNU toolchain allows executables to use absolute 12587 accesses for locally-binding symbols. It can also use shorter GP 12588 initialization sequences and generate direct calls to 12589 locally-defined functions. This mode is selected by `-mno-shared'. 12590 12591 `-mno-shared' depends on binutils 2.16 or higher and generates 12592 objects that can only be linked by the GNU linker. However, the 12593 option does not affect the ABI of the final executable; it only 12594 affects the ABI of relocatable objects. Using `-mno-shared' will 12595 generally make executables both smaller and quicker. 12596 12597 `-mshared' is the default. 12598 12599 `-mplt' 12600 `-mno-plt' 12601 Assume (do not assume) that the static and dynamic linkers support 12602 PLTs and copy relocations. This option only affects `-mno-shared 12603 -mabicalls'. For the n64 ABI, this option has no effect without 12604 `-msym32'. 12605 12606 You can make `-mplt' the default by configuring GCC with 12607 `--with-mips-plt'. The default is `-mno-plt' otherwise. 12608 12609 `-mxgot' 12610 `-mno-xgot' 12611 Lift (do not lift) the usual restrictions on the size of the global 12612 offset table. 12613 12614 GCC normally uses a single instruction to load values from the GOT. 12615 While this is relatively efficient, it will only work if the GOT 12616 is smaller than about 64k. Anything larger will cause the linker 12617 to report an error such as: 12618 12619 relocation truncated to fit: R_MIPS_GOT16 foobar 12620 12621 If this happens, you should recompile your code with `-mxgot'. It 12622 should then work with very large GOTs, although it will also be 12623 less efficient, since it will take three instructions to fetch the 12624 value of a global symbol. 12625 12626 Note that some linkers can create multiple GOTs. If you have such 12627 a linker, you should only need to use `-mxgot' when a single object 12628 file accesses more than 64k's worth of GOT entries. Very few do. 12629 12630 These options have no effect unless GCC is generating position 12631 independent code. 12632 12633 `-mgp32' 12634 Assume that general-purpose registers are 32 bits wide. 12635 12636 `-mgp64' 12637 Assume that general-purpose registers are 64 bits wide. 12638 12639 `-mfp32' 12640 Assume that floating-point registers are 32 bits wide. 12641 12642 `-mfp64' 12643 Assume that floating-point registers are 64 bits wide. 12644 12645 `-mhard-float' 12646 Use floating-point coprocessor instructions. 12647 12648 `-msoft-float' 12649 Do not use floating-point coprocessor instructions. Implement 12650 floating-point calculations using library calls instead. 12651 12652 `-msingle-float' 12653 Assume that the floating-point coprocessor only supports 12654 single-precision operations. 12655 12656 `-mdouble-float' 12657 Assume that the floating-point coprocessor supports 12658 double-precision operations. This is the default. 12659 12660 `-mllsc' 12661 `-mno-llsc' 12662 Use (do not use) `ll', `sc', and `sync' instructions to implement 12663 atomic memory built-in functions. When neither option is 12664 specified, GCC will use the instructions if the target architecture 12665 supports them. 12666 12667 `-mllsc' is useful if the runtime environment can emulate the 12668 instructions and `-mno-llsc' can be useful when compiling for 12669 nonstandard ISAs. You can make either option the default by 12670 configuring GCC with `--with-llsc' and `--without-llsc' 12671 respectively. `--with-llsc' is the default for some 12672 configurations; see the installation documentation for details. 12673 12674 `-mdsp' 12675 `-mno-dsp' 12676 Use (do not use) revision 1 of the MIPS DSP ASE. *Note MIPS DSP 12677 Built-in Functions::. This option defines the preprocessor macro 12678 `__mips_dsp'. It also defines `__mips_dsp_rev' to 1. 12679 12680 `-mdspr2' 12681 `-mno-dspr2' 12682 Use (do not use) revision 2 of the MIPS DSP ASE. *Note MIPS DSP 12683 Built-in Functions::. This option defines the preprocessor macros 12684 `__mips_dsp' and `__mips_dspr2'. It also defines `__mips_dsp_rev' 12685 to 2. 12686 12687 `-msmartmips' 12688 `-mno-smartmips' 12689 Use (do not use) the MIPS SmartMIPS ASE. 12690 12691 `-mpaired-single' 12692 `-mno-paired-single' 12693 Use (do not use) paired-single floating-point instructions. *Note 12694 MIPS Paired-Single Support::. This option requires hardware 12695 floating-point support to be enabled. 12696 12697 `-mdmx' 12698 `-mno-mdmx' 12699 Use (do not use) MIPS Digital Media Extension instructions. This 12700 option can only be used when generating 64-bit code and requires 12701 hardware floating-point support to be enabled. 12702 12703 `-mips3d' 12704 `-mno-mips3d' 12705 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in 12706 Functions::. The option `-mips3d' implies `-mpaired-single'. 12707 12708 `-mmt' 12709 `-mno-mt' 12710 Use (do not use) MT Multithreading instructions. 12711 12712 `-mlong64' 12713 Force `long' types to be 64 bits wide. See `-mlong32' for an 12714 explanation of the default and the way that the pointer size is 12715 determined. 12716 12717 `-mlong32' 12718 Force `long', `int', and pointer types to be 32 bits wide. 12719 12720 The default size of `int's, `long's and pointers depends on the 12721 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses 12722 64-bit `long's, as does the 64-bit EABI; the others use 32-bit 12723 `long's. Pointers are the same size as `long's, or the same size 12724 as integer registers, whichever is smaller. 12725 12726 `-msym32' 12727 `-mno-sym32' 12728 Assume (do not assume) that all symbols have 32-bit values, 12729 regardless of the selected ABI. This option is useful in 12730 combination with `-mabi=64' and `-mno-abicalls' because it allows 12731 GCC to generate shorter and faster references to symbolic 12732 addresses. 12733 12734 `-G NUM' 12735 Put definitions of externally-visible data in a small data section 12736 if that data is no bigger than NUM bytes. GCC can then access the 12737 data more efficiently; see `-mgpopt' for details. 12738 12739 The default `-G' option depends on the configuration. 12740 12741 `-mlocal-sdata' 12742 `-mno-local-sdata' 12743 Extend (do not extend) the `-G' behavior to local data too, such 12744 as to static variables in C. `-mlocal-sdata' is the default for 12745 all configurations. 12746 12747 If the linker complains that an application is using too much 12748 small data, you might want to try rebuilding the less 12749 performance-critical parts with `-mno-local-sdata'. You might 12750 also want to build large libraries with `-mno-local-sdata', so 12751 that the libraries leave more room for the main program. 12752 12753 `-mextern-sdata' 12754 `-mno-extern-sdata' 12755 Assume (do not assume) that externally-defined data will be in a 12756 small data section if that data is within the `-G' limit. 12757 `-mextern-sdata' is the default for all configurations. 12758 12759 If you compile a module MOD with `-mextern-sdata' `-G NUM' 12760 `-mgpopt', and MOD references a variable VAR that is no bigger 12761 than NUM bytes, you must make sure that VAR is placed in a small 12762 data section. If VAR is defined by another module, you must 12763 either compile that module with a high-enough `-G' setting or 12764 attach a `section' attribute to VAR's definition. If VAR is 12765 common, you must link the application with a high-enough `-G' 12766 setting. 12767 12768 The easiest way of satisfying these restrictions is to compile and 12769 link every module with the same `-G' option. However, you may 12770 wish to build a library that supports several different small data 12771 limits. You can do this by compiling the library with the highest 12772 supported `-G' setting and additionally using `-mno-extern-sdata' 12773 to stop the library from making assumptions about 12774 externally-defined data. 12775 12776 `-mgpopt' 12777 `-mno-gpopt' 12778 Use (do not use) GP-relative accesses for symbols that are known 12779 to be in a small data section; see `-G', `-mlocal-sdata' and 12780 `-mextern-sdata'. `-mgpopt' is the default for all configurations. 12781 12782 `-mno-gpopt' is useful for cases where the `$gp' register might 12783 not hold the value of `_gp'. For example, if the code is part of 12784 a library that might be used in a boot monitor, programs that call 12785 boot monitor routines will pass an unknown value in `$gp'. (In 12786 such situations, the boot monitor itself would usually be compiled 12787 with `-G0'.) 12788 12789 `-mno-gpopt' implies `-mno-local-sdata' and `-mno-extern-sdata'. 12790 12791 `-membedded-data' 12792 `-mno-embedded-data' 12793 Allocate variables to the read-only data section first if 12794 possible, then next in the small data section if possible, 12795 otherwise in data. This gives slightly slower code than the 12796 default, but reduces the amount of RAM required when executing, 12797 and thus may be preferred for some embedded systems. 12798 12799 `-muninit-const-in-rodata' 12800 `-mno-uninit-const-in-rodata' 12801 Put uninitialized `const' variables in the read-only data section. 12802 This option is only meaningful in conjunction with 12803 `-membedded-data'. 12804 12805 `-mcode-readable=SETTING' 12806 Specify whether GCC may generate code that reads from executable 12807 sections. There are three possible settings: 12808 12809 `-mcode-readable=yes' 12810 Instructions may freely access executable sections. This is 12811 the default setting. 12812 12813 `-mcode-readable=pcrel' 12814 MIPS16 PC-relative load instructions can access executable 12815 sections, but other instructions must not do so. This option 12816 is useful on 4KSc and 4KSd processors when the code TLBs have 12817 the Read Inhibit bit set. It is also useful on processors 12818 that can be configured to have a dual instruction/data SRAM 12819 interface and that, like the M4K, automatically redirect 12820 PC-relative loads to the instruction RAM. 12821 12822 `-mcode-readable=no' 12823 Instructions must not access executable sections. This 12824 option can be useful on targets that are configured to have a 12825 dual instruction/data SRAM interface but that (unlike the 12826 M4K) do not automatically redirect PC-relative loads to the 12827 instruction RAM. 12828 12829 `-msplit-addresses' 12830 `-mno-split-addresses' 12831 Enable (disable) use of the `%hi()' and `%lo()' assembler 12832 relocation operators. This option has been superseded by 12833 `-mexplicit-relocs' but is retained for backwards compatibility. 12834 12835 `-mexplicit-relocs' 12836 `-mno-explicit-relocs' 12837 Use (do not use) assembler relocation operators when dealing with 12838 symbolic addresses. The alternative, selected by 12839 `-mno-explicit-relocs', is to use assembler macros instead. 12840 12841 `-mexplicit-relocs' is the default if GCC was configured to use an 12842 assembler that supports relocation operators. 12843 12844 `-mcheck-zero-division' 12845 `-mno-check-zero-division' 12846 Trap (do not trap) on integer division by zero. 12847 12848 The default is `-mcheck-zero-division'. 12849 12850 `-mdivide-traps' 12851 `-mdivide-breaks' 12852 MIPS systems check for division by zero by generating either a 12853 conditional trap or a break instruction. Using traps results in 12854 smaller code, but is only supported on MIPS II and later. Also, 12855 some versions of the Linux kernel have a bug that prevents trap 12856 from generating the proper signal (`SIGFPE'). Use 12857 `-mdivide-traps' to allow conditional traps on architectures that 12858 support them and `-mdivide-breaks' to force the use of breaks. 12859 12860 The default is usually `-mdivide-traps', but this can be 12861 overridden at configure time using `--with-divide=breaks'. 12862 Divide-by-zero checks can be completely disabled using 12863 `-mno-check-zero-division'. 12864 12865 `-mmemcpy' 12866 `-mno-memcpy' 12867 Force (do not force) the use of `memcpy()' for non-trivial block 12868 moves. The default is `-mno-memcpy', which allows GCC to inline 12869 most constant-sized copies. 12870 12871 `-mlong-calls' 12872 `-mno-long-calls' 12873 Disable (do not disable) use of the `jal' instruction. Calling 12874 functions using `jal' is more efficient but requires the caller 12875 and callee to be in the same 256 megabyte segment. 12876 12877 This option has no effect on abicalls code. The default is 12878 `-mno-long-calls'. 12879 12880 `-mmad' 12881 `-mno-mad' 12882 Enable (disable) use of the `mad', `madu' and `mul' instructions, 12883 as provided by the R4650 ISA. 12884 12885 `-mfused-madd' 12886 `-mno-fused-madd' 12887 Enable (disable) use of the floating point multiply-accumulate 12888 instructions, when they are available. The default is 12889 `-mfused-madd'. 12890 12891 When multiply-accumulate instructions are used, the intermediate 12892 product is calculated to infinite precision and is not subject to 12893 the FCSR Flush to Zero bit. This may be undesirable in some 12894 circumstances. 12895 12896 `-nocpp' 12897 Tell the MIPS assembler to not run its preprocessor over user 12898 assembler files (with a `.s' suffix) when assembling them. 12899 12900 `-mfix-r4000' 12901 `-mno-fix-r4000' 12902 Work around certain R4000 CPU errata: 12903 - A double-word or a variable shift may give an incorrect 12904 result if executed immediately after starting an integer 12905 division. 12906 12907 - A double-word or a variable shift may give an incorrect 12908 result if executed while an integer multiplication is in 12909 progress. 12910 12911 - An integer division may give an incorrect result if started 12912 in a delay slot of a taken branch or a jump. 12913 12914 `-mfix-r4400' 12915 `-mno-fix-r4400' 12916 Work around certain R4400 CPU errata: 12917 - A double-word or a variable shift may give an incorrect 12918 result if executed immediately after starting an integer 12919 division. 12920 12921 `-mfix-r10000' 12922 `-mno-fix-r10000' 12923 Work around certain R10000 errata: 12924 - `ll'/`sc' sequences may not behave atomically on revisions 12925 prior to 3.0. They may deadlock on revisions 2.6 and earlier. 12926 12927 This option can only be used if the target architecture supports 12928 branch-likely instructions. `-mfix-r10000' is the default when 12929 `-march=r10000' is used; `-mno-fix-r10000' is the default 12930 otherwise. 12931 12932 `-mfix-vr4120' 12933 `-mno-fix-vr4120' 12934 Work around certain VR4120 errata: 12935 - `dmultu' does not always produce the correct result. 12936 12937 - `div' and `ddiv' do not always produce the correct result if 12938 one of the operands is negative. 12939 The workarounds for the division errata rely on special functions 12940 in `libgcc.a'. At present, these functions are only provided by 12941 the `mips64vr*-elf' configurations. 12942 12943 Other VR4120 errata require a nop to be inserted between certain 12944 pairs of instructions. These errata are handled by the assembler, 12945 not by GCC itself. 12946 12947 `-mfix-vr4130' 12948 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are 12949 implemented by the assembler rather than by GCC, although GCC will 12950 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi', 12951 `dmacc' and `dmacchi' instructions are available instead. 12952 12953 `-mfix-sb1' 12954 `-mno-fix-sb1' 12955 Work around certain SB-1 CPU core errata. (This flag currently 12956 works around the SB-1 revision 2 "F1" and "F2" floating point 12957 errata.) 12958 12959 `-mr10k-cache-barrier=SETTING' 12960 Specify whether GCC should insert cache barriers to avoid the 12961 side-effects of speculation on R10K processors. 12962 12963 In common with many processors, the R10K tries to predict the 12964 outcome of a conditional branch and speculatively executes 12965 instructions from the "taken" branch. It later aborts these 12966 instructions if the predicted outcome was wrong. However, on the 12967 R10K, even aborted instructions can have side effects. 12968 12969 This problem only affects kernel stores and, depending on the 12970 system, kernel loads. As an example, a speculatively-executed 12971 store may load the target memory into cache and mark the cache 12972 line as dirty, even if the store itself is later aborted. If a 12973 DMA operation writes to the same area of memory before the "dirty" 12974 line is flushed, the cached data will overwrite the DMA-ed data. 12975 See the R10K processor manual for a full description, including 12976 other potential problems. 12977 12978 One workaround is to insert cache barrier instructions before 12979 every memory access that might be speculatively executed and that 12980 might have side effects even if aborted. 12981 `-mr10k-cache-barrier=SETTING' controls GCC's implementation of 12982 this workaround. It assumes that aborted accesses to any byte in 12983 the following regions will not have side effects: 12984 12985 1. the memory occupied by the current function's stack frame; 12986 12987 2. the memory occupied by an incoming stack argument; 12988 12989 3. the memory occupied by an object with a link-time-constant 12990 address. 12991 12992 It is the kernel's responsibility to ensure that speculative 12993 accesses to these regions are indeed safe. 12994 12995 If the input program contains a function declaration such as: 12996 12997 void foo (void); 12998 12999 then the implementation of `foo' must allow `j foo' and `jal foo' 13000 to be executed speculatively. GCC honors this restriction for 13001 functions it compiles itself. It expects non-GCC functions (such 13002 as hand-written assembly code) to do the same. 13003 13004 The option has three forms: 13005 13006 `-mr10k-cache-barrier=load-store' 13007 Insert a cache barrier before a load or store that might be 13008 speculatively executed and that might have side effects even 13009 if aborted. 13010 13011 `-mr10k-cache-barrier=store' 13012 Insert a cache barrier before a store that might be 13013 speculatively executed and that might have side effects even 13014 if aborted. 13015 13016 `-mr10k-cache-barrier=none' 13017 Disable the insertion of cache barriers. This is the default 13018 setting. 13019 13020 `-mflush-func=FUNC' 13021 `-mno-flush-func' 13022 Specifies the function to call to flush the I and D caches, or to 13023 not call any such function. If called, the function must take the 13024 same arguments as the common `_flush_func()', that is, the address 13025 of the memory range for which the cache is being flushed, the size 13026 of the memory range, and the number 3 (to flush both caches). The 13027 default depends on the target GCC was configured for, but commonly 13028 is either `_flush_func' or `__cpu_flush'. 13029 13030 `mbranch-cost=NUM' 13031 Set the cost of branches to roughly NUM "simple" instructions. 13032 This cost is only a heuristic and is not guaranteed to produce 13033 consistent results across releases. A zero cost redundantly 13034 selects the default, which is based on the `-mtune' setting. 13035 13036 `-mbranch-likely' 13037 `-mno-branch-likely' 13038 Enable or disable use of Branch Likely instructions, regardless of 13039 the default for the selected architecture. By default, Branch 13040 Likely instructions may be generated if they are supported by the 13041 selected architecture. An exception is for the MIPS32 and MIPS64 13042 architectures and processors which implement those architectures; 13043 for those, Branch Likely instructions will not be generated by 13044 default because the MIPS32 and MIPS64 architectures specifically 13045 deprecate their use. 13046 13047 `-mfp-exceptions' 13048 `-mno-fp-exceptions' 13049 Specifies whether FP exceptions are enabled. This affects how we 13050 schedule FP instructions for some processors. The default is that 13051 FP exceptions are enabled. 13052 13053 For instance, on the SB-1, if FP exceptions are disabled, and we 13054 are emitting 64-bit code, then we can use both FP pipes. 13055 Otherwise, we can only use one FP pipe. 13056 13057 `-mvr4130-align' 13058 `-mno-vr4130-align' 13059 The VR4130 pipeline is two-way superscalar, but can only issue two 13060 instructions together if the first one is 8-byte aligned. When 13061 this option is enabled, GCC will align pairs of instructions that 13062 it thinks should execute in parallel. 13063 13064 This option only has an effect when optimizing for the VR4130. It 13065 normally makes code faster, but at the expense of making it bigger. 13066 It is enabled by default at optimization level `-O3'. 13067 13068 13069 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options 13070 13071 3.17.23 MMIX Options 13072 -------------------- 13073 13074 These options are defined for the MMIX: 13075 13076 `-mlibfuncs' 13077 `-mno-libfuncs' 13078 Specify that intrinsic library functions are being compiled, 13079 passing all values in registers, no matter the size. 13080 13081 `-mepsilon' 13082 `-mno-epsilon' 13083 Generate floating-point comparison instructions that compare with 13084 respect to the `rE' epsilon register. 13085 13086 `-mabi=mmixware' 13087 `-mabi=gnu' 13088 Generate code that passes function parameters and return values 13089 that (in the called function) are seen as registers `$0' and up, 13090 as opposed to the GNU ABI which uses global registers `$231' and 13091 up. 13092 13093 `-mzero-extend' 13094 `-mno-zero-extend' 13095 When reading data from memory in sizes shorter than 64 bits, use 13096 (do not use) zero-extending load instructions by default, rather 13097 than sign-extending ones. 13098 13099 `-mknuthdiv' 13100 `-mno-knuthdiv' 13101 Make the result of a division yielding a remainder have the same 13102 sign as the divisor. With the default, `-mno-knuthdiv', the sign 13103 of the remainder follows the sign of the dividend. Both methods 13104 are arithmetically valid, the latter being almost exclusively used. 13105 13106 `-mtoplevel-symbols' 13107 `-mno-toplevel-symbols' 13108 Prepend (do not prepend) a `:' to all global symbols, so the 13109 assembly code can be used with the `PREFIX' assembly directive. 13110 13111 `-melf' 13112 Generate an executable in the ELF format, rather than the default 13113 `mmo' format used by the `mmix' simulator. 13114 13115 `-mbranch-predict' 13116 `-mno-branch-predict' 13117 Use (do not use) the probable-branch instructions, when static 13118 branch prediction indicates a probable branch. 13119 13120 `-mbase-addresses' 13121 `-mno-base-addresses' 13122 Generate (do not generate) code that uses _base addresses_. Using 13123 a base address automatically generates a request (handled by the 13124 assembler and the linker) for a constant to be set up in a global 13125 register. The register is used for one or more base address 13126 requests within the range 0 to 255 from the value held in the 13127 register. The generally leads to short and fast code, but the 13128 number of different data items that can be addressed is limited. 13129 This means that a program that uses lots of static data may 13130 require `-mno-base-addresses'. 13131 13132 `-msingle-exit' 13133 `-mno-single-exit' 13134 Force (do not force) generated code to have a single exit point in 13135 each function. 13136 13137 13138 File: gcc.info, Node: MN10300 Options, Next: PDP-11 Options, Prev: MMIX Options, Up: Submodel Options 13139 13140 3.17.24 MN10300 Options 13141 ----------------------- 13142 13143 These `-m' options are defined for Matsushita MN10300 architectures: 13144 13145 `-mmult-bug' 13146 Generate code to avoid bugs in the multiply instructions for the 13147 MN10300 processors. This is the default. 13148 13149 `-mno-mult-bug' 13150 Do not generate code to avoid bugs in the multiply instructions 13151 for the MN10300 processors. 13152 13153 `-mam33' 13154 Generate code which uses features specific to the AM33 processor. 13155 13156 `-mno-am33' 13157 Do not generate code which uses features specific to the AM33 13158 processor. This is the default. 13159 13160 `-mreturn-pointer-on-d0' 13161 When generating a function which returns a pointer, return the 13162 pointer in both `a0' and `d0'. Otherwise, the pointer is returned 13163 only in a0, and attempts to call such functions without a prototype 13164 would result in errors. Note that this option is on by default; 13165 use `-mno-return-pointer-on-d0' to disable it. 13166 13167 `-mno-crt0' 13168 Do not link in the C run-time initialization object file. 13169 13170 `-mrelax' 13171 Indicate to the linker that it should perform a relaxation 13172 optimization pass to shorten branches, calls and absolute memory 13173 addresses. This option only has an effect when used on the 13174 command line for the final link step. 13175 13176 This option makes symbolic debugging impossible. 13177 13178 13179 File: gcc.info, Node: PDP-11 Options, Next: picoChip Options, Prev: MN10300 Options, Up: Submodel Options 13180 13181 3.17.25 PDP-11 Options 13182 ---------------------- 13183 13184 These options are defined for the PDP-11: 13185 13186 `-mfpu' 13187 Use hardware FPP floating point. This is the default. (FIS 13188 floating point on the PDP-11/40 is not supported.) 13189 13190 `-msoft-float' 13191 Do not use hardware floating point. 13192 13193 `-mac0' 13194 Return floating-point results in ac0 (fr0 in Unix assembler 13195 syntax). 13196 13197 `-mno-ac0' 13198 Return floating-point results in memory. This is the default. 13199 13200 `-m40' 13201 Generate code for a PDP-11/40. 13202 13203 `-m45' 13204 Generate code for a PDP-11/45. This is the default. 13205 13206 `-m10' 13207 Generate code for a PDP-11/10. 13208 13209 `-mbcopy-builtin' 13210 Use inline `movmemhi' patterns for copying memory. This is the 13211 default. 13212 13213 `-mbcopy' 13214 Do not use inline `movmemhi' patterns for copying memory. 13215 13216 `-mint16' 13217 `-mno-int32' 13218 Use 16-bit `int'. This is the default. 13219 13220 `-mint32' 13221 `-mno-int16' 13222 Use 32-bit `int'. 13223 13224 `-mfloat64' 13225 `-mno-float32' 13226 Use 64-bit `float'. This is the default. 13227 13228 `-mfloat32' 13229 `-mno-float64' 13230 Use 32-bit `float'. 13231 13232 `-mabshi' 13233 Use `abshi2' pattern. This is the default. 13234 13235 `-mno-abshi' 13236 Do not use `abshi2' pattern. 13237 13238 `-mbranch-expensive' 13239 Pretend that branches are expensive. This is for experimenting 13240 with code generation only. 13241 13242 `-mbranch-cheap' 13243 Do not pretend that branches are expensive. This is the default. 13244 13245 `-msplit' 13246 Generate code for a system with split I&D. 13247 13248 `-mno-split' 13249 Generate code for a system without split I&D. This is the default. 13250 13251 `-munix-asm' 13252 Use Unix assembler syntax. This is the default when configured for 13253 `pdp11-*-bsd'. 13254 13255 `-mdec-asm' 13256 Use DEC assembler syntax. This is the default when configured for 13257 any PDP-11 target other than `pdp11-*-bsd'. 13258 13259 13260 File: gcc.info, Node: picoChip Options, Next: PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options 13261 13262 3.17.26 picoChip Options 13263 ------------------------ 13264 13265 These `-m' options are defined for picoChip implementations: 13266 13267 `-mae=AE_TYPE' 13268 Set the instruction set, register set, and instruction scheduling 13269 parameters for array element type AE_TYPE. Supported values for 13270 AE_TYPE are `ANY', `MUL', and `MAC'. 13271 13272 `-mae=ANY' selects a completely generic AE type. Code generated 13273 with this option will run on any of the other AE types. The code 13274 will not be as efficient as it would be if compiled for a specific 13275 AE type, and some types of operation (e.g., multiplication) will 13276 not work properly on all types of AE. 13277 13278 `-mae=MUL' selects a MUL AE type. This is the most useful AE type 13279 for compiled code, and is the default. 13280 13281 `-mae=MAC' selects a DSP-style MAC AE. Code compiled with this 13282 option may suffer from poor performance of byte (char) 13283 manipulation, since the DSP AE does not provide hardware support 13284 for byte load/stores. 13285 13286 `-msymbol-as-address' 13287 Enable the compiler to directly use a symbol name as an address in 13288 a load/store instruction, without first loading it into a 13289 register. Typically, the use of this option will generate larger 13290 programs, which run faster than when the option isn't used. 13291 However, the results vary from program to program, so it is left 13292 as a user option, rather than being permanently enabled. 13293 13294 `-mno-inefficient-warnings' 13295 Disables warnings about the generation of inefficient code. These 13296 warnings can be generated, for example, when compiling code which 13297 performs byte-level memory operations on the MAC AE type. The MAC 13298 AE has no hardware support for byte-level memory operations, so 13299 all byte load/stores must be synthesized from word load/store 13300 operations. This is inefficient and a warning will be generated 13301 indicating to the programmer that they should rewrite the code to 13302 avoid byte operations, or to target an AE type which has the 13303 necessary hardware support. This option enables the warning to be 13304 turned off. 13305 13306 13307 13308 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: picoChip Options, Up: Submodel Options 13309 13310 3.17.27 PowerPC Options 13311 ----------------------- 13312 13313 These are listed under *Note RS/6000 and PowerPC Options::. 13314 13315 13316 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options 13317 13318 3.17.28 IBM RS/6000 and PowerPC Options 13319 --------------------------------------- 13320 13321 These `-m' options are defined for the IBM RS/6000 and PowerPC: 13322 `-mpower' 13323 `-mno-power' 13324 `-mpower2' 13325 `-mno-power2' 13326 `-mpowerpc' 13327 `-mno-powerpc' 13328 `-mpowerpc-gpopt' 13329 `-mno-powerpc-gpopt' 13330 `-mpowerpc-gfxopt' 13331 `-mno-powerpc-gfxopt' 13332 `-mpowerpc64' 13333 `-mno-powerpc64' 13334 `-mmfcrf' 13335 `-mno-mfcrf' 13336 `-mpopcntb' 13337 `-mno-popcntb' 13338 `-mfprnd' 13339 `-mno-fprnd' 13340 `-mcmpb' 13341 `-mno-cmpb' 13342 `-mmfpgpr' 13343 `-mno-mfpgpr' 13344 `-mhard-dfp' 13345 `-mno-hard-dfp' 13346 GCC supports two related instruction set architectures for the 13347 RS/6000 and PowerPC. The "POWER" instruction set are those 13348 instructions supported by the `rios' chip set used in the original 13349 RS/6000 systems and the "PowerPC" instruction set is the 13350 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx 13351 microprocessors, and the IBM 4xx, 6xx, and follow-on 13352 microprocessors. 13353 13354 Neither architecture is a subset of the other. However there is a 13355 large common subset of instructions supported by both. An MQ 13356 register is included in processors supporting the POWER 13357 architecture. 13358 13359 You use these options to specify which instructions are available 13360 on the processor you are using. The default value of these 13361 options is determined when configuring GCC. Specifying the 13362 `-mcpu=CPU_TYPE' overrides the specification of these options. We 13363 recommend you use the `-mcpu=CPU_TYPE' option rather than the 13364 options listed above. 13365 13366 The `-mpower' option allows GCC to generate instructions that are 13367 found only in the POWER architecture and to use the MQ register. 13368 Specifying `-mpower2' implies `-power' and also allows GCC to 13369 generate instructions that are present in the POWER2 architecture 13370 but not the original POWER architecture. 13371 13372 The `-mpowerpc' option allows GCC to generate instructions that 13373 are found only in the 32-bit subset of the PowerPC architecture. 13374 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows 13375 GCC to use the optional PowerPC architecture instructions in the 13376 General Purpose group, including floating-point square root. 13377 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows 13378 GCC to use the optional PowerPC architecture instructions in the 13379 Graphics group, including floating-point select. 13380 13381 The `-mmfcrf' option allows GCC to generate the move from 13382 condition register field instruction implemented on the POWER4 13383 processor and other processors that support the PowerPC V2.01 13384 architecture. The `-mpopcntb' option allows GCC to generate the 13385 popcount and double precision FP reciprocal estimate instruction 13386 implemented on the POWER5 processor and other processors that 13387 support the PowerPC V2.02 architecture. The `-mfprnd' option 13388 allows GCC to generate the FP round to integer instructions 13389 implemented on the POWER5+ processor and other processors that 13390 support the PowerPC V2.03 architecture. The `-mcmpb' option 13391 allows GCC to generate the compare bytes instruction implemented 13392 on the POWER6 processor and other processors that support the 13393 PowerPC V2.05 architecture. The `-mmfpgpr' option allows GCC to 13394 generate the FP move to/from general purpose register instructions 13395 implemented on the POWER6X processor and other processors that 13396 support the extended PowerPC V2.05 architecture. The `-mhard-dfp' 13397 option allows GCC to generate the decimal floating point 13398 instructions implemented on some POWER processors. 13399 13400 The `-mpowerpc64' option allows GCC to generate the additional 13401 64-bit instructions that are found in the full PowerPC64 13402 architecture and to treat GPRs as 64-bit, doubleword quantities. 13403 GCC defaults to `-mno-powerpc64'. 13404 13405 If you specify both `-mno-power' and `-mno-powerpc', GCC will use 13406 only the instructions in the common subset of both architectures 13407 plus some special AIX common-mode calls, and will not use the MQ 13408 register. Specifying both `-mpower' and `-mpowerpc' permits GCC 13409 to use any instruction from either architecture and to allow use 13410 of the MQ register; specify this for the Motorola MPC601. 13411 13412 `-mnew-mnemonics' 13413 `-mold-mnemonics' 13414 Select which mnemonics to use in the generated assembler code. 13415 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined 13416 for the PowerPC architecture. With `-mold-mnemonics' it uses the 13417 assembler mnemonics defined for the POWER architecture. 13418 Instructions defined in only one architecture have only one 13419 mnemonic; GCC uses that mnemonic irrespective of which of these 13420 options is specified. 13421 13422 GCC defaults to the mnemonics appropriate for the architecture in 13423 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of 13424 these option. Unless you are building a cross-compiler, you 13425 should normally not specify either `-mnew-mnemonics' or 13426 `-mold-mnemonics', but should instead accept the default. 13427 13428 `-mcpu=CPU_TYPE' 13429 Set architecture type, register usage, choice of mnemonics, and 13430 instruction scheduling parameters for machine type CPU_TYPE. 13431 Supported values for CPU_TYPE are `401', `403', `405', `405fp', 13432 `440', `440fp', `464', `464fp', `505', `601', `602', `603', 13433 `603e', `604', `604e', `620', `630', `740', `7400', `7450', `750', 13434 `801', `821', `823', `860', `970', `8540', `e300c2', `e300c3', 13435 `e500mc', `ec603e', `G3', `G4', `G5', `power', `power2', `power3', 13436 `power4', `power5', `power5+', `power6', `power6x', `power7' 13437 `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', 13438 and `rs64'. 13439 13440 `-mcpu=common' selects a completely generic processor. Code 13441 generated under this option will run on any POWER or PowerPC 13442 processor. GCC will use only the instructions in the common 13443 subset of both architectures, and will not use the MQ register. 13444 GCC assumes a generic processor model for scheduling purposes. 13445 13446 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and 13447 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit 13448 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine 13449 types, with an appropriate, generic processor model assumed for 13450 scheduling purposes. 13451 13452 The other options specify a specific processor. Code generated 13453 under those options will run best on that processor, and may not 13454 run at all on others. 13455 13456 The `-mcpu' options automatically enable or disable the following 13457 options: 13458 13459 -maltivec -mfprnd -mhard-float -mmfcrf -mmultiple 13460 -mnew-mnemonics -mpopcntb -mpower -mpower2 -mpowerpc64 13461 -mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float 13462 -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr 13463 13464 The particular options set for any particular CPU will vary between 13465 compiler versions, depending on what setting seems to produce 13466 optimal code for that CPU; it doesn't necessarily reflect the 13467 actual hardware's capabilities. If you wish to set an individual 13468 option to a particular value, you may specify it after the `-mcpu' 13469 option, like `-mcpu=970 -mno-altivec'. 13470 13471 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled 13472 or disabled by the `-mcpu' option at present because AIX does not 13473 have full support for these options. You may still enable or 13474 disable them individually if you're sure it'll work in your 13475 environment. 13476 13477 `-mtune=CPU_TYPE' 13478 Set the instruction scheduling parameters for machine type 13479 CPU_TYPE, but do not set the architecture type, register usage, or 13480 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values 13481 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are 13482 specified, the code generated will use the architecture, 13483 registers, and mnemonics set by `-mcpu', but the scheduling 13484 parameters set by `-mtune'. 13485 13486 `-mswdiv' 13487 `-mno-swdiv' 13488 Generate code to compute division as reciprocal estimate and 13489 iterative refinement, creating opportunities for increased 13490 throughput. This feature requires: optional PowerPC Graphics 13491 instruction set for single precision and FRE instruction for 13492 double precision, assuming divides cannot generate user-visible 13493 traps, and the domain values not include Infinities, denormals or 13494 zero denominator. 13495 13496 `-maltivec' 13497 `-mno-altivec' 13498 Generate code that uses (does not use) AltiVec instructions, and 13499 also enable the use of built-in functions that allow more direct 13500 access to the AltiVec instruction set. You may also need to set 13501 `-mabi=altivec' to adjust the current ABI with AltiVec ABI 13502 enhancements. 13503 13504 `-mvrsave' 13505 `-mno-vrsave' 13506 Generate VRSAVE instructions when generating AltiVec code. 13507 13508 `-mgen-cell-microcode' 13509 Generate Cell microcode instructions 13510 13511 `-mwarn-cell-microcode' 13512 Warning when a Cell microcode instruction is going to emitted. An 13513 example of a Cell microcode instruction is a variable shift. 13514 13515 `-msecure-plt' 13516 Generate code that allows ld and ld.so to build executables and 13517 shared libraries with non-exec .plt and .got sections. This is a 13518 PowerPC 32-bit SYSV ABI option. 13519 13520 `-mbss-plt' 13521 Generate code that uses a BSS .plt section that ld.so fills in, and 13522 requires .plt and .got sections that are both writable and 13523 executable. This is a PowerPC 32-bit SYSV ABI option. 13524 13525 `-misel' 13526 `-mno-isel' 13527 This switch enables or disables the generation of ISEL 13528 instructions. 13529 13530 `-misel=YES/NO' 13531 This switch has been deprecated. Use `-misel' and `-mno-isel' 13532 instead. 13533 13534 `-mspe' 13535 `-mno-spe' 13536 This switch enables or disables the generation of SPE simd 13537 instructions. 13538 13539 `-mpaired' 13540 `-mno-paired' 13541 This switch enables or disables the generation of PAIRED simd 13542 instructions. 13543 13544 `-mspe=YES/NO' 13545 This option has been deprecated. Use `-mspe' and `-mno-spe' 13546 instead. 13547 13548 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO' 13549 `-mfloat-gprs' 13550 This switch enables or disables the generation of floating point 13551 operations on the general purpose registers for architectures that 13552 support it. 13553 13554 The argument YES or SINGLE enables the use of single-precision 13555 floating point operations. 13556 13557 The argument DOUBLE enables the use of single and double-precision 13558 floating point operations. 13559 13560 The argument NO disables floating point operations on the general 13561 purpose registers. 13562 13563 This option is currently only available on the MPC854x. 13564 13565 `-m32' 13566 `-m64' 13567 Generate code for 32-bit or 64-bit environments of Darwin and SVR4 13568 targets (including GNU/Linux). The 32-bit environment sets int, 13569 long and pointer to 32 bits and generates code that runs on any 13570 PowerPC variant. The 64-bit environment sets int to 32 bits and 13571 long and pointer to 64 bits, and generates code for PowerPC64, as 13572 for `-mpowerpc64'. 13573 13574 `-mfull-toc' 13575 `-mno-fp-in-toc' 13576 `-mno-sum-in-toc' 13577 `-mminimal-toc' 13578 Modify generation of the TOC (Table Of Contents), which is created 13579 for every executable file. The `-mfull-toc' option is selected by 13580 default. In that case, GCC will allocate at least one TOC entry 13581 for each unique non-automatic variable reference in your program. 13582 GCC will also place floating-point constants in the TOC. However, 13583 only 16,384 entries are available in the TOC. 13584 13585 If you receive a linker error message that saying you have 13586 overflowed the available TOC space, you can reduce the amount of 13587 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc' 13588 options. `-mno-fp-in-toc' prevents GCC from putting floating-point 13589 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate 13590 code to calculate the sum of an address and a constant at run-time 13591 instead of putting that sum into the TOC. You may specify one or 13592 both of these options. Each causes GCC to produce very slightly 13593 slower and larger code at the expense of conserving TOC space. 13594 13595 If you still run out of space in the TOC even when you specify 13596 both of these options, specify `-mminimal-toc' instead. This 13597 option causes GCC to make only one TOC entry for every file. When 13598 you specify this option, GCC will produce code that is slower and 13599 larger but which uses extremely little TOC space. You may wish to 13600 use this option only on files that contain less frequently 13601 executed code. 13602 13603 `-maix64' 13604 `-maix32' 13605 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 13606 64-bit `long' type, and the infrastructure needed to support them. 13607 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while 13608 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'. 13609 GCC defaults to `-maix32'. 13610 13611 `-mxl-compat' 13612 `-mno-xl-compat' 13613 Produce code that conforms more closely to IBM XL compiler 13614 semantics when using AIX-compatible ABI. Pass floating-point 13615 arguments to prototyped functions beyond the register save area 13616 (RSA) on the stack in addition to argument FPRs. Do not assume 13617 that most significant double in 128-bit long double value is 13618 properly rounded when comparing values and converting to double. 13619 Use XL symbol names for long double support routines. 13620 13621 The AIX calling convention was extended but not initially 13622 documented to handle an obscure K&R C case of calling a function 13623 that takes the address of its arguments with fewer arguments than 13624 declared. IBM XL compilers access floating point arguments which 13625 do not fit in the RSA from the stack when a subroutine is compiled 13626 without optimization. Because always storing floating-point 13627 arguments on the stack is inefficient and rarely needed, this 13628 option is not enabled by default and only is necessary when 13629 calling subroutines compiled by IBM XL compilers without 13630 optimization. 13631 13632 `-mpe' 13633 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an 13634 application written to use message passing with special startup 13635 code to enable the application to run. The system must have PE 13636 installed in the standard location (`/usr/lpp/ppe.poe/'), or the 13637 `specs' file must be overridden with the `-specs=' option to 13638 specify the appropriate directory location. The Parallel 13639 Environment does not support threads, so the `-mpe' option and the 13640 `-pthread' option are incompatible. 13641 13642 `-malign-natural' 13643 `-malign-power' 13644 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option 13645 `-malign-natural' overrides the ABI-defined alignment of larger 13646 types, such as floating-point doubles, on their natural size-based 13647 boundary. The option `-malign-power' instructs GCC to follow the 13648 ABI-specified alignment rules. GCC defaults to the standard 13649 alignment defined in the ABI. 13650 13651 On 64-bit Darwin, natural alignment is the default, and 13652 `-malign-power' is not supported. 13653 13654 `-msoft-float' 13655 `-mhard-float' 13656 Generate code that does not use (uses) the floating-point register 13657 set. Software floating point emulation is provided if you use the 13658 `-msoft-float' option, and pass the option to GCC when linking. 13659 13660 `-msingle-float' 13661 `-mdouble-float' 13662 Generate code for single or double-precision floating point 13663 operations. `-mdouble-float' implies `-msingle-float'. 13664 13665 `-msimple-fpu' 13666 Do not generate sqrt and div instructions for hardware floating 13667 point unit. 13668 13669 `-mfpu' 13670 Specify type of floating point unit. Valid values are SP_LITE 13671 (equivalent to -msingle-float -msimple-fpu), DP_LITE (equivalent 13672 to -mdouble-float -msimple-fpu), SP_FULL (equivalent to 13673 -msingle-float), and DP_FULL (equivalent to -mdouble-float). 13674 13675 `-mxilinx-fpu' 13676 Perform optimizations for floating point unit on Xilinx PPC 13677 405/440. 13678 13679 `-mmultiple' 13680 `-mno-multiple' 13681 Generate code that uses (does not use) the load multiple word 13682 instructions and the store multiple word instructions. These 13683 instructions are generated by default on POWER systems, and not 13684 generated on PowerPC systems. Do not use `-mmultiple' on little 13685 endian PowerPC systems, since those instructions do not work when 13686 the processor is in little endian mode. The exceptions are PPC740 13687 and PPC750 which permit the instructions usage in little endian 13688 mode. 13689 13690 `-mstring' 13691 `-mno-string' 13692 Generate code that uses (does not use) the load string instructions 13693 and the store string word instructions to save multiple registers 13694 and do small block moves. These instructions are generated by 13695 default on POWER systems, and not generated on PowerPC systems. 13696 Do not use `-mstring' on little endian PowerPC systems, since those 13697 instructions do not work when the processor is in little endian 13698 mode. The exceptions are PPC740 and PPC750 which permit the 13699 instructions usage in little endian mode. 13700 13701 `-mupdate' 13702 `-mno-update' 13703 Generate code that uses (does not use) the load or store 13704 instructions that update the base register to the address of the 13705 calculated memory location. These instructions are generated by 13706 default. If you use `-mno-update', there is a small window 13707 between the time that the stack pointer is updated and the address 13708 of the previous frame is stored, which means code that walks the 13709 stack frame across interrupts or signals may get corrupted data. 13710 13711 `-mavoid-indexed-addresses' 13712 13713 `-mno-avoid-indexed-addresses' 13714 Generate code that tries to avoid (not avoid) the use of indexed 13715 load or store instructions. These instructions can incur a 13716 performance penalty on Power6 processors in certain situations, 13717 such as when stepping through large arrays that cross a 16M 13718 boundary. This option is enabled by default when targetting 13719 Power6 and disabled otherwise. 13720 13721 `-mfused-madd' 13722 `-mno-fused-madd' 13723 Generate code that uses (does not use) the floating point multiply 13724 and accumulate instructions. These instructions are generated by 13725 default if hardware floating is used. 13726 13727 `-mmulhw' 13728 `-mno-mulhw' 13729 Generate code that uses (does not use) the half-word multiply and 13730 multiply-accumulate instructions on the IBM 405, 440 and 464 13731 processors. These instructions are generated by default when 13732 targetting those processors. 13733 13734 `-mdlmzb' 13735 `-mno-dlmzb' 13736 Generate code that uses (does not use) the string-search `dlmzb' 13737 instruction on the IBM 405, 440 and 464 processors. This 13738 instruction is generated by default when targetting those 13739 processors. 13740 13741 `-mno-bit-align' 13742 `-mbit-align' 13743 On System V.4 and embedded PowerPC systems do not (do) force 13744 structures and unions that contain bit-fields to be aligned to the 13745 base type of the bit-field. 13746 13747 For example, by default a structure containing nothing but 8 13748 `unsigned' bit-fields of length 1 would be aligned to a 4 byte 13749 boundary and have a size of 4 bytes. By using `-mno-bit-align', 13750 the structure would be aligned to a 1 byte boundary and be one 13751 byte in size. 13752 13753 `-mno-strict-align' 13754 `-mstrict-align' 13755 On System V.4 and embedded PowerPC systems do not (do) assume that 13756 unaligned memory references will be handled by the system. 13757 13758 `-mrelocatable' 13759 `-mno-relocatable' 13760 On embedded PowerPC systems generate code that allows (does not 13761 allow) the program to be relocated to a different address at 13762 runtime. If you use `-mrelocatable' on any module, all objects 13763 linked together must be compiled with `-mrelocatable' or 13764 `-mrelocatable-lib'. 13765 13766 `-mrelocatable-lib' 13767 `-mno-relocatable-lib' 13768 On embedded PowerPC systems generate code that allows (does not 13769 allow) the program to be relocated to a different address at 13770 runtime. Modules compiled with `-mrelocatable-lib' can be linked 13771 with either modules compiled without `-mrelocatable' and 13772 `-mrelocatable-lib' or with modules compiled with the 13773 `-mrelocatable' options. 13774 13775 `-mno-toc' 13776 `-mtoc' 13777 On System V.4 and embedded PowerPC systems do not (do) assume that 13778 register 2 contains a pointer to a global area pointing to the 13779 addresses used in the program. 13780 13781 `-mlittle' 13782 `-mlittle-endian' 13783 On System V.4 and embedded PowerPC systems compile code for the 13784 processor in little endian mode. The `-mlittle-endian' option is 13785 the same as `-mlittle'. 13786 13787 `-mbig' 13788 `-mbig-endian' 13789 On System V.4 and embedded PowerPC systems compile code for the 13790 processor in big endian mode. The `-mbig-endian' option is the 13791 same as `-mbig'. 13792 13793 `-mdynamic-no-pic' 13794 On Darwin and Mac OS X systems, compile code so that it is not 13795 relocatable, but that its external references are relocatable. The 13796 resulting code is suitable for applications, but not shared 13797 libraries. 13798 13799 `-mprioritize-restricted-insns=PRIORITY' 13800 This option controls the priority that is assigned to 13801 dispatch-slot restricted instructions during the second scheduling 13802 pass. The argument PRIORITY takes the value 0/1/2 to assign 13803 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted 13804 instructions. 13805 13806 `-msched-costly-dep=DEPENDENCE_TYPE' 13807 This option controls which dependences are considered costly by 13808 the target during instruction scheduling. The argument 13809 DEPENDENCE_TYPE takes one of the following values: NO: no 13810 dependence is costly, ALL: all dependences are costly, 13811 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly, 13812 STORE_TO_LOAD: any dependence from store to load is costly, 13813 NUMBER: any dependence which latency >= NUMBER is costly. 13814 13815 `-minsert-sched-nops=SCHEME' 13816 This option controls which nop insertion scheme will be used during 13817 the second scheduling pass. The argument SCHEME takes one of the 13818 following values: NO: Don't insert nops. PAD: Pad with nops any 13819 dispatch group which has vacant issue slots, according to the 13820 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly 13821 dependent insns into separate groups. Insert exactly as many nops 13822 as needed to force an insn to a new group, according to the 13823 estimated processor grouping. NUMBER: Insert nops to force costly 13824 dependent insns into separate groups. Insert NUMBER nops to force 13825 an insn to a new group. 13826 13827 `-mcall-sysv' 13828 On System V.4 and embedded PowerPC systems compile code using 13829 calling conventions that adheres to the March 1995 draft of the 13830 System V Application Binary Interface, PowerPC processor 13831 supplement. This is the default unless you configured GCC using 13832 `powerpc-*-eabiaix'. 13833 13834 `-mcall-sysv-eabi' 13835 Specify both `-mcall-sysv' and `-meabi' options. 13836 13837 `-mcall-sysv-noeabi' 13838 Specify both `-mcall-sysv' and `-mno-eabi' options. 13839 13840 `-mcall-solaris' 13841 On System V.4 and embedded PowerPC systems compile code for the 13842 Solaris operating system. 13843 13844 `-mcall-linux' 13845 On System V.4 and embedded PowerPC systems compile code for the 13846 Linux-based GNU system. 13847 13848 `-mcall-gnu' 13849 On System V.4 and embedded PowerPC systems compile code for the 13850 Hurd-based GNU system. 13851 13852 `-mcall-netbsd' 13853 On System V.4 and embedded PowerPC systems compile code for the 13854 NetBSD operating system. 13855 13856 `-maix-struct-return' 13857 Return all structures in memory (as specified by the AIX ABI). 13858 13859 `-msvr4-struct-return' 13860 Return structures smaller than 8 bytes in registers (as specified 13861 by the SVR4 ABI). 13862 13863 `-mabi=ABI-TYPE' 13864 Extend the current ABI with a particular extension, or remove such 13865 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE, 13866 IBMLONGDOUBLE, IEEELONGDOUBLE. 13867 13868 `-mabi=spe' 13869 Extend the current ABI with SPE ABI extensions. This does not 13870 change the default ABI, instead it adds the SPE ABI extensions to 13871 the current ABI. 13872 13873 `-mabi=no-spe' 13874 Disable Booke SPE ABI extensions for the current ABI. 13875 13876 `-mabi=ibmlongdouble' 13877 Change the current ABI to use IBM extended precision long double. 13878 This is a PowerPC 32-bit SYSV ABI option. 13879 13880 `-mabi=ieeelongdouble' 13881 Change the current ABI to use IEEE extended precision long double. 13882 This is a PowerPC 32-bit Linux ABI option. 13883 13884 `-mprototype' 13885 `-mno-prototype' 13886 On System V.4 and embedded PowerPC systems assume that all calls to 13887 variable argument functions are properly prototyped. Otherwise, 13888 the compiler must insert an instruction before every non 13889 prototyped call to set or clear bit 6 of the condition code 13890 register (CR) to indicate whether floating point values were 13891 passed in the floating point registers in case the function takes 13892 a variable arguments. With `-mprototype', only calls to 13893 prototyped variable argument functions will set or clear the bit. 13894 13895 `-msim' 13896 On embedded PowerPC systems, assume that the startup module is 13897 called `sim-crt0.o' and that the standard C libraries are 13898 `libsim.a' and `libc.a'. This is the default for 13899 `powerpc-*-eabisim' configurations. 13900 13901 `-mmvme' 13902 On embedded PowerPC systems, assume that the startup module is 13903 called `crt0.o' and the standard C libraries are `libmvme.a' and 13904 `libc.a'. 13905 13906 `-mads' 13907 On embedded PowerPC systems, assume that the startup module is 13908 called `crt0.o' and the standard C libraries are `libads.a' and 13909 `libc.a'. 13910 13911 `-myellowknife' 13912 On embedded PowerPC systems, assume that the startup module is 13913 called `crt0.o' and the standard C libraries are `libyk.a' and 13914 `libc.a'. 13915 13916 `-mvxworks' 13917 On System V.4 and embedded PowerPC systems, specify that you are 13918 compiling for a VxWorks system. 13919 13920 `-memb' 13921 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags 13922 header to indicate that `eabi' extended relocations are used. 13923 13924 `-meabi' 13925 `-mno-eabi' 13926 On System V.4 and embedded PowerPC systems do (do not) adhere to 13927 the Embedded Applications Binary Interface (eabi) which is a set of 13928 modifications to the System V.4 specifications. Selecting `-meabi' 13929 means that the stack is aligned to an 8 byte boundary, a function 13930 `__eabi' is called to from `main' to set up the eabi environment, 13931 and the `-msdata' option can use both `r2' and `r13' to point to 13932 two separate small data areas. Selecting `-mno-eabi' means that 13933 the stack is aligned to a 16 byte boundary, do not call an 13934 initialization function from `main', and the `-msdata' option will 13935 only use `r13' to point to a single small data area. The `-meabi' 13936 option is on by default if you configured GCC using one of the 13937 `powerpc*-*-eabi*' options. 13938 13939 `-msdata=eabi' 13940 On System V.4 and embedded PowerPC systems, put small initialized 13941 `const' global and static data in the `.sdata2' section, which is 13942 pointed to by register `r2'. Put small initialized non-`const' 13943 global and static data in the `.sdata' section, which is pointed 13944 to by register `r13'. Put small uninitialized global and static 13945 data in the `.sbss' section, which is adjacent to the `.sdata' 13946 section. The `-msdata=eabi' option is incompatible with the 13947 `-mrelocatable' option. The `-msdata=eabi' option also sets the 13948 `-memb' option. 13949 13950 `-msdata=sysv' 13951 On System V.4 and embedded PowerPC systems, put small global and 13952 static data in the `.sdata' section, which is pointed to by 13953 register `r13'. Put small uninitialized global and static data in 13954 the `.sbss' section, which is adjacent to the `.sdata' section. 13955 The `-msdata=sysv' option is incompatible with the `-mrelocatable' 13956 option. 13957 13958 `-msdata=default' 13959 `-msdata' 13960 On System V.4 and embedded PowerPC systems, if `-meabi' is used, 13961 compile code the same as `-msdata=eabi', otherwise compile code the 13962 same as `-msdata=sysv'. 13963 13964 `-msdata=data' 13965 On System V.4 and embedded PowerPC systems, put small global data 13966 in the `.sdata' section. Put small uninitialized global data in 13967 the `.sbss' section. Do not use register `r13' to address small 13968 data however. This is the default behavior unless other `-msdata' 13969 options are used. 13970 13971 `-msdata=none' 13972 `-mno-sdata' 13973 On embedded PowerPC systems, put all initialized global and static 13974 data in the `.data' section, and all uninitialized data in the 13975 `.bss' section. 13976 13977 `-G NUM' 13978 On embedded PowerPC systems, put global and static items less than 13979 or equal to NUM bytes into the small data or bss sections instead 13980 of the normal data or bss section. By default, NUM is 8. The `-G 13981 NUM' switch is also passed to the linker. All modules should be 13982 compiled with the same `-G NUM' value. 13983 13984 `-mregnames' 13985 `-mno-regnames' 13986 On System V.4 and embedded PowerPC systems do (do not) emit 13987 register names in the assembly language output using symbolic 13988 forms. 13989 13990 `-mlongcall' 13991 `-mno-longcall' 13992 By default assume that all calls are far away so that a longer more 13993 expensive calling sequence is required. This is required for calls 13994 further than 32 megabytes (33,554,432 bytes) from the current 13995 location. A short call will be generated if the compiler knows 13996 the call cannot be that far away. This setting can be overridden 13997 by the `shortcall' function attribute, or by `#pragma longcall(0)'. 13998 13999 Some linkers are capable of detecting out-of-range calls and 14000 generating glue code on the fly. On these systems, long calls are 14001 unnecessary and generate slower code. As of this writing, the AIX 14002 linker can do this, as can the GNU linker for PowerPC/64. It is 14003 planned to add this feature to the GNU linker for 32-bit PowerPC 14004 systems as well. 14005 14006 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr 14007 callee, L42", plus a "branch island" (glue code). The two target 14008 addresses represent the callee and the "branch island". The 14009 Darwin/PPC linker will prefer the first address and generate a "bl 14010 callee" if the PPC "bl" instruction will reach the callee directly; 14011 otherwise, the linker will generate "bl L42" to call the "branch 14012 island". The "branch island" is appended to the body of the 14013 calling function; it computes the full 32-bit address of the callee 14014 and jumps to it. 14015 14016 On Mach-O (Darwin) systems, this option directs the compiler emit 14017 to the glue for every direct call, and the Darwin linker decides 14018 whether to use or discard it. 14019 14020 In the future, we may cause GCC to ignore all longcall 14021 specifications when the linker is known to generate glue. 14022 14023 `-pthread' 14024 Adds support for multithreading with the "pthreads" library. This 14025 option sets flags for both the preprocessor and linker. 14026 14027 14028 14029 File: gcc.info, Node: S/390 and zSeries Options, Next: Score Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options 14030 14031 3.17.29 S/390 and zSeries Options 14032 --------------------------------- 14033 14034 These are the `-m' options defined for the S/390 and zSeries 14035 architecture. 14036 14037 `-mhard-float' 14038 `-msoft-float' 14039 Use (do not use) the hardware floating-point instructions and 14040 registers for floating-point operations. When `-msoft-float' is 14041 specified, functions in `libgcc.a' will be used to perform 14042 floating-point operations. When `-mhard-float' is specified, the 14043 compiler generates IEEE floating-point instructions. This is the 14044 default. 14045 14046 `-mhard-dfp' 14047 `-mno-hard-dfp' 14048 Use (do not use) the hardware decimal-floating-point instructions 14049 for decimal-floating-point operations. When `-mno-hard-dfp' is 14050 specified, functions in `libgcc.a' will be used to perform 14051 decimal-floating-point operations. When `-mhard-dfp' is 14052 specified, the compiler generates decimal-floating-point hardware 14053 instructions. This is the default for `-march=z9-ec' or higher. 14054 14055 `-mlong-double-64' 14056 `-mlong-double-128' 14057 These switches control the size of `long double' type. A size of 14058 64bit makes the `long double' type equivalent to the `double' 14059 type. This is the default. 14060 14061 `-mbackchain' 14062 `-mno-backchain' 14063 Store (do not store) the address of the caller's frame as 14064 backchain pointer into the callee's stack frame. A backchain may 14065 be needed to allow debugging using tools that do not understand 14066 DWARF-2 call frame information. When `-mno-packed-stack' is in 14067 effect, the backchain pointer is stored at the bottom of the stack 14068 frame; when `-mpacked-stack' is in effect, the backchain is placed 14069 into the topmost word of the 96/160 byte register save area. 14070 14071 In general, code compiled with `-mbackchain' is call-compatible 14072 with code compiled with `-mmo-backchain'; however, use of the 14073 backchain for debugging purposes usually requires that the whole 14074 binary is built with `-mbackchain'. Note that the combination of 14075 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not 14076 supported. In order to build a linux kernel use `-msoft-float'. 14077 14078 The default is to not maintain the backchain. 14079 14080 `-mpacked-stack' 14081 `-mno-packed-stack' 14082 Use (do not use) the packed stack layout. When 14083 `-mno-packed-stack' is specified, the compiler uses the all fields 14084 of the 96/160 byte register save area only for their default 14085 purpose; unused fields still take up stack space. When 14086 `-mpacked-stack' is specified, register save slots are densely 14087 packed at the top of the register save area; unused space is 14088 reused for other purposes, allowing for more efficient use of the 14089 available stack space. However, when `-mbackchain' is also in 14090 effect, the topmost word of the save area is always used to store 14091 the backchain, and the return address register is always saved two 14092 words below the backchain. 14093 14094 As long as the stack frame backchain is not used, code generated 14095 with `-mpacked-stack' is call-compatible with code generated with 14096 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95 14097 for S/390 or zSeries generated code that uses the stack frame 14098 backchain at run time, not just for debugging purposes. Such code 14099 is not call-compatible with code compiled with `-mpacked-stack'. 14100 Also, note that the combination of `-mbackchain', `-mpacked-stack' 14101 and `-mhard-float' is not supported. In order to build a linux 14102 kernel use `-msoft-float'. 14103 14104 The default is to not use the packed stack layout. 14105 14106 `-msmall-exec' 14107 `-mno-small-exec' 14108 Generate (or do not generate) code using the `bras' instruction to 14109 do subroutine calls. This only works reliably if the total 14110 executable size does not exceed 64k. The default is to use the 14111 `basr' instruction instead, which does not have this limitation. 14112 14113 `-m64' 14114 `-m31' 14115 When `-m31' is specified, generate code compliant to the GNU/Linux 14116 for S/390 ABI. When `-m64' is specified, generate code compliant 14117 to the GNU/Linux for zSeries ABI. This allows GCC in particular 14118 to generate 64-bit instructions. For the `s390' targets, the 14119 default is `-m31', while the `s390x' targets default to `-m64'. 14120 14121 `-mzarch' 14122 `-mesa' 14123 When `-mzarch' is specified, generate code using the instructions 14124 available on z/Architecture. When `-mesa' is specified, generate 14125 code using the instructions available on ESA/390. Note that 14126 `-mesa' is not possible with `-m64'. When generating code 14127 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'. 14128 When generating code compliant to the GNU/Linux for zSeries ABI, 14129 the default is `-mzarch'. 14130 14131 `-mmvcle' 14132 `-mno-mvcle' 14133 Generate (or do not generate) code using the `mvcle' instruction 14134 to perform block moves. When `-mno-mvcle' is specified, use a 14135 `mvc' loop instead. This is the default unless optimizing for 14136 size. 14137 14138 `-mdebug' 14139 `-mno-debug' 14140 Print (or do not print) additional debug information when 14141 compiling. The default is to not print debug information. 14142 14143 `-march=CPU-TYPE' 14144 Generate code that will run on CPU-TYPE, which is the name of a 14145 system representing a certain processor type. Possible values for 14146 CPU-TYPE are `g5', `g6', `z900', `z990', `z9-109', `z9-ec' and 14147 `z10'. When generating code using the instructions available on 14148 z/Architecture, the default is `-march=z900'. Otherwise, the 14149 default is `-march=g5'. 14150 14151 `-mtune=CPU-TYPE' 14152 Tune to CPU-TYPE everything applicable about the generated code, 14153 except for the ABI and the set of available instructions. The 14154 list of CPU-TYPE values is the same as for `-march'. The default 14155 is the value used for `-march'. 14156 14157 `-mtpf-trace' 14158 `-mno-tpf-trace' 14159 Generate code that adds (does not add) in TPF OS specific branches 14160 to trace routines in the operating system. This option is off by 14161 default, even when compiling for the TPF OS. 14162 14163 `-mfused-madd' 14164 `-mno-fused-madd' 14165 Generate code that uses (does not use) the floating point multiply 14166 and accumulate instructions. These instructions are generated by 14167 default if hardware floating point is used. 14168 14169 `-mwarn-framesize=FRAMESIZE' 14170 Emit a warning if the current function exceeds the given frame 14171 size. Because this is a compile time check it doesn't need to be 14172 a real problem when the program runs. It is intended to identify 14173 functions which most probably cause a stack overflow. It is 14174 useful to be used in an environment with limited stack size e.g. 14175 the linux kernel. 14176 14177 `-mwarn-dynamicstack' 14178 Emit a warning if the function calls alloca or uses dynamically 14179 sized arrays. This is generally a bad idea with a limited stack 14180 size. 14181 14182 `-mstack-guard=STACK-GUARD' 14183 `-mstack-size=STACK-SIZE' 14184 If these options are provided the s390 back end emits additional 14185 instructions in the function prologue which trigger a trap if the 14186 stack size is STACK-GUARD bytes above the STACK-SIZE (remember 14187 that the stack on s390 grows downward). If the STACK-GUARD option 14188 is omitted the smallest power of 2 larger than the frame size of 14189 the compiled function is chosen. These options are intended to be 14190 used to help debugging stack overflow problems. The additionally 14191 emitted code causes only little overhead and hence can also be 14192 used in production like systems without greater performance 14193 degradation. The given values have to be exact powers of 2 and 14194 STACK-SIZE has to be greater than STACK-GUARD without exceeding 14195 64k. In order to be efficient the extra code makes the assumption 14196 that the stack starts at an address aligned to the value given by 14197 STACK-SIZE. The STACK-GUARD option can only be used in 14198 conjunction with STACK-SIZE. 14199 14200 14201 File: gcc.info, Node: Score Options, Next: SH Options, Prev: S/390 and zSeries Options, Up: Submodel Options 14202 14203 3.17.30 Score Options 14204 --------------------- 14205 14206 These options are defined for Score implementations: 14207 14208 `-meb' 14209 Compile code for big endian mode. This is the default. 14210 14211 `-mel' 14212 Compile code for little endian mode. 14213 14214 `-mnhwloop' 14215 Disable generate bcnz instruction. 14216 14217 `-muls' 14218 Enable generate unaligned load and store instruction. 14219 14220 `-mmac' 14221 Enable the use of multiply-accumulate instructions. Disabled by 14222 default. 14223 14224 `-mscore5' 14225 Specify the SCORE5 as the target architecture. 14226 14227 `-mscore5u' 14228 Specify the SCORE5U of the target architecture. 14229 14230 `-mscore7' 14231 Specify the SCORE7 as the target architecture. This is the default. 14232 14233 `-mscore7d' 14234 Specify the SCORE7D as the target architecture. 14235 14236 14237 File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: Score Options, Up: Submodel Options 14238 14239 3.17.31 SH Options 14240 ------------------ 14241 14242 These `-m' options are defined for the SH implementations: 14243 14244 `-m1' 14245 Generate code for the SH1. 14246 14247 `-m2' 14248 Generate code for the SH2. 14249 14250 `-m2e' 14251 Generate code for the SH2e. 14252 14253 `-m3' 14254 Generate code for the SH3. 14255 14256 `-m3e' 14257 Generate code for the SH3e. 14258 14259 `-m4-nofpu' 14260 Generate code for the SH4 without a floating-point unit. 14261 14262 `-m4-single-only' 14263 Generate code for the SH4 with a floating-point unit that only 14264 supports single-precision arithmetic. 14265 14266 `-m4-single' 14267 Generate code for the SH4 assuming the floating-point unit is in 14268 single-precision mode by default. 14269 14270 `-m4' 14271 Generate code for the SH4. 14272 14273 `-m4a-nofpu' 14274 Generate code for the SH4al-dsp, or for a SH4a in such a way that 14275 the floating-point unit is not used. 14276 14277 `-m4a-single-only' 14278 Generate code for the SH4a, in such a way that no double-precision 14279 floating point operations are used. 14280 14281 `-m4a-single' 14282 Generate code for the SH4a assuming the floating-point unit is in 14283 single-precision mode by default. 14284 14285 `-m4a' 14286 Generate code for the SH4a. 14287 14288 `-m4al' 14289 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to 14290 the assembler. GCC doesn't generate any DSP instructions at the 14291 moment. 14292 14293 `-mb' 14294 Compile code for the processor in big endian mode. 14295 14296 `-ml' 14297 Compile code for the processor in little endian mode. 14298 14299 `-mdalign' 14300 Align doubles at 64-bit boundaries. Note that this changes the 14301 calling conventions, and thus some functions from the standard C 14302 library will not work unless you recompile it first with 14303 `-mdalign'. 14304 14305 `-mrelax' 14306 Shorten some address references at link time, when possible; uses 14307 the linker option `-relax'. 14308 14309 `-mbigtable' 14310 Use 32-bit offsets in `switch' tables. The default is to use 14311 16-bit offsets. 14312 14313 `-mbitops' 14314 Enable the use of bit manipulation instructions on SH2A. 14315 14316 `-mfmovd' 14317 Enable the use of the instruction `fmovd'. 14318 14319 `-mhitachi' 14320 Comply with the calling conventions defined by Renesas. 14321 14322 `-mrenesas' 14323 Comply with the calling conventions defined by Renesas. 14324 14325 `-mno-renesas' 14326 Comply with the calling conventions defined for GCC before the 14327 Renesas conventions were available. This option is the default 14328 for all targets of the SH toolchain except for `sh-symbianelf'. 14329 14330 `-mnomacsave' 14331 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is 14332 given. 14333 14334 `-mieee' 14335 Increase IEEE-compliance of floating-point code. At the moment, 14336 this is equivalent to `-fno-finite-math-only'. When generating 16 14337 bit SH opcodes, getting IEEE-conforming results for comparisons of 14338 NANs / infinities incurs extra overhead in every floating point 14339 comparison, therefore the default is set to `-ffinite-math-only'. 14340 14341 `-minline-ic_invalidate' 14342 Inline code to invalidate instruction cache entries after setting 14343 up nested function trampolines. This option has no effect if 14344 -musermode is in effect and the selected code generation option 14345 (e.g. -m4) does not allow the use of the icbi instruction. If the 14346 selected code generation option does not allow the use of the icbi 14347 instruction, and -musermode is not in effect, the inlined code will 14348 manipulate the instruction cache address array directly with an 14349 associative write. This not only requires privileged mode, but it 14350 will also fail if the cache line had been mapped via the TLB and 14351 has become unmapped. 14352 14353 `-misize' 14354 Dump instruction size and location in the assembly code. 14355 14356 `-mpadstruct' 14357 This option is deprecated. It pads structures to multiple of 4 14358 bytes, which is incompatible with the SH ABI. 14359 14360 `-mspace' 14361 Optimize for space instead of speed. Implied by `-Os'. 14362 14363 `-mprefergot' 14364 When generating position-independent code, emit function calls 14365 using the Global Offset Table instead of the Procedure Linkage 14366 Table. 14367 14368 `-musermode' 14369 Don't generate privileged mode only code; implies 14370 -mno-inline-ic_invalidate if the inlined code would not work in 14371 user mode. This is the default when the target is `sh-*-linux*'. 14372 14373 `-multcost=NUMBER' 14374 Set the cost to assume for a multiply insn. 14375 14376 `-mdiv=STRATEGY' 14377 Set the division strategy to use for SHmedia code. STRATEGY must 14378 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, 14379 inv:call, inv:call2, inv:fp . "fp" performs the operation in 14380 floating point. This has a very high latency, but needs only a 14381 few instructions, so it might be a good choice if your code has 14382 enough easily exploitable ILP to allow the compiler to schedule 14383 the floating point instructions together with other instructions. 14384 Division by zero causes a floating point exception. "inv" uses 14385 integer operations to calculate the inverse of the divisor, and 14386 then multiplies the dividend with the inverse. This strategy 14387 allows cse and hoisting of the inverse calculation. Division by 14388 zero calculates an unspecified result, but does not trap. 14389 "inv:minlat" is a variant of "inv" where if no cse / hoisting 14390 opportunities have been found, or if the entire operation has been 14391 hoisted to the same place, the last stages of the inverse 14392 calculation are intertwined with the final multiply to reduce the 14393 overall latency, at the expense of using a few more instructions, 14394 and thus offering fewer scheduling opportunities with other code. 14395 "call" calls a library function that usually implements the 14396 inv:minlat strategy. This gives high code density for 14397 m5-*media-nofpu compilations. "call2" uses a different entry 14398 point of the same library function, where it assumes that a 14399 pointer to a lookup table has already been set up, which exposes 14400 the pointer load to cse / code hoisting optimizations. 14401 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm 14402 for initial code generation, but if the code stays unoptimized, 14403 revert to the "call", "call2", or "fp" strategies, respectively. 14404 Note that the potentially-trapping side effect of division by zero 14405 is carried by a separate instruction, so it is possible that all 14406 the integer instructions are hoisted out, but the marker for the 14407 side effect stays where it is. A recombination to fp operations 14408 or a call is not possible in that case. "inv20u" and "inv20l" are 14409 variants of the "inv:minlat" strategy. In the case that the 14410 inverse calculation was nor separated from the multiply, they speed 14411 up division where the dividend fits into 20 bits (plus sign where 14412 applicable), by inserting a test to skip a number of operations in 14413 this case; this test slows down the case of larger dividends. 14414 inv20u assumes the case of a such a small dividend to be unlikely, 14415 and inv20l assumes it to be likely. 14416 14417 `-mdivsi3_libfunc=NAME' 14418 Set the name of the library function used for 32 bit signed 14419 division to NAME. This only affect the name used in the call and 14420 inv:call division strategies, and the compiler will still expect 14421 the same sets of input/output/clobbered registers as if this 14422 option was not present. 14423 14424 `-mfixed-range=REGISTER-RANGE' 14425 Generate code treating the given register range as fixed registers. 14426 A fixed register is one that the register allocator can not use. 14427 This is useful when compiling kernel code. A register range is 14428 specified as two registers separated by a dash. Multiple register 14429 ranges can be specified separated by a comma. 14430 14431 `-madjust-unroll' 14432 Throttle unrolling to avoid thrashing target registers. This 14433 option only has an effect if the gcc code base supports the 14434 TARGET_ADJUST_UNROLL_MAX target hook. 14435 14436 `-mindexed-addressing' 14437 Enable the use of the indexed addressing mode for 14438 SHmedia32/SHcompact. This is only safe if the hardware and/or OS 14439 implement 32 bit wrap-around semantics for the indexed addressing 14440 mode. The architecture allows the implementation of processors 14441 with 64 bit MMU, which the OS could use to get 32 bit addressing, 14442 but since no current hardware implementation supports this or any 14443 other way to make the indexed addressing mode safe to use in the 14444 32 bit ABI, the default is -mno-indexed-addressing. 14445 14446 `-mgettrcost=NUMBER' 14447 Set the cost assumed for the gettr instruction to NUMBER. The 14448 default is 2 if `-mpt-fixed' is in effect, 100 otherwise. 14449 14450 `-mpt-fixed' 14451 Assume pt* instructions won't trap. This will generally generate 14452 better scheduled code, but is unsafe on current hardware. The 14453 current architecture definition says that ptabs and ptrel trap 14454 when the target anded with 3 is 3. This has the unintentional 14455 effect of making it unsafe to schedule ptabs / ptrel before a 14456 branch, or hoist it out of a loop. For example, 14457 __do_global_ctors, a part of libgcc that runs constructors at 14458 program startup, calls functions in a list which is delimited by 14459 -1. With the -mpt-fixed option, the ptabs will be done before 14460 testing against -1. That means that all the constructors will be 14461 run a bit quicker, but when the loop comes to the end of the list, 14462 the program crashes because ptabs loads -1 into a target register. 14463 Since this option is unsafe for any hardware implementing the 14464 current architecture specification, the default is -mno-pt-fixed. 14465 Unless the user specifies a specific cost with `-mgettrcost', 14466 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register 14467 allocation using target registers for storing ordinary integers. 14468 14469 `-minvalid-symbols' 14470 Assume symbols might be invalid. Ordinary function symbols 14471 generated by the compiler will always be valid to load with 14472 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or 14473 linker tricks it is possible to generate symbols that will cause 14474 ptabs / ptrel to trap. This option is only meaningful when 14475 `-mno-pt-fixed' is in effect. It will then prevent 14476 cross-basic-block cse, hoisting and most scheduling of symbol 14477 loads. The default is `-mno-invalid-symbols'. 14478 14479 14480 File: gcc.info, Node: SPARC Options, Next: SPU Options, Prev: SH Options, Up: Submodel Options 14481 14482 3.17.32 SPARC Options 14483 --------------------- 14484 14485 These `-m' options are supported on the SPARC: 14486 14487 `-mno-app-regs' 14488 `-mapp-regs' 14489 Specify `-mapp-regs' to generate output using the global registers 14490 2 through 4, which the SPARC SVR4 ABI reserves for applications. 14491 This is the default. 14492 14493 To be fully SVR4 ABI compliant at the cost of some performance 14494 loss, specify `-mno-app-regs'. You should compile libraries and 14495 system software with this option. 14496 14497 `-mfpu' 14498 `-mhard-float' 14499 Generate output containing floating point instructions. This is 14500 the default. 14501 14502 `-mno-fpu' 14503 `-msoft-float' 14504 Generate output containing library calls for floating point. 14505 *Warning:* the requisite libraries are not available for all SPARC 14506 targets. Normally the facilities of the machine's usual C 14507 compiler are used, but this cannot be done directly in 14508 cross-compilation. You must make your own arrangements to provide 14509 suitable library functions for cross-compilation. The embedded 14510 targets `sparc-*-aout' and `sparclite-*-*' do provide software 14511 floating point support. 14512 14513 `-msoft-float' changes the calling convention in the output file; 14514 therefore, it is only useful if you compile _all_ of a program with 14515 this option. In particular, you need to compile `libgcc.a', the 14516 library that comes with GCC, with `-msoft-float' in order for this 14517 to work. 14518 14519 `-mhard-quad-float' 14520 Generate output containing quad-word (long double) floating point 14521 instructions. 14522 14523 `-msoft-quad-float' 14524 Generate output containing library calls for quad-word (long 14525 double) floating point instructions. The functions called are 14526 those specified in the SPARC ABI. This is the default. 14527 14528 As of this writing, there are no SPARC implementations that have 14529 hardware support for the quad-word floating point instructions. 14530 They all invoke a trap handler for one of these instructions, and 14531 then the trap handler emulates the effect of the instruction. 14532 Because of the trap handler overhead, this is much slower than 14533 calling the ABI library routines. Thus the `-msoft-quad-float' 14534 option is the default. 14535 14536 `-mno-unaligned-doubles' 14537 `-munaligned-doubles' 14538 Assume that doubles have 8 byte alignment. This is the default. 14539 14540 With `-munaligned-doubles', GCC assumes that doubles have 8 byte 14541 alignment only if they are contained in another type, or if they 14542 have an absolute address. Otherwise, it assumes they have 4 byte 14543 alignment. Specifying this option avoids some rare compatibility 14544 problems with code generated by other compilers. It is not the 14545 default because it results in a performance loss, especially for 14546 floating point code. 14547 14548 `-mno-faster-structs' 14549 `-mfaster-structs' 14550 With `-mfaster-structs', the compiler assumes that structures 14551 should have 8 byte alignment. This enables the use of pairs of 14552 `ldd' and `std' instructions for copies in structure assignment, 14553 in place of twice as many `ld' and `st' pairs. However, the use 14554 of this changed alignment directly violates the SPARC ABI. Thus, 14555 it's intended only for use on targets where the developer 14556 acknowledges that their resulting code will not be directly in 14557 line with the rules of the ABI. 14558 14559 `-mimpure-text' 14560 `-mimpure-text', used in addition to `-shared', tells the compiler 14561 to not pass `-z text' to the linker when linking a shared object. 14562 Using this option, you can link position-dependent code into a 14563 shared object. 14564 14565 `-mimpure-text' suppresses the "relocations remain against 14566 allocatable but non-writable sections" linker error message. 14567 However, the necessary relocations will trigger copy-on-write, and 14568 the shared object is not actually shared across processes. 14569 Instead of using `-mimpure-text', you should compile all source 14570 code with `-fpic' or `-fPIC'. 14571 14572 This option is only available on SunOS and Solaris. 14573 14574 `-mcpu=CPU_TYPE' 14575 Set the instruction set, register set, and instruction scheduling 14576 parameters for machine type CPU_TYPE. Supported values for 14577 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', 14578 `f930', `f934', `hypersparc', `sparclite86x', `sparclet', 14579 `tsc701', `v9', `ultrasparc', `ultrasparc3', `niagara' and 14580 `niagara2'. 14581 14582 Default instruction scheduling parameters are used for values that 14583 select an architecture and not an implementation. These are `v7', 14584 `v8', `sparclite', `sparclet', `v9'. 14585 14586 Here is a list of each supported architecture and their supported 14587 implementations. 14588 14589 v7: cypress 14590 v8: supersparc, hypersparc 14591 sparclite: f930, f934, sparclite86x 14592 sparclet: tsc701 14593 v9: ultrasparc, ultrasparc3, niagara, niagara2 14594 14595 By default (unless configured otherwise), GCC generates code for 14596 the V7 variant of the SPARC architecture. With `-mcpu=cypress', 14597 the compiler additionally optimizes it for the Cypress CY7C602 14598 chip, as used in the SPARCStation/SPARCServer 3xx series. This is 14599 also appropriate for the older SPARCStation 1, 2, IPX etc. 14600 14601 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC 14602 architecture. The only difference from V7 code is that the 14603 compiler emits the integer multiply and integer divide 14604 instructions which exist in SPARC-V8 but not in SPARC-V7. With 14605 `-mcpu=supersparc', the compiler additionally optimizes it for the 14606 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000 14607 series. 14608 14609 With `-mcpu=sparclite', GCC generates code for the SPARClite 14610 variant of the SPARC architecture. This adds the integer 14611 multiply, integer divide step and scan (`ffs') instructions which 14612 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the 14613 compiler additionally optimizes it for the Fujitsu MB86930 chip, 14614 which is the original SPARClite, with no FPU. With `-mcpu=f934', 14615 the compiler additionally optimizes it for the Fujitsu MB86934 14616 chip, which is the more recent SPARClite with FPU. 14617 14618 With `-mcpu=sparclet', GCC generates code for the SPARClet variant 14619 of the SPARC architecture. This adds the integer multiply, 14620 multiply/accumulate, integer divide step and scan (`ffs') 14621 instructions which exist in SPARClet but not in SPARC-V7. With 14622 `-mcpu=tsc701', the compiler additionally optimizes it for the 14623 TEMIC SPARClet chip. 14624 14625 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC 14626 architecture. This adds 64-bit integer and floating-point move 14627 instructions, 3 additional floating-point condition code registers 14628 and conditional move instructions. With `-mcpu=ultrasparc', the 14629 compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi 14630 chips. With `-mcpu=ultrasparc3', the compiler additionally 14631 optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ 14632 chips. With `-mcpu=niagara', the compiler additionally optimizes 14633 it for Sun UltraSPARC T1 chips. With `-mcpu=niagara2', the 14634 compiler additionally optimizes it for Sun UltraSPARC T2 chips. 14635 14636 `-mtune=CPU_TYPE' 14637 Set the instruction scheduling parameters for machine type 14638 CPU_TYPE, but do not set the instruction set or register set that 14639 the option `-mcpu=CPU_TYPE' would. 14640 14641 The same values for `-mcpu=CPU_TYPE' can be used for 14642 `-mtune=CPU_TYPE', but the only useful values are those that 14643 select a particular cpu implementation. Those are `cypress', 14644 `supersparc', `hypersparc', `f930', `f934', `sparclite86x', 14645 `tsc701', `ultrasparc', `ultrasparc3', `niagara', and `niagara2'. 14646 14647 `-mv8plus' 14648 `-mno-v8plus' 14649 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The 14650 difference from the V8 ABI is that the global and out registers are 14651 considered 64-bit wide. This is enabled by default on Solaris in 14652 32-bit mode for all SPARC-V9 processors. 14653 14654 `-mvis' 14655 `-mno-vis' 14656 With `-mvis', GCC generates code that takes advantage of the 14657 UltraSPARC Visual Instruction Set extensions. The default is 14658 `-mno-vis'. 14659 14660 These `-m' options are supported in addition to the above on SPARC-V9 14661 processors in 64-bit environments: 14662 14663 `-mlittle-endian' 14664 Generate code for a processor running in little-endian mode. It 14665 is only available for a few configurations and most notably not on 14666 Solaris and Linux. 14667 14668 `-m32' 14669 `-m64' 14670 Generate code for a 32-bit or 64-bit environment. The 32-bit 14671 environment sets int, long and pointer to 32 bits. The 64-bit 14672 environment sets int to 32 bits and long and pointer to 64 bits. 14673 14674 `-mcmodel=medlow' 14675 Generate code for the Medium/Low code model: 64-bit addresses, 14676 programs must be linked in the low 32 bits of memory. Programs 14677 can be statically or dynamically linked. 14678 14679 `-mcmodel=medmid' 14680 Generate code for the Medium/Middle code model: 64-bit addresses, 14681 programs must be linked in the low 44 bits of memory, the text and 14682 data segments must be less than 2GB in size and the data segment 14683 must be located within 2GB of the text segment. 14684 14685 `-mcmodel=medany' 14686 Generate code for the Medium/Anywhere code model: 64-bit 14687 addresses, programs may be linked anywhere in memory, the text and 14688 data segments must be less than 2GB in size and the data segment 14689 must be located within 2GB of the text segment. 14690 14691 `-mcmodel=embmedany' 14692 Generate code for the Medium/Anywhere code model for embedded 14693 systems: 64-bit addresses, the text and data segments must be less 14694 than 2GB in size, both starting anywhere in memory (determined at 14695 link time). The global register %g4 points to the base of the 14696 data segment. Programs are statically linked and PIC is not 14697 supported. 14698 14699 `-mstack-bias' 14700 `-mno-stack-bias' 14701 With `-mstack-bias', GCC assumes that the stack pointer, and frame 14702 pointer if present, are offset by -2047 which must be added back 14703 when making stack frame references. This is the default in 64-bit 14704 mode. Otherwise, assume no such offset is present. 14705 14706 These switches are supported in addition to the above on Solaris: 14707 14708 `-threads' 14709 Add support for multithreading using the Solaris threads library. 14710 This option sets flags for both the preprocessor and linker. This 14711 option does not affect the thread safety of object code produced 14712 by the compiler or that of libraries supplied with it. 14713 14714 `-pthreads' 14715 Add support for multithreading using the POSIX threads library. 14716 This option sets flags for both the preprocessor and linker. This 14717 option does not affect the thread safety of object code produced 14718 by the compiler or that of libraries supplied with it. 14719 14720 `-pthread' 14721 This is a synonym for `-pthreads'. 14722 14723 14724 File: gcc.info, Node: SPU Options, Next: System V Options, Prev: SPARC Options, Up: Submodel Options 14725 14726 3.17.33 SPU Options 14727 ------------------- 14728 14729 These `-m' options are supported on the SPU: 14730 14731 `-mwarn-reloc' 14732 `-merror-reloc' 14733 The loader for SPU does not handle dynamic relocations. By 14734 default, GCC will give an error when it generates code that 14735 requires a dynamic relocation. `-mno-error-reloc' disables the 14736 error, `-mwarn-reloc' will generate a warning instead. 14737 14738 `-msafe-dma' 14739 `-munsafe-dma' 14740 Instructions which initiate or test completion of DMA must not be 14741 reordered with respect to loads and stores of the memory which is 14742 being accessed. Users typically address this problem using the 14743 volatile keyword, but that can lead to inefficient code in places 14744 where the memory is known to not change. Rather than mark the 14745 memory as volatile we treat the DMA instructions as potentially 14746 effecting all memory. With `-munsafe-dma' users must use the 14747 volatile keyword to protect memory accesses. 14748 14749 `-mbranch-hints' 14750 By default, GCC will generate a branch hint instruction to avoid 14751 pipeline stalls for always taken or probably taken branches. A 14752 hint will not be generated closer than 8 instructions away from 14753 its branch. There is little reason to disable them, except for 14754 debugging purposes, or to make an object a little bit smaller. 14755 14756 `-msmall-mem' 14757 `-mlarge-mem' 14758 By default, GCC generates code assuming that addresses are never 14759 larger than 18 bits. With `-mlarge-mem' code is generated that 14760 assumes a full 32 bit address. 14761 14762 `-mstdmain' 14763 By default, GCC links against startup code that assumes the 14764 SPU-style main function interface (which has an unconventional 14765 parameter list). With `-mstdmain', GCC will link your program 14766 against startup code that assumes a C99-style interface to `main', 14767 including a local copy of `argv' strings. 14768 14769 `-mfixed-range=REGISTER-RANGE' 14770 Generate code treating the given register range as fixed registers. 14771 A fixed register is one that the register allocator can not use. 14772 This is useful when compiling kernel code. A register range is 14773 specified as two registers separated by a dash. Multiple register 14774 ranges can be specified separated by a comma. 14775 14776 `-mdual-nops' 14777 `-mdual-nops=N' 14778 By default, GCC will insert nops to increase dual issue when it 14779 expects it to increase performance. N can be a value from 0 to 14780 10. A smaller N will insert fewer nops. 10 is the default, 0 is 14781 the same as `-mno-dual-nops'. Disabled with `-Os'. 14782 14783 `-mhint-max-nops=N' 14784 Maximum number of nops to insert for a branch hint. A branch hint 14785 must be at least 8 instructions away from the branch it is 14786 effecting. GCC will insert up to N nops to enforce this, 14787 otherwise it will not generate the branch hint. 14788 14789 `-mhint-max-distance=N' 14790 The encoding of the branch hint instruction limits the hint to be 14791 within 256 instructions of the branch it is effecting. By 14792 default, GCC makes sure it is within 125. 14793 14794 `-msafe-hints' 14795 Work around a hardware bug which causes the SPU to stall 14796 indefinitely. By default, GCC will insert the `hbrp' instruction 14797 to make sure this stall won't happen. 14798 14799 14800 14801 File: gcc.info, Node: System V Options, Next: V850 Options, Prev: SPU Options, Up: Submodel Options 14802 14803 3.17.34 Options for System V 14804 ---------------------------- 14805 14806 These additional options are available on System V Release 4 for 14807 compatibility with other compilers on those systems: 14808 14809 `-G' 14810 Create a shared object. It is recommended that `-symbolic' or 14811 `-shared' be used instead. 14812 14813 `-Qy' 14814 Identify the versions of each tool used by the compiler, in a 14815 `.ident' assembler directive in the output. 14816 14817 `-Qn' 14818 Refrain from adding `.ident' directives to the output file (this is 14819 the default). 14820 14821 `-YP,DIRS' 14822 Search the directories DIRS, and no others, for libraries 14823 specified with `-l'. 14824 14825 `-Ym,DIR' 14826 Look in the directory DIR to find the M4 preprocessor. The 14827 assembler uses this option. 14828 14829 14830 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: System V Options, Up: Submodel Options 14831 14832 3.17.35 V850 Options 14833 -------------------- 14834 14835 These `-m' options are defined for V850 implementations: 14836 14837 `-mlong-calls' 14838 `-mno-long-calls' 14839 Treat all calls as being far away (near). If calls are assumed to 14840 be far away, the compiler will always load the functions address 14841 up into a register, and call indirect through the pointer. 14842 14843 `-mno-ep' 14844 `-mep' 14845 Do not optimize (do optimize) basic blocks that use the same index 14846 pointer 4 or more times to copy pointer into the `ep' register, and 14847 use the shorter `sld' and `sst' instructions. The `-mep' option 14848 is on by default if you optimize. 14849 14850 `-mno-prolog-function' 14851 `-mprolog-function' 14852 Do not use (do use) external functions to save and restore 14853 registers at the prologue and epilogue of a function. The 14854 external functions are slower, but use less code space if more 14855 than one function saves the same number of registers. The 14856 `-mprolog-function' option is on by default if you optimize. 14857 14858 `-mspace' 14859 Try to make the code as small as possible. At present, this just 14860 turns on the `-mep' and `-mprolog-function' options. 14861 14862 `-mtda=N' 14863 Put static or global variables whose size is N bytes or less into 14864 the tiny data area that register `ep' points to. The tiny data 14865 area can hold up to 256 bytes in total (128 bytes for byte 14866 references). 14867 14868 `-msda=N' 14869 Put static or global variables whose size is N bytes or less into 14870 the small data area that register `gp' points to. The small data 14871 area can hold up to 64 kilobytes. 14872 14873 `-mzda=N' 14874 Put static or global variables whose size is N bytes or less into 14875 the first 32 kilobytes of memory. 14876 14877 `-mv850' 14878 Specify that the target processor is the V850. 14879 14880 `-mbig-switch' 14881 Generate code suitable for big switch tables. Use this option 14882 only if the assembler/linker complain about out of range branches 14883 within a switch table. 14884 14885 `-mapp-regs' 14886 This option will cause r2 and r5 to be used in the code generated 14887 by the compiler. This setting is the default. 14888 14889 `-mno-app-regs' 14890 This option will cause r2 and r5 to be treated as fixed registers. 14891 14892 `-mv850e1' 14893 Specify that the target processor is the V850E1. The preprocessor 14894 constants `__v850e1__' and `__v850e__' will be defined if this 14895 option is used. 14896 14897 `-mv850e' 14898 Specify that the target processor is the V850E. The preprocessor 14899 constant `__v850e__' will be defined if this option is used. 14900 14901 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then 14902 a default target processor will be chosen and the relevant 14903 `__v850*__' preprocessor constant will be defined. 14904 14905 The preprocessor constants `__v850' and `__v851__' are always 14906 defined, regardless of which processor variant is the target. 14907 14908 `-mdisable-callt' 14909 This option will suppress generation of the CALLT instruction for 14910 the v850e and v850e1 flavors of the v850 architecture. The 14911 default is `-mno-disable-callt' which allows the CALLT instruction 14912 to be used. 14913 14914 14915 14916 File: gcc.info, Node: VAX Options, Next: VxWorks Options, Prev: V850 Options, Up: Submodel Options 14917 14918 3.17.36 VAX Options 14919 ------------------- 14920 14921 These `-m' options are defined for the VAX: 14922 14923 `-munix' 14924 Do not output certain jump instructions (`aobleq' and so on) that 14925 the Unix assembler for the VAX cannot handle across long ranges. 14926 14927 `-mgnu' 14928 Do output those jump instructions, on the assumption that you will 14929 assemble with the GNU assembler. 14930 14931 `-mg' 14932 Output code for g-format floating point numbers instead of 14933 d-format. 14934 14935 14936 File: gcc.info, Node: VxWorks Options, Next: x86-64 Options, Prev: VAX Options, Up: Submodel Options 14937 14938 3.17.37 VxWorks Options 14939 ----------------------- 14940 14941 The options in this section are defined for all VxWorks targets. 14942 Options specific to the target hardware are listed with the other 14943 options for that target. 14944 14945 `-mrtp' 14946 GCC can generate code for both VxWorks kernels and real time 14947 processes (RTPs). This option switches from the former to the 14948 latter. It also defines the preprocessor macro `__RTP__'. 14949 14950 `-non-static' 14951 Link an RTP executable against shared libraries rather than static 14952 libraries. The options `-static' and `-shared' can also be used 14953 for RTPs (*note Link Options::); `-static' is the default. 14954 14955 `-Bstatic' 14956 `-Bdynamic' 14957 These options are passed down to the linker. They are defined for 14958 compatibility with Diab. 14959 14960 `-Xbind-lazy' 14961 Enable lazy binding of function calls. This option is equivalent 14962 to `-Wl,-z,now' and is defined for compatibility with Diab. 14963 14964 `-Xbind-now' 14965 Disable lazy binding of function calls. This option is the 14966 default and is defined for compatibility with Diab. 14967 14968 14969 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VxWorks Options, Up: Submodel Options 14970 14971 3.17.38 x86-64 Options 14972 ---------------------- 14973 14974 These are listed under *Note i386 and x86-64 Options::. 14975 14976 14977 File: gcc.info, Node: i386 and x86-64 Windows Options, Next: IA-64 Options, Prev: i386 and x86-64 Options, Up: Submodel Options 14978 14979 3.17.39 i386 and x86-64 Windows Options 14980 --------------------------------------- 14981 14982 These additional options are available for Windows targets: 14983 14984 `-mconsole' 14985 This option is available for Cygwin and MinGW targets. It 14986 specifies that a console application is to be generated, by 14987 instructing the linker to set the PE header subsystem type 14988 required for console applications. This is the default behaviour 14989 for Cygwin and MinGW targets. 14990 14991 `-mcygwin' 14992 This option is available for Cygwin targets. It specifies that 14993 the Cygwin internal interface is to be used for predefined 14994 preprocessor macros, C runtime libraries and related linker paths 14995 and options. For Cygwin targets this is the default behaviour. 14996 This option is deprecated and will be removed in a future release. 14997 14998 `-mno-cygwin' 14999 This option is available for Cygwin targets. It specifies that 15000 the MinGW internal interface is to be used instead of Cygwin's, by 15001 setting MinGW-related predefined macros and linker paths and 15002 default library options. This option is deprecated and will be 15003 removed in a future release. 15004 15005 `-mdll' 15006 This option is available for Cygwin and MinGW targets. It 15007 specifies that a DLL - a dynamic link library - is to be 15008 generated, enabling the selection of the required runtime startup 15009 object and entry point. 15010 15011 `-mnop-fun-dllimport' 15012 This option is available for Cygwin and MinGW targets. It 15013 specifies that the dllimport attribute should be ignored. 15014 15015 `-mthread' 15016 This option is available for MinGW targets. It specifies that 15017 MinGW-specific thread support is to be used. 15018 15019 `-mwin32' 15020 This option is available for Cygwin and MinGW targets. It 15021 specifies that the typical Windows pre-defined macros are to be 15022 set in the pre-processor, but does not influence the choice of 15023 runtime library/startup code. 15024 15025 `-mwindows' 15026 This option is available for Cygwin and MinGW targets. It 15027 specifies that a GUI application is to be generated by instructing 15028 the linker to set the PE header subsystem type appropriately. 15029 15030 See also under *Note i386 and x86-64 Options:: for standard options. 15031 15032 15033 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options 15034 15035 3.17.40 Xstormy16 Options 15036 ------------------------- 15037 15038 These options are defined for Xstormy16: 15039 15040 `-msim' 15041 Choose startup files and linker script suitable for the simulator. 15042 15043 15044 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options 15045 15046 3.17.41 Xtensa Options 15047 ---------------------- 15048 15049 These options are supported for Xtensa targets: 15050 15051 `-mconst16' 15052 `-mno-const16' 15053 Enable or disable use of `CONST16' instructions for loading 15054 constant values. The `CONST16' instruction is currently not a 15055 standard option from Tensilica. When enabled, `CONST16' 15056 instructions are always used in place of the standard `L32R' 15057 instructions. The use of `CONST16' is enabled by default only if 15058 the `L32R' instruction is not available. 15059 15060 `-mfused-madd' 15061 `-mno-fused-madd' 15062 Enable or disable use of fused multiply/add and multiply/subtract 15063 instructions in the floating-point option. This has no effect if 15064 the floating-point option is not also enabled. Disabling fused 15065 multiply/add and multiply/subtract instructions forces the 15066 compiler to use separate instructions for the multiply and 15067 add/subtract operations. This may be desirable in some cases 15068 where strict IEEE 754-compliant results are required: the fused 15069 multiply add/subtract instructions do not round the intermediate 15070 result, thereby producing results with _more_ bits of precision 15071 than specified by the IEEE standard. Disabling fused multiply 15072 add/subtract instructions also ensures that the program output is 15073 not sensitive to the compiler's ability to combine multiply and 15074 add/subtract operations. 15075 15076 `-mserialize-volatile' 15077 `-mno-serialize-volatile' 15078 When this option is enabled, GCC inserts `MEMW' instructions before 15079 `volatile' memory references to guarantee sequential consistency. 15080 The default is `-mserialize-volatile'. Use 15081 `-mno-serialize-volatile' to omit the `MEMW' instructions. 15082 15083 `-mtext-section-literals' 15084 `-mno-text-section-literals' 15085 Control the treatment of literal pools. The default is 15086 `-mno-text-section-literals', which places literals in a separate 15087 section in the output file. This allows the literal pool to be 15088 placed in a data RAM/ROM, and it also allows the linker to combine 15089 literal pools from separate object files to remove redundant 15090 literals and improve code size. With `-mtext-section-literals', 15091 the literals are interspersed in the text section in order to keep 15092 them as close as possible to their references. This may be 15093 necessary for large assembly files. 15094 15095 `-mtarget-align' 15096 `-mno-target-align' 15097 When this option is enabled, GCC instructs the assembler to 15098 automatically align instructions to reduce branch penalties at the 15099 expense of some code density. The assembler attempts to widen 15100 density instructions to align branch targets and the instructions 15101 following call instructions. If there are not enough preceding 15102 safe density instructions to align a target, no widening will be 15103 performed. The default is `-mtarget-align'. These options do not 15104 affect the treatment of auto-aligned instructions like `LOOP', 15105 which the assembler will always align, either by widening density 15106 instructions or by inserting no-op instructions. 15107 15108 `-mlongcalls' 15109 `-mno-longcalls' 15110 When this option is enabled, GCC instructs the assembler to 15111 translate direct calls to indirect calls unless it can determine 15112 that the target of a direct call is in the range allowed by the 15113 call instruction. This translation typically occurs for calls to 15114 functions in other source files. Specifically, the assembler 15115 translates a direct `CALL' instruction into an `L32R' followed by 15116 a `CALLX' instruction. The default is `-mno-longcalls'. This 15117 option should be used in programs where the call target can 15118 potentially be out of range. This option is implemented in the 15119 assembler, not the compiler, so the assembly code generated by GCC 15120 will still show direct call instructions--look at the disassembled 15121 object code to see the actual instructions. Note that the 15122 assembler will use an indirect call for every cross-file call, not 15123 just those that really will be out of range. 15124 15125 15126 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options 15127 15128 3.17.42 zSeries Options 15129 ----------------------- 15130 15131 These are listed under *Note S/390 and zSeries Options::. 15132 15133 15134 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC 15135 15136 3.18 Options for Code Generation Conventions 15137 ============================================ 15138 15139 These machine-independent options control the interface conventions 15140 used in code generation. 15141 15142 Most of them have both positive and negative forms; the negative form 15143 of `-ffoo' would be `-fno-foo'. In the table below, only one of the 15144 forms is listed--the one which is not the default. You can figure out 15145 the other form by either removing `no-' or adding it. 15146 15147 `-fbounds-check' 15148 For front-ends that support it, generate additional code to check 15149 that indices used to access arrays are within the declared range. 15150 This is currently only supported by the Java and Fortran 15151 front-ends, where this option defaults to true and false 15152 respectively. 15153 15154 `-ftrapv' 15155 This option generates traps for signed overflow on addition, 15156 subtraction, multiplication operations. 15157 15158 `-fwrapv' 15159 This option instructs the compiler to assume that signed arithmetic 15160 overflow of addition, subtraction and multiplication wraps around 15161 using twos-complement representation. This flag enables some 15162 optimizations and disables others. This option is enabled by 15163 default for the Java front-end, as required by the Java language 15164 specification. 15165 15166 `-fexceptions' 15167 Enable exception handling. Generates extra code needed to 15168 propagate exceptions. For some targets, this implies GCC will 15169 generate frame unwind information for all functions, which can 15170 produce significant data size overhead, although it does not 15171 affect execution. If you do not specify this option, GCC will 15172 enable it by default for languages like C++ which normally require 15173 exception handling, and disable it for languages like C that do 15174 not normally require it. However, you may need to enable this 15175 option when compiling C code that needs to interoperate properly 15176 with exception handlers written in C++. You may also wish to 15177 disable this option if you are compiling older C++ programs that 15178 don't use exception handling. 15179 15180 `-fnon-call-exceptions' 15181 Generate code that allows trapping instructions to throw 15182 exceptions. Note that this requires platform-specific runtime 15183 support that does not exist everywhere. Moreover, it only allows 15184 _trapping_ instructions to throw exceptions, i.e. memory 15185 references or floating point instructions. It does not allow 15186 exceptions to be thrown from arbitrary signal handlers such as 15187 `SIGALRM'. 15188 15189 `-funwind-tables' 15190 Similar to `-fexceptions', except that it will just generate any 15191 needed static data, but will not affect the generated code in any 15192 other way. You will normally not enable this option; instead, a 15193 language processor that needs this handling would enable it on 15194 your behalf. 15195 15196 `-fasynchronous-unwind-tables' 15197 Generate unwind table in dwarf2 format, if supported by target 15198 machine. The table is exact at each instruction boundary, so it 15199 can be used for stack unwinding from asynchronous events (such as 15200 debugger or garbage collector). 15201 15202 `-fpcc-struct-return' 15203 Return "short" `struct' and `union' values in memory like longer 15204 ones, rather than in registers. This convention is less 15205 efficient, but it has the advantage of allowing intercallability 15206 between GCC-compiled files and files compiled with other 15207 compilers, particularly the Portable C Compiler (pcc). 15208 15209 The precise convention for returning structures in memory depends 15210 on the target configuration macros. 15211 15212 Short structures and unions are those whose size and alignment 15213 match that of some integer type. 15214 15215 *Warning:* code compiled with the `-fpcc-struct-return' switch is 15216 not binary compatible with code compiled with the 15217 `-freg-struct-return' switch. Use it to conform to a non-default 15218 application binary interface. 15219 15220 `-freg-struct-return' 15221 Return `struct' and `union' values in registers when possible. 15222 This is more efficient for small structures than 15223 `-fpcc-struct-return'. 15224 15225 If you specify neither `-fpcc-struct-return' nor 15226 `-freg-struct-return', GCC defaults to whichever convention is 15227 standard for the target. If there is no standard convention, GCC 15228 defaults to `-fpcc-struct-return', except on targets where GCC is 15229 the principal compiler. In those cases, we can choose the 15230 standard, and we chose the more efficient register return 15231 alternative. 15232 15233 *Warning:* code compiled with the `-freg-struct-return' switch is 15234 not binary compatible with code compiled with the 15235 `-fpcc-struct-return' switch. Use it to conform to a non-default 15236 application binary interface. 15237 15238 `-fshort-enums' 15239 Allocate to an `enum' type only as many bytes as it needs for the 15240 declared range of possible values. Specifically, the `enum' type 15241 will be equivalent to the smallest integer type which has enough 15242 room. 15243 15244 *Warning:* the `-fshort-enums' switch causes GCC to generate code 15245 that is not binary compatible with code generated without that 15246 switch. Use it to conform to a non-default application binary 15247 interface. 15248 15249 `-fshort-double' 15250 Use the same size for `double' as for `float'. 15251 15252 *Warning:* the `-fshort-double' switch causes GCC to generate code 15253 that is not binary compatible with code generated without that 15254 switch. Use it to conform to a non-default application binary 15255 interface. 15256 15257 `-fshort-wchar' 15258 Override the underlying type for `wchar_t' to be `short unsigned 15259 int' instead of the default for the target. This option is useful 15260 for building programs to run under WINE. 15261 15262 *Warning:* the `-fshort-wchar' switch causes GCC to generate code 15263 that is not binary compatible with code generated without that 15264 switch. Use it to conform to a non-default application binary 15265 interface. 15266 15267 `-fno-common' 15268 In C code, controls the placement of uninitialized global 15269 variables. Unix C compilers have traditionally permitted multiple 15270 definitions of such variables in different compilation units by 15271 placing the variables in a common block. This is the behavior 15272 specified by `-fcommon', and is the default for GCC on most 15273 targets. On the other hand, this behavior is not required by ISO 15274 C, and on some targets may carry a speed or code size penalty on 15275 variable references. The `-fno-common' option specifies that the 15276 compiler should place uninitialized global variables in the data 15277 section of the object file, rather than generating them as common 15278 blocks. This has the effect that if the same variable is declared 15279 (without `extern') in two different compilations, you will get a 15280 multiple-definition error when you link them. In this case, you 15281 must compile with `-fcommon' instead. Compiling with 15282 `-fno-common' is useful on targets for which it provides better 15283 performance, or if you wish to verify that the program will work 15284 on other systems which always treat uninitialized variable 15285 declarations this way. 15286 15287 `-fno-ident' 15288 Ignore the `#ident' directive. 15289 15290 `-finhibit-size-directive' 15291 Don't output a `.size' assembler directive, or anything else that 15292 would cause trouble if the function is split in the middle, and the 15293 two halves are placed at locations far apart in memory. This 15294 option is used when compiling `crtstuff.c'; you should not need to 15295 use it for anything else. 15296 15297 `-fverbose-asm' 15298 Put extra commentary information in the generated assembly code to 15299 make it more readable. This option is generally only of use to 15300 those who actually need to read the generated assembly code 15301 (perhaps while debugging the compiler itself). 15302 15303 `-fno-verbose-asm', the default, causes the extra information to 15304 be omitted and is useful when comparing two assembler files. 15305 15306 `-frecord-gcc-switches' 15307 This switch causes the command line that was used to invoke the 15308 compiler to be recorded into the object file that is being created. 15309 This switch is only implemented on some targets and the exact 15310 format of the recording is target and binary file format 15311 dependent, but it usually takes the form of a section containing 15312 ASCII text. This switch is related to the `-fverbose-asm' switch, 15313 but that switch only records information in the assembler output 15314 file as comments, so it never reaches the object file. 15315 15316 `-fpic' 15317 Generate position-independent code (PIC) suitable for use in a 15318 shared library, if supported for the target machine. Such code 15319 accesses all constant addresses through a global offset table 15320 (GOT). The dynamic loader resolves the GOT entries when the 15321 program starts (the dynamic loader is not part of GCC; it is part 15322 of the operating system). If the GOT size for the linked 15323 executable exceeds a machine-specific maximum size, you get an 15324 error message from the linker indicating that `-fpic' does not 15325 work; in that case, recompile with `-fPIC' instead. (These 15326 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The 15327 386 has no such limit.) 15328 15329 Position-independent code requires special support, and therefore 15330 works only on certain machines. For the 386, GCC supports PIC for 15331 System V but not for the Sun 386i. Code generated for the IBM 15332 RS/6000 is always position-independent. 15333 15334 When this flag is set, the macros `__pic__' and `__PIC__' are 15335 defined to 1. 15336 15337 `-fPIC' 15338 If supported for the target machine, emit position-independent 15339 code, suitable for dynamic linking and avoiding any limit on the 15340 size of the global offset table. This option makes a difference 15341 on the m68k, PowerPC and SPARC. 15342 15343 Position-independent code requires special support, and therefore 15344 works only on certain machines. 15345 15346 When this flag is set, the macros `__pic__' and `__PIC__' are 15347 defined to 2. 15348 15349 `-fpie' 15350 `-fPIE' 15351 These options are similar to `-fpic' and `-fPIC', but generated 15352 position independent code can be only linked into executables. 15353 Usually these options are used when `-pie' GCC option will be used 15354 during linking. 15355 15356 `-fpie' and `-fPIE' both define the macros `__pie__' and 15357 `__PIE__'. The macros have the value 1 for `-fpie' and 2 for 15358 `-fPIE'. 15359 15360 NOTE: When -enable-esp this option is enabled by default for C, 15361 C++, ObjC, ObjC++, if neither `-fno-pie' or `-fno-PIE' or 15362 `-fno-pic' or `-fno-PIC' or `-nostdlib' or `-nostartfiles' or 15363 `-shared' are found. 15364 15365 `-fno-jump-tables' 15366 Do not use jump tables for switch statements even where it would be 15367 more efficient than other code generation strategies. This option 15368 is of use in conjunction with `-fpic' or `-fPIC' for building code 15369 which forms part of a dynamic linker and cannot reference the 15370 address of a jump table. On some targets, jump tables do not 15371 require a GOT and this option is not needed. 15372 15373 `-ffixed-REG' 15374 Treat the register named REG as a fixed register; generated code 15375 should never refer to it (except perhaps as a stack pointer, frame 15376 pointer or in some other fixed role). 15377 15378 REG must be the name of a register. The register names accepted 15379 are machine-specific and are defined in the `REGISTER_NAMES' macro 15380 in the machine description macro file. 15381 15382 This flag does not have a negative form, because it specifies a 15383 three-way choice. 15384 15385 `-fcall-used-REG' 15386 Treat the register named REG as an allocable register that is 15387 clobbered by function calls. It may be allocated for temporaries 15388 or variables that do not live across a call. Functions compiled 15389 this way will not save and restore the register REG. 15390 15391 It is an error to used this flag with the frame pointer or stack 15392 pointer. Use of this flag for other registers that have fixed 15393 pervasive roles in the machine's execution model will produce 15394 disastrous results. 15395 15396 This flag does not have a negative form, because it specifies a 15397 three-way choice. 15398 15399 `-fcall-saved-REG' 15400 Treat the register named REG as an allocable register saved by 15401 functions. It may be allocated even for temporaries or variables 15402 that live across a call. Functions compiled this way will save 15403 and restore the register REG if they use it. 15404 15405 It is an error to used this flag with the frame pointer or stack 15406 pointer. Use of this flag for other registers that have fixed 15407 pervasive roles in the machine's execution model will produce 15408 disastrous results. 15409 15410 A different sort of disaster will result from the use of this flag 15411 for a register in which function values may be returned. 15412 15413 This flag does not have a negative form, because it specifies a 15414 three-way choice. 15415 15416 `-fpack-struct[=N]' 15417 Without a value specified, pack all structure members together 15418 without holes. When a value is specified (which must be a small 15419 power of two), pack structure members according to this value, 15420 representing the maximum alignment (that is, objects with default 15421 alignment requirements larger than this will be output potentially 15422 unaligned at the next fitting location. 15423 15424 *Warning:* the `-fpack-struct' switch causes GCC to generate code 15425 that is not binary compatible with code generated without that 15426 switch. Additionally, it makes the code suboptimal. Use it to 15427 conform to a non-default application binary interface. 15428 15429 `-finstrument-functions' 15430 Generate instrumentation calls for entry and exit to functions. 15431 Just after function entry and just before function exit, the 15432 following profiling functions will be called with the address of 15433 the current function and its call site. (On some platforms, 15434 `__builtin_return_address' does not work beyond the current 15435 function, so the call site information may not be available to the 15436 profiling functions otherwise.) 15437 15438 void __cyg_profile_func_enter (void *this_fn, 15439 void *call_site); 15440 void __cyg_profile_func_exit (void *this_fn, 15441 void *call_site); 15442 15443 The first argument is the address of the start of the current 15444 function, which may be looked up exactly in the symbol table. 15445 15446 This instrumentation is also done for functions expanded inline in 15447 other functions. The profiling calls will indicate where, 15448 conceptually, the inline function is entered and exited. This 15449 means that addressable versions of such functions must be 15450 available. If all your uses of a function are expanded inline, 15451 this may mean an additional expansion of code size. If you use 15452 `extern inline' in your C code, an addressable version of such 15453 functions must be provided. (This is normally the case anyways, 15454 but if you get lucky and the optimizer always expands the 15455 functions inline, you might have gotten away without providing 15456 static copies.) 15457 15458 A function may be given the attribute `no_instrument_function', in 15459 which case this instrumentation will not be done. This can be 15460 used, for example, for the profiling functions listed above, 15461 high-priority interrupt routines, and any functions from which the 15462 profiling functions cannot safely be called (perhaps signal 15463 handlers, if the profiling routines generate output or allocate 15464 memory). 15465 15466 `-finstrument-functions-exclude-file-list=FILE,FILE,...' 15467 Set the list of functions that are excluded from instrumentation 15468 (see the description of `-finstrument-functions'). If the file 15469 that contains a function definition matches with one of FILE, then 15470 that function is not instrumented. The match is done on 15471 substrings: if the FILE parameter is a substring of the file name, 15472 it is considered to be a match. 15473 15474 For example, 15475 `-finstrument-functions-exclude-file-list=/bits/stl,include/sys' 15476 will exclude any inline function defined in files whose pathnames 15477 contain `/bits/stl' or `include/sys'. 15478 15479 If, for some reason, you want to include letter `','' in one of 15480 SYM, write `'\,''. For example, 15481 `-finstrument-functions-exclude-file-list='\,\,tmp'' (note the 15482 single quote surrounding the option). 15483 15484 `-finstrument-functions-exclude-function-list=SYM,SYM,...' 15485 This is similar to `-finstrument-functions-exclude-file-list', but 15486 this option sets the list of function names to be excluded from 15487 instrumentation. The function name to be matched is its 15488 user-visible name, such as `vector<int> blah(const vector<int> 15489 &)', not the internal mangled name (e.g., 15490 `_Z4blahRSt6vectorIiSaIiEE'). The match is done on substrings: if 15491 the SYM parameter is a substring of the function name, it is 15492 considered to be a match. 15493 15494 `-fstack-check' 15495 Generate code to verify that you do not go beyond the boundary of 15496 the stack. You should specify this flag if you are running in an 15497 environment with multiple threads, but only rarely need to specify 15498 it in a single-threaded environment since stack overflow is 15499 automatically detected on nearly all systems if there is only one 15500 stack. 15501 15502 Note that this switch does not actually cause checking to be done; 15503 the operating system or the language runtime must do that. The 15504 switch causes generation of code to ensure that they see the stack 15505 being extended. 15506 15507 You can additionally specify a string parameter: `no' means no 15508 checking, `generic' means force the use of old-style checking, 15509 `specific' means use the best checking method and is equivalent to 15510 bare `-fstack-check'. 15511 15512 Old-style checking is a generic mechanism that requires no specific 15513 target support in the compiler but comes with the following 15514 drawbacks: 15515 15516 1. Modified allocation strategy for large objects: they will 15517 always be allocated dynamically if their size exceeds a fixed 15518 threshold. 15519 15520 2. Fixed limit on the size of the static frame of functions: 15521 when it is topped by a particular function, stack checking is 15522 not reliable and a warning is issued by the compiler. 15523 15524 3. Inefficiency: because of both the modified allocation 15525 strategy and the generic implementation, the performances of 15526 the code are hampered. 15527 15528 Note that old-style stack checking is also the fallback method for 15529 `specific' if no target support has been added in the compiler. 15530 15531 `-fstack-limit-register=REG' 15532 `-fstack-limit-symbol=SYM' 15533 `-fno-stack-limit' 15534 Generate code to ensure that the stack does not grow beyond a 15535 certain value, either the value of a register or the address of a 15536 symbol. If the stack would grow beyond the value, a signal is 15537 raised. For most targets, the signal is raised before the stack 15538 overruns the boundary, so it is possible to catch the signal 15539 without taking special precautions. 15540 15541 For instance, if the stack starts at absolute address `0x80000000' 15542 and grows downwards, you can use the flags 15543 `-fstack-limit-symbol=__stack_limit' and 15544 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit 15545 of 128KB. Note that this may only work with the GNU linker. 15546 15547 `-fargument-alias' 15548 `-fargument-noalias' 15549 `-fargument-noalias-global' 15550 `-fargument-noalias-anything' 15551 Specify the possible relationships among parameters and between 15552 parameters and global data. 15553 15554 `-fargument-alias' specifies that arguments (parameters) may alias 15555 each other and may alias global storage. 15556 `-fargument-noalias' specifies that arguments do not alias each 15557 other, but may alias global storage. 15558 `-fargument-noalias-global' specifies that arguments do not alias 15559 each other and do not alias global storage. 15560 `-fargument-noalias-anything' specifies that arguments do not 15561 alias any other storage. 15562 15563 Each language will automatically use whatever option is required by 15564 the language standard. You should not need to use these options 15565 yourself. 15566 15567 `-fleading-underscore' 15568 This option and its counterpart, `-fno-leading-underscore', 15569 forcibly change the way C symbols are represented in the object 15570 file. One use is to help link with legacy assembly code. 15571 15572 *Warning:* the `-fleading-underscore' switch causes GCC to 15573 generate code that is not binary compatible with code generated 15574 without that switch. Use it to conform to a non-default 15575 application binary interface. Not all targets provide complete 15576 support for this switch. 15577 15578 `-ftls-model=MODEL' 15579 Alter the thread-local storage model to be used (*note 15580 Thread-Local::). The MODEL argument should be one of 15581 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'. 15582 15583 The default without `-fpic' is `initial-exec'; with `-fpic' the 15584 default is `global-dynamic'. 15585 15586 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED' 15587 Set the default ELF image symbol visibility to the specified 15588 option--all symbols will be marked with this unless overridden 15589 within the code. Using this feature can very substantially 15590 improve linking and load times of shared object libraries, produce 15591 more optimized code, provide near-perfect API export and prevent 15592 symbol clashes. It is *strongly* recommended that you use this in 15593 any shared objects you distribute. 15594 15595 Despite the nomenclature, `default' always means public ie; 15596 available to be linked against from outside the shared object. 15597 `protected' and `internal' are pretty useless in real-world usage 15598 so the only other commonly used option will be `hidden'. The 15599 default if `-fvisibility' isn't specified is `default', i.e., make 15600 every symbol public--this causes the same behavior as previous 15601 versions of GCC. 15602 15603 A good explanation of the benefits offered by ensuring ELF symbols 15604 have the correct visibility is given by "How To Write Shared 15605 Libraries" by Ulrich Drepper (which can be found at 15606 `http://people.redhat.com/~drepper/')--however a superior solution 15607 made possible by this option to marking things hidden when the 15608 default is public is to make the default hidden and mark things 15609 public. This is the norm with DLL's on Windows and with 15610 `-fvisibility=hidden' and `__attribute__ 15611 ((visibility("default")))' instead of `__declspec(dllexport)' you 15612 get almost identical semantics with identical syntax. This is a 15613 great boon to those working with cross-platform projects. 15614 15615 For those adding visibility support to existing code, you may find 15616 `#pragma GCC visibility' of use. This works by you enclosing the 15617 declarations you wish to set visibility for with (for example) 15618 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility 15619 pop'. Bear in mind that symbol visibility should be viewed *as 15620 part of the API interface contract* and thus all new code should 15621 always specify visibility when it is not the default ie; 15622 declarations only for use within the local DSO should *always* be 15623 marked explicitly as hidden as so to avoid PLT indirection 15624 overheads--making this abundantly clear also aids readability and 15625 self-documentation of the code. Note that due to ISO C++ 15626 specification requirements, operator new and operator delete must 15627 always be of default visibility. 15628 15629 Be aware that headers from outside your project, in particular 15630 system headers and headers from any other library you use, may not 15631 be expecting to be compiled with visibility other than the 15632 default. You may need to explicitly say `#pragma GCC visibility 15633 push(default)' before including any such headers. 15634 15635 `extern' declarations are not affected by `-fvisibility', so a lot 15636 of code can be recompiled with `-fvisibility=hidden' with no 15637 modifications. However, this means that calls to `extern' 15638 functions with no explicit visibility will use the PLT, so it is 15639 more effective to use `__attribute ((visibility))' and/or `#pragma 15640 GCC visibility' to tell the compiler which `extern' declarations 15641 should be treated as hidden. 15642 15643 Note that `-fvisibility' does affect C++ vague linkage entities. 15644 This means that, for instance, an exception class that will be 15645 thrown between DSOs must be explicitly marked with default 15646 visibility so that the `type_info' nodes will be unified between 15647 the DSOs. 15648 15649 An overview of these techniques, their benefits and how to use them 15650 is at `http://gcc.gnu.org/wiki/Visibility'. 15651 15652 15653 15654 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC 15655 15656 3.19 Environment Variables Affecting GCC 15657 ======================================== 15658 15659 This section describes several environment variables that affect how GCC 15660 operates. Some of them work by specifying directories or prefixes to 15661 use when searching for various kinds of files. Some are used to 15662 specify other aspects of the compilation environment. 15663 15664 Note that you can also specify places to search using options such as 15665 `-B', `-I' and `-L' (*note Directory Options::). These take precedence 15666 over places specified using environment variables, which in turn take 15667 precedence over those specified by the configuration of GCC. *Note 15668 Controlling the Compilation Driver `gcc': (gccint)Driver. 15669 15670 `LANG' 15671 `LC_CTYPE' 15672 `LC_MESSAGES' 15673 `LC_ALL' 15674 These environment variables control the way that GCC uses 15675 localization information that allow GCC to work with different 15676 national conventions. GCC inspects the locale categories 15677 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so. 15678 These locale categories can be set to any value supported by your 15679 installation. A typical value is `en_GB.UTF-8' for English in the 15680 United Kingdom encoded in UTF-8. 15681 15682 The `LC_CTYPE' environment variable specifies character 15683 classification. GCC uses it to determine the character boundaries 15684 in a string; this is needed for some multibyte encodings that 15685 contain quote and escape characters that would otherwise be 15686 interpreted as a string end or escape. 15687 15688 The `LC_MESSAGES' environment variable specifies the language to 15689 use in diagnostic messages. 15690 15691 If the `LC_ALL' environment variable is set, it overrides the value 15692 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and 15693 `LC_MESSAGES' default to the value of the `LANG' environment 15694 variable. If none of these variables are set, GCC defaults to 15695 traditional C English behavior. 15696 15697 `TMPDIR' 15698 If `TMPDIR' is set, it specifies the directory to use for temporary 15699 files. GCC uses temporary files to hold the output of one stage of 15700 compilation which is to be used as input to the next stage: for 15701 example, the output of the preprocessor, which is the input to the 15702 compiler proper. 15703 15704 `GCC_EXEC_PREFIX' 15705 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the 15706 names of the subprograms executed by the compiler. No slash is 15707 added when this prefix is combined with the name of a subprogram, 15708 but you can specify a prefix that ends with a slash if you wish. 15709 15710 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an 15711 appropriate prefix to use based on the pathname it was invoked 15712 with. 15713 15714 If GCC cannot find the subprogram using the specified prefix, it 15715 tries looking in the usual places for the subprogram. 15716 15717 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where 15718 PREFIX is the prefix to the installed compiler. In many cases 15719 PREFIX is the value of `prefix' when you ran the `configure' 15720 script. 15721 15722 Other prefixes specified with `-B' take precedence over this 15723 prefix. 15724 15725 This prefix is also used for finding files such as `crt0.o' that 15726 are used for linking. 15727 15728 In addition, the prefix is used in an unusual way in finding the 15729 directories to search for header files. For each of the standard 15730 directories whose name normally begins with `/usr/local/lib/gcc' 15731 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries 15732 replacing that beginning with the specified prefix to produce an 15733 alternate directory name. Thus, with `-Bfoo/', GCC will search 15734 `foo/bar' where it would normally search `/usr/local/lib/bar'. 15735 These alternate directories are searched first; the standard 15736 directories come next. If a standard directory begins with the 15737 configured PREFIX then the value of PREFIX is replaced by 15738 `GCC_EXEC_PREFIX' when looking for header files. 15739 15740 `COMPILER_PATH' 15741 The value of `COMPILER_PATH' is a colon-separated list of 15742 directories, much like `PATH'. GCC tries the directories thus 15743 specified when searching for subprograms, if it can't find the 15744 subprograms using `GCC_EXEC_PREFIX'. 15745 15746 `LIBRARY_PATH' 15747 The value of `LIBRARY_PATH' is a colon-separated list of 15748 directories, much like `PATH'. When configured as a native 15749 compiler, GCC tries the directories thus specified when searching 15750 for special linker files, if it can't find them using 15751 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories 15752 when searching for ordinary libraries for the `-l' option (but 15753 directories specified with `-L' come first). 15754 15755 `LANG' 15756 This variable is used to pass locale information to the compiler. 15757 One way in which this information is used is to determine the 15758 character set to be used when character literals, string literals 15759 and comments are parsed in C and C++. When the compiler is 15760 configured to allow multibyte characters, the following values for 15761 `LANG' are recognized: 15762 15763 `C-JIS' 15764 Recognize JIS characters. 15765 15766 `C-SJIS' 15767 Recognize SJIS characters. 15768 15769 `C-EUCJP' 15770 Recognize EUCJP characters. 15771 15772 If `LANG' is not defined, or if it has some other value, then the 15773 compiler will use mblen and mbtowc as defined by the default 15774 locale to recognize and translate multibyte characters. 15775 15776 Some additional environments variables affect the behavior of the 15777 preprocessor. 15778 15779 `CPATH' 15780 `C_INCLUDE_PATH' 15781 `CPLUS_INCLUDE_PATH' 15782 `OBJC_INCLUDE_PATH' 15783 Each variable's value is a list of directories separated by a 15784 special character, much like `PATH', in which to look for header 15785 files. The special character, `PATH_SEPARATOR', is 15786 target-dependent and determined at GCC build time. For Microsoft 15787 Windows-based targets it is a semicolon, and for almost all other 15788 targets it is a colon. 15789 15790 `CPATH' specifies a list of directories to be searched as if 15791 specified with `-I', but after any paths given with `-I' options 15792 on the command line. This environment variable is used regardless 15793 of which language is being preprocessed. 15794 15795 The remaining environment variables apply only when preprocessing 15796 the particular language indicated. Each specifies a list of 15797 directories to be searched as if specified with `-isystem', but 15798 after any paths given with `-isystem' options on the command line. 15799 15800 In all these variables, an empty element instructs the compiler to 15801 search its current working directory. Empty elements can appear 15802 at the beginning or end of a path. For instance, if the value of 15803 `CPATH' is `:/special/include', that has the same effect as 15804 `-I. -I/special/include'. 15805 15806 `DEPENDENCIES_OUTPUT' 15807 If this variable is set, its value specifies how to output 15808 dependencies for Make based on the non-system header files 15809 processed by the compiler. System header files are ignored in the 15810 dependency output. 15811 15812 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in 15813 which case the Make rules are written to that file, guessing the 15814 target name from the source file name. Or the value can have the 15815 form `FILE TARGET', in which case the rules are written to file 15816 FILE using TARGET as the target name. 15817 15818 In other words, this environment variable is equivalent to 15819 combining the options `-MM' and `-MF' (*note Preprocessor 15820 Options::), with an optional `-MT' switch too. 15821 15822 `SUNPRO_DEPENDENCIES' 15823 This variable is the same as `DEPENDENCIES_OUTPUT' (see above), 15824 except that system header files are not ignored, so it implies 15825 `-M' rather than `-MM'. However, the dependence on the main input 15826 file is omitted. *Note Preprocessor Options::. 15827 15828 15829 File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC 15830 15831 3.20 Using Precompiled Headers 15832 ============================== 15833 15834 Often large projects have many header files that are included in every 15835 source file. The time the compiler takes to process these header files 15836 over and over again can account for nearly all of the time required to 15837 build the project. To make builds faster, GCC allows users to 15838 `precompile' a header file; then, if builds can use the precompiled 15839 header file they will be much faster. 15840 15841 To create a precompiled header file, simply compile it as you would any 15842 other file, if necessary using the `-x' option to make the driver treat 15843 it as a C or C++ header file. You will probably want to use a tool 15844 like `make' to keep the precompiled header up-to-date when the headers 15845 it contains change. 15846 15847 A precompiled header file will be searched for when `#include' is seen 15848 in the compilation. As it searches for the included file (*note Search 15849 Path: (cpp)Search Path.) the compiler looks for a precompiled header in 15850 each directory just before it looks for the include file in that 15851 directory. The name searched for is the name specified in the 15852 `#include' with `.gch' appended. If the precompiled header file can't 15853 be used, it is ignored. 15854 15855 For instance, if you have `#include "all.h"', and you have `all.h.gch' 15856 in the same directory as `all.h', then the precompiled header file will 15857 be used if possible, and the original header will be used otherwise. 15858 15859 Alternatively, you might decide to put the precompiled header file in a 15860 directory and use `-I' to ensure that directory is searched before (or 15861 instead of) the directory containing the original header. Then, if you 15862 want to check that the precompiled header file is always used, you can 15863 put a file of the same name as the original header in this directory 15864 containing an `#error' command. 15865 15866 This also works with `-include'. So yet another way to use 15867 precompiled headers, good for projects not designed with precompiled 15868 header files in mind, is to simply take most of the header files used by 15869 a project, include them from another header file, precompile that header 15870 file, and `-include' the precompiled header. If the header files have 15871 guards against multiple inclusion, they will be skipped because they've 15872 already been included (in the precompiled header). 15873 15874 If you need to precompile the same header file for different 15875 languages, targets, or compiler options, you can instead make a 15876 _directory_ named like `all.h.gch', and put each precompiled header in 15877 the directory, perhaps using `-o'. It doesn't matter what you call the 15878 files in the directory, every precompiled header in the directory will 15879 be considered. The first precompiled header encountered in the 15880 directory that is valid for this compilation will be used; they're 15881 searched in no particular order. 15882 15883 There are many other possibilities, limited only by your imagination, 15884 good sense, and the constraints of your build system. 15885 15886 A precompiled header file can be used only when these conditions apply: 15887 15888 * Only one precompiled header can be used in a particular 15889 compilation. 15890 15891 * A precompiled header can't be used once the first C token is seen. 15892 You can have preprocessor directives before a precompiled header; 15893 you can even include a precompiled header from inside another 15894 header, so long as there are no C tokens before the `#include'. 15895 15896 * The precompiled header file must be produced for the same language 15897 as the current compilation. You can't use a C precompiled header 15898 for a C++ compilation. 15899 15900 * The precompiled header file must have been produced by the same 15901 compiler binary as the current compilation is using. 15902 15903 * Any macros defined before the precompiled header is included must 15904 either be defined in the same way as when the precompiled header 15905 was generated, or must not affect the precompiled header, which 15906 usually means that they don't appear in the precompiled header at 15907 all. 15908 15909 The `-D' option is one way to define a macro before a precompiled 15910 header is included; using a `#define' can also do it. There are 15911 also some options that define macros implicitly, like `-O' and 15912 `-Wdeprecated'; the same rule applies to macros defined this way. 15913 15914 * If debugging information is output when using the precompiled 15915 header, using `-g' or similar, the same kind of debugging 15916 information must have been output when building the precompiled 15917 header. However, a precompiled header built using `-g' can be 15918 used in a compilation when no debugging information is being 15919 output. 15920 15921 * The same `-m' options must generally be used when building and 15922 using the precompiled header. *Note Submodel Options::, for any 15923 cases where this rule is relaxed. 15924 15925 * Each of the following options must be the same when building and 15926 using the precompiled header: 15927 15928 -fexceptions 15929 15930 * Some other command-line options starting with `-f', `-p', or `-O' 15931 must be defined in the same way as when the precompiled header was 15932 generated. At present, it's not clear which options are safe to 15933 change and which are not; the safest choice is to use exactly the 15934 same options when generating and using the precompiled header. 15935 The following are known to be safe: 15936 15937 -fmessage-length= -fpreprocessed -fsched-interblock 15938 -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous 15939 -fsched-verbose=<number> -fschedule-insns -fvisibility= 15940 -pedantic-errors 15941 15942 15943 For all of these except the last, the compiler will automatically 15944 ignore the precompiled header if the conditions aren't met. If you 15945 find an option combination that doesn't work and doesn't cause the 15946 precompiled header to be ignored, please consider filing a bug report, 15947 see *Note Bugs::. 15948 15949 If you do use differing options when generating and using the 15950 precompiled header, the actual behavior will be a mixture of the 15951 behavior for the options. For instance, if you use `-g' to generate 15952 the precompiled header but not when using it, you may or may not get 15953 debugging information for routines in the precompiled header. 15954 15955 15956 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC 15957 15958 3.21 Running Protoize 15959 ===================== 15960 15961 The program `protoize' is an optional part of GCC. You can use it to 15962 add prototypes to a program, thus converting the program to ISO C in 15963 one respect. The companion program `unprotoize' does the reverse: it 15964 removes argument types from any prototypes that are found. 15965 15966 When you run these programs, you must specify a set of source files as 15967 command line arguments. The conversion programs start out by compiling 15968 these files to see what functions they define. The information gathered 15969 about a file FOO is saved in a file named `FOO.X'. 15970 15971 After scanning comes actual conversion. The specified files are all 15972 eligible to be converted; any files they include (whether sources or 15973 just headers) are eligible as well. 15974 15975 But not all the eligible files are converted. By default, `protoize' 15976 and `unprotoize' convert only source and header files in the current 15977 directory. You can specify additional directories whose files should 15978 be converted with the `-d DIRECTORY' option. You can also specify 15979 particular files to exclude with the `-x FILE' option. A file is 15980 converted if it is eligible, its directory name matches one of the 15981 specified directory names, and its name within the directory has not 15982 been excluded. 15983 15984 Basic conversion with `protoize' consists of rewriting most function 15985 definitions and function declarations to specify the types of the 15986 arguments. The only ones not rewritten are those for varargs functions. 15987 15988 `protoize' optionally inserts prototype declarations at the beginning 15989 of the source file, to make them available for any calls that precede 15990 the function's definition. Or it can insert prototype declarations 15991 with block scope in the blocks where undeclared functions are called. 15992 15993 Basic conversion with `unprotoize' consists of rewriting most function 15994 declarations to remove any argument types, and rewriting function 15995 definitions to the old-style pre-ISO form. 15996 15997 Both conversion programs print a warning for any function declaration 15998 or definition that they can't convert. You can suppress these warnings 15999 with `-q'. 16000 16001 The output from `protoize' or `unprotoize' replaces the original 16002 source file. The original file is renamed to a name ending with 16003 `.save' (for DOS, the saved filename ends in `.sav' without the 16004 original `.c' suffix). If the `.save' (`.sav' for DOS) file already 16005 exists, then the source file is simply discarded. 16006 16007 `protoize' and `unprotoize' both depend on GCC itself to scan the 16008 program and collect information about the functions it uses. So 16009 neither of these programs will work until GCC is installed. 16010 16011 Here is a table of the options you can use with `protoize' and 16012 `unprotoize'. Each option works with both programs unless otherwise 16013 stated. 16014 16015 `-B DIRECTORY' 16016 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the 16017 usual directory (normally `/usr/local/lib'). This file contains 16018 prototype information about standard system functions. This option 16019 applies only to `protoize'. 16020 16021 `-c COMPILATION-OPTIONS' 16022 Use COMPILATION-OPTIONS as the options when running `gcc' to 16023 produce the `.X' files. The special option `-aux-info' is always 16024 passed in addition, to tell `gcc' to write a `.X' file. 16025 16026 Note that the compilation options must be given as a single 16027 argument to `protoize' or `unprotoize'. If you want to specify 16028 several `gcc' options, you must quote the entire set of 16029 compilation options to make them a single word in the shell. 16030 16031 There are certain `gcc' arguments that you cannot use, because they 16032 would produce the wrong kind of output. These include `-g', `-O', 16033 `-c', `-S', and `-o' If you include these in the 16034 COMPILATION-OPTIONS, they are ignored. 16035 16036 `-C' 16037 Rename files to end in `.C' (`.cc' for DOS-based file systems) 16038 instead of `.c'. This is convenient if you are converting a C 16039 program to C++. This option applies only to `protoize'. 16040 16041 `-g' 16042 Add explicit global declarations. This means inserting explicit 16043 declarations at the beginning of each source file for each function 16044 that is called in the file and was not declared. These 16045 declarations precede the first function definition that contains a 16046 call to an undeclared function. This option applies only to 16047 `protoize'. 16048 16049 `-i STRING' 16050 Indent old-style parameter declarations with the string STRING. 16051 This option applies only to `protoize'. 16052 16053 `unprotoize' converts prototyped function definitions to old-style 16054 function definitions, where the arguments are declared between the 16055 argument list and the initial `{'. By default, `unprotoize' uses 16056 five spaces as the indentation. If you want to indent with just 16057 one space instead, use `-i " "'. 16058 16059 `-k' 16060 Keep the `.X' files. Normally, they are deleted after conversion 16061 is finished. 16062 16063 `-l' 16064 Add explicit local declarations. `protoize' with `-l' inserts a 16065 prototype declaration for each function in each block which calls 16066 the function without any declaration. This option applies only to 16067 `protoize'. 16068 16069 `-n' 16070 Make no real changes. This mode just prints information about the 16071 conversions that would have been done without `-n'. 16072 16073 `-N' 16074 Make no `.save' files. The original files are simply deleted. 16075 Use this option with caution. 16076 16077 `-p PROGRAM' 16078 Use the program PROGRAM as the compiler. Normally, the name `gcc' 16079 is used. 16080 16081 `-q' 16082 Work quietly. Most warnings are suppressed. 16083 16084 `-v' 16085 Print the version number, just like `-v' for `gcc'. 16086 16087 If you need special compiler options to compile one of your program's 16088 source files, then you should generate that file's `.X' file specially, 16089 by running `gcc' on that source file with the appropriate options and 16090 the option `-aux-info'. Then run `protoize' on the entire set of 16091 files. `protoize' will use the existing `.X' file because it is newer 16092 than the source file. For example: 16093 16094 gcc -Dfoo=bar file1.c -aux-info file1.X 16095 protoize *.c 16096 16097 You need to include the special files along with the rest in the 16098 `protoize' command, even though their `.X' files already exist, because 16099 otherwise they won't get converted. 16100 16101 *Note Protoize Caveats::, for more information on how to use 16102 `protoize' successfully. 16103 16104 16105 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top 16106 16107 4 C Implementation-defined behavior 16108 *********************************** 16109 16110 A conforming implementation of ISO C is required to document its choice 16111 of behavior in each of the areas that are designated "implementation 16112 defined". The following lists all such areas, along with the section 16113 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards. 16114 Some areas are only implementation-defined in one version of the 16115 standard. 16116 16117 Some choices depend on the externally determined ABI for the platform 16118 (including standard character encodings) which GCC follows; these are 16119 listed as "determined by ABI" below. *Note Binary Compatibility: 16120 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices 16121 are documented in the preprocessor manual. *Note 16122 Implementation-defined behavior: (cpp)Implementation-defined behavior. 16123 Some choices are made by the library and operating system (or other 16124 environment when compiling for a freestanding environment); refer to 16125 their documentation for details. 16126 16127 * Menu: 16128 16129 * Translation implementation:: 16130 * Environment implementation:: 16131 * Identifiers implementation:: 16132 * Characters implementation:: 16133 * Integers implementation:: 16134 * Floating point implementation:: 16135 * Arrays and pointers implementation:: 16136 * Hints implementation:: 16137 * Structures unions enumerations and bit-fields implementation:: 16138 * Qualifiers implementation:: 16139 * Declarators implementation:: 16140 * Statements implementation:: 16141 * Preprocessing directives implementation:: 16142 * Library functions implementation:: 16143 * Architecture implementation:: 16144 * Locale-specific behavior implementation:: 16145 16146 16147 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation 16148 16149 4.1 Translation 16150 =============== 16151 16152 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 16153 5.1.1.3).' 16154 16155 Diagnostics consist of all the output sent to stderr by GCC. 16156 16157 * `Whether each nonempty sequence of white-space characters other 16158 than new-line is retained or replaced by one space character in 16159 translation phase 3 (C90 and C99 5.1.1.2).' 16160 16161 *Note Implementation-defined behavior: (cpp)Implementation-defined 16162 behavior. 16163 16164 16165 16166 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation 16167 16168 4.2 Environment 16169 =============== 16170 16171 The behavior of most of these points are dependent on the implementation 16172 of the C library, and are not defined by GCC itself. 16173 16174 * `The mapping between physical source file multibyte characters and 16175 the source character set in translation phase 1 (C90 and C99 16176 5.1.1.2).' 16177 16178 *Note Implementation-defined behavior: (cpp)Implementation-defined 16179 behavior. 16180 16181 16182 16183 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation 16184 16185 4.3 Identifiers 16186 =============== 16187 16188 * `Which additional multibyte characters may appear in identifiers 16189 and their correspondence to universal character names (C99 6.4.2).' 16190 16191 *Note Implementation-defined behavior: (cpp)Implementation-defined 16192 behavior. 16193 16194 * `The number of significant initial characters in an identifier 16195 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).' 16196 16197 For internal names, all characters are significant. For external 16198 names, the number of significant characters are defined by the 16199 linker; for almost all targets, all characters are significant. 16200 16201 * `Whether case distinctions are significant in an identifier with 16202 external linkage (C90 6.1.2).' 16203 16204 This is a property of the linker. C99 requires that case 16205 distinctions are always significant in identifiers with external 16206 linkage and systems without this property are not supported by GCC. 16207 16208 16209 16210 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation 16211 16212 4.4 Characters 16213 ============== 16214 16215 * `The number of bits in a byte (C90 3.4, C99 3.6).' 16216 16217 Determined by ABI. 16218 16219 * `The values of the members of the execution character set (C90 and 16220 C99 5.2.1).' 16221 16222 Determined by ABI. 16223 16224 * `The unique value of the member of the execution character set 16225 produced for each of the standard alphabetic escape sequences (C90 16226 and C99 5.2.2).' 16227 16228 Determined by ABI. 16229 16230 * `The value of a `char' object into which has been stored any 16231 character other than a member of the basic execution character set 16232 (C90 6.1.2.5, C99 6.2.5).' 16233 16234 Determined by ABI. 16235 16236 * `Which of `signed char' or `unsigned char' has the same range, 16237 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90 16238 6.2.1.1, C99 6.2.5, C99 6.3.1.1).' 16239 16240 Determined by ABI. The options `-funsigned-char' and 16241 `-fsigned-char' change the default. *Note Options Controlling C 16242 Dialect: C Dialect Options. 16243 16244 * `The mapping of members of the source character set (in character 16245 constants and string literals) to members of the execution 16246 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).' 16247 16248 Determined by ABI. 16249 16250 * `The value of an integer character constant containing more than 16251 one character or containing a character or escape sequence that 16252 does not map to a single-byte execution character (C90 6.1.3.4, 16253 C99 6.4.4.4).' 16254 16255 *Note Implementation-defined behavior: (cpp)Implementation-defined 16256 behavior. 16257 16258 * `The value of a wide character constant containing more than one 16259 multibyte character, or containing a multibyte character or escape 16260 sequence not represented in the extended execution character set 16261 (C90 6.1.3.4, C99 6.4.4.4).' 16262 16263 *Note Implementation-defined behavior: (cpp)Implementation-defined 16264 behavior. 16265 16266 * `The current locale used to convert a wide character constant 16267 consisting of a single multibyte character that maps to a member 16268 of the extended execution character set into a corresponding wide 16269 character code (C90 6.1.3.4, C99 6.4.4.4).' 16270 16271 *Note Implementation-defined behavior: (cpp)Implementation-defined 16272 behavior. 16273 16274 * `The current locale used to convert a wide string literal into 16275 corresponding wide character codes (C90 6.1.4, C99 6.4.5).' 16276 16277 *Note Implementation-defined behavior: (cpp)Implementation-defined 16278 behavior. 16279 16280 * `The value of a string literal containing a multibyte character or 16281 escape sequence not represented in the execution character set 16282 (C90 6.1.4, C99 6.4.5).' 16283 16284 *Note Implementation-defined behavior: (cpp)Implementation-defined 16285 behavior. 16286 16287 16288 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation 16289 16290 4.5 Integers 16291 ============ 16292 16293 * `Any extended integer types that exist in the implementation (C99 16294 6.2.5).' 16295 16296 GCC does not support any extended integer types. 16297 16298 * `Whether signed integer types are represented using sign and 16299 magnitude, two's complement, or one's complement, and whether the 16300 extraordinary value is a trap representation or an ordinary value 16301 (C99 6.2.6.2).' 16302 16303 GCC supports only two's complement integer types, and all bit 16304 patterns are ordinary values. 16305 16306 * `The rank of any extended integer type relative to another extended 16307 integer type with the same precision (C99 6.3.1.1).' 16308 16309 GCC does not support any extended integer types. 16310 16311 * `The result of, or the signal raised by, converting an integer to a 16312 signed integer type when the value cannot be represented in an 16313 object of that type (C90 6.2.1.2, C99 6.3.1.3).' 16314 16315 For conversion to a type of width N, the value is reduced modulo 16316 2^N to be within range of the type; no signal is raised. 16317 16318 * `The results of some bitwise operations on signed integers (C90 16319 6.3, C99 6.5).' 16320 16321 Bitwise operators act on the representation of the value including 16322 both the sign and value bits, where the sign bit is considered 16323 immediately above the highest-value value bit. Signed `>>' acts 16324 on negative numbers by sign extension. 16325 16326 GCC does not use the latitude given in C99 only to treat certain 16327 aspects of signed `<<' as undefined, but this is subject to change. 16328 16329 * `The sign of the remainder on integer division (C90 6.3.5).' 16330 16331 GCC always follows the C99 requirement that the result of division 16332 is truncated towards zero. 16333 16334 16335 16336 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation 16337 16338 4.6 Floating point 16339 ================== 16340 16341 * `The accuracy of the floating-point operations and of the library 16342 functions in `<math.h>' and `<complex.h>' that return 16343 floating-point results (C90 and C99 5.2.4.2.2).' 16344 16345 The accuracy is unknown. 16346 16347 * `The rounding behaviors characterized by non-standard values of 16348 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).' 16349 16350 GCC does not use such values. 16351 16352 * `The evaluation methods characterized by non-standard negative 16353 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).' 16354 16355 GCC does not use such values. 16356 16357 * `The direction of rounding when an integer is converted to a 16358 floating-point number that cannot exactly represent the original 16359 value (C90 6.2.1.3, C99 6.3.1.4).' 16360 16361 C99 Annex F is followed. 16362 16363 * `The direction of rounding when a floating-point number is 16364 converted to a narrower floating-point number (C90 6.2.1.4, C99 16365 6.3.1.5).' 16366 16367 C99 Annex F is followed. 16368 16369 * `How the nearest representable value or the larger or smaller 16370 representable value immediately adjacent to the nearest 16371 representable value is chosen for certain floating constants (C90 16372 6.1.3.1, C99 6.4.4.2).' 16373 16374 C99 Annex F is followed. 16375 16376 * `Whether and how floating expressions are contracted when not 16377 disallowed by the `FP_CONTRACT' pragma (C99 6.5).' 16378 16379 Expressions are currently only contracted if 16380 `-funsafe-math-optimizations' or `-ffast-math' are used. This is 16381 subject to change. 16382 16383 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).' 16384 16385 This pragma is not implemented, but the default is to "off" unless 16386 `-frounding-math' is used in which case it is "on". 16387 16388 * `Additional floating-point exceptions, rounding modes, 16389 environments, and classifications, and their macro names (C99 7.6, 16390 C99 7.12).' 16391 16392 This is dependent on the implementation of the C library, and is 16393 not defined by GCC itself. 16394 16395 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).' 16396 16397 This pragma is not implemented. Expressions are currently only 16398 contracted if `-funsafe-math-optimizations' or `-ffast-math' are 16399 used. This is subject to change. 16400 16401 * `Whether the "inexact" floating-point exception can be raised when 16402 the rounded result actually does equal the mathematical result in 16403 an IEC 60559 conformant implementation (C99 F.9).' 16404 16405 This is dependent on the implementation of the C library, and is 16406 not defined by GCC itself. 16407 16408 * `Whether the "underflow" (and "inexact") floating-point exception 16409 can be raised when a result is tiny but not inexact in an IEC 16410 60559 conformant implementation (C99 F.9).' 16411 16412 This is dependent on the implementation of the C library, and is 16413 not defined by GCC itself. 16414 16415 16416 16417 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation 16418 16419 4.7 Arrays and pointers 16420 ======================= 16421 16422 * `The result of converting a pointer to an integer or vice versa 16423 (C90 6.3.4, C99 6.3.2.3).' 16424 16425 A cast from pointer to integer discards most-significant bits if 16426 the pointer representation is larger than the integer type, 16427 sign-extends(1) if the pointer representation is smaller than the 16428 integer type, otherwise the bits are unchanged. 16429 16430 A cast from integer to pointer discards most-significant bits if 16431 the pointer representation is smaller than the integer type, 16432 extends according to the signedness of the integer type if the 16433 pointer representation is larger than the integer type, otherwise 16434 the bits are unchanged. 16435 16436 When casting from pointer to integer and back again, the resulting 16437 pointer must reference the same object as the original pointer, 16438 otherwise the behavior is undefined. That is, one may not use 16439 integer arithmetic to avoid the undefined behavior of pointer 16440 arithmetic as proscribed in C99 6.5.6/8. 16441 16442 * `The size of the result of subtracting two pointers to elements of 16443 the same array (C90 6.3.6, C99 6.5.6).' 16444 16445 The value is as specified in the standard and the type is 16446 determined by the ABI. 16447 16448 16449 ---------- Footnotes ---------- 16450 16451 (1) Future versions of GCC may zero-extend, or use a target-defined 16452 `ptr_extend' pattern. Do not rely on sign extension. 16453 16454 16455 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation 16456 16457 4.8 Hints 16458 ========= 16459 16460 * `The extent to which suggestions made by using the `register' 16461 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).' 16462 16463 The `register' specifier affects code generation only in these 16464 ways: 16465 16466 * When used as part of the register variable extension, see 16467 *Note Explicit Reg Vars::. 16468 16469 * When `-O0' is in use, the compiler allocates distinct stack 16470 memory for all variables that do not have the `register' 16471 storage-class specifier; if `register' is specified, the 16472 variable may have a shorter lifespan than the code would 16473 indicate and may never be placed in memory. 16474 16475 * On some rare x86 targets, `setjmp' doesn't save the registers 16476 in all circumstances. In those cases, GCC doesn't allocate 16477 any variables in registers unless they are marked `register'. 16478 16479 16480 * `The extent to which suggestions made by using the inline function 16481 specifier are effective (C99 6.7.4).' 16482 16483 GCC will not inline any functions if the `-fno-inline' option is 16484 used or if `-O0' is used. Otherwise, GCC may still be unable to 16485 inline a function for many reasons; the `-Winline' option may be 16486 used to determine if a function has not been inlined and why not. 16487 16488 16489 16490 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation 16491 16492 4.9 Structures, unions, enumerations, and bit-fields 16493 ==================================================== 16494 16495 * `A member of a union object is accessed using a member of a 16496 different type (C90 6.3.2.3).' 16497 16498 The relevant bytes of the representation of the object are treated 16499 as an object of the type used for the access. *Note 16500 Type-punning::. This may be a trap representation. 16501 16502 * `Whether a "plain" `int' bit-field is treated as a `signed int' 16503 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90 16504 6.5.2.1, C99 6.7.2, C99 6.7.2.1).' 16505 16506 By default it is treated as `signed int' but this may be changed 16507 by the `-funsigned-bitfields' option. 16508 16509 * `Allowable bit-field types other than `_Bool', `signed int', and 16510 `unsigned int' (C99 6.7.2.1).' 16511 16512 No other types are permitted in strictly conforming mode. 16513 16514 * `Whether a bit-field can straddle a storage-unit boundary (C90 16515 6.5.2.1, C99 6.7.2.1).' 16516 16517 Determined by ABI. 16518 16519 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1, 16520 C99 6.7.2.1).' 16521 16522 Determined by ABI. 16523 16524 * `The alignment of non-bit-field members of structures (C90 16525 6.5.2.1, C99 6.7.2.1).' 16526 16527 Determined by ABI. 16528 16529 * `The integer type compatible with each enumerated type (C90 16530 6.5.2.2, C99 6.7.2.2).' 16531 16532 Normally, the type is `unsigned int' if there are no negative 16533 values in the enumeration, otherwise `int'. If `-fshort-enums' is 16534 specified, then if there are negative values it is the first of 16535 `signed char', `short' and `int' that can represent all the 16536 values, otherwise it is the first of `unsigned char', `unsigned 16537 short' and `unsigned int' that can represent all the values. 16538 16539 On some targets, `-fshort-enums' is the default; this is 16540 determined by the ABI. 16541 16542 16543 16544 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation 16545 16546 4.10 Qualifiers 16547 =============== 16548 16549 * `What constitutes an access to an object that has 16550 volatile-qualified type (C90 6.5.3, C99 6.7.3).' 16551 16552 Such an object is normally accessed by pointers and used for 16553 accessing hardware. In most expressions, it is intuitively 16554 obvious what is a read and what is a write. For example 16555 16556 volatile int *dst = SOMEVALUE; 16557 volatile int *src = SOMEOTHERVALUE; 16558 *dst = *src; 16559 16560 will cause a read of the volatile object pointed to by SRC and 16561 store the value into the volatile object pointed to by DST. There 16562 is no guarantee that these reads and writes are atomic, especially 16563 for objects larger than `int'. 16564 16565 However, if the volatile storage is not being modified, and the 16566 value of the volatile storage is not used, then the situation is 16567 less obvious. For example 16568 16569 volatile int *src = SOMEVALUE; 16570 *src; 16571 16572 According to the C standard, such an expression is an rvalue whose 16573 type is the unqualified version of its original type, i.e. `int'. 16574 Whether GCC interprets this as a read of the volatile object being 16575 pointed to or only as a request to evaluate the expression for its 16576 side-effects depends on this type. 16577 16578 If it is a scalar type, or on most targets an aggregate type whose 16579 only member object is of a scalar type, or a union type whose 16580 member objects are of scalar types, the expression is interpreted 16581 by GCC as a read of the volatile object; in the other cases, the 16582 expression is only evaluated for its side-effects. 16583 16584 16585 16586 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation 16587 16588 4.11 Declarators 16589 ================ 16590 16591 * `The maximum number of declarators that may modify an arithmetic, 16592 structure or union type (C90 6.5.4).' 16593 16594 GCC is only limited by available memory. 16595 16596 16597 16598 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation 16599 16600 4.12 Statements 16601 =============== 16602 16603 * `The maximum number of `case' values in a `switch' statement (C90 16604 6.6.4.2).' 16605 16606 GCC is only limited by available memory. 16607 16608 16609 16610 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation 16611 16612 4.13 Preprocessing directives 16613 ============================= 16614 16615 *Note Implementation-defined behavior: (cpp)Implementation-defined 16616 behavior, for details of these aspects of implementation-defined 16617 behavior. 16618 16619 * `How sequences in both forms of header names are mapped to headers 16620 or external source file names (C90 6.1.7, C99 6.4.7).' 16621 16622 * `Whether the value of a character constant in a constant expression 16623 that controls conditional inclusion matches the value of the same 16624 character constant in the execution character set (C90 6.8.1, C99 16625 6.10.1).' 16626 16627 * `Whether the value of a single-character character constant in a 16628 constant expression that controls conditional inclusion may have a 16629 negative value (C90 6.8.1, C99 6.10.1).' 16630 16631 * `The places that are searched for an included `<>' delimited 16632 header, and how the places are specified or the header is 16633 identified (C90 6.8.2, C99 6.10.2).' 16634 16635 * `How the named source file is searched for in an included `""' 16636 delimited header (C90 6.8.2, C99 6.10.2).' 16637 16638 * `The method by which preprocessing tokens (possibly resulting from 16639 macro expansion) in a `#include' directive are combined into a 16640 header name (C90 6.8.2, C99 6.10.2).' 16641 16642 * `The nesting limit for `#include' processing (C90 6.8.2, C99 16643 6.10.2).' 16644 16645 * `Whether the `#' operator inserts a `\' character before the `\' 16646 character that begins a universal character name in a character 16647 constant or string literal (C99 6.10.3.2).' 16648 16649 * `The behavior on each recognized non-`STDC #pragma' directive (C90 16650 6.8.6, C99 6.10.6).' 16651 16652 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by 16653 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for 16654 details of target-specific pragmas. 16655 16656 * `The definitions for `__DATE__' and `__TIME__' when respectively, 16657 the date and time of translation are not available (C90 6.8.8, C99 16658 6.10.8).' 16659 16660 16661 16662 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation 16663 16664 4.14 Library functions 16665 ====================== 16666 16667 The behavior of most of these points are dependent on the implementation 16668 of the C library, and are not defined by GCC itself. 16669 16670 * `The null pointer constant to which the macro `NULL' expands (C90 16671 7.1.6, C99 7.17).' 16672 16673 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not 16674 provide the other headers which define `NULL' and some library 16675 implementations may use other definitions in those headers. 16676 16677 16678 16679 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation 16680 16681 4.15 Architecture 16682 ================= 16683 16684 * `The values or expressions assigned to the macros specified in the 16685 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99 16686 5.2.4.2, C99 7.18.2, C99 7.18.3).' 16687 16688 Determined by ABI. 16689 16690 * `The number, order, and encoding of bytes in any object (when not 16691 explicitly specified in this International Standard) (C99 16692 6.2.6.1).' 16693 16694 Determined by ABI. 16695 16696 * `The value of the result of the `sizeof' operator (C90 6.3.3.4, 16697 C99 6.5.3.4).' 16698 16699 Determined by ABI. 16700 16701 16702 16703 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation 16704 16705 4.16 Locale-specific behavior 16706 ============================= 16707 16708 The behavior of these points are dependent on the implementation of the 16709 C library, and are not defined by GCC itself. 16710 16711 16712 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top 16713 16714 5 Extensions to the C Language Family 16715 ************************************* 16716 16717 GNU C provides several language features not found in ISO standard C. 16718 (The `-pedantic' option directs GCC to print a warning message if any 16719 of these features is used.) To test for the availability of these 16720 features in conditional compilation, check for a predefined macro 16721 `__GNUC__', which is always defined under GCC. 16722 16723 These extensions are available in C and Objective-C. Most of them are 16724 also available in C++. *Note Extensions to the C++ Language: C++ 16725 Extensions, for extensions that apply _only_ to C++. 16726 16727 Some features that are in ISO C99 but not C89 or C++ are also, as 16728 extensions, accepted by GCC in C89 mode and in C++. 16729 16730 * Menu: 16731 16732 * Statement Exprs:: Putting statements and declarations inside expressions. 16733 * Local Labels:: Labels local to a block. 16734 * Labels as Values:: Getting pointers to labels, and computed gotos. 16735 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions. 16736 * Constructing Calls:: Dispatching a call to another function. 16737 * Typeof:: `typeof': referring to the type of an expression. 16738 * Conditionals:: Omitting the middle operand of a `?:' expression. 16739 * Long Long:: Double-word integers---`long long int'. 16740 * Complex:: Data types for complex numbers. 16741 * Floating Types:: Additional Floating Types. 16742 * Decimal Float:: Decimal Floating Types. 16743 * Hex Floats:: Hexadecimal floating-point constants. 16744 * Fixed-Point:: Fixed-Point Types. 16745 * Zero Length:: Zero-length arrays. 16746 * Variable Length:: Arrays whose length is computed at run time. 16747 * Empty Structures:: Structures with no members. 16748 * Variadic Macros:: Macros with a variable number of arguments. 16749 * Escaped Newlines:: Slightly looser rules for escaped newlines. 16750 * Subscripting:: Any array can be subscripted, even if not an lvalue. 16751 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers. 16752 * Initializers:: Non-constant initializers. 16753 * Compound Literals:: Compound literals give structures, unions 16754 or arrays as values. 16755 * Designated Inits:: Labeling elements of initializers. 16756 * Cast to Union:: Casting to union type from any member of the union. 16757 * Case Ranges:: `case 1 ... 9' and such. 16758 * Mixed Declarations:: Mixing declarations and code. 16759 * Function Attributes:: Declaring that functions have no side effects, 16760 or that they can never return. 16761 * Attribute Syntax:: Formal syntax for attributes. 16762 * Function Prototypes:: Prototype declarations and old-style definitions. 16763 * C++ Comments:: C++ comments are recognized. 16764 * Dollar Signs:: Dollar sign is allowed in identifiers. 16765 * Character Escapes:: `\e' stands for the character <ESC>. 16766 * Variable Attributes:: Specifying attributes of variables. 16767 * Type Attributes:: Specifying attributes of types. 16768 * Alignment:: Inquiring about the alignment of a type or variable. 16769 * Inline:: Defining inline functions (as fast as macros). 16770 * Extended Asm:: Assembler instructions with C expressions as operands. 16771 (With them you can define ``built-in'' functions.) 16772 * Constraints:: Constraints for asm operands 16773 * Asm Labels:: Specifying the assembler name to use for a C symbol. 16774 * Explicit Reg Vars:: Defining variables residing in specified registers. 16775 * Alternate Keywords:: `__const__', `__asm__', etc., for header files. 16776 * Incomplete Enums:: `enum foo;', with details to follow. 16777 * Function Names:: Printable strings which are the name of the current 16778 function. 16779 * Return Address:: Getting the return or frame address of a function. 16780 * Vector Extensions:: Using vector instructions through built-in functions. 16781 * Offsetof:: Special syntax for implementing `offsetof'. 16782 * Atomic Builtins:: Built-in functions for atomic memory access. 16783 * Object Size Checking:: Built-in functions for limited buffer overflow 16784 checking. 16785 * Other Builtins:: Other built-in functions. 16786 * Target Builtins:: Built-in functions specific to particular targets. 16787 * Target Format Checks:: Format checks specific to particular targets. 16788 * Pragmas:: Pragmas accepted by GCC. 16789 * Unnamed Fields:: Unnamed struct/union fields within structs/unions. 16790 * Thread-Local:: Per-thread variables. 16791 * Binary constants:: Binary constants using the `0b' prefix. 16792 16793 16794 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions 16795 16796 5.1 Statements and Declarations in Expressions 16797 ============================================== 16798 16799 A compound statement enclosed in parentheses may appear as an expression 16800 in GNU C. This allows you to use loops, switches, and local variables 16801 within an expression. 16802 16803 Recall that a compound statement is a sequence of statements surrounded 16804 by braces; in this construct, parentheses go around the braces. For 16805 example: 16806 16807 ({ int y = foo (); int z; 16808 if (y > 0) z = y; 16809 else z = - y; 16810 z; }) 16811 16812 is a valid (though slightly more complex than necessary) expression for 16813 the absolute value of `foo ()'. 16814 16815 The last thing in the compound statement should be an expression 16816 followed by a semicolon; the value of this subexpression serves as the 16817 value of the entire construct. (If you use some other kind of statement 16818 last within the braces, the construct has type `void', and thus 16819 effectively no value.) 16820 16821 This feature is especially useful in making macro definitions "safe" 16822 (so that they evaluate each operand exactly once). For example, the 16823 "maximum" function is commonly defined as a macro in standard C as 16824 follows: 16825 16826 #define max(a,b) ((a) > (b) ? (a) : (b)) 16827 16828 But this definition computes either A or B twice, with bad results if 16829 the operand has side effects. In GNU C, if you know the type of the 16830 operands (here taken as `int'), you can define the macro safely as 16831 follows: 16832 16833 #define maxint(a,b) \ 16834 ({int _a = (a), _b = (b); _a > _b ? _a : _b; }) 16835 16836 Embedded statements are not allowed in constant expressions, such as 16837 the value of an enumeration constant, the width of a bit-field, or the 16838 initial value of a static variable. 16839 16840 If you don't know the type of the operand, you can still do this, but 16841 you must use `typeof' (*note Typeof::). 16842 16843 In G++, the result value of a statement expression undergoes array and 16844 function pointer decay, and is returned by value to the enclosing 16845 expression. For instance, if `A' is a class, then 16846 16847 A a; 16848 16849 ({a;}).Foo () 16850 16851 will construct a temporary `A' object to hold the result of the 16852 statement expression, and that will be used to invoke `Foo'. Therefore 16853 the `this' pointer observed by `Foo' will not be the address of `a'. 16854 16855 Any temporaries created within a statement within a statement 16856 expression will be destroyed at the statement's end. This makes 16857 statement expressions inside macros slightly different from function 16858 calls. In the latter case temporaries introduced during argument 16859 evaluation will be destroyed at the end of the statement that includes 16860 the function call. In the statement expression case they will be 16861 destroyed during the statement expression. For instance, 16862 16863 #define macro(a) ({__typeof__(a) b = (a); b + 3; }) 16864 template<typename T> T function(T a) { T b = a; return b + 3; } 16865 16866 void foo () 16867 { 16868 macro (X ()); 16869 function (X ()); 16870 } 16871 16872 will have different places where temporaries are destroyed. For the 16873 `macro' case, the temporary `X' will be destroyed just after the 16874 initialization of `b'. In the `function' case that temporary will be 16875 destroyed when the function returns. 16876 16877 These considerations mean that it is probably a bad idea to use 16878 statement-expressions of this form in header files that are designed to 16879 work with C++. (Note that some versions of the GNU C Library contained 16880 header files using statement-expression that lead to precisely this 16881 bug.) 16882 16883 Jumping into a statement expression with `goto' or using a `switch' 16884 statement outside the statement expression with a `case' or `default' 16885 label inside the statement expression is not permitted. Jumping into a 16886 statement expression with a computed `goto' (*note Labels as Values::) 16887 yields undefined behavior. Jumping out of a statement expression is 16888 permitted, but if the statement expression is part of a larger 16889 expression then it is unspecified which other subexpressions of that 16890 expression have been evaluated except where the language definition 16891 requires certain subexpressions to be evaluated before or after the 16892 statement expression. In any case, as with a function call the 16893 evaluation of a statement expression is not interleaved with the 16894 evaluation of other parts of the containing expression. For example, 16895 16896 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz(); 16897 16898 will call `foo' and `bar1' and will not call `baz' but may or may not 16899 call `bar2'. If `bar2' is called, it will be called after `foo' and 16900 before `bar1' 16901 16902 16903 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions 16904 16905 5.2 Locally Declared Labels 16906 =========================== 16907 16908 GCC allows you to declare "local labels" in any nested block scope. A 16909 local label is just like an ordinary label, but you can only reference 16910 it (with a `goto' statement, or by taking its address) within the block 16911 in which it was declared. 16912 16913 A local label declaration looks like this: 16914 16915 __label__ LABEL; 16916 16917 or 16918 16919 __label__ LABEL1, LABEL2, /* ... */; 16920 16921 Local label declarations must come at the beginning of the block, 16922 before any ordinary declarations or statements. 16923 16924 The label declaration defines the label _name_, but does not define 16925 the label itself. You must do this in the usual way, with `LABEL:', 16926 within the statements of the statement expression. 16927 16928 The local label feature is useful for complex macros. If a macro 16929 contains nested loops, a `goto' can be useful for breaking out of them. 16930 However, an ordinary label whose scope is the whole function cannot be 16931 used: if the macro can be expanded several times in one function, the 16932 label will be multiply defined in that function. A local label avoids 16933 this problem. For example: 16934 16935 #define SEARCH(value, array, target) \ 16936 do { \ 16937 __label__ found; \ 16938 typeof (target) _SEARCH_target = (target); \ 16939 typeof (*(array)) *_SEARCH_array = (array); \ 16940 int i, j; \ 16941 int value; \ 16942 for (i = 0; i < max; i++) \ 16943 for (j = 0; j < max; j++) \ 16944 if (_SEARCH_array[i][j] == _SEARCH_target) \ 16945 { (value) = i; goto found; } \ 16946 (value) = -1; \ 16947 found:; \ 16948 } while (0) 16949 16950 This could also be written using a statement-expression: 16951 16952 #define SEARCH(array, target) \ 16953 ({ \ 16954 __label__ found; \ 16955 typeof (target) _SEARCH_target = (target); \ 16956 typeof (*(array)) *_SEARCH_array = (array); \ 16957 int i, j; \ 16958 int value; \ 16959 for (i = 0; i < max; i++) \ 16960 for (j = 0; j < max; j++) \ 16961 if (_SEARCH_array[i][j] == _SEARCH_target) \ 16962 { value = i; goto found; } \ 16963 value = -1; \ 16964 found: \ 16965 value; \ 16966 }) 16967 16968 Local label declarations also make the labels they declare visible to 16969 nested functions, if there are any. *Note Nested Functions::, for 16970 details. 16971 16972 16973 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions 16974 16975 5.3 Labels as Values 16976 ==================== 16977 16978 You can get the address of a label defined in the current function (or 16979 a containing function) with the unary operator `&&'. The value has 16980 type `void *'. This value is a constant and can be used wherever a 16981 constant of that type is valid. For example: 16982 16983 void *ptr; 16984 /* ... */ 16985 ptr = &&foo; 16986 16987 To use these values, you need to be able to jump to one. This is done 16988 with the computed goto statement(1), `goto *EXP;'. For example, 16989 16990 goto *ptr; 16991 16992 Any expression of type `void *' is allowed. 16993 16994 One way of using these constants is in initializing a static array that 16995 will serve as a jump table: 16996 16997 static void *array[] = { &&foo, &&bar, &&hack }; 16998 16999 Then you can select a label with indexing, like this: 17000 17001 goto *array[i]; 17002 17003 Note that this does not check whether the subscript is in bounds--array 17004 indexing in C never does that. 17005 17006 Such an array of label values serves a purpose much like that of the 17007 `switch' statement. The `switch' statement is cleaner, so use that 17008 rather than an array unless the problem does not fit a `switch' 17009 statement very well. 17010 17011 Another use of label values is in an interpreter for threaded code. 17012 The labels within the interpreter function can be stored in the 17013 threaded code for super-fast dispatching. 17014 17015 You may not use this mechanism to jump to code in a different function. 17016 If you do that, totally unpredictable things will happen. The best way 17017 to avoid this is to store the label address only in automatic variables 17018 and never pass it as an argument. 17019 17020 An alternate way to write the above example is 17021 17022 static const int array[] = { &&foo - &&foo, &&bar - &&foo, 17023 &&hack - &&foo }; 17024 goto *(&&foo + array[i]); 17025 17026 This is more friendly to code living in shared libraries, as it reduces 17027 the number of dynamic relocations that are needed, and by consequence, 17028 allows the data to be read-only. 17029 17030 The `&&foo' expressions for the same label might have different values 17031 if the containing function is inlined or cloned. If a program relies on 17032 them being always the same, `__attribute__((__noinline__))' should be 17033 used to prevent inlining. If `&&foo' is used in a static variable 17034 initializer, inlining is forbidden. 17035 17036 ---------- Footnotes ---------- 17037 17038 (1) The analogous feature in Fortran is called an assigned goto, but 17039 that name seems inappropriate in C, where one can do more than simply 17040 store label addresses in label variables. 17041 17042 17043 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions 17044 17045 5.4 Nested Functions 17046 ==================== 17047 17048 A "nested function" is a function defined inside another function. 17049 (Nested functions are not supported for GNU C++.) The nested function's 17050 name is local to the block where it is defined. For example, here we 17051 define a nested function named `square', and call it twice: 17052 17053 foo (double a, double b) 17054 { 17055 double square (double z) { return z * z; } 17056 17057 return square (a) + square (b); 17058 } 17059 17060 The nested function can access all the variables of the containing 17061 function that are visible at the point of its definition. This is 17062 called "lexical scoping". For example, here we show a nested function 17063 which uses an inherited variable named `offset': 17064 17065 bar (int *array, int offset, int size) 17066 { 17067 int access (int *array, int index) 17068 { return array[index + offset]; } 17069 int i; 17070 /* ... */ 17071 for (i = 0; i < size; i++) 17072 /* ... */ access (array, i) /* ... */ 17073 } 17074 17075 Nested function definitions are permitted within functions in the 17076 places where variable definitions are allowed; that is, in any block, 17077 mixed with the other declarations and statements in the block. 17078 17079 It is possible to call the nested function from outside the scope of 17080 its name by storing its address or passing the address to another 17081 function: 17082 17083 hack (int *array, int size) 17084 { 17085 void store (int index, int value) 17086 { array[index] = value; } 17087 17088 intermediate (store, size); 17089 } 17090 17091 Here, the function `intermediate' receives the address of `store' as 17092 an argument. If `intermediate' calls `store', the arguments given to 17093 `store' are used to store into `array'. But this technique works only 17094 so long as the containing function (`hack', in this example) does not 17095 exit. 17096 17097 If you try to call the nested function through its address after the 17098 containing function has exited, all hell will break loose. If you try 17099 to call it after a containing scope level has exited, and if it refers 17100 to some of the variables that are no longer in scope, you may be lucky, 17101 but it's not wise to take the risk. If, however, the nested function 17102 does not refer to anything that has gone out of scope, you should be 17103 safe. 17104 17105 GCC implements taking the address of a nested function using a 17106 technique called "trampolines". A paper describing them is available as 17107 17108 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'. 17109 17110 A nested function can jump to a label inherited from a containing 17111 function, provided the label was explicitly declared in the containing 17112 function (*note Local Labels::). Such a jump returns instantly to the 17113 containing function, exiting the nested function which did the `goto' 17114 and any intermediate functions as well. Here is an example: 17115 17116 bar (int *array, int offset, int size) 17117 { 17118 __label__ failure; 17119 int access (int *array, int index) 17120 { 17121 if (index > size) 17122 goto failure; 17123 return array[index + offset]; 17124 } 17125 int i; 17126 /* ... */ 17127 for (i = 0; i < size; i++) 17128 /* ... */ access (array, i) /* ... */ 17129 /* ... */ 17130 return 0; 17131 17132 /* Control comes here from `access' 17133 if it detects an error. */ 17134 failure: 17135 return -1; 17136 } 17137 17138 A nested function always has no linkage. Declaring one with `extern' 17139 or `static' is erroneous. If you need to declare the nested function 17140 before its definition, use `auto' (which is otherwise meaningless for 17141 function declarations). 17142 17143 bar (int *array, int offset, int size) 17144 { 17145 __label__ failure; 17146 auto int access (int *, int); 17147 /* ... */ 17148 int access (int *array, int index) 17149 { 17150 if (index > size) 17151 goto failure; 17152 return array[index + offset]; 17153 } 17154 /* ... */ 17155 } 17156 17157 17158 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions 17159 17160 5.5 Constructing Function Calls 17161 =============================== 17162 17163 Using the built-in functions described below, you can record the 17164 arguments a function received, and call another function with the same 17165 arguments, without knowing the number or types of the arguments. 17166 17167 You can also record the return value of that function call, and later 17168 return that value, without knowing what data type the function tried to 17169 return (as long as your caller expects that data type). 17170 17171 However, these built-in functions may interact badly with some 17172 sophisticated features or other extensions of the language. It is, 17173 therefore, not recommended to use them outside very simple functions 17174 acting as mere forwarders for their arguments. 17175 17176 -- Built-in Function: void * __builtin_apply_args () 17177 This built-in function returns a pointer to data describing how to 17178 perform a call with the same arguments as were passed to the 17179 current function. 17180 17181 The function saves the arg pointer register, structure value 17182 address, and all registers that might be used to pass arguments to 17183 a function into a block of memory allocated on the stack. Then it 17184 returns the address of that block. 17185 17186 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void 17187 *ARGUMENTS, size_t SIZE) 17188 This built-in function invokes FUNCTION with a copy of the 17189 parameters described by ARGUMENTS and SIZE. 17190 17191 The value of ARGUMENTS should be the value returned by 17192 `__builtin_apply_args'. The argument SIZE specifies the size of 17193 the stack argument data, in bytes. 17194 17195 This function returns a pointer to data describing how to return 17196 whatever value was returned by FUNCTION. The data is saved in a 17197 block of memory allocated on the stack. 17198 17199 It is not always simple to compute the proper value for SIZE. The 17200 value is used by `__builtin_apply' to compute the amount of data 17201 that should be pushed on the stack and copied from the incoming 17202 argument area. 17203 17204 -- Built-in Function: void __builtin_return (void *RESULT) 17205 This built-in function returns the value described by RESULT from 17206 the containing function. You should specify, for RESULT, a value 17207 returned by `__builtin_apply'. 17208 17209 -- Built-in Function: __builtin_va_arg_pack () 17210 This built-in function represents all anonymous arguments of an 17211 inline function. It can be used only in inline functions which 17212 will be always inlined, never compiled as a separate function, 17213 such as those using `__attribute__ ((__always_inline__))' or 17214 `__attribute__ ((__gnu_inline__))' extern inline functions. It 17215 must be only passed as last argument to some other function with 17216 variable arguments. This is useful for writing small wrapper 17217 inlines for variable argument functions, when using preprocessor 17218 macros is undesirable. For example: 17219 extern int myprintf (FILE *f, const char *format, ...); 17220 extern inline __attribute__ ((__gnu_inline__)) int 17221 myprintf (FILE *f, const char *format, ...) 17222 { 17223 int r = fprintf (f, "myprintf: "); 17224 if (r < 0) 17225 return r; 17226 int s = fprintf (f, format, __builtin_va_arg_pack ()); 17227 if (s < 0) 17228 return s; 17229 return r + s; 17230 } 17231 17232 -- Built-in Function: __builtin_va_arg_pack_len () 17233 This built-in function returns the number of anonymous arguments of 17234 an inline function. It can be used only in inline functions which 17235 will be always inlined, never compiled as a separate function, such 17236 as those using `__attribute__ ((__always_inline__))' or 17237 `__attribute__ ((__gnu_inline__))' extern inline functions. For 17238 example following will do link or runtime checking of open 17239 arguments for optimized code: 17240 #ifdef __OPTIMIZE__ 17241 extern inline __attribute__((__gnu_inline__)) int 17242 myopen (const char *path, int oflag, ...) 17243 { 17244 if (__builtin_va_arg_pack_len () > 1) 17245 warn_open_too_many_arguments (); 17246 17247 if (__builtin_constant_p (oflag)) 17248 { 17249 if ((oflag & O_CREAT) != 0 && __builtin_va_arg_pack_len () < 1) 17250 { 17251 warn_open_missing_mode (); 17252 return __open_2 (path, oflag); 17253 } 17254 return open (path, oflag, __builtin_va_arg_pack ()); 17255 } 17256 17257 if (__builtin_va_arg_pack_len () < 1) 17258 return __open_2 (path, oflag); 17259 17260 return open (path, oflag, __builtin_va_arg_pack ()); 17261 } 17262 #endif 17263 17264 17265 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions 17266 17267 5.6 Referring to a Type with `typeof' 17268 ===================================== 17269 17270 Another way to refer to the type of an expression is with `typeof'. 17271 The syntax of using of this keyword looks like `sizeof', but the 17272 construct acts semantically like a type name defined with `typedef'. 17273 17274 There are two ways of writing the argument to `typeof': with an 17275 expression or with a type. Here is an example with an expression: 17276 17277 typeof (x[0](1)) 17278 17279 This assumes that `x' is an array of pointers to functions; the type 17280 described is that of the values of the functions. 17281 17282 Here is an example with a typename as the argument: 17283 17284 typeof (int *) 17285 17286 Here the type described is that of pointers to `int'. 17287 17288 If you are writing a header file that must work when included in ISO C 17289 programs, write `__typeof__' instead of `typeof'. *Note Alternate 17290 Keywords::. 17291 17292 A `typeof'-construct can be used anywhere a typedef name could be 17293 used. For example, you can use it in a declaration, in a cast, or 17294 inside of `sizeof' or `typeof'. 17295 17296 `typeof' is often useful in conjunction with the 17297 statements-within-expressions feature. Here is how the two together can 17298 be used to define a safe "maximum" macro that operates on any 17299 arithmetic type and evaluates each of its arguments exactly once: 17300 17301 #define max(a,b) \ 17302 ({ typeof (a) _a = (a); \ 17303 typeof (b) _b = (b); \ 17304 _a > _b ? _a : _b; }) 17305 17306 The reason for using names that start with underscores for the local 17307 variables is to avoid conflicts with variable names that occur within 17308 the expressions that are substituted for `a' and `b'. Eventually we 17309 hope to design a new form of declaration syntax that allows you to 17310 declare variables whose scopes start only after their initializers; 17311 this will be a more reliable way to prevent such conflicts. 17312 17313 Some more examples of the use of `typeof': 17314 17315 * This declares `y' with the type of what `x' points to. 17316 17317 typeof (*x) y; 17318 17319 * This declares `y' as an array of such values. 17320 17321 typeof (*x) y[4]; 17322 17323 * This declares `y' as an array of pointers to characters: 17324 17325 typeof (typeof (char *)[4]) y; 17326 17327 It is equivalent to the following traditional C declaration: 17328 17329 char *y[4]; 17330 17331 To see the meaning of the declaration using `typeof', and why it 17332 might be a useful way to write, rewrite it with these macros: 17333 17334 #define pointer(T) typeof(T *) 17335 #define array(T, N) typeof(T [N]) 17336 17337 Now the declaration can be rewritten this way: 17338 17339 array (pointer (char), 4) y; 17340 17341 Thus, `array (pointer (char), 4)' is the type of arrays of 4 17342 pointers to `char'. 17343 17344 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more 17345 limited extension which permitted one to write 17346 17347 typedef T = EXPR; 17348 17349 with the effect of declaring T to have the type of the expression EXPR. 17350 This extension does not work with GCC 3 (versions between 3.0 and 3.2 17351 will crash; 3.2.1 and later give an error). Code which relies on it 17352 should be rewritten to use `typeof': 17353 17354 typedef typeof(EXPR) T; 17355 17356 This will work with all versions of GCC. 17357 17358 17359 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions 17360 17361 5.7 Conditionals with Omitted Operands 17362 ====================================== 17363 17364 The middle operand in a conditional expression may be omitted. Then if 17365 the first operand is nonzero, its value is the value of the conditional 17366 expression. 17367 17368 Therefore, the expression 17369 17370 x ? : y 17371 17372 has the value of `x' if that is nonzero; otherwise, the value of `y'. 17373 17374 This example is perfectly equivalent to 17375 17376 x ? x : y 17377 17378 In this simple case, the ability to omit the middle operand is not 17379 especially useful. When it becomes useful is when the first operand 17380 does, or may (if it is a macro argument), contain a side effect. Then 17381 repeating the operand in the middle would perform the side effect 17382 twice. Omitting the middle operand uses the value already computed 17383 without the undesirable effects of recomputing it. 17384 17385 17386 File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions 17387 17388 5.8 Double-Word Integers 17389 ======================== 17390 17391 ISO C99 supports data types for integers that are at least 64 bits wide, 17392 and as an extension GCC supports them in C89 mode and in C++. Simply 17393 write `long long int' for a signed integer, or `unsigned long long int' 17394 for an unsigned integer. To make an integer constant of type `long 17395 long int', add the suffix `LL' to the integer. To make an integer 17396 constant of type `unsigned long long int', add the suffix `ULL' to the 17397 integer. 17398 17399 You can use these types in arithmetic like any other integer types. 17400 Addition, subtraction, and bitwise boolean operations on these types 17401 are open-coded on all types of machines. Multiplication is open-coded 17402 if the machine supports fullword-to-doubleword a widening multiply 17403 instruction. Division and shifts are open-coded only on machines that 17404 provide special support. The operations that are not open-coded use 17405 special library routines that come with GCC. 17406 17407 There may be pitfalls when you use `long long' types for function 17408 arguments, unless you declare function prototypes. If a function 17409 expects type `int' for its argument, and you pass a value of type `long 17410 long int', confusion will result because the caller and the subroutine 17411 will disagree about the number of bytes for the argument. Likewise, if 17412 the function expects `long long int' and you pass `int'. The best way 17413 to avoid such problems is to use prototypes. 17414 17415 17416 File: gcc.info, Node: Complex, Next: Floating Types, Prev: Long Long, Up: C Extensions 17417 17418 5.9 Complex Numbers 17419 =================== 17420 17421 ISO C99 supports complex floating data types, and as an extension GCC 17422 supports them in C89 mode and in C++, and supports complex integer data 17423 types which are not part of ISO C99. You can declare complex types 17424 using the keyword `_Complex'. As an extension, the older GNU keyword 17425 `__complex__' is also supported. 17426 17427 For example, `_Complex double x;' declares `x' as a variable whose 17428 real part and imaginary part are both of type `double'. `_Complex 17429 short int y;' declares `y' to have real and imaginary parts of type 17430 `short int'; this is not likely to be useful, but it shows that the set 17431 of complex types is complete. 17432 17433 To write a constant with a complex data type, use the suffix `i' or 17434 `j' (either one; they are equivalent). For example, `2.5fi' has type 17435 `_Complex float' and `3i' has type `_Complex int'. Such a constant 17436 always has a pure imaginary value, but you can form any complex value 17437 you like by adding one to a real constant. This is a GNU extension; if 17438 you have an ISO C99 conforming C library (such as GNU libc), and want 17439 to construct complex constants of floating type, you should include 17440 `<complex.h>' and use the macros `I' or `_Complex_I' instead. 17441 17442 To extract the real part of a complex-valued expression EXP, write 17443 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary 17444 part. This is a GNU extension; for values of floating type, you should 17445 use the ISO C99 functions `crealf', `creal', `creall', `cimagf', 17446 `cimag' and `cimagl', declared in `<complex.h>' and also provided as 17447 built-in functions by GCC. 17448 17449 The operator `~' performs complex conjugation when used on a value 17450 with a complex type. This is a GNU extension; for values of floating 17451 type, you should use the ISO C99 functions `conjf', `conj' and `conjl', 17452 declared in `<complex.h>' and also provided as built-in functions by 17453 GCC. 17454 17455 GCC can allocate complex automatic variables in a noncontiguous 17456 fashion; it's even possible for the real part to be in a register while 17457 the imaginary part is on the stack (or vice-versa). Only the DWARF2 17458 debug info format can represent this, so use of DWARF2 is recommended. 17459 If you are using the stabs debug info format, GCC describes a 17460 noncontiguous complex variable as if it were two separate variables of 17461 noncomplex type. If the variable's actual name is `foo', the two 17462 fictitious variables are named `foo$real' and `foo$imag'. You can 17463 examine and set these two fictitious variables with your debugger. 17464 17465 17466 File: gcc.info, Node: Floating Types, Next: Decimal Float, Prev: Complex, Up: C Extensions 17467 17468 5.10 Additional Floating Types 17469 ============================== 17470 17471 As an extension, the GNU C compiler supports additional floating types, 17472 `__float80' and `__float128' to support 80bit (`XFmode') and 128 bit 17473 (`TFmode') floating types. Support for additional types includes the 17474 arithmetic operators: add, subtract, multiply, divide; unary arithmetic 17475 operators; relational operators; equality operators; and conversions to 17476 and from integer and other floating types. Use a suffix `w' or `W' in 17477 a literal constant of type `__float80' and `q' or `Q' for `_float128'. 17478 You can declare complex types using the corresponding internal complex 17479 type, `XCmode' for `__float80' type and `TCmode' for `__float128' type: 17480 17481 typedef _Complex float __attribute__((mode(TC))) _Complex128; 17482 typedef _Complex float __attribute__((mode(XC))) _Complex80; 17483 17484 Not all targets support additional floating point types. `__float80' 17485 and `__float128' types are supported on i386, x86_64 and ia64 targets. 17486 17487 17488 File: gcc.info, Node: Decimal Float, Next: Hex Floats, Prev: Floating Types, Up: C Extensions 17489 17490 5.11 Decimal Floating Types 17491 =========================== 17492 17493 As an extension, the GNU C compiler supports decimal floating types as 17494 defined in the N1312 draft of ISO/IEC WDTR24732. Support for decimal 17495 floating types in GCC will evolve as the draft technical report changes. 17496 Calling conventions for any target might also change. Not all targets 17497 support decimal floating types. 17498 17499 The decimal floating types are `_Decimal32', `_Decimal64', and 17500 `_Decimal128'. They use a radix of ten, unlike the floating types 17501 `float', `double', and `long double' whose radix is not specified by 17502 the C standard but is usually two. 17503 17504 Support for decimal floating types includes the arithmetic operators 17505 add, subtract, multiply, divide; unary arithmetic operators; relational 17506 operators; equality operators; and conversions to and from integer and 17507 other floating types. Use a suffix `df' or `DF' in a literal constant 17508 of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL' 17509 for `_Decimal128'. 17510 17511 GCC support of decimal float as specified by the draft technical report 17512 is incomplete: 17513 17514 * Pragma `FLOAT_CONST_DECIMAL64' is not supported, nor is the `d' 17515 suffix for literal constants of type `double'. 17516 17517 * When the value of a decimal floating type cannot be represented in 17518 the integer type to which it is being converted, the result is 17519 undefined rather than the result value specified by the draft 17520 technical report. 17521 17522 * GCC does not provide the C library functionality associated with 17523 `math.h', `fenv.h', `stdio.h', `stdlib.h', and `wchar.h', which 17524 must come from a separate C library implementation. Because of 17525 this the GNU C compiler does not define macro `__STDC_DEC_FP__' to 17526 indicate that the implementation conforms to the technical report. 17527 17528 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by 17529 the DWARF2 debug information format. 17530 17531 17532 File: gcc.info, Node: Hex Floats, Next: Fixed-Point, Prev: Decimal Float, Up: C Extensions 17533 17534 5.12 Hex Floats 17535 =============== 17536 17537 ISO C99 supports floating-point numbers written not only in the usual 17538 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3' 17539 written in hexadecimal format. As a GNU extension, GCC supports this 17540 in C89 mode (except in some cases when strictly conforming) and in C++. 17541 In that format the `0x' hex introducer and the `p' or `P' exponent 17542 field are mandatory. The exponent is a decimal number that indicates 17543 the power of 2 by which the significant part will be multiplied. Thus 17544 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3' 17545 is the same as `1.55e1'. 17546 17547 Unlike for floating-point numbers in the decimal notation the exponent 17548 is always required in the hexadecimal notation. Otherwise the compiler 17549 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This 17550 could mean `1.0f' or `1.9375' since `f' is also the extension for 17551 floating-point constants of type `float'. 17552 17553 17554 File: gcc.info, Node: Fixed-Point, Next: Zero Length, Prev: Hex Floats, Up: C Extensions 17555 17556 5.13 Fixed-Point Types 17557 ====================== 17558 17559 As an extension, the GNU C compiler supports fixed-point types as 17560 defined in the N1169 draft of ISO/IEC DTR 18037. Support for 17561 fixed-point types in GCC will evolve as the draft technical report 17562 changes. Calling conventions for any target might also change. Not 17563 all targets support fixed-point types. 17564 17565 The fixed-point types are `short _Fract', `_Fract', `long _Fract', 17566 `long long _Fract', `unsigned short _Fract', `unsigned _Fract', 17567 `unsigned long _Fract', `unsigned long long _Fract', `_Sat short 17568 _Fract', `_Sat _Fract', `_Sat long _Fract', `_Sat long long _Fract', 17569 `_Sat unsigned short _Fract', `_Sat unsigned _Fract', `_Sat unsigned 17570 long _Fract', `_Sat unsigned long long _Fract', `short _Accum', 17571 `_Accum', `long _Accum', `long long _Accum', `unsigned short _Accum', 17572 `unsigned _Accum', `unsigned long _Accum', `unsigned long long _Accum', 17573 `_Sat short _Accum', `_Sat _Accum', `_Sat long _Accum', `_Sat long long 17574 _Accum', `_Sat unsigned short _Accum', `_Sat unsigned _Accum', `_Sat 17575 unsigned long _Accum', `_Sat unsigned long long _Accum'. 17576 17577 Fixed-point data values contain fractional and optional integral parts. 17578 The format of fixed-point data varies and depends on the target machine. 17579 17580 Support for fixed-point types includes: 17581 * prefix and postfix increment and decrement operators (`++', `--') 17582 17583 * unary arithmetic operators (`+', `-', `!') 17584 17585 * binary arithmetic operators (`+', `-', `*', `/') 17586 17587 * binary shift operators (`<<', `>>') 17588 17589 * relational operators (`<', `<=', `>=', `>') 17590 17591 * equality operators (`==', `!=') 17592 17593 * assignment operators (`+=', `-=', `*=', `/=', `<<=', `>>=') 17594 17595 * conversions to and from integer, floating-point, or fixed-point 17596 types 17597 17598 Use a suffix in a fixed-point literal constant: 17599 * `hr' or `HR' for `short _Fract' and `_Sat short _Fract' 17600 17601 * `r' or `R' for `_Fract' and `_Sat _Fract' 17602 17603 * `lr' or `LR' for `long _Fract' and `_Sat long _Fract' 17604 17605 * `llr' or `LLR' for `long long _Fract' and `_Sat long long _Fract' 17606 17607 * `uhr' or `UHR' for `unsigned short _Fract' and `_Sat unsigned 17608 short _Fract' 17609 17610 * `ur' or `UR' for `unsigned _Fract' and `_Sat unsigned _Fract' 17611 17612 * `ulr' or `ULR' for `unsigned long _Fract' and `_Sat unsigned long 17613 _Fract' 17614 17615 * `ullr' or `ULLR' for `unsigned long long _Fract' and `_Sat 17616 unsigned long long _Fract' 17617 17618 * `hk' or `HK' for `short _Accum' and `_Sat short _Accum' 17619 17620 * `k' or `K' for `_Accum' and `_Sat _Accum' 17621 17622 * `lk' or `LK' for `long _Accum' and `_Sat long _Accum' 17623 17624 * `llk' or `LLK' for `long long _Accum' and `_Sat long long _Accum' 17625 17626 * `uhk' or `UHK' for `unsigned short _Accum' and `_Sat unsigned 17627 short _Accum' 17628 17629 * `uk' or `UK' for `unsigned _Accum' and `_Sat unsigned _Accum' 17630 17631 * `ulk' or `ULK' for `unsigned long _Accum' and `_Sat unsigned long 17632 _Accum' 17633 17634 * `ullk' or `ULLK' for `unsigned long long _Accum' and `_Sat 17635 unsigned long long _Accum' 17636 17637 GCC support of fixed-point types as specified by the draft technical 17638 report is incomplete: 17639 17640 * Pragmas to control overflow and rounding behaviors are not 17641 implemented. 17642 17643 Fixed-point types are supported by the DWARF2 debug information format. 17644 17645 17646 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Fixed-Point, Up: C Extensions 17647 17648 5.14 Arrays of Length Zero 17649 ========================== 17650 17651 Zero-length arrays are allowed in GNU C. They are very useful as the 17652 last element of a structure which is really a header for a 17653 variable-length object: 17654 17655 struct line { 17656 int length; 17657 char contents[0]; 17658 }; 17659 17660 struct line *thisline = (struct line *) 17661 malloc (sizeof (struct line) + this_length); 17662 thisline->length = this_length; 17663 17664 In ISO C90, you would have to give `contents' a length of 1, which 17665 means either you waste space or complicate the argument to `malloc'. 17666 17667 In ISO C99, you would use a "flexible array member", which is slightly 17668 different in syntax and semantics: 17669 17670 * Flexible array members are written as `contents[]' without the `0'. 17671 17672 * Flexible array members have incomplete type, and so the `sizeof' 17673 operator may not be applied. As a quirk of the original 17674 implementation of zero-length arrays, `sizeof' evaluates to zero. 17675 17676 * Flexible array members may only appear as the last member of a 17677 `struct' that is otherwise non-empty. 17678 17679 * A structure containing a flexible array member, or a union 17680 containing such a structure (possibly recursively), may not be a 17681 member of a structure or an element of an array. (However, these 17682 uses are permitted by GCC as extensions.) 17683 17684 GCC versions before 3.0 allowed zero-length arrays to be statically 17685 initialized, as if they were flexible arrays. In addition to those 17686 cases that were useful, it also allowed initializations in situations 17687 that would corrupt later data. Non-empty initialization of zero-length 17688 arrays is now treated like any case where there are more initializer 17689 elements than the array holds, in that a suitable warning about "excess 17690 elements in array" is given, and the excess elements (all of them, in 17691 this case) are ignored. 17692 17693 Instead GCC allows static initialization of flexible array members. 17694 This is equivalent to defining a new structure containing the original 17695 structure followed by an array of sufficient size to contain the data. 17696 I.e. in the following, `f1' is constructed as if it were declared like 17697 `f2'. 17698 17699 struct f1 { 17700 int x; int y[]; 17701 } f1 = { 1, { 2, 3, 4 } }; 17702 17703 struct f2 { 17704 struct f1 f1; int data[3]; 17705 } f2 = { { 1 }, { 2, 3, 4 } }; 17706 17707 The convenience of this extension is that `f1' has the desired type, 17708 eliminating the need to consistently refer to `f2.f1'. 17709 17710 This has symmetry with normal static arrays, in that an array of 17711 unknown size is also written with `[]'. 17712 17713 Of course, this extension only makes sense if the extra data comes at 17714 the end of a top-level object, as otherwise we would be overwriting 17715 data at subsequent offsets. To avoid undue complication and confusion 17716 with initialization of deeply nested arrays, we simply disallow any 17717 non-empty initialization except when the structure is the top-level 17718 object. For example: 17719 17720 struct foo { int x; int y[]; }; 17721 struct bar { struct foo z; }; 17722 17723 struct foo a = { 1, { 2, 3, 4 } }; // Valid. 17724 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid. 17725 struct bar c = { { 1, { } } }; // Valid. 17726 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid. 17727 17728 17729 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions 17730 17731 5.15 Structures With No Members 17732 =============================== 17733 17734 GCC permits a C structure to have no members: 17735 17736 struct empty { 17737 }; 17738 17739 The structure will have size zero. In C++, empty structures are part 17740 of the language. G++ treats empty structures as if they had a single 17741 member of type `char'. 17742 17743 17744 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions 17745 17746 5.16 Arrays of Variable Length 17747 ============================== 17748 17749 Variable-length automatic arrays are allowed in ISO C99, and as an 17750 extension GCC accepts them in C89 mode and in C++. (However, GCC's 17751 implementation of variable-length arrays does not yet conform in detail 17752 to the ISO C99 standard.) These arrays are declared like any other 17753 automatic arrays, but with a length that is not a constant expression. 17754 The storage is allocated at the point of declaration and deallocated 17755 when the brace-level is exited. For example: 17756 17757 FILE * 17758 concat_fopen (char *s1, char *s2, char *mode) 17759 { 17760 char str[strlen (s1) + strlen (s2) + 1]; 17761 strcpy (str, s1); 17762 strcat (str, s2); 17763 return fopen (str, mode); 17764 } 17765 17766 Jumping or breaking out of the scope of the array name deallocates the 17767 storage. Jumping into the scope is not allowed; you get an error 17768 message for it. 17769 17770 You can use the function `alloca' to get an effect much like 17771 variable-length arrays. The function `alloca' is available in many 17772 other C implementations (but not in all). On the other hand, 17773 variable-length arrays are more elegant. 17774 17775 There are other differences between these two methods. Space allocated 17776 with `alloca' exists until the containing _function_ returns. The 17777 space for a variable-length array is deallocated as soon as the array 17778 name's scope ends. (If you use both variable-length arrays and 17779 `alloca' in the same function, deallocation of a variable-length array 17780 will also deallocate anything more recently allocated with `alloca'.) 17781 17782 You can also use variable-length arrays as arguments to functions: 17783 17784 struct entry 17785 tester (int len, char data[len][len]) 17786 { 17787 /* ... */ 17788 } 17789 17790 The length of an array is computed once when the storage is allocated 17791 and is remembered for the scope of the array in case you access it with 17792 `sizeof'. 17793 17794 If you want to pass the array first and the length afterward, you can 17795 use a forward declaration in the parameter list--another GNU extension. 17796 17797 struct entry 17798 tester (int len; char data[len][len], int len) 17799 { 17800 /* ... */ 17801 } 17802 17803 The `int len' before the semicolon is a "parameter forward 17804 declaration", and it serves the purpose of making the name `len' known 17805 when the declaration of `data' is parsed. 17806 17807 You can write any number of such parameter forward declarations in the 17808 parameter list. They can be separated by commas or semicolons, but the 17809 last one must end with a semicolon, which is followed by the "real" 17810 parameter declarations. Each forward declaration must match a "real" 17811 declaration in parameter name and data type. ISO C99 does not support 17812 parameter forward declarations. 17813 17814 17815 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions 17816 17817 5.17 Macros with a Variable Number of Arguments. 17818 ================================================ 17819 17820 In the ISO C standard of 1999, a macro can be declared to accept a 17821 variable number of arguments much as a function can. The syntax for 17822 defining the macro is similar to that of a function. Here is an 17823 example: 17824 17825 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__) 17826 17827 Here `...' is a "variable argument". In the invocation of such a 17828 macro, it represents the zero or more tokens until the closing 17829 parenthesis that ends the invocation, including any commas. This set of 17830 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever 17831 it appears. See the CPP manual for more information. 17832 17833 GCC has long supported variadic macros, and used a different syntax 17834 that allowed you to give a name to the variable arguments just like any 17835 other argument. Here is an example: 17836 17837 #define debug(format, args...) fprintf (stderr, format, args) 17838 17839 This is in all ways equivalent to the ISO C example above, but arguably 17840 more readable and descriptive. 17841 17842 GNU CPP has two further variadic macro extensions, and permits them to 17843 be used with either of the above forms of macro definition. 17844 17845 In standard C, you are not allowed to leave the variable argument out 17846 entirely; but you are allowed to pass an empty argument. For example, 17847 this invocation is invalid in ISO C, because there is no comma after 17848 the string: 17849 17850 debug ("A message") 17851 17852 GNU CPP permits you to completely omit the variable arguments in this 17853 way. In the above examples, the compiler would complain, though since 17854 the expansion of the macro still has the extra comma after the format 17855 string. 17856 17857 To help solve this problem, CPP behaves specially for variable 17858 arguments used with the token paste operator, `##'. If instead you 17859 write 17860 17861 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__) 17862 17863 and if the variable arguments are omitted or empty, the `##' operator 17864 causes the preprocessor to remove the comma before it. If you do 17865 provide some variable arguments in your macro invocation, GNU CPP does 17866 not complain about the paste operation and instead places the variable 17867 arguments after the comma. Just like any other pasted macro argument, 17868 these arguments are not macro expanded. 17869 17870 17871 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions 17872 17873 5.18 Slightly Looser Rules for Escaped Newlines 17874 =============================================== 17875 17876 Recently, the preprocessor has relaxed its treatment of escaped 17877 newlines. Previously, the newline had to immediately follow a 17878 backslash. The current implementation allows whitespace in the form of 17879 spaces, horizontal and vertical tabs, and form feeds between the 17880 backslash and the subsequent newline. The preprocessor issues a 17881 warning, but treats it as a valid escaped newline and combines the two 17882 lines to form a single logical line. This works within comments and 17883 tokens, as well as between tokens. Comments are _not_ treated as 17884 whitespace for the purposes of this relaxation, since they have not yet 17885 been replaced with spaces. 17886 17887 17888 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions 17889 17890 5.19 Non-Lvalue Arrays May Have Subscripts 17891 ========================================== 17892 17893 In ISO C99, arrays that are not lvalues still decay to pointers, and 17894 may be subscripted, although they may not be modified or used after the 17895 next sequence point and the unary `&' operator may not be applied to 17896 them. As an extension, GCC allows such arrays to be subscripted in C89 17897 mode, though otherwise they do not decay to pointers outside C99 mode. 17898 For example, this is valid in GNU C though not valid in C89: 17899 17900 struct foo {int a[4];}; 17901 17902 struct foo f(); 17903 17904 bar (int index) 17905 { 17906 return f().a[index]; 17907 } 17908 17909 17910 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions 17911 17912 5.20 Arithmetic on `void'- and Function-Pointers 17913 ================================================ 17914 17915 In GNU C, addition and subtraction operations are supported on pointers 17916 to `void' and on pointers to functions. This is done by treating the 17917 size of a `void' or of a function as 1. 17918 17919 A consequence of this is that `sizeof' is also allowed on `void' and 17920 on function types, and returns 1. 17921 17922 The option `-Wpointer-arith' requests a warning if these extensions 17923 are used. 17924 17925 17926 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions 17927 17928 5.21 Non-Constant Initializers 17929 ============================== 17930 17931 As in standard C++ and ISO C99, the elements of an aggregate 17932 initializer for an automatic variable are not required to be constant 17933 expressions in GNU C. Here is an example of an initializer with 17934 run-time varying elements: 17935 17936 foo (float f, float g) 17937 { 17938 float beat_freqs[2] = { f-g, f+g }; 17939 /* ... */ 17940 } 17941 17942 17943 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions 17944 17945 5.22 Compound Literals 17946 ====================== 17947 17948 ISO C99 supports compound literals. A compound literal looks like a 17949 cast containing an initializer. Its value is an object of the type 17950 specified in the cast, containing the elements specified in the 17951 initializer; it is an lvalue. As an extension, GCC supports compound 17952 literals in C89 mode and in C++. 17953 17954 Usually, the specified type is a structure. Assume that `struct foo' 17955 and `structure' are declared as shown: 17956 17957 struct foo {int a; char b[2];} structure; 17958 17959 Here is an example of constructing a `struct foo' with a compound 17960 literal: 17961 17962 structure = ((struct foo) {x + y, 'a', 0}); 17963 17964 This is equivalent to writing the following: 17965 17966 { 17967 struct foo temp = {x + y, 'a', 0}; 17968 structure = temp; 17969 } 17970 17971 You can also construct an array. If all the elements of the compound 17972 literal are (made up of) simple constant expressions, suitable for use 17973 in initializers of objects of static storage duration, then the compound 17974 literal can be coerced to a pointer to its first element and used in 17975 such an initializer, as shown here: 17976 17977 char **foo = (char *[]) { "x", "y", "z" }; 17978 17979 Compound literals for scalar types and union types are is also 17980 allowed, but then the compound literal is equivalent to a cast. 17981 17982 As a GNU extension, GCC allows initialization of objects with static 17983 storage duration by compound literals (which is not possible in ISO 17984 C99, because the initializer is not a constant). It is handled as if 17985 the object was initialized only with the bracket enclosed list if the 17986 types of the compound literal and the object match. The initializer 17987 list of the compound literal must be constant. If the object being 17988 initialized has array type of unknown size, the size is determined by 17989 compound literal size. 17990 17991 static struct foo x = (struct foo) {1, 'a', 'b'}; 17992 static int y[] = (int []) {1, 2, 3}; 17993 static int z[] = (int [3]) {1}; 17994 17995 The above lines are equivalent to the following: 17996 static struct foo x = {1, 'a', 'b'}; 17997 static int y[] = {1, 2, 3}; 17998 static int z[] = {1, 0, 0}; 17999 18000 18001 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions 18002 18003 5.23 Designated Initializers 18004 ============================ 18005 18006 Standard C89 requires the elements of an initializer to appear in a 18007 fixed order, the same as the order of the elements in the array or 18008 structure being initialized. 18009 18010 In ISO C99 you can give the elements in any order, specifying the array 18011 indices or structure field names they apply to, and GNU C allows this as 18012 an extension in C89 mode as well. This extension is not implemented in 18013 GNU C++. 18014 18015 To specify an array index, write `[INDEX] =' before the element value. 18016 For example, 18017 18018 int a[6] = { [4] = 29, [2] = 15 }; 18019 18020 is equivalent to 18021 18022 int a[6] = { 0, 0, 15, 0, 29, 0 }; 18023 18024 The index values must be constant expressions, even if the array being 18025 initialized is automatic. 18026 18027 An alternative syntax for this which has been obsolete since GCC 2.5 18028 but GCC still accepts is to write `[INDEX]' before the element value, 18029 with no `='. 18030 18031 To initialize a range of elements to the same value, write `[FIRST ... 18032 LAST] = VALUE'. This is a GNU extension. For example, 18033 18034 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; 18035 18036 If the value in it has side-effects, the side-effects will happen only 18037 once, not for each initialized field by the range initializer. 18038 18039 Note that the length of the array is the highest value specified plus 18040 one. 18041 18042 In a structure initializer, specify the name of a field to initialize 18043 with `.FIELDNAME =' before the element value. For example, given the 18044 following structure, 18045 18046 struct point { int x, y; }; 18047 18048 the following initialization 18049 18050 struct point p = { .y = yvalue, .x = xvalue }; 18051 18052 is equivalent to 18053 18054 struct point p = { xvalue, yvalue }; 18055 18056 Another syntax which has the same meaning, obsolete since GCC 2.5, is 18057 `FIELDNAME:', as shown here: 18058 18059 struct point p = { y: yvalue, x: xvalue }; 18060 18061 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can 18062 also use a designator (or the obsolete colon syntax) when initializing 18063 a union, to specify which element of the union should be used. For 18064 example, 18065 18066 union foo { int i; double d; }; 18067 18068 union foo f = { .d = 4 }; 18069 18070 will convert 4 to a `double' to store it in the union using the second 18071 element. By contrast, casting 4 to type `union foo' would store it 18072 into the union as the integer `i', since it is an integer. (*Note Cast 18073 to Union::.) 18074 18075 You can combine this technique of naming elements with ordinary C 18076 initialization of successive elements. Each initializer element that 18077 does not have a designator applies to the next consecutive element of 18078 the array or structure. For example, 18079 18080 int a[6] = { [1] = v1, v2, [4] = v4 }; 18081 18082 is equivalent to 18083 18084 int a[6] = { 0, v1, v2, 0, v4, 0 }; 18085 18086 Labeling the elements of an array initializer is especially useful 18087 when the indices are characters or belong to an `enum' type. For 18088 example: 18089 18090 int whitespace[256] 18091 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1, 18092 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 }; 18093 18094 You can also write a series of `.FIELDNAME' and `[INDEX]' designators 18095 before an `=' to specify a nested subobject to initialize; the list is 18096 taken relative to the subobject corresponding to the closest 18097 surrounding brace pair. For example, with the `struct point' 18098 declaration above: 18099 18100 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 }; 18101 18102 If the same field is initialized multiple times, it will have value from 18103 the last initialization. If any such overridden initialization has 18104 side-effect, it is unspecified whether the side-effect happens or not. 18105 Currently, GCC will discard them and issue a warning. 18106 18107 18108 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions 18109 18110 5.24 Case Ranges 18111 ================ 18112 18113 You can specify a range of consecutive values in a single `case' label, 18114 like this: 18115 18116 case LOW ... HIGH: 18117 18118 This has the same effect as the proper number of individual `case' 18119 labels, one for each integer value from LOW to HIGH, inclusive. 18120 18121 This feature is especially useful for ranges of ASCII character codes: 18122 18123 case 'A' ... 'Z': 18124 18125 *Be careful:* Write spaces around the `...', for otherwise it may be 18126 parsed wrong when you use it with integer values. For example, write 18127 this: 18128 18129 case 1 ... 5: 18130 18131 rather than this: 18132 18133 case 1...5: 18134 18135 18136 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions 18137 18138 5.25 Cast to a Union Type 18139 ========================= 18140 18141 A cast to union type is similar to other casts, except that the type 18142 specified is a union type. You can specify the type either with `union 18143 TAG' or with a typedef name. A cast to union is actually a constructor 18144 though, not a cast, and hence does not yield an lvalue like normal 18145 casts. (*Note Compound Literals::.) 18146 18147 The types that may be cast to the union type are those of the members 18148 of the union. Thus, given the following union and variables: 18149 18150 union foo { int i; double d; }; 18151 int x; 18152 double y; 18153 18154 both `x' and `y' can be cast to type `union foo'. 18155 18156 Using the cast as the right-hand side of an assignment to a variable of 18157 union type is equivalent to storing in a member of the union: 18158 18159 union foo u; 18160 /* ... */ 18161 u = (union foo) x == u.i = x 18162 u = (union foo) y == u.d = y 18163 18164 You can also use the union cast as a function argument: 18165 18166 void hack (union foo); 18167 /* ... */ 18168 hack ((union foo) x); 18169 18170 18171 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions 18172 18173 5.26 Mixed Declarations and Code 18174 ================================ 18175 18176 ISO C99 and ISO C++ allow declarations and code to be freely mixed 18177 within compound statements. As an extension, GCC also allows this in 18178 C89 mode. For example, you could do: 18179 18180 int i; 18181 /* ... */ 18182 i++; 18183 int j = i + 2; 18184 18185 Each identifier is visible from where it is declared until the end of 18186 the enclosing block. 18187 18188 18189 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions 18190 18191 5.27 Declaring Attributes of Functions 18192 ====================================== 18193 18194 In GNU C, you declare certain things about functions called in your 18195 program which help the compiler optimize function calls and check your 18196 code more carefully. 18197 18198 The keyword `__attribute__' allows you to specify special attributes 18199 when making a declaration. This keyword is followed by an attribute 18200 specification inside double parentheses. The following attributes are 18201 currently defined for functions on all targets: `aligned', 18202 `alloc_size', `noreturn', `returns_twice', `noinline', `always_inline', 18203 `flatten', `pure', `const', `nothrow', `sentinel', `format', 18204 `format_arg', `no_instrument_function', `section', `constructor', 18205 `destructor', `used', `unused', `deprecated', `weak', `malloc', 18206 `alias', `warn_unused_result', `nonnull', `gnu_inline', 18207 `externally_visible', `hot', `cold', `artificial', `error' and 18208 `warning'. Several other attributes are defined for functions on 18209 particular target systems. Other attributes, including `section' are 18210 supported for variables declarations (*note Variable Attributes::) and 18211 for types (*note Type Attributes::). 18212 18213 You may also specify attributes with `__' preceding and following each 18214 keyword. This allows you to use them in header files without being 18215 concerned about a possible macro of the same name. For example, you 18216 may use `__noreturn__' instead of `noreturn'. 18217 18218 *Note Attribute Syntax::, for details of the exact syntax for using 18219 attributes. 18220 18221 `alias ("TARGET")' 18222 The `alias' attribute causes the declaration to be emitted as an 18223 alias for another symbol, which must be specified. For instance, 18224 18225 void __f () { /* Do something. */; } 18226 void f () __attribute__ ((weak, alias ("__f"))); 18227 18228 defines `f' to be a weak alias for `__f'. In C++, the mangled 18229 name for the target must be used. It is an error if `__f' is not 18230 defined in the same translation unit. 18231 18232 Not all target machines support this attribute. 18233 18234 `aligned (ALIGNMENT)' 18235 This attribute specifies a minimum alignment for the function, 18236 measured in bytes. 18237 18238 You cannot use this attribute to decrease the alignment of a 18239 function, only to increase it. However, when you explicitly 18240 specify a function alignment this will override the effect of the 18241 `-falign-functions' (*note Optimize Options::) option for this 18242 function. 18243 18244 Note that the effectiveness of `aligned' attributes may be limited 18245 by inherent limitations in your linker. On many systems, the 18246 linker is only able to arrange for functions to be aligned up to a 18247 certain maximum alignment. (For some linkers, the maximum 18248 supported alignment may be very very small.) See your linker 18249 documentation for further information. 18250 18251 The `aligned' attribute can also be used for variables and fields 18252 (*note Variable Attributes::.) 18253 18254 `alloc_size' 18255 The `alloc_size' attribute is used to tell the compiler that the 18256 function return value points to memory, where the size is given by 18257 one or two of the functions parameters. GCC uses this information 18258 to improve the correctness of `__builtin_object_size'. 18259 18260 The function parameter(s) denoting the allocated size are 18261 specified by one or two integer arguments supplied to the 18262 attribute. The allocated size is either the value of the single 18263 function argument specified or the product of the two function 18264 arguments specified. Argument numbering starts at one. 18265 18266 For instance, 18267 18268 void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2))) 18269 void my_realloc(void*, size_t) __attribute__((alloc_size(2))) 18270 18271 declares that my_calloc will return memory of the size given by 18272 the product of parameter 1 and 2 and that my_realloc will return 18273 memory of the size given by parameter 2. 18274 18275 `always_inline' 18276 Generally, functions are not inlined unless optimization is 18277 specified. For functions declared inline, this attribute inlines 18278 the function even if no optimization level was specified. 18279 18280 `gnu_inline' 18281 This attribute should be used with a function which is also 18282 declared with the `inline' keyword. It directs GCC to treat the 18283 function as if it were defined in gnu89 mode even when compiling 18284 in C99 or gnu99 mode. 18285 18286 If the function is declared `extern', then this definition of the 18287 function is used only for inlining. In no case is the function 18288 compiled as a standalone function, not even if you take its address 18289 explicitly. Such an address becomes an external reference, as if 18290 you had only declared the function, and had not defined it. This 18291 has almost the effect of a macro. The way to use this is to put a 18292 function definition in a header file with this attribute, and put 18293 another copy of the function, without `extern', in a library file. 18294 The definition in the header file will cause most calls to the 18295 function to be inlined. If any uses of the function remain, they 18296 will refer to the single copy in the library. Note that the two 18297 definitions of the functions need not be precisely the same, 18298 although if they do not have the same effect your program may 18299 behave oddly. 18300 18301 In C, if the function is neither `extern' nor `static', then the 18302 function is compiled as a standalone function, as well as being 18303 inlined where possible. 18304 18305 This is how GCC traditionally handled functions declared `inline'. 18306 Since ISO C99 specifies a different semantics for `inline', this 18307 function attribute is provided as a transition measure and as a 18308 useful feature in its own right. This attribute is available in 18309 GCC 4.1.3 and later. It is available if either of the 18310 preprocessor macros `__GNUC_GNU_INLINE__' or 18311 `__GNUC_STDC_INLINE__' are defined. *Note An Inline Function is 18312 As Fast As a Macro: Inline. 18313 18314 In C++, this attribute does not depend on `extern' in any way, but 18315 it still requires the `inline' keyword to enable its special 18316 behavior. 18317 18318 `artificial' 18319 This attribute is useful for small inline wrappers which if 18320 possible should appear during debugging as a unit, depending on 18321 the debug info format it will either mean marking the function as 18322 artificial or using the caller location for all instructions 18323 within the inlined body. 18324 18325 `flatten' 18326 Generally, inlining into a function is limited. For a function 18327 marked with this attribute, every call inside this function will 18328 be inlined, if possible. Whether the function itself is 18329 considered for inlining depends on its size and the current 18330 inlining parameters. 18331 18332 `error ("MESSAGE")' 18333 If this attribute is used on a function declaration and a call to 18334 such a function is not eliminated through dead code elimination or 18335 other optimizations, an error which will include MESSAGE will be 18336 diagnosed. This is useful for compile time checking, especially 18337 together with `__builtin_constant_p' and inline functions where 18338 checking the inline function arguments is not possible through 18339 `extern char [(condition) ? 1 : -1];' tricks. While it is 18340 possible to leave the function undefined and thus invoke a link 18341 failure, when using this attribute the problem will be diagnosed 18342 earlier and with exact location of the call even in presence of 18343 inline functions or when not emitting debugging information. 18344 18345 `warning ("MESSAGE")' 18346 If this attribute is used on a function declaration and a call to 18347 such a function is not eliminated through dead code elimination or 18348 other optimizations, a warning which will include MESSAGE will be 18349 diagnosed. This is useful for compile time checking, especially 18350 together with `__builtin_constant_p' and inline functions. While 18351 it is possible to define the function with a message in 18352 `.gnu.warning*' section, when using this attribute the problem 18353 will be diagnosed earlier and with exact location of the call even 18354 in presence of inline functions or when not emitting debugging 18355 information. 18356 18357 `cdecl' 18358 On the Intel 386, the `cdecl' attribute causes the compiler to 18359 assume that the calling function will pop off the stack space used 18360 to pass arguments. This is useful to override the effects of the 18361 `-mrtd' switch. 18362 18363 `const' 18364 Many functions do not examine any values except their arguments, 18365 and have no effects except the return value. Basically this is 18366 just slightly more strict class than the `pure' attribute below, 18367 since function is not allowed to read global memory. 18368 18369 Note that a function that has pointer arguments and examines the 18370 data pointed to must _not_ be declared `const'. Likewise, a 18371 function that calls a non-`const' function usually must not be 18372 `const'. It does not make sense for a `const' function to return 18373 `void'. 18374 18375 The attribute `const' is not implemented in GCC versions earlier 18376 than 2.5. An alternative way to declare that a function has no 18377 side effects, which works in the current version and in some older 18378 versions, is as follows: 18379 18380 typedef int intfn (); 18381 18382 extern const intfn square; 18383 18384 This approach does not work in GNU C++ from 2.6.0 on, since the 18385 language specifies that the `const' must be attached to the return 18386 value. 18387 18388 `constructor' 18389 `destructor' 18390 `constructor (PRIORITY)' 18391 `destructor (PRIORITY)' 18392 The `constructor' attribute causes the function to be called 18393 automatically before execution enters `main ()'. Similarly, the 18394 `destructor' attribute causes the function to be called 18395 automatically after `main ()' has completed or `exit ()' has been 18396 called. Functions with these attributes are useful for 18397 initializing data that will be used implicitly during the 18398 execution of the program. 18399 18400 You may provide an optional integer priority to control the order 18401 in which constructor and destructor functions are run. A 18402 constructor with a smaller priority number runs before a 18403 constructor with a larger priority number; the opposite 18404 relationship holds for destructors. So, if you have a constructor 18405 that allocates a resource and a destructor that deallocates the 18406 same resource, both functions typically have the same priority. 18407 The priorities for constructor and destructor functions are the 18408 same as those specified for namespace-scope C++ objects (*note C++ 18409 Attributes::). 18410 18411 These attributes are not currently implemented for Objective-C. 18412 18413 `deprecated' 18414 The `deprecated' attribute results in a warning if the function is 18415 used anywhere in the source file. This is useful when identifying 18416 functions that are expected to be removed in a future version of a 18417 program. The warning also includes the location of the declaration 18418 of the deprecated function, to enable users to easily find further 18419 information about why the function is deprecated, or what they 18420 should do instead. Note that the warnings only occurs for uses: 18421 18422 int old_fn () __attribute__ ((deprecated)); 18423 int old_fn (); 18424 int (*fn_ptr)() = old_fn; 18425 18426 results in a warning on line 3 but not line 2. 18427 18428 The `deprecated' attribute can also be used for variables and 18429 types (*note Variable Attributes::, *note Type Attributes::.) 18430 18431 `dllexport' 18432 On Microsoft Windows targets and Symbian OS targets the 18433 `dllexport' attribute causes the compiler to provide a global 18434 pointer to a pointer in a DLL, so that it can be referenced with 18435 the `dllimport' attribute. On Microsoft Windows targets, the 18436 pointer name is formed by combining `_imp__' and the function or 18437 variable name. 18438 18439 You can use `__declspec(dllexport)' as a synonym for 18440 `__attribute__ ((dllexport))' for compatibility with other 18441 compilers. 18442 18443 On systems that support the `visibility' attribute, this attribute 18444 also implies "default" visibility. It is an error to explicitly 18445 specify any other visibility. 18446 18447 Currently, the `dllexport' attribute is ignored for inlined 18448 functions, unless the `-fkeep-inline-functions' flag has been 18449 used. The attribute is also ignored for undefined symbols. 18450 18451 When applied to C++ classes, the attribute marks defined 18452 non-inlined member functions and static data members as exports. 18453 Static consts initialized in-class are not marked unless they are 18454 also defined out-of-class. 18455 18456 For Microsoft Windows targets there are alternative methods for 18457 including the symbol in the DLL's export table such as using a 18458 `.def' file with an `EXPORTS' section or, with GNU ld, using the 18459 `--export-all' linker flag. 18460 18461 `dllimport' 18462 On Microsoft Windows and Symbian OS targets, the `dllimport' 18463 attribute causes the compiler to reference a function or variable 18464 via a global pointer to a pointer that is set up by the DLL 18465 exporting the symbol. The attribute implies `extern'. On 18466 Microsoft Windows targets, the pointer name is formed by combining 18467 `_imp__' and the function or variable name. 18468 18469 You can use `__declspec(dllimport)' as a synonym for 18470 `__attribute__ ((dllimport))' for compatibility with other 18471 compilers. 18472 18473 On systems that support the `visibility' attribute, this attribute 18474 also implies "default" visibility. It is an error to explicitly 18475 specify any other visibility. 18476 18477 Currently, the attribute is ignored for inlined functions. If the 18478 attribute is applied to a symbol _definition_, an error is 18479 reported. If a symbol previously declared `dllimport' is later 18480 defined, the attribute is ignored in subsequent references, and a 18481 warning is emitted. The attribute is also overridden by a 18482 subsequent declaration as `dllexport'. 18483 18484 When applied to C++ classes, the attribute marks non-inlined 18485 member functions and static data members as imports. However, the 18486 attribute is ignored for virtual methods to allow creation of 18487 vtables using thunks. 18488 18489 On the SH Symbian OS target the `dllimport' attribute also has 18490 another affect--it can cause the vtable and run-time type 18491 information for a class to be exported. This happens when the 18492 class has a dllimport'ed constructor or a non-inline, non-pure 18493 virtual function and, for either of those two conditions, the 18494 class also has a inline constructor or destructor and has a key 18495 function that is defined in the current translation unit. 18496 18497 For Microsoft Windows based targets the use of the `dllimport' 18498 attribute on functions is not necessary, but provides a small 18499 performance benefit by eliminating a thunk in the DLL. The use of 18500 the `dllimport' attribute on imported variables was required on 18501 older versions of the GNU linker, but can now be avoided by 18502 passing the `--enable-auto-import' switch to the GNU linker. As 18503 with functions, using the attribute for a variable eliminates a 18504 thunk in the DLL. 18505 18506 One drawback to using this attribute is that a pointer to a 18507 _variable_ marked as `dllimport' cannot be used as a constant 18508 address. However, a pointer to a _function_ with the `dllimport' 18509 attribute can be used as a constant initializer; in this case, the 18510 address of a stub function in the import lib is referenced. On 18511 Microsoft Windows targets, the attribute can be disabled for 18512 functions by setting the `-mnop-fun-dllimport' flag. 18513 18514 `eightbit_data' 18515 Use this attribute on the H8/300, H8/300H, and H8S to indicate 18516 that the specified variable should be placed into the eight bit 18517 data section. The compiler will generate more efficient code for 18518 certain operations on data in the eight bit data area. Note the 18519 eight bit data area is limited to 256 bytes of data. 18520 18521 You must use GAS and GLD from GNU binutils version 2.7 or later for 18522 this attribute to work correctly. 18523 18524 `exception_handler' 18525 Use this attribute on the Blackfin to indicate that the specified 18526 function is an exception handler. The compiler will generate 18527 function entry and exit sequences suitable for use in an exception 18528 handler when this attribute is present. 18529 18530 `externally_visible' 18531 This attribute, attached to a global variable or function, 18532 nullifies the effect of the `-fwhole-program' command-line option, 18533 so the object remains visible outside the current compilation unit. 18534 18535 `far' 18536 On 68HC11 and 68HC12 the `far' attribute causes the compiler to 18537 use a calling convention that takes care of switching memory banks 18538 when entering and leaving a function. This calling convention is 18539 also the default when using the `-mlong-calls' option. 18540 18541 On 68HC12 the compiler will use the `call' and `rtc' instructions 18542 to call and return from a function. 18543 18544 On 68HC11 the compiler will generate a sequence of instructions to 18545 invoke a board-specific routine to switch the memory bank and call 18546 the real function. The board-specific routine simulates a `call'. 18547 At the end of a function, it will jump to a board-specific routine 18548 instead of using `rts'. The board-specific return routine 18549 simulates the `rtc'. 18550 18551 `fastcall' 18552 On the Intel 386, the `fastcall' attribute causes the compiler to 18553 pass the first argument (if of integral type) in the register ECX 18554 and the second argument (if of integral type) in the register EDX. 18555 Subsequent and other typed arguments are passed on the stack. 18556 The called function will pop the arguments off the stack. If the 18557 number of arguments is variable all arguments are pushed on the 18558 stack. 18559 18560 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' 18561 The `format' attribute specifies that a function takes `printf', 18562 `scanf', `strftime' or `strfmon' style arguments which should be 18563 type-checked against a format string. For example, the 18564 declaration: 18565 18566 extern int 18567 my_printf (void *my_object, const char *my_format, ...) 18568 __attribute__ ((format (printf, 2, 3))); 18569 18570 causes the compiler to check the arguments in calls to `my_printf' 18571 for consistency with the `printf' style format string argument 18572 `my_format'. 18573 18574 The parameter ARCHETYPE determines how the format string is 18575 interpreted, and should be `printf', `scanf', `strftime', 18576 `gnu_printf', `gnu_scanf', `gnu_strftime' or `strfmon'. (You can 18577 also use `__printf__', `__scanf__', `__strftime__' or 18578 `__strfmon__'.) On MinGW targets, `ms_printf', `ms_scanf', and 18579 `ms_strftime' are also present. ARCHTYPE values such as `printf' 18580 refer to the formats accepted by the system's C run-time library, 18581 while `gnu_' values always refer to the formats accepted by the 18582 GNU C Library. On Microsoft Windows targets, `ms_' values refer 18583 to the formats accepted by the `msvcrt.dll' library. The 18584 parameter STRING-INDEX specifies which argument is the format 18585 string argument (starting from 1), while FIRST-TO-CHECK is the 18586 number of the first argument to check against the format string. 18587 For functions where the arguments are not available to be checked 18588 (such as `vprintf'), specify the third parameter as zero. In this 18589 case the compiler only checks the format string for consistency. 18590 For `strftime' formats, the third parameter is required to be zero. 18591 Since non-static C++ methods have an implicit `this' argument, the 18592 arguments of such methods should be counted from two, not one, when 18593 giving values for STRING-INDEX and FIRST-TO-CHECK. 18594 18595 In the example above, the format string (`my_format') is the second 18596 argument of the function `my_print', and the arguments to check 18597 start with the third argument, so the correct parameters for the 18598 format attribute are 2 and 3. 18599 18600 The `format' attribute allows you to identify your own functions 18601 which take format strings as arguments, so that GCC can check the 18602 calls to these functions for errors. The compiler always (unless 18603 `-ffreestanding' or `-fno-builtin' is used) checks formats for the 18604 standard library functions `printf', `fprintf', `sprintf', 18605 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and 18606 `vsprintf' whenever such warnings are requested (using 18607 `-Wformat'), so there is no need to modify the header file 18608 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf', 18609 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in 18610 strictly conforming C standard modes, the X/Open function 18611 `strfmon' is also checked as are `printf_unlocked' and 18612 `fprintf_unlocked'. *Note Options Controlling C Dialect: C 18613 Dialect Options. 18614 18615 The target may provide additional types of format checks. *Note 18616 Format Checks Specific to Particular Target Machines: Target 18617 Format Checks. 18618 18619 `format_arg (STRING-INDEX)' 18620 The `format_arg' attribute specifies that a function takes a format 18621 string for a `printf', `scanf', `strftime' or `strfmon' style 18622 function and modifies it (for example, to translate it into 18623 another language), so the result can be passed to a `printf', 18624 `scanf', `strftime' or `strfmon' style function (with the 18625 remaining arguments to the format function the same as they would 18626 have been for the unmodified string). For example, the 18627 declaration: 18628 18629 extern char * 18630 my_dgettext (char *my_domain, const char *my_format) 18631 __attribute__ ((format_arg (2))); 18632 18633 causes the compiler to check the arguments in calls to a `printf', 18634 `scanf', `strftime' or `strfmon' type function, whose format 18635 string argument is a call to the `my_dgettext' function, for 18636 consistency with the format string argument `my_format'. If the 18637 `format_arg' attribute had not been specified, all the compiler 18638 could tell in such calls to format functions would be that the 18639 format string argument is not constant; this would generate a 18640 warning when `-Wformat-nonliteral' is used, but the calls could 18641 not be checked without the attribute. 18642 18643 The parameter STRING-INDEX specifies which argument is the format 18644 string argument (starting from one). Since non-static C++ methods 18645 have an implicit `this' argument, the arguments of such methods 18646 should be counted from two. 18647 18648 The `format-arg' attribute allows you to identify your own 18649 functions which modify format strings, so that GCC can check the 18650 calls to `printf', `scanf', `strftime' or `strfmon' type function 18651 whose operands are a call to one of your own function. The 18652 compiler always treats `gettext', `dgettext', and `dcgettext' in 18653 this manner except when strict ISO C support is requested by 18654 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or 18655 `-fno-builtin' is used. *Note Options Controlling C Dialect: C 18656 Dialect Options. 18657 18658 `function_vector' 18659 Use this attribute on the H8/300, H8/300H, and H8S to indicate 18660 that the specified function should be called through the function 18661 vector. Calling a function through the function vector will 18662 reduce code size, however; the function vector has a limited size 18663 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H 18664 and H8S) and shares space with the interrupt vector. 18665 18666 In SH2A target, this attribute declares a function to be called 18667 using the TBR relative addressing mode. The argument to this 18668 attribute is the entry number of the same function in a vector 18669 table containing all the TBR relative addressable functions. For 18670 the successful jump, register TBR should contain the start address 18671 of this TBR relative vector table. In the startup routine of the 18672 user application, user needs to care of this TBR register 18673 initialization. The TBR relative vector table can have at max 256 18674 function entries. The jumps to these functions will be generated 18675 using a SH2A specific, non delayed branch instruction JSR/N 18676 @(disp8,TBR). You must use GAS and GLD from GNU binutils version 18677 2.7 or later for this attribute to work correctly. 18678 18679 Please refer the example of M16C target, to see the use of this 18680 attribute while declaring a function, 18681 18682 In an application, for a function being called once, this 18683 attribute will save at least 8 bytes of code; and if other 18684 successive calls are being made to the same function, it will save 18685 2 bytes of code per each of these calls. 18686 18687 On M16C/M32C targets, the `function_vector' attribute declares a 18688 special page subroutine call function. Use of this attribute 18689 reduces the code size by 2 bytes for each call generated to the 18690 subroutine. The argument to the attribute is the vector number 18691 entry from the special page vector table which contains the 16 18692 low-order bits of the subroutine's entry address. Each vector 18693 table has special page number (18 to 255) which are used in `jsrs' 18694 instruction. Jump addresses of the routines are generated by 18695 adding 0x0F0000 (in case of M16C targets) or 0xFF0000 (in case of 18696 M32C targets), to the 2 byte addresses set in the vector table. 18697 Therefore you need to ensure that all the special page vector 18698 routines should get mapped within the address range 0x0F0000 to 18699 0x0FFFFF (for M16C) and 0xFF0000 to 0xFFFFFF (for M32C). 18700 18701 In the following example 2 bytes will be saved for each call to 18702 function `foo'. 18703 18704 void foo (void) __attribute__((function_vector(0x18))); 18705 void foo (void) 18706 { 18707 } 18708 18709 void bar (void) 18710 { 18711 foo(); 18712 } 18713 18714 If functions are defined in one file and are called in another 18715 file, then be sure to write this declaration in both files. 18716 18717 This attribute is ignored for R8C target. 18718 18719 `interrupt' 18720 Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, and 18721 Xstormy16 ports to indicate that the specified function is an 18722 interrupt handler. The compiler will generate function entry and 18723 exit sequences suitable for use in an interrupt handler when this 18724 attribute is present. 18725 18726 Note, interrupt handlers for the Blackfin, H8/300, H8/300H, H8S, 18727 and SH processors can be specified via the `interrupt_handler' 18728 attribute. 18729 18730 Note, on the AVR, interrupts will be enabled inside the function. 18731 18732 Note, for the ARM, you can specify the kind of interrupt to be 18733 handled by adding an optional parameter to the interrupt attribute 18734 like this: 18735 18736 void f () __attribute__ ((interrupt ("IRQ"))); 18737 18738 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT 18739 and UNDEF. 18740 18741 On ARMv7-M the interrupt type is ignored, and the attribute means 18742 the function may be called with a word aligned stack pointer. 18743 18744 `interrupt_handler' 18745 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, 18746 and SH to indicate that the specified function is an interrupt 18747 handler. The compiler will generate function entry and exit 18748 sequences suitable for use in an interrupt handler when this 18749 attribute is present. 18750 18751 `interrupt_thread' 18752 Use this attribute on fido, a subarchitecture of the m68k, to 18753 indicate that the specified function is an interrupt handler that 18754 is designed to run as a thread. The compiler omits generate 18755 prologue/epilogue sequences and replaces the return instruction 18756 with a `sleep' instruction. This attribute is available only on 18757 fido. 18758 18759 `isr' 18760 Use this attribute on ARM to write Interrupt Service Routines. 18761 This is an alias to the `interrupt' attribute above. 18762 18763 `kspisusp' 18764 When used together with `interrupt_handler', `exception_handler' 18765 or `nmi_handler', code will be generated to load the stack pointer 18766 from the USP register in the function prologue. 18767 18768 `l1_text' 18769 This attribute specifies a function to be placed into L1 18770 Instruction SRAM. The function will be put into a specific section 18771 named `.l1.text'. With `-mfdpic', function calls with a such 18772 function as the callee or caller will use inlined PLT. 18773 18774 `long_call/short_call' 18775 This attribute specifies how a particular function is called on 18776 ARM. Both attributes override the `-mlong-calls' (*note ARM 18777 Options::) command line switch and `#pragma long_calls' settings. 18778 The `long_call' attribute indicates that the function might be far 18779 away from the call site and require a different (more expensive) 18780 calling sequence. The `short_call' attribute always places the 18781 offset to the function from the call site into the `BL' 18782 instruction directly. 18783 18784 `longcall/shortcall' 18785 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute 18786 indicates that the function might be far away from the call site 18787 and require a different (more expensive) calling sequence. The 18788 `shortcall' attribute indicates that the function is always close 18789 enough for the shorter calling sequence to be used. These 18790 attributes override both the `-mlongcall' switch and, on the 18791 RS/6000 and PowerPC, the `#pragma longcall' setting. 18792 18793 *Note RS/6000 and PowerPC Options::, for more information on 18794 whether long calls are necessary. 18795 18796 `long_call/near/far' 18797 These attributes specify how a particular function is called on 18798 MIPS. The attributes override the `-mlong-calls' (*note MIPS 18799 Options::) command-line switch. The `long_call' and `far' 18800 attributes are synonyms, and cause the compiler to always call the 18801 function by first loading its address into a register, and then 18802 using the contents of that register. The `near' attribute has the 18803 opposite effect; it specifies that non-PIC calls should be made 18804 using the more efficient `jal' instruction. 18805 18806 `malloc' 18807 The `malloc' attribute is used to tell the compiler that a function 18808 may be treated as if any non-`NULL' pointer it returns cannot 18809 alias any other pointer valid when the function returns. This 18810 will often improve optimization. Standard functions with this 18811 property include `malloc' and `calloc'. `realloc'-like functions 18812 have this property as long as the old pointer is never referred to 18813 (including comparing it to the new pointer) after the function 18814 returns a non-`NULL' value. 18815 18816 `mips16/nomips16' 18817 On MIPS targets, you can use the `mips16' and `nomips16' function 18818 attributes to locally select or turn off MIPS16 code generation. 18819 A function with the `mips16' attribute is emitted as MIPS16 code, 18820 while MIPS16 code generation is disabled for functions with the 18821 `nomips16' attribute. These attributes override the `-mips16' and 18822 `-mno-mips16' options on the command line (*note MIPS Options::). 18823 18824 When compiling files containing mixed MIPS16 and non-MIPS16 code, 18825 the preprocessor symbol `__mips16' reflects the setting on the 18826 command line, not that within individual functions. Mixed MIPS16 18827 and non-MIPS16 code may interact badly with some GCC extensions 18828 such as `__builtin_apply' (*note Constructing Calls::). 18829 18830 `model (MODEL-NAME)' 18831 On the M32R/D, use this attribute to set the addressability of an 18832 object, and of the code generated for a function. The identifier 18833 MODEL-NAME is one of `small', `medium', or `large', representing 18834 each of the code models. 18835 18836 Small model objects live in the lower 16MB of memory (so that their 18837 addresses can be loaded with the `ld24' instruction), and are 18838 callable with the `bl' instruction. 18839 18840 Medium model objects may live anywhere in the 32-bit address space 18841 (the compiler will generate `seth/add3' instructions to load their 18842 addresses), and are callable with the `bl' instruction. 18843 18844 Large model objects may live anywhere in the 32-bit address space 18845 (the compiler will generate `seth/add3' instructions to load their 18846 addresses), and may not be reachable with the `bl' instruction 18847 (the compiler will generate the much slower `seth/add3/jl' 18848 instruction sequence). 18849 18850 On IA-64, use this attribute to set the addressability of an 18851 object. At present, the only supported identifier for MODEL-NAME 18852 is `small', indicating addressability via "small" (22-bit) 18853 addresses (so that their addresses can be loaded with the `addl' 18854 instruction). Caveat: such addressing is by definition not 18855 position independent and hence this attribute must not be used for 18856 objects defined by shared libraries. 18857 18858 `ms_abi/sysv_abi' 18859 On 64-bit x86_64-*-* targets, you can use an ABI attribute to 18860 indicate which calling convention should be used for a function. 18861 The `ms_abi' attribute tells the compiler to use the Microsoft 18862 ABI, while the `sysv_abi' attribute tells the compiler to use the 18863 ABI used on GNU/Linux and other systems. The default is to use 18864 the Microsoft ABI when targeting Windows. On all other systems, 18865 the default is the AMD ABI. 18866 18867 Note, This feature is currently sorried out for Windows targets 18868 trying to 18869 18870 `naked' 18871 Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate 18872 that the specified function does not need prologue/epilogue 18873 sequences generated by the compiler. It is up to the programmer 18874 to provide these sequences. The only statements that can be safely 18875 included in naked functions are `asm' statements that do not have 18876 operands. All other statements, including declarations of local 18877 variables, `if' statements, and so forth, should be avoided. 18878 Naked functions should be used to implement the body of an 18879 assembly function, while allowing the compiler to construct the 18880 requisite function declaration for the assembler. 18881 18882 `near' 18883 On 68HC11 and 68HC12 the `near' attribute causes the compiler to 18884 use the normal calling convention based on `jsr' and `rts'. This 18885 attribute can be used to cancel the effect of the `-mlong-calls' 18886 option. 18887 18888 `nesting' 18889 Use this attribute together with `interrupt_handler', 18890 `exception_handler' or `nmi_handler' to indicate that the function 18891 entry code should enable nested interrupts or exceptions. 18892 18893 `nmi_handler' 18894 Use this attribute on the Blackfin to indicate that the specified 18895 function is an NMI handler. The compiler will generate function 18896 entry and exit sequences suitable for use in an NMI handler when 18897 this attribute is present. 18898 18899 `no_instrument_function' 18900 If `-finstrument-functions' is given, profiling function calls will 18901 be generated at entry and exit of most user-compiled functions. 18902 Functions with this attribute will not be so instrumented. 18903 18904 `noinline' 18905 This function attribute prevents a function from being considered 18906 for inlining. If the function does not have side-effects, there 18907 are optimizations other than inlining that causes function calls 18908 to be optimized away, although the function call is live. To keep 18909 such calls from being optimized away, put 18910 asm (""); 18911 (*note Extended Asm::) in the called function, to serve as a 18912 special side-effect. 18913 18914 `nonnull (ARG-INDEX, ...)' 18915 The `nonnull' attribute specifies that some function parameters 18916 should be non-null pointers. For instance, the declaration: 18917 18918 extern void * 18919 my_memcpy (void *dest, const void *src, size_t len) 18920 __attribute__((nonnull (1, 2))); 18921 18922 causes the compiler to check that, in calls to `my_memcpy', 18923 arguments DEST and SRC are non-null. If the compiler determines 18924 that a null pointer is passed in an argument slot marked as 18925 non-null, and the `-Wnonnull' option is enabled, a warning is 18926 issued. The compiler may also choose to make optimizations based 18927 on the knowledge that certain function arguments will not be null. 18928 18929 Since non-static C++ methods have an implicit `this' argument, the 18930 arguments of such methods should be counted from two, not one, when 18931 giving values for ARG-INDEX. 18932 18933 If no argument index list is given to the `nonnull' attribute, all 18934 pointer arguments are marked as non-null. To illustrate, the 18935 following declaration is equivalent to the previous example: 18936 18937 extern void * 18938 my_memcpy (void *dest, const void *src, size_t len) 18939 __attribute__((nonnull)); 18940 18941 `noreturn' 18942 A few standard library functions, such as `abort' and `exit', 18943 cannot return. GCC knows this automatically. Some programs define 18944 their own functions that never return. You can declare them 18945 `noreturn' to tell the compiler this fact. For example, 18946 18947 void fatal () __attribute__ ((noreturn)); 18948 18949 void 18950 fatal (/* ... */) 18951 { 18952 /* ... */ /* Print error message. */ /* ... */ 18953 exit (1); 18954 } 18955 18956 The `noreturn' keyword tells the compiler to assume that `fatal' 18957 cannot return. It can then optimize without regard to what would 18958 happen if `fatal' ever did return. This makes slightly better 18959 code. More importantly, it helps avoid spurious warnings of 18960 uninitialized variables. 18961 18962 The `noreturn' keyword does not affect the exceptional path when 18963 that applies: a `noreturn'-marked function may still return to the 18964 caller by throwing an exception or calling `longjmp'. 18965 18966 Do not assume that registers saved by the calling function are 18967 restored before calling the `noreturn' function. 18968 18969 It does not make sense for a `noreturn' function to have a return 18970 type other than `void'. 18971 18972 The attribute `noreturn' is not implemented in GCC versions 18973 earlier than 2.5. An alternative way to declare that a function 18974 does not return, which works in the current version and in some 18975 older versions, is as follows: 18976 18977 typedef void voidfn (); 18978 18979 volatile voidfn fatal; 18980 18981 This approach does not work in GNU C++. 18982 18983 `nothrow' 18984 The `nothrow' attribute is used to inform the compiler that a 18985 function cannot throw an exception. For example, most functions in 18986 the standard C library can be guaranteed not to throw an exception 18987 with the notable exceptions of `qsort' and `bsearch' that take 18988 function pointer arguments. The `nothrow' attribute is not 18989 implemented in GCC versions earlier than 3.3. 18990 18991 `optimize' 18992 The `optimize' attribute is used to specify that a function is to 18993 be compiled with different optimization options than specified on 18994 the command line. Arguments can either be numbers or strings. 18995 Numbers are assumed to be an optimization level. Strings that 18996 begin with `O' are assumed to be an optimization option, while 18997 other options are assumed to be used with a `-f' prefix. You can 18998 also use the `#pragma GCC optimize' pragma to set the optimization 18999 options that affect more than one function. *Note Function 19000 Specific Option Pragmas::, for details about the `#pragma GCC 19001 optimize' pragma. 19002 19003 This can be used for instance to have frequently executed functions 19004 compiled with more aggressive optimization options that produce 19005 faster and larger code, while other functions can be called with 19006 less aggressive options. 19007 19008 `pcs' 19009 The `pcs' attribute can be used to control the calling convention 19010 used for a function on ARM. The attribute takes an argument that 19011 specifies the calling convention to use. 19012 19013 When compiling using the AAPCS ABI (or a variant of that) then 19014 valid values for the argument are `"aapcs"' and `"aapcs-vfp"'. In 19015 order to use a variant other than `"aapcs"' then the compiler must 19016 be permitted to use the appropriate co-processor registers (i.e., 19017 the VFP registers must be available in order to use `"aapcs-vfp"'). 19018 For example, 19019 19020 /* Argument passed in r0, and result returned in r0+r1. */ 19021 double f2d (float) __attribute__((pcs("aapcs"))); 19022 19023 Variadic functions always use the `"aapcs"' calling convention and 19024 the compiler will reject attempts to specify an alternative. 19025 19026 `pure' 19027 Many functions have no effects except the return value and their 19028 return value depends only on the parameters and/or global 19029 variables. Such a function can be subject to common subexpression 19030 elimination and loop optimization just as an arithmetic operator 19031 would be. These functions should be declared with the attribute 19032 `pure'. For example, 19033 19034 int square (int) __attribute__ ((pure)); 19035 19036 says that the hypothetical function `square' is safe to call fewer 19037 times than the program says. 19038 19039 Some of common examples of pure functions are `strlen' or `memcmp'. 19040 Interesting non-pure functions are functions with infinite loops 19041 or those depending on volatile memory or other system resource, 19042 that may change between two consecutive calls (such as `feof' in a 19043 multithreading environment). 19044 19045 The attribute `pure' is not implemented in GCC versions earlier 19046 than 2.96. 19047 19048 `hot' 19049 The `hot' attribute is used to inform the compiler that a function 19050 is a hot spot of the compiled program. The function is optimized 19051 more aggressively and on many target it is placed into special 19052 subsection of the text section so all hot functions appears close 19053 together improving locality. 19054 19055 When profile feedback is available, via `-fprofile-use', hot 19056 functions are automatically detected and this attribute is ignored. 19057 19058 The `hot' attribute is not implemented in GCC versions earlier 19059 than 4.3. 19060 19061 `cold' 19062 The `cold' attribute is used to inform the compiler that a 19063 function is unlikely executed. The function is optimized for size 19064 rather than speed and on many targets it is placed into special 19065 subsection of the text section so all cold functions appears close 19066 together improving code locality of non-cold parts of program. 19067 The paths leading to call of cold functions within code are marked 19068 as unlikely by the branch prediction mechanism. It is thus useful 19069 to mark functions used to handle unlikely conditions, such as 19070 `perror', as cold to improve optimization of hot functions that do 19071 call marked functions in rare occasions. 19072 19073 When profile feedback is available, via `-fprofile-use', hot 19074 functions are automatically detected and this attribute is ignored. 19075 19076 The `cold' attribute is not implemented in GCC versions earlier 19077 than 4.3. 19078 19079 `regparm (NUMBER)' 19080 On the Intel 386, the `regparm' attribute causes the compiler to 19081 pass arguments number one to NUMBER if they are of integral type 19082 in registers EAX, EDX, and ECX instead of on the stack. Functions 19083 that take a variable number of arguments will continue to be 19084 passed all of their arguments on the stack. 19085 19086 Beware that on some ELF systems this attribute is unsuitable for 19087 global functions in shared libraries with lazy binding (which is 19088 the default). Lazy binding will send the first call via resolving 19089 code in the loader, which might assume EAX, EDX and ECX can be 19090 clobbered, as per the standard calling conventions. Solaris 8 is 19091 affected by this. GNU systems with GLIBC 2.1 or higher, and 19092 FreeBSD, are believed to be safe since the loaders there save EAX, 19093 EDX and ECX. (Lazy binding can be disabled with the linker or the 19094 loader if desired, to avoid the problem.) 19095 19096 `sseregparm' 19097 On the Intel 386 with SSE support, the `sseregparm' attribute 19098 causes the compiler to pass up to 3 floating point arguments in 19099 SSE registers instead of on the stack. Functions that take a 19100 variable number of arguments will continue to pass all of their 19101 floating point arguments on the stack. 19102 19103 `force_align_arg_pointer' 19104 On the Intel x86, the `force_align_arg_pointer' attribute may be 19105 applied to individual function definitions, generating an alternate 19106 prologue and epilogue that realigns the runtime stack if necessary. 19107 This supports mixing legacy codes that run with a 4-byte aligned 19108 stack with modern codes that keep a 16-byte stack for SSE 19109 compatibility. 19110 19111 `resbank' 19112 On the SH2A target, this attribute enables the high-speed register 19113 saving and restoration using a register bank for 19114 `interrupt_handler' routines. Saving to the bank is performed 19115 automatically after the CPU accepts an interrupt that uses a 19116 register bank. 19117 19118 The nineteen 32-bit registers comprising general register R0 to 19119 R14, control register GBR, and system registers MACH, MACL, and PR 19120 and the vector table address offset are saved into a register 19121 bank. Register banks are stacked in first-in last-out (FILO) 19122 sequence. Restoration from the bank is executed by issuing a 19123 RESBANK instruction. 19124 19125 `returns_twice' 19126 The `returns_twice' attribute tells the compiler that a function 19127 may return more than one time. The compiler will ensure that all 19128 registers are dead before calling such a function and will emit a 19129 warning about the variables that may be clobbered after the second 19130 return from the function. Examples of such functions are `setjmp' 19131 and `vfork'. The `longjmp'-like counterpart of such function, if 19132 any, might need to be marked with the `noreturn' attribute. 19133 19134 `saveall' 19135 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to 19136 indicate that all registers except the stack pointer should be 19137 saved in the prologue regardless of whether they are used or not. 19138 19139 `section ("SECTION-NAME")' 19140 Normally, the compiler places the code it generates in the `text' 19141 section. Sometimes, however, you need additional sections, or you 19142 need certain particular functions to appear in special sections. 19143 The `section' attribute specifies that a function lives in a 19144 particular section. For example, the declaration: 19145 19146 extern void foobar (void) __attribute__ ((section ("bar"))); 19147 19148 puts the function `foobar' in the `bar' section. 19149 19150 Some file formats do not support arbitrary sections so the 19151 `section' attribute is not available on all platforms. If you 19152 need to map the entire contents of a module to a particular 19153 section, consider using the facilities of the linker instead. 19154 19155 `sentinel' 19156 This function attribute ensures that a parameter in a function 19157 call is an explicit `NULL'. The attribute is only valid on 19158 variadic functions. By default, the sentinel is located at 19159 position zero, the last parameter of the function call. If an 19160 optional integer position argument P is supplied to the attribute, 19161 the sentinel must be located at position P counting backwards from 19162 the end of the argument list. 19163 19164 __attribute__ ((sentinel)) 19165 is equivalent to 19166 __attribute__ ((sentinel(0))) 19167 19168 The attribute is automatically set with a position of 0 for the 19169 built-in functions `execl' and `execlp'. The built-in function 19170 `execle' has the attribute set with a position of 1. 19171 19172 A valid `NULL' in this context is defined as zero with any pointer 19173 type. If your system defines the `NULL' macro with an integer type 19174 then you need to add an explicit cast. GCC replaces `stddef.h' 19175 with a copy that redefines NULL appropriately. 19176 19177 The warnings for missing or incorrect sentinels are enabled with 19178 `-Wformat'. 19179 19180 `short_call' 19181 See long_call/short_call. 19182 19183 `shortcall' 19184 See longcall/shortcall. 19185 19186 `signal' 19187 Use this attribute on the AVR to indicate that the specified 19188 function is a signal handler. The compiler will generate function 19189 entry and exit sequences suitable for use in a signal handler when 19190 this attribute is present. Interrupts will be disabled inside the 19191 function. 19192 19193 `sp_switch' 19194 Use this attribute on the SH to indicate an `interrupt_handler' 19195 function should switch to an alternate stack. It expects a string 19196 argument that names a global variable holding the address of the 19197 alternate stack. 19198 19199 void *alt_stack; 19200 void f () __attribute__ ((interrupt_handler, 19201 sp_switch ("alt_stack"))); 19202 19203 `stdcall' 19204 On the Intel 386, the `stdcall' attribute causes the compiler to 19205 assume that the called function will pop off the stack space used 19206 to pass arguments, unless it takes a variable number of arguments. 19207 19208 `syscall_linkage' 19209 This attribute is used to modify the IA64 calling convention by 19210 marking all input registers as live at all function exits. This 19211 makes it possible to restart a system call after an interrupt 19212 without having to save/restore the input registers. This also 19213 prevents kernel data from leaking into application code. 19214 19215 `target' 19216 The `target' attribute is used to specify that a function is to be 19217 compiled with different target options than specified on the 19218 command line. This can be used for instance to have functions 19219 compiled with a different ISA (instruction set architecture) than 19220 the default. You can also use the `#pragma GCC target' pragma to 19221 set more than one function to be compiled with specific target 19222 options. *Note Function Specific Option Pragmas::, for details 19223 about the `#pragma GCC target' pragma. 19224 19225 For instance on a 386, you could compile one function with 19226 `target("sse4.1,arch=core2")' and another with 19227 `target("sse4a,arch=amdfam10")' that would be equivalent to 19228 compiling the first function with `-msse4.1' and `-march=core2' 19229 options, and the second function with `-msse4a' and 19230 `-march=amdfam10' options. It is up to the user to make sure that 19231 a function is only invoked on a machine that supports the 19232 particular ISA it was compiled for (for example by using `cpuid' 19233 on 386 to determine what feature bits and architecture family are 19234 used). 19235 19236 int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 19237 int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 19238 19239 On the 386, the following options are allowed: 19240 19241 `abm' 19242 `no-abm' 19243 Enable/disable the generation of the advanced bit 19244 instructions. 19245 19246 `aes' 19247 `no-aes' 19248 Enable/disable the generation of the AES instructions. 19249 19250 `mmx' 19251 `no-mmx' 19252 Enable/disable the generation of the MMX instructions. 19253 19254 `pclmul' 19255 `no-pclmul' 19256 Enable/disable the generation of the PCLMUL instructions. 19257 19258 `popcnt' 19259 `no-popcnt' 19260 Enable/disable the generation of the POPCNT instruction. 19261 19262 `sse' 19263 `no-sse' 19264 Enable/disable the generation of the SSE instructions. 19265 19266 `sse2' 19267 `no-sse2' 19268 Enable/disable the generation of the SSE2 instructions. 19269 19270 `sse3' 19271 `no-sse3' 19272 Enable/disable the generation of the SSE3 instructions. 19273 19274 `sse4' 19275 `no-sse4' 19276 Enable/disable the generation of the SSE4 instructions (both 19277 SSE4.1 and SSE4.2). 19278 19279 `sse4.1' 19280 `no-sse4.1' 19281 Enable/disable the generation of the sse4.1 instructions. 19282 19283 `sse4.2' 19284 `no-sse4.2' 19285 Enable/disable the generation of the sse4.2 instructions. 19286 19287 `sse4a' 19288 `no-sse4a' 19289 Enable/disable the generation of the SSE4A instructions. 19290 19291 `sse5' 19292 `no-sse5' 19293 Enable/disable the generation of the SSE5 instructions. 19294 19295 `lwp' 19296 `no-lwp' 19297 Enable/disable the generation of the LWP instructions. 19298 19299 `ssse3' 19300 `no-ssse3' 19301 Enable/disable the generation of the SSSE3 instructions. 19302 19303 `cld' 19304 `no-cld' 19305 Enable/disable the generation of the CLD before string moves. 19306 19307 `fancy-math-387' 19308 `no-fancy-math-387' 19309 Enable/disable the generation of the `sin', `cos', and `sqrt' 19310 instructions on the 387 floating point unit. 19311 19312 `fused-madd' 19313 `no-fused-madd' 19314 Enable/disable the generation of the fused multiply/add 19315 instructions. 19316 19317 `ieee-fp' 19318 `no-ieee-fp' 19319 Enable/disable the generation of floating point that depends 19320 on IEEE arithmetic. 19321 19322 `inline-all-stringops' 19323 `no-inline-all-stringops' 19324 Enable/disable inlining of string operations. 19325 19326 `inline-stringops-dynamically' 19327 `no-inline-stringops-dynamically' 19328 Enable/disable the generation of the inline code to do small 19329 string operations and calling the library routines for large 19330 operations. 19331 19332 `align-stringops' 19333 `no-align-stringops' 19334 Do/do not align destination of inlined string operations. 19335 19336 `recip' 19337 `no-recip' 19338 Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and 19339 RSQRTPS instructions followed an additional Newton-Raphson 19340 step instead of doing a floating point division. 19341 19342 `arch=ARCH' 19343 Specify the architecture to generate code for in compiling 19344 the function. 19345 19346 `tune=TUNE' 19347 Specify the architecture to tune for in compiling the 19348 function. 19349 19350 `fpmath=FPMATH' 19351 Specify which floating point unit to use. The 19352 `target("fpmath=sse,387")' option must be specified as 19353 `target("fpmath=sse+387")' because the comma would separate 19354 different options. 19355 19356 On the 386, you can use either multiple strings to specify multiple 19357 options, or you can separate the option with a comma (`,'). 19358 19359 On the 386, the inliner will not inline a function that has 19360 different target options than the caller, unless the callee has a 19361 subset of the target options of the caller. For example a 19362 function declared with `target("sse5")' can inline a function with 19363 `target("sse2")', since `-msse5' implies `-msse2'. 19364 19365 The `target' attribute is not implemented in GCC versions earlier 19366 than 4.4, and at present only the 386 uses it. 19367 19368 `tiny_data' 19369 Use this attribute on the H8/300H and H8S to indicate that the 19370 specified variable should be placed into the tiny data section. 19371 The compiler will generate more efficient code for loads and stores 19372 on data in the tiny data section. Note the tiny data area is 19373 limited to slightly under 32kbytes of data. 19374 19375 `trap_exit' 19376 Use this attribute on the SH for an `interrupt_handler' to return 19377 using `trapa' instead of `rte'. This attribute expects an integer 19378 argument specifying the trap number to be used. 19379 19380 `unused' 19381 This attribute, attached to a function, means that the function is 19382 meant to be possibly unused. GCC will not produce a warning for 19383 this function. 19384 19385 `used' 19386 This attribute, attached to a function, means that code must be 19387 emitted for the function even if it appears that the function is 19388 not referenced. This is useful, for example, when the function is 19389 referenced only in inline assembly. 19390 19391 `version_id' 19392 This IA64 HP-UX attribute, attached to a global variable or 19393 function, renames a symbol to contain a version string, thus 19394 allowing for function level versioning. HP-UX system header files 19395 may use version level functioning for some system calls. 19396 19397 extern int foo () __attribute__((version_id ("20040821"))); 19398 19399 Calls to FOO will be mapped to calls to FOO{20040821}. 19400 19401 `visibility ("VISIBILITY_TYPE")' 19402 This attribute affects the linkage of the declaration to which it 19403 is attached. There are four supported VISIBILITY_TYPE values: 19404 default, hidden, protected or internal visibility. 19405 19406 void __attribute__ ((visibility ("protected"))) 19407 f () { /* Do something. */; } 19408 int i __attribute__ ((visibility ("hidden"))); 19409 19410 The possible values of VISIBILITY_TYPE correspond to the 19411 visibility settings in the ELF gABI. 19412 19413 "default" 19414 Default visibility is the normal case for the object file 19415 format. This value is available for the visibility attribute 19416 to override other options that may change the assumed 19417 visibility of entities. 19418 19419 On ELF, default visibility means that the declaration is 19420 visible to other modules and, in shared libraries, means that 19421 the declared entity may be overridden. 19422 19423 On Darwin, default visibility means that the declaration is 19424 visible to other modules. 19425 19426 Default visibility corresponds to "external linkage" in the 19427 language. 19428 19429 "hidden" 19430 Hidden visibility indicates that the entity declared will 19431 have a new form of linkage, which we'll call "hidden 19432 linkage". Two declarations of an object with hidden linkage 19433 refer to the same object if they are in the same shared 19434 object. 19435 19436 "internal" 19437 Internal visibility is like hidden visibility, but with 19438 additional processor specific semantics. Unless otherwise 19439 specified by the psABI, GCC defines internal visibility to 19440 mean that a function is _never_ called from another module. 19441 Compare this with hidden functions which, while they cannot 19442 be referenced directly by other modules, can be referenced 19443 indirectly via function pointers. By indicating that a 19444 function cannot be called from outside the module, GCC may 19445 for instance omit the load of a PIC register since it is known 19446 that the calling function loaded the correct value. 19447 19448 "protected" 19449 Protected visibility is like default visibility except that it 19450 indicates that references within the defining module will 19451 bind to the definition in that module. That is, the declared 19452 entity cannot be overridden by another module. 19453 19454 19455 All visibilities are supported on many, but not all, ELF targets 19456 (supported when the assembler supports the `.visibility' 19457 pseudo-op). Default visibility is supported everywhere. Hidden 19458 visibility is supported on Darwin targets. 19459 19460 The visibility attribute should be applied only to declarations 19461 which would otherwise have external linkage. The attribute should 19462 be applied consistently, so that the same entity should not be 19463 declared with different settings of the attribute. 19464 19465 In C++, the visibility attribute applies to types as well as 19466 functions and objects, because in C++ types have linkage. A class 19467 must not have greater visibility than its non-static data member 19468 types and bases, and class members default to the visibility of 19469 their class. Also, a declaration without explicit visibility is 19470 limited to the visibility of its type. 19471 19472 In C++, you can mark member functions and static member variables 19473 of a class with the visibility attribute. This is useful if you 19474 know a particular method or static member variable should only be 19475 used from one shared object; then you can mark it hidden while the 19476 rest of the class has default visibility. Care must be taken to 19477 avoid breaking the One Definition Rule; for example, it is usually 19478 not useful to mark an inline method as hidden without marking the 19479 whole class as hidden. 19480 19481 A C++ namespace declaration can also have the visibility attribute. 19482 This attribute applies only to the particular namespace body, not 19483 to other definitions of the same namespace; it is equivalent to 19484 using `#pragma GCC visibility' before and after the namespace 19485 definition (*note Visibility Pragmas::). 19486 19487 In C++, if a template argument has limited visibility, this 19488 restriction is implicitly propagated to the template instantiation. 19489 Otherwise, template instantiations and specializations default to 19490 the visibility of their template. 19491 19492 If both the template and enclosing class have explicit visibility, 19493 the visibility from the template is used. 19494 19495 `warn_unused_result' 19496 The `warn_unused_result' attribute causes a warning to be emitted 19497 if a caller of the function with this attribute does not use its 19498 return value. This is useful for functions where not checking the 19499 result is either a security problem or always a bug, such as 19500 `realloc'. 19501 19502 int fn () __attribute__ ((warn_unused_result)); 19503 int foo () 19504 { 19505 if (fn () < 0) return -1; 19506 fn (); 19507 return 0; 19508 } 19509 19510 results in warning on line 5. 19511 19512 `weak' 19513 The `weak' attribute causes the declaration to be emitted as a weak 19514 symbol rather than a global. This is primarily useful in defining 19515 library functions which can be overridden in user code, though it 19516 can also be used with non-function declarations. Weak symbols are 19517 supported for ELF targets, and also for a.out targets when using 19518 the GNU assembler and linker. 19519 19520 `weakref' 19521 `weakref ("TARGET")' 19522 The `weakref' attribute marks a declaration as a weak reference. 19523 Without arguments, it should be accompanied by an `alias' attribute 19524 naming the target symbol. Optionally, the TARGET may be given as 19525 an argument to `weakref' itself. In either case, `weakref' 19526 implicitly marks the declaration as `weak'. Without a TARGET, 19527 given as an argument to `weakref' or to `alias', `weakref' is 19528 equivalent to `weak'. 19529 19530 static int x() __attribute__ ((weakref ("y"))); 19531 /* is equivalent to... */ 19532 static int x() __attribute__ ((weak, weakref, alias ("y"))); 19533 /* and to... */ 19534 static int x() __attribute__ ((weakref)); 19535 static int x() __attribute__ ((alias ("y"))); 19536 19537 A weak reference is an alias that does not by itself require a 19538 definition to be given for the target symbol. If the target 19539 symbol is only referenced through weak references, then the 19540 becomes a `weak' undefined symbol. If it is directly referenced, 19541 however, then such strong references prevail, and a definition 19542 will be required for the symbol, not necessarily in the same 19543 translation unit. 19544 19545 The effect is equivalent to moving all references to the alias to a 19546 separate translation unit, renaming the alias to the aliased 19547 symbol, declaring it as weak, compiling the two separate 19548 translation units and performing a reloadable link on them. 19549 19550 At present, a declaration to which `weakref' is attached can only 19551 be `static'. 19552 19553 19554 You can specify multiple attributes in a declaration by separating them 19555 by commas within the double parentheses or by immediately following an 19556 attribute declaration with another attribute declaration. 19557 19558 Some people object to the `__attribute__' feature, suggesting that ISO 19559 C's `#pragma' should be used instead. At the time `__attribute__' was 19560 designed, there were two reasons for not doing this. 19561 19562 1. It is impossible to generate `#pragma' commands from a macro. 19563 19564 2. There is no telling what the same `#pragma' might mean in another 19565 compiler. 19566 19567 These two reasons applied to almost any application that might have 19568 been proposed for `#pragma'. It was basically a mistake to use 19569 `#pragma' for _anything_. 19570 19571 The ISO C99 standard includes `_Pragma', which now allows pragmas to 19572 be generated from macros. In addition, a `#pragma GCC' namespace is 19573 now in use for GCC-specific pragmas. However, it has been found 19574 convenient to use `__attribute__' to achieve a natural attachment of 19575 attributes to their corresponding declarations, whereas `#pragma GCC' 19576 is of use for constructs that do not naturally form part of the 19577 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other 19578 Directives. 19579 19580 19581 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions 19582 19583 5.28 Attribute Syntax 19584 ===================== 19585 19586 This section describes the syntax with which `__attribute__' may be 19587 used, and the constructs to which attribute specifiers bind, for the C 19588 language. Some details may vary for C++ and Objective-C. Because of 19589 infelicities in the grammar for attributes, some forms described here 19590 may not be successfully parsed in all cases. 19591 19592 There are some problems with the semantics of attributes in C++. For 19593 example, there are no manglings for attributes, although they may affect 19594 code generation, so problems may arise when attributed types are used in 19595 conjunction with templates or overloading. Similarly, `typeid' does 19596 not distinguish between types with different attributes. Support for 19597 attributes in C++ may be restricted in future to attributes on 19598 declarations only, but not on nested declarators. 19599 19600 *Note Function Attributes::, for details of the semantics of attributes 19601 applying to functions. *Note Variable Attributes::, for details of the 19602 semantics of attributes applying to variables. *Note Type Attributes::, 19603 for details of the semantics of attributes applying to structure, union 19604 and enumerated types. 19605 19606 An "attribute specifier" is of the form `__attribute__ 19607 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty 19608 comma-separated sequence of "attributes", where each attribute is one 19609 of the following: 19610 19611 * Empty. Empty attributes are ignored. 19612 19613 * A word (which may be an identifier such as `unused', or a reserved 19614 word such as `const'). 19615 19616 * A word, followed by, in parentheses, parameters for the attribute. 19617 These parameters take one of the following forms: 19618 19619 * An identifier. For example, `mode' attributes use this form. 19620 19621 * An identifier followed by a comma and a non-empty 19622 comma-separated list of expressions. For example, `format' 19623 attributes use this form. 19624 19625 * A possibly empty comma-separated list of expressions. For 19626 example, `format_arg' attributes use this form with the list 19627 being a single integer constant expression, and `alias' 19628 attributes use this form with the list being a single string 19629 constant. 19630 19631 An "attribute specifier list" is a sequence of one or more attribute 19632 specifiers, not separated by any other tokens. 19633 19634 In GNU C, an attribute specifier list may appear after the colon 19635 following a label, other than a `case' or `default' label. The only 19636 attribute it makes sense to use after a label is `unused'. This 19637 feature is intended for code generated by programs which contains labels 19638 that may be unused but which is compiled with `-Wall'. It would not 19639 normally be appropriate to use in it human-written code, though it 19640 could be useful in cases where the code that jumps to the label is 19641 contained within an `#ifdef' conditional. GNU C++ does not permit such 19642 placement of attribute lists, as it is permissible for a declaration, 19643 which could begin with an attribute list, to be labelled in C++. 19644 Declarations cannot be labelled in C90 or C99, so the ambiguity does 19645 not arise there. 19646 19647 An attribute specifier list may appear as part of a `struct', `union' 19648 or `enum' specifier. It may go either immediately after the `struct', 19649 `union' or `enum' keyword, or after the closing brace. The former 19650 syntax is preferred. Where attribute specifiers follow the closing 19651 brace, they are considered to relate to the structure, union or 19652 enumerated type defined, not to any enclosing declaration the type 19653 specifier appears in, and the type defined is not complete until after 19654 the attribute specifiers. 19655 19656 Otherwise, an attribute specifier appears as part of a declaration, 19657 counting declarations of unnamed parameters and type names, and relates 19658 to that declaration (which may be nested in another declaration, for 19659 example in the case of a parameter declaration), or to a particular 19660 declarator within a declaration. Where an attribute specifier is 19661 applied to a parameter declared as a function or an array, it should 19662 apply to the function or array rather than the pointer to which the 19663 parameter is implicitly converted, but this is not yet correctly 19664 implemented. 19665 19666 Any list of specifiers and qualifiers at the start of a declaration may 19667 contain attribute specifiers, whether or not such a list may in that 19668 context contain storage class specifiers. (Some attributes, however, 19669 are essentially in the nature of storage class specifiers, and only make 19670 sense where storage class specifiers may be used; for example, 19671 `section'.) There is one necessary limitation to this syntax: the 19672 first old-style parameter declaration in a function definition cannot 19673 begin with an attribute specifier, because such an attribute applies to 19674 the function instead by syntax described below (which, however, is not 19675 yet implemented in this case). In some other cases, attribute 19676 specifiers are permitted by this grammar but not yet supported by the 19677 compiler. All attribute specifiers in this place relate to the 19678 declaration as a whole. In the obsolescent usage where a type of `int' 19679 is implied by the absence of type specifiers, such a list of specifiers 19680 and qualifiers may be an attribute specifier list with no other 19681 specifiers or qualifiers. 19682 19683 At present, the first parameter in a function prototype must have some 19684 type specifier which is not an attribute specifier; this resolves an 19685 ambiguity in the interpretation of `void f(int (__attribute__((foo)) 19686 x))', but is subject to change. At present, if the parentheses of a 19687 function declarator contain only attributes then those attributes are 19688 ignored, rather than yielding an error or warning or implying a single 19689 parameter of type int, but this is subject to change. 19690 19691 An attribute specifier list may appear immediately before a declarator 19692 (other than the first) in a comma-separated list of declarators in a 19693 declaration of more than one identifier using a single list of 19694 specifiers and qualifiers. Such attribute specifiers apply only to the 19695 identifier before whose declarator they appear. For example, in 19696 19697 __attribute__((noreturn)) void d0 (void), 19698 __attribute__((format(printf, 1, 2))) d1 (const char *, ...), 19699 d2 (void) 19700 19701 the `noreturn' attribute applies to all the functions declared; the 19702 `format' attribute only applies to `d1'. 19703 19704 An attribute specifier list may appear immediately before the comma, 19705 `=' or semicolon terminating the declaration of an identifier other 19706 than a function definition. Such attribute specifiers apply to the 19707 declared object or function. Where an assembler name for an object or 19708 function is specified (*note Asm Labels::), the attribute must follow 19709 the `asm' specification. 19710 19711 An attribute specifier list may, in future, be permitted to appear 19712 after the declarator in a function definition (before any old-style 19713 parameter declarations or the function body). 19714 19715 Attribute specifiers may be mixed with type qualifiers appearing inside 19716 the `[]' of a parameter array declarator, in the C99 construct by which 19717 such qualifiers are applied to the pointer to which the array is 19718 implicitly converted. Such attribute specifiers apply to the pointer, 19719 not to the array, but at present this is not implemented and they are 19720 ignored. 19721 19722 An attribute specifier list may appear at the start of a nested 19723 declarator. At present, there are some limitations in this usage: the 19724 attributes correctly apply to the declarator, but for most individual 19725 attributes the semantics this implies are not implemented. When 19726 attribute specifiers follow the `*' of a pointer declarator, they may 19727 be mixed with any type qualifiers present. The following describes the 19728 formal semantics of this syntax. It will make the most sense if you 19729 are familiar with the formal specification of declarators in the ISO C 19730 standard. 19731 19732 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1', 19733 where `T' contains declaration specifiers that specify a type TYPE 19734 (such as `int') and `D1' is a declarator that contains an identifier 19735 IDENT. The type specified for IDENT for derived declarators whose type 19736 does not include an attribute specifier is as in the ISO C standard. 19737 19738 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the 19739 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST 19740 TYPE" for IDENT, then `T D1' specifies the type 19741 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 19742 19743 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST 19744 D', and the declaration `T D' specifies the type 19745 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies 19746 the type "DERIVED-DECLARATOR-TYPE-LIST 19747 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT. 19748 19749 For example, 19750 19751 void (__attribute__((noreturn)) ****f) (void); 19752 19753 specifies the type "pointer to pointer to pointer to pointer to 19754 non-returning function returning `void'". As another example, 19755 19756 char *__attribute__((aligned(8))) *f; 19757 19758 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note 19759 again that this does not work with most attributes; for example, the 19760 usage of `aligned' and `noreturn' attributes given above is not yet 19761 supported. 19762 19763 For compatibility with existing code written for compiler versions that 19764 did not implement attributes on nested declarators, some laxity is 19765 allowed in the placing of attributes. If an attribute that only applies 19766 to types is applied to a declaration, it will be treated as applying to 19767 the type of that declaration. If an attribute that only applies to 19768 declarations is applied to the type of a declaration, it will be treated 19769 as applying to that declaration; and, for compatibility with code 19770 placing the attributes immediately before the identifier declared, such 19771 an attribute applied to a function return type will be treated as 19772 applying to the function type, and such an attribute applied to an array 19773 element type will be treated as applying to the array type. If an 19774 attribute that only applies to function types is applied to a 19775 pointer-to-function type, it will be treated as applying to the pointer 19776 target type; if such an attribute is applied to a function return type 19777 that is not a pointer-to-function type, it will be treated as applying 19778 to the function type. 19779 19780 19781 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions 19782 19783 5.29 Prototypes and Old-Style Function Definitions 19784 ================================================== 19785 19786 GNU C extends ISO C to allow a function prototype to override a later 19787 old-style non-prototype definition. Consider the following example: 19788 19789 /* Use prototypes unless the compiler is old-fashioned. */ 19790 #ifdef __STDC__ 19791 #define P(x) x 19792 #else 19793 #define P(x) () 19794 #endif 19795 19796 /* Prototype function declaration. */ 19797 int isroot P((uid_t)); 19798 19799 /* Old-style function definition. */ 19800 int 19801 isroot (x) /* ??? lossage here ??? */ 19802 uid_t x; 19803 { 19804 return x == 0; 19805 } 19806 19807 Suppose the type `uid_t' happens to be `short'. ISO C does not allow 19808 this example, because subword arguments in old-style non-prototype 19809 definitions are promoted. Therefore in this example the function 19810 definition's argument is really an `int', which does not match the 19811 prototype argument type of `short'. 19812 19813 This restriction of ISO C makes it hard to write code that is portable 19814 to traditional C compilers, because the programmer does not know 19815 whether the `uid_t' type is `short', `int', or `long'. Therefore, in 19816 cases like these GNU C allows a prototype to override a later old-style 19817 definition. More precisely, in GNU C, a function prototype argument 19818 type overrides the argument type specified by a later old-style 19819 definition if the former type is the same as the latter type before 19820 promotion. Thus in GNU C the above example is equivalent to the 19821 following: 19822 19823 int isroot (uid_t); 19824 19825 int 19826 isroot (uid_t x) 19827 { 19828 return x == 0; 19829 } 19830 19831 GNU C++ does not support old-style function definitions, so this 19832 extension is irrelevant. 19833 19834 19835 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions 19836 19837 5.30 C++ Style Comments 19838 ======================= 19839 19840 In GNU C, you may use C++ style comments, which start with `//' and 19841 continue until the end of the line. Many other C implementations allow 19842 such comments, and they are included in the 1999 C standard. However, 19843 C++ style comments are not recognized if you specify an `-std' option 19844 specifying a version of ISO C before C99, or `-ansi' (equivalent to 19845 `-std=c89'). 19846 19847 19848 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions 19849 19850 5.31 Dollar Signs in Identifier Names 19851 ===================================== 19852 19853 In GNU C, you may normally use dollar signs in identifier names. This 19854 is because many traditional C implementations allow such identifiers. 19855 However, dollar signs in identifiers are not supported on a few target 19856 machines, typically because the target assembler does not allow them. 19857 19858 19859 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions 19860 19861 5.32 The Character <ESC> in Constants 19862 ===================================== 19863 19864 You can use the sequence `\e' in a string or character constant to 19865 stand for the ASCII character <ESC>. 19866 19867 19868 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions 19869 19870 5.33 Inquiring on Alignment of Types or Variables 19871 ================================================= 19872 19873 The keyword `__alignof__' allows you to inquire about how an object is 19874 aligned, or the minimum alignment usually required by a type. Its 19875 syntax is just like `sizeof'. 19876 19877 For example, if the target machine requires a `double' value to be 19878 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This 19879 is true on many RISC machines. On more traditional machine designs, 19880 `__alignof__ (double)' is 4 or even 2. 19881 19882 Some machines never actually require alignment; they allow reference 19883 to any data type even at an odd address. For these machines, 19884 `__alignof__' reports the smallest alignment that GCC will give the 19885 data type, usually as mandated by the target ABI. 19886 19887 If the operand of `__alignof__' is an lvalue rather than a type, its 19888 value is the required alignment for its type, taking into account any 19889 minimum alignment specified with GCC's `__attribute__' extension (*note 19890 Variable Attributes::). For example, after this declaration: 19891 19892 struct foo { int x; char y; } foo1; 19893 19894 the value of `__alignof__ (foo1.y)' is 1, even though its actual 19895 alignment is probably 2 or 4, the same as `__alignof__ (int)'. 19896 19897 It is an error to ask for the alignment of an incomplete type. 19898 19899 19900 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions 19901 19902 5.34 Specifying Attributes of Variables 19903 ======================================= 19904 19905 The keyword `__attribute__' allows you to specify special attributes of 19906 variables or structure fields. This keyword is followed by an 19907 attribute specification inside double parentheses. Some attributes are 19908 currently defined generically for variables. Other attributes are 19909 defined for variables on particular target systems. Other attributes 19910 are available for functions (*note Function Attributes::) and for types 19911 (*note Type Attributes::). Other front ends might define more 19912 attributes (*note Extensions to the C++ Language: C++ Extensions.). 19913 19914 You may also specify attributes with `__' preceding and following each 19915 keyword. This allows you to use them in header files without being 19916 concerned about a possible macro of the same name. For example, you 19917 may use `__aligned__' instead of `aligned'. 19918 19919 *Note Attribute Syntax::, for details of the exact syntax for using 19920 attributes. 19921 19922 `aligned (ALIGNMENT)' 19923 This attribute specifies a minimum alignment for the variable or 19924 structure field, measured in bytes. For example, the declaration: 19925 19926 int x __attribute__ ((aligned (16))) = 0; 19927 19928 causes the compiler to allocate the global variable `x' on a 19929 16-byte boundary. On a 68040, this could be used in conjunction 19930 with an `asm' expression to access the `move16' instruction which 19931 requires 16-byte aligned operands. 19932 19933 You can also specify the alignment of structure fields. For 19934 example, to create a double-word aligned `int' pair, you could 19935 write: 19936 19937 struct foo { int x[2] __attribute__ ((aligned (8))); }; 19938 19939 This is an alternative to creating a union with a `double' member 19940 that forces the union to be double-word aligned. 19941 19942 As in the preceding examples, you can explicitly specify the 19943 alignment (in bytes) that you wish the compiler to use for a given 19944 variable or structure field. Alternatively, you can leave out the 19945 alignment factor and just ask the compiler to align a variable or 19946 field to the default alignment for the target architecture you are 19947 compiling for. The default alignment is sufficient for all scalar 19948 types, but may not be enough for all vector types on a target 19949 which supports vector operations. The default alignment is fixed 19950 for a particular target ABI. 19951 19952 Gcc also provides a target specific macro `__BIGGEST_ALIGNMENT__', 19953 which is the largest alignment ever used for any data type on the 19954 target machine you are compiling for. For example, you could 19955 write: 19956 19957 short array[3] __attribute__ ((aligned (__BIGGEST_ALIGNMENT__))); 19958 19959 The compiler automatically sets the alignment for the declared 19960 variable or field to `__BIGGEST_ALIGNMENT__'. Doing this can 19961 often make copy operations more efficient, because the compiler can 19962 use whatever instructions copy the biggest chunks of memory when 19963 performing copies to or from the variables or fields that you have 19964 aligned this way. Note that the value of `__BIGGEST_ALIGNMENT__' 19965 may change depending on command line options. 19966 19967 When used on a struct, or struct member, the `aligned' attribute 19968 can only increase the alignment; in order to decrease it, the 19969 `packed' attribute must be specified as well. When used as part 19970 of a typedef, the `aligned' attribute can both increase and 19971 decrease alignment, and specifying the `packed' attribute will 19972 generate a warning. 19973 19974 Note that the effectiveness of `aligned' attributes may be limited 19975 by inherent limitations in your linker. On many systems, the 19976 linker is only able to arrange for variables to be aligned up to a 19977 certain maximum alignment. (For some linkers, the maximum 19978 supported alignment may be very very small.) If your linker is 19979 only able to align variables up to a maximum of 8 byte alignment, 19980 then specifying `aligned(16)' in an `__attribute__' will still 19981 only provide you with 8 byte alignment. See your linker 19982 documentation for further information. 19983 19984 The `aligned' attribute can also be used for functions (*note 19985 Function Attributes::.) 19986 19987 `cleanup (CLEANUP_FUNCTION)' 19988 The `cleanup' attribute runs a function when the variable goes out 19989 of scope. This attribute can only be applied to auto function 19990 scope variables; it may not be applied to parameters or variables 19991 with static storage duration. The function must take one 19992 parameter, a pointer to a type compatible with the variable. The 19993 return value of the function (if any) is ignored. 19994 19995 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run 19996 during the stack unwinding that happens during the processing of 19997 the exception. Note that the `cleanup' attribute does not allow 19998 the exception to be caught, only to perform an action. It is 19999 undefined what happens if CLEANUP_FUNCTION does not return 20000 normally. 20001 20002 `common' 20003 `nocommon' 20004 The `common' attribute requests GCC to place a variable in 20005 "common" storage. The `nocommon' attribute requests the 20006 opposite--to allocate space for it directly. 20007 20008 These attributes override the default chosen by the `-fno-common' 20009 and `-fcommon' flags respectively. 20010 20011 `deprecated' 20012 The `deprecated' attribute results in a warning if the variable is 20013 used anywhere in the source file. This is useful when identifying 20014 variables that are expected to be removed in a future version of a 20015 program. The warning also includes the location of the declaration 20016 of the deprecated variable, to enable users to easily find further 20017 information about why the variable is deprecated, or what they 20018 should do instead. Note that the warning only occurs for uses: 20019 20020 extern int old_var __attribute__ ((deprecated)); 20021 extern int old_var; 20022 int new_fn () { return old_var; } 20023 20024 results in a warning on line 3 but not line 2. 20025 20026 The `deprecated' attribute can also be used for functions and 20027 types (*note Function Attributes::, *note Type Attributes::.) 20028 20029 `mode (MODE)' 20030 This attribute specifies the data type for the 20031 declaration--whichever type corresponds to the mode MODE. This in 20032 effect lets you request an integer or floating point type 20033 according to its width. 20034 20035 You may also specify a mode of `byte' or `__byte__' to indicate 20036 the mode corresponding to a one-byte integer, `word' or `__word__' 20037 for the mode of a one-word integer, and `pointer' or `__pointer__' 20038 for the mode used to represent pointers. 20039 20040 `packed' 20041 The `packed' attribute specifies that a variable or structure field 20042 should have the smallest possible alignment--one byte for a 20043 variable, and one bit for a field, unless you specify a larger 20044 value with the `aligned' attribute. 20045 20046 Here is a structure in which the field `x' is packed, so that it 20047 immediately follows `a': 20048 20049 struct foo 20050 { 20051 char a; 20052 int x[2] __attribute__ ((packed)); 20053 }; 20054 20055 _Note:_ The 4.1, 4.2 and 4.3 series of GCC ignore the `packed' 20056 attribute on bit-fields of type `char'. This has been fixed in 20057 GCC 4.4 but the change can lead to differences in the structure 20058 layout. See the documentation of `-Wpacked-bitfield-compat' for 20059 more information. 20060 20061 `section ("SECTION-NAME")' 20062 Normally, the compiler places the objects it generates in sections 20063 like `data' and `bss'. Sometimes, however, you need additional 20064 sections, or you need certain particular variables to appear in 20065 special sections, for example to map to special hardware. The 20066 `section' attribute specifies that a variable (or function) lives 20067 in a particular section. For example, this small program uses 20068 several specific section names: 20069 20070 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 }; 20071 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 }; 20072 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 }; 20073 int init_data __attribute__ ((section ("INITDATA"))); 20074 20075 main() 20076 { 20077 /* Initialize stack pointer */ 20078 init_sp (stack + sizeof (stack)); 20079 20080 /* Initialize initialized data */ 20081 memcpy (&init_data, &data, &edata - &data); 20082 20083 /* Turn on the serial ports */ 20084 init_duart (&a); 20085 init_duart (&b); 20086 } 20087 20088 Use the `section' attribute with _global_ variables and not 20089 _local_ variables, as shown in the example. 20090 20091 You may use the `section' attribute with initialized or 20092 uninitialized global variables but the linker requires each object 20093 be defined once, with the exception that uninitialized variables 20094 tentatively go in the `common' (or `bss') section and can be 20095 multiply "defined". Using the `section' attribute will change 20096 what section the variable goes into and may cause the linker to 20097 issue an error if an uninitialized variable has multiple 20098 definitions. You can force a variable to be initialized with the 20099 `-fno-common' flag or the `nocommon' attribute. 20100 20101 Some file formats do not support arbitrary sections so the 20102 `section' attribute is not available on all platforms. If you 20103 need to map the entire contents of a module to a particular 20104 section, consider using the facilities of the linker instead. 20105 20106 `shared' 20107 On Microsoft Windows, in addition to putting variable definitions 20108 in a named section, the section can also be shared among all 20109 running copies of an executable or DLL. For example, this small 20110 program defines shared data by putting it in a named section 20111 `shared' and marking the section shareable: 20112 20113 int foo __attribute__((section ("shared"), shared)) = 0; 20114 20115 int 20116 main() 20117 { 20118 /* Read and write foo. All running 20119 copies see the same value. */ 20120 return 0; 20121 } 20122 20123 You may only use the `shared' attribute along with `section' 20124 attribute with a fully initialized global definition because of 20125 the way linkers work. See `section' attribute for more 20126 information. 20127 20128 The `shared' attribute is only available on Microsoft Windows. 20129 20130 `tls_model ("TLS_MODEL")' 20131 The `tls_model' attribute sets thread-local storage model (*note 20132 Thread-Local::) of a particular `__thread' variable, overriding 20133 `-ftls-model=' command line switch on a per-variable basis. The 20134 TLS_MODEL argument should be one of `global-dynamic', 20135 `local-dynamic', `initial-exec' or `local-exec'. 20136 20137 Not all targets support this attribute. 20138 20139 `unused' 20140 This attribute, attached to a variable, means that the variable is 20141 meant to be possibly unused. GCC will not produce a warning for 20142 this variable. 20143 20144 `used' 20145 This attribute, attached to a variable, means that the variable 20146 must be emitted even if it appears that the variable is not 20147 referenced. 20148 20149 `vector_size (BYTES)' 20150 This attribute specifies the vector size for the variable, 20151 measured in bytes. For example, the declaration: 20152 20153 int foo __attribute__ ((vector_size (16))); 20154 20155 causes the compiler to set the mode for `foo', to be 16 bytes, 20156 divided into `int' sized units. Assuming a 32-bit int (a vector of 20157 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI. 20158 20159 This attribute is only applicable to integral and float scalars, 20160 although arrays, pointers, and function return values are allowed 20161 in conjunction with this construct. 20162 20163 Aggregates with this attribute are invalid, even if they are of 20164 the same size as a corresponding scalar. For example, the 20165 declaration: 20166 20167 struct S { int a; }; 20168 struct S __attribute__ ((vector_size (16))) foo; 20169 20170 is invalid even if the size of the structure is the same as the 20171 size of the `int'. 20172 20173 `selectany' 20174 The `selectany' attribute causes an initialized global variable to 20175 have link-once semantics. When multiple definitions of the 20176 variable are encountered by the linker, the first is selected and 20177 the remainder are discarded. Following usage by the Microsoft 20178 compiler, the linker is told _not_ to warn about size or content 20179 differences of the multiple definitions. 20180 20181 Although the primary usage of this attribute is for POD types, the 20182 attribute can also be applied to global C++ objects that are 20183 initialized by a constructor. In this case, the static 20184 initialization and destruction code for the object is emitted in 20185 each translation defining the object, but the calls to the 20186 constructor and destructor are protected by a link-once guard 20187 variable. 20188 20189 The `selectany' attribute is only available on Microsoft Windows 20190 targets. You can use `__declspec (selectany)' as a synonym for 20191 `__attribute__ ((selectany))' for compatibility with other 20192 compilers. 20193 20194 `weak' 20195 The `weak' attribute is described in *Note Function Attributes::. 20196 20197 `dllimport' 20198 The `dllimport' attribute is described in *Note Function 20199 Attributes::. 20200 20201 `dllexport' 20202 The `dllexport' attribute is described in *Note Function 20203 Attributes::. 20204 20205 20206 5.34.1 Blackfin Variable Attributes 20207 ----------------------------------- 20208 20209 Three attributes are currently defined for the Blackfin. 20210 20211 `l1_data' 20212 20213 `l1_data_A' 20214 20215 `l1_data_B' 20216 Use these attributes on the Blackfin to place the variable into L1 20217 Data SRAM. Variables with `l1_data' attribute will be put into 20218 the specific section named `.l1.data'. Those with `l1_data_A' 20219 attribute will be put into the specific section named 20220 `.l1.data.A'. Those with `l1_data_B' attribute will be put into 20221 the specific section named `.l1.data.B'. 20222 20223 5.34.2 M32R/D Variable Attributes 20224 --------------------------------- 20225 20226 One attribute is currently defined for the M32R/D. 20227 20228 `model (MODEL-NAME)' 20229 Use this attribute on the M32R/D to set the addressability of an 20230 object. The identifier MODEL-NAME is one of `small', `medium', or 20231 `large', representing each of the code models. 20232 20233 Small model objects live in the lower 16MB of memory (so that their 20234 addresses can be loaded with the `ld24' instruction). 20235 20236 Medium and large model objects may live anywhere in the 32-bit 20237 address space (the compiler will generate `seth/add3' instructions 20238 to load their addresses). 20239 20240 5.34.3 i386 Variable Attributes 20241 ------------------------------- 20242 20243 Two attributes are currently defined for i386 configurations: 20244 `ms_struct' and `gcc_struct' 20245 20246 `ms_struct' 20247 `gcc_struct' 20248 If `packed' is used on a structure, or if bit-fields are used it 20249 may be that the Microsoft ABI packs them differently than GCC 20250 would normally pack them. Particularly when moving packed data 20251 between functions compiled with GCC and the native Microsoft 20252 compiler (either via function call or as data in a file), it may 20253 be necessary to access either format. 20254 20255 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 20256 Windows X86 compilers to match the native Microsoft compiler. 20257 20258 The Microsoft structure layout algorithm is fairly simple with the 20259 exception of the bitfield packing: 20260 20261 The padding and alignment of members of structures and whether a 20262 bit field can straddle a storage-unit boundary 20263 20264 1. Structure members are stored sequentially in the order in 20265 which they are declared: the first member has the lowest 20266 memory address and the last member the highest. 20267 20268 2. Every data object has an alignment-requirement. The 20269 alignment-requirement for all data except structures, unions, 20270 and arrays is either the size of the object or the current 20271 packing size (specified with either the aligned attribute or 20272 the pack pragma), whichever is less. For structures, unions, 20273 and arrays, the alignment-requirement is the largest 20274 alignment-requirement of its members. Every object is 20275 allocated an offset so that: 20276 20277 offset % alignment-requirement == 0 20278 20279 3. Adjacent bit fields are packed into the same 1-, 2-, or 20280 4-byte allocation unit if the integral types are the same 20281 size and if the next bit field fits into the current 20282 allocation unit without crossing the boundary imposed by the 20283 common alignment requirements of the bit fields. 20284 20285 Handling of zero-length bitfields: 20286 20287 MSVC interprets zero-length bitfields in the following ways: 20288 20289 1. If a zero-length bitfield is inserted between two bitfields 20290 that would normally be coalesced, the bitfields will not be 20291 coalesced. 20292 20293 For example: 20294 20295 struct 20296 { 20297 unsigned long bf_1 : 12; 20298 unsigned long : 0; 20299 unsigned long bf_2 : 12; 20300 } t1; 20301 20302 The size of `t1' would be 8 bytes with the zero-length 20303 bitfield. If the zero-length bitfield were removed, `t1''s 20304 size would be 4 bytes. 20305 20306 2. If a zero-length bitfield is inserted after a bitfield, 20307 `foo', and the alignment of the zero-length bitfield is 20308 greater than the member that follows it, `bar', `bar' will be 20309 aligned as the type of the zero-length bitfield. 20310 20311 For example: 20312 20313 struct 20314 { 20315 char foo : 4; 20316 short : 0; 20317 char bar; 20318 } t2; 20319 20320 struct 20321 { 20322 char foo : 4; 20323 short : 0; 20324 double bar; 20325 } t3; 20326 20327 For `t2', `bar' will be placed at offset 2, rather than 20328 offset 1. Accordingly, the size of `t2' will be 4. For 20329 `t3', the zero-length bitfield will not affect the alignment 20330 of `bar' or, as a result, the size of the structure. 20331 20332 Taking this into account, it is important to note the 20333 following: 20334 20335 1. If a zero-length bitfield follows a normal bitfield, the 20336 type of the zero-length bitfield may affect the 20337 alignment of the structure as whole. For example, `t2' 20338 has a size of 4 bytes, since the zero-length bitfield 20339 follows a normal bitfield, and is of type short. 20340 20341 2. Even if a zero-length bitfield is not followed by a 20342 normal bitfield, it may still affect the alignment of 20343 the structure: 20344 20345 struct 20346 { 20347 char foo : 6; 20348 long : 0; 20349 } t4; 20350 20351 Here, `t4' will take up 4 bytes. 20352 20353 3. Zero-length bitfields following non-bitfield members are 20354 ignored: 20355 20356 struct 20357 { 20358 char foo; 20359 long : 0; 20360 char bar; 20361 } t5; 20362 20363 Here, `t5' will take up 2 bytes. 20364 20365 5.34.4 PowerPC Variable Attributes 20366 ---------------------------------- 20367 20368 Three attributes currently are defined for PowerPC configurations: 20369 `altivec', `ms_struct' and `gcc_struct'. 20370 20371 For full documentation of the struct attributes please see the 20372 documentation in *Note i386 Variable Attributes::. 20373 20374 For documentation of `altivec' attribute please see the documentation 20375 in *Note PowerPC Type Attributes::. 20376 20377 5.34.5 SPU Variable Attributes 20378 ------------------------------ 20379 20380 The SPU supports the `spu_vector' attribute for variables. For 20381 documentation of this attribute please see the documentation in *Note 20382 SPU Type Attributes::. 20383 20384 5.34.6 Xstormy16 Variable Attributes 20385 ------------------------------------ 20386 20387 One attribute is currently defined for xstormy16 configurations: 20388 `below100'. 20389 20390 `below100' 20391 If a variable has the `below100' attribute (`BELOW100' is allowed 20392 also), GCC will place the variable in the first 0x100 bytes of 20393 memory and use special opcodes to access it. Such variables will 20394 be placed in either the `.bss_below100' section or the 20395 `.data_below100' section. 20396 20397 20398 5.34.7 AVR Variable Attributes 20399 ------------------------------ 20400 20401 `progmem' 20402 The `progmem' attribute is used on the AVR to place data in the 20403 Program Memory address space. The AVR is a Harvard Architecture 20404 processor and data normally resides in the Data Memory address 20405 space. 20406 20407 20408 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions 20409 20410 5.35 Specifying Attributes of Types 20411 =================================== 20412 20413 The keyword `__attribute__' allows you to specify special attributes of 20414 `struct' and `union' types when you define such types. This keyword is 20415 followed by an attribute specification inside double parentheses. 20416 Seven attributes are currently defined for types: `aligned', `packed', 20417 `transparent_union', `unused', `deprecated', `visibility', and 20418 `may_alias'. Other attributes are defined for functions (*note 20419 Function Attributes::) and for variables (*note Variable Attributes::). 20420 20421 You may also specify any one of these attributes with `__' preceding 20422 and following its keyword. This allows you to use these attributes in 20423 header files without being concerned about a possible macro of the same 20424 name. For example, you may use `__aligned__' instead of `aligned'. 20425 20426 You may specify type attributes in an enum, struct or union type 20427 declaration or definition, or for other types in a `typedef' 20428 declaration. 20429 20430 For an enum, struct or union type, you may specify attributes either 20431 between the enum, struct or union tag and the name of the type, or just 20432 past the closing curly brace of the _definition_. The former syntax is 20433 preferred. 20434 20435 *Note Attribute Syntax::, for details of the exact syntax for using 20436 attributes. 20437 20438 `aligned (ALIGNMENT)' 20439 This attribute specifies a minimum alignment (in bytes) for 20440 variables of the specified type. For example, the declarations: 20441 20442 struct S { short f[3]; } __attribute__ ((aligned (8))); 20443 typedef int more_aligned_int __attribute__ ((aligned (8))); 20444 20445 force the compiler to insure (as far as it can) that each variable 20446 whose type is `struct S' or `more_aligned_int' will be allocated 20447 and aligned _at least_ on a 8-byte boundary. On a SPARC, having 20448 all variables of type `struct S' aligned to 8-byte boundaries 20449 allows the compiler to use the `ldd' and `std' (doubleword load and 20450 store) instructions when copying one variable of type `struct S' to 20451 another, thus improving run-time efficiency. 20452 20453 Note that the alignment of any given `struct' or `union' type is 20454 required by the ISO C standard to be at least a perfect multiple of 20455 the lowest common multiple of the alignments of all of the members 20456 of the `struct' or `union' in question. This means that you _can_ 20457 effectively adjust the alignment of a `struct' or `union' type by 20458 attaching an `aligned' attribute to any one of the members of such 20459 a type, but the notation illustrated in the example above is a 20460 more obvious, intuitive, and readable way to request the compiler 20461 to adjust the alignment of an entire `struct' or `union' type. 20462 20463 As in the preceding example, you can explicitly specify the 20464 alignment (in bytes) that you wish the compiler to use for a given 20465 `struct' or `union' type. Alternatively, you can leave out the 20466 alignment factor and just ask the compiler to align a type to the 20467 maximum useful alignment for the target machine you are compiling 20468 for. For example, you could write: 20469 20470 struct S { short f[3]; } __attribute__ ((aligned)); 20471 20472 Whenever you leave out the alignment factor in an `aligned' 20473 attribute specification, the compiler automatically sets the 20474 alignment for the type to the largest alignment which is ever used 20475 for any data type on the target machine you are compiling for. 20476 Doing this can often make copy operations more efficient, because 20477 the compiler can use whatever instructions copy the biggest chunks 20478 of memory when performing copies to or from the variables which 20479 have types that you have aligned this way. 20480 20481 In the example above, if the size of each `short' is 2 bytes, then 20482 the size of the entire `struct S' type is 6 bytes. The smallest 20483 power of two which is greater than or equal to that is 8, so the 20484 compiler sets the alignment for the entire `struct S' type to 8 20485 bytes. 20486 20487 Note that although you can ask the compiler to select a 20488 time-efficient alignment for a given type and then declare only 20489 individual stand-alone objects of that type, the compiler's 20490 ability to select a time-efficient alignment is primarily useful 20491 only when you plan to create arrays of variables having the 20492 relevant (efficiently aligned) type. If you declare or use arrays 20493 of variables of an efficiently-aligned type, then it is likely 20494 that your program will also be doing pointer arithmetic (or 20495 subscripting, which amounts to the same thing) on pointers to the 20496 relevant type, and the code that the compiler generates for these 20497 pointer arithmetic operations will often be more efficient for 20498 efficiently-aligned types than for other types. 20499 20500 The `aligned' attribute can only increase the alignment; but you 20501 can decrease it by specifying `packed' as well. See below. 20502 20503 Note that the effectiveness of `aligned' attributes may be limited 20504 by inherent limitations in your linker. On many systems, the 20505 linker is only able to arrange for variables to be aligned up to a 20506 certain maximum alignment. (For some linkers, the maximum 20507 supported alignment may be very very small.) If your linker is 20508 only able to align variables up to a maximum of 8 byte alignment, 20509 then specifying `aligned(16)' in an `__attribute__' will still 20510 only provide you with 8 byte alignment. See your linker 20511 documentation for further information. 20512 20513 `packed' 20514 This attribute, attached to `struct' or `union' type definition, 20515 specifies that each member (other than zero-width bitfields) of 20516 the structure or union is placed to minimize the memory required. 20517 When attached to an `enum' definition, it indicates that the 20518 smallest integral type should be used. 20519 20520 Specifying this attribute for `struct' and `union' types is 20521 equivalent to specifying the `packed' attribute on each of the 20522 structure or union members. Specifying the `-fshort-enums' flag 20523 on the line is equivalent to specifying the `packed' attribute on 20524 all `enum' definitions. 20525 20526 In the following example `struct my_packed_struct''s members are 20527 packed closely together, but the internal layout of its `s' member 20528 is not packed--to do that, `struct my_unpacked_struct' would need 20529 to be packed too. 20530 20531 struct my_unpacked_struct 20532 { 20533 char c; 20534 int i; 20535 }; 20536 20537 struct __attribute__ ((__packed__)) my_packed_struct 20538 { 20539 char c; 20540 int i; 20541 struct my_unpacked_struct s; 20542 }; 20543 20544 You may only specify this attribute on the definition of a `enum', 20545 `struct' or `union', not on a `typedef' which does not also define 20546 the enumerated type, structure or union. 20547 20548 `transparent_union' 20549 This attribute, attached to a `union' type definition, indicates 20550 that any function parameter having that union type causes calls to 20551 that function to be treated in a special way. 20552 20553 First, the argument corresponding to a transparent union type can 20554 be of any type in the union; no cast is required. Also, if the 20555 union contains a pointer type, the corresponding argument can be a 20556 null pointer constant or a void pointer expression; and if the 20557 union contains a void pointer type, the corresponding argument can 20558 be any pointer expression. If the union member type is a pointer, 20559 qualifiers like `const' on the referenced type must be respected, 20560 just as with normal pointer conversions. 20561 20562 Second, the argument is passed to the function using the calling 20563 conventions of the first member of the transparent union, not the 20564 calling conventions of the union itself. All members of the union 20565 must have the same machine representation; this is necessary for 20566 this argument passing to work properly. 20567 20568 Transparent unions are designed for library functions that have 20569 multiple interfaces for compatibility reasons. For example, 20570 suppose the `wait' function must accept either a value of type 20571 `int *' to comply with Posix, or a value of type `union wait *' to 20572 comply with the 4.1BSD interface. If `wait''s parameter were 20573 `void *', `wait' would accept both kinds of arguments, but it 20574 would also accept any other pointer type and this would make 20575 argument type checking less useful. Instead, `<sys/wait.h>' might 20576 define the interface as follows: 20577 20578 typedef union __attribute__ ((__transparent_union__)) 20579 { 20580 int *__ip; 20581 union wait *__up; 20582 } wait_status_ptr_t; 20583 20584 pid_t wait (wait_status_ptr_t); 20585 20586 This interface allows either `int *' or `union wait *' arguments 20587 to be passed, using the `int *' calling convention. The program 20588 can call `wait' with arguments of either type: 20589 20590 int w1 () { int w; return wait (&w); } 20591 int w2 () { union wait w; return wait (&w); } 20592 20593 With this interface, `wait''s implementation might look like this: 20594 20595 pid_t wait (wait_status_ptr_t p) 20596 { 20597 return waitpid (-1, p.__ip, 0); 20598 } 20599 20600 `unused' 20601 When attached to a type (including a `union' or a `struct'), this 20602 attribute means that variables of that type are meant to appear 20603 possibly unused. GCC will not produce a warning for any variables 20604 of that type, even if the variable appears to do nothing. This is 20605 often the case with lock or thread classes, which are usually 20606 defined and then not referenced, but contain constructors and 20607 destructors that have nontrivial bookkeeping functions. 20608 20609 `deprecated' 20610 The `deprecated' attribute results in a warning if the type is 20611 used anywhere in the source file. This is useful when identifying 20612 types that are expected to be removed in a future version of a 20613 program. If possible, the warning also includes the location of 20614 the declaration of the deprecated type, to enable users to easily 20615 find further information about why the type is deprecated, or what 20616 they should do instead. Note that the warnings only occur for 20617 uses and then only if the type is being applied to an identifier 20618 that itself is not being declared as deprecated. 20619 20620 typedef int T1 __attribute__ ((deprecated)); 20621 T1 x; 20622 typedef T1 T2; 20623 T2 y; 20624 typedef T1 T3 __attribute__ ((deprecated)); 20625 T3 z __attribute__ ((deprecated)); 20626 20627 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No 20628 warning is issued for line 4 because T2 is not explicitly 20629 deprecated. Line 5 has no warning because T3 is explicitly 20630 deprecated. Similarly for line 6. 20631 20632 The `deprecated' attribute can also be used for functions and 20633 variables (*note Function Attributes::, *note Variable 20634 Attributes::.) 20635 20636 `may_alias' 20637 Accesses through pointers to types with this attribute are not 20638 subject to type-based alias analysis, but are instead assumed to 20639 be able to alias any other type of objects. In the context of 20640 6.5/7 an lvalue expression dereferencing such a pointer is treated 20641 like having a character type. See `-fstrict-aliasing' for more 20642 information on aliasing issues. This extension exists to support 20643 some vector APIs, in which pointers to one vector type are 20644 permitted to alias pointers to a different vector type. 20645 20646 Note that an object of a type with this attribute does not have any 20647 special semantics. 20648 20649 Example of use: 20650 20651 typedef short __attribute__((__may_alias__)) short_a; 20652 20653 int 20654 main (void) 20655 { 20656 int a = 0x12345678; 20657 short_a *b = (short_a *) &a; 20658 20659 b[1] = 0; 20660 20661 if (a == 0x12345678) 20662 abort(); 20663 20664 exit(0); 20665 } 20666 20667 If you replaced `short_a' with `short' in the variable 20668 declaration, the above program would abort when compiled with 20669 `-fstrict-aliasing', which is on by default at `-O2' or above in 20670 recent GCC versions. 20671 20672 `visibility' 20673 In C++, attribute visibility (*note Function Attributes::) can 20674 also be applied to class, struct, union and enum types. Unlike 20675 other type attributes, the attribute must appear between the 20676 initial keyword and the name of the type; it cannot appear after 20677 the body of the type. 20678 20679 Note that the type visibility is applied to vague linkage entities 20680 associated with the class (vtable, typeinfo node, etc.). In 20681 particular, if a class is thrown as an exception in one shared 20682 object and caught in another, the class must have default 20683 visibility. Otherwise the two shared objects will be unable to 20684 use the same typeinfo node and exception handling will break. 20685 20686 20687 5.35.1 ARM Type Attributes 20688 -------------------------- 20689 20690 On those ARM targets that support `dllimport' (such as Symbian OS), you 20691 can use the `notshared' attribute to indicate that the virtual table 20692 and other similar data for a class should not be exported from a DLL. 20693 For example: 20694 20695 class __declspec(notshared) C { 20696 public: 20697 __declspec(dllimport) C(); 20698 virtual void f(); 20699 } 20700 20701 __declspec(dllexport) 20702 C::C() {} 20703 20704 In this code, `C::C' is exported from the current DLL, but the virtual 20705 table for `C' is not exported. (You can use `__attribute__' instead of 20706 `__declspec' if you prefer, but most Symbian OS code uses `__declspec'.) 20707 20708 5.35.2 i386 Type Attributes 20709 --------------------------- 20710 20711 Two attributes are currently defined for i386 configurations: 20712 `ms_struct' and `gcc_struct'. 20713 20714 `ms_struct' 20715 `gcc_struct' 20716 If `packed' is used on a structure, or if bit-fields are used it 20717 may be that the Microsoft ABI packs them differently than GCC 20718 would normally pack them. Particularly when moving packed data 20719 between functions compiled with GCC and the native Microsoft 20720 compiler (either via function call or as data in a file), it may 20721 be necessary to access either format. 20722 20723 Currently `-m[no-]ms-bitfields' is provided for the Microsoft 20724 Windows X86 compilers to match the native Microsoft compiler. 20725 20726 To specify multiple attributes, separate them by commas within the 20727 double parentheses: for example, `__attribute__ ((aligned (16), 20728 packed))'. 20729 20730 5.35.3 PowerPC Type Attributes 20731 ------------------------------ 20732 20733 Three attributes currently are defined for PowerPC configurations: 20734 `altivec', `ms_struct' and `gcc_struct'. 20735 20736 For full documentation of the `ms_struct' and `gcc_struct' attributes 20737 please see the documentation in *Note i386 Type Attributes::. 20738 20739 The `altivec' attribute allows one to declare AltiVec vector data 20740 types supported by the AltiVec Programming Interface Manual. The 20741 attribute requires an argument to specify one of three vector types: 20742 `vector__', `pixel__' (always followed by unsigned short), and `bool__' 20743 (always followed by unsigned). 20744 20745 __attribute__((altivec(vector__))) 20746 __attribute__((altivec(pixel__))) unsigned short 20747 __attribute__((altivec(bool__))) unsigned 20748 20749 These attributes mainly are intended to support the `__vector', 20750 `__pixel', and `__bool' AltiVec keywords. 20751 20752 5.35.4 SPU Type Attributes 20753 -------------------------- 20754 20755 The SPU supports the `spu_vector' attribute for types. This attribute 20756 allows one to declare vector data types supported by the 20757 Sony/Toshiba/IBM SPU Language Extensions Specification. It is intended 20758 to support the `__vector' keyword. 20759 20760 20761 File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions 20762 20763 5.36 An Inline Function is As Fast As a Macro 20764 ============================================= 20765 20766 By declaring a function inline, you can direct GCC to make calls to 20767 that function faster. One way GCC can achieve this is to integrate 20768 that function's code into the code for its callers. This makes 20769 execution faster by eliminating the function-call overhead; in 20770 addition, if any of the actual argument values are constant, their 20771 known values may permit simplifications at compile time so that not all 20772 of the inline function's code needs to be included. The effect on code 20773 size is less predictable; object code may be larger or smaller with 20774 function inlining, depending on the particular case. You can also 20775 direct GCC to try to integrate all "simple enough" functions into their 20776 callers with the option `-finline-functions'. 20777 20778 GCC implements three different semantics of declaring a function 20779 inline. One is available with `-std=gnu89' or `-fgnu89-inline' or when 20780 `gnu_inline' attribute is present on all inline declarations, another 20781 when `-std=c99' or `-std=gnu99' (without `-fgnu89-inline'), and the 20782 third is used when compiling C++. 20783 20784 To declare a function inline, use the `inline' keyword in its 20785 declaration, like this: 20786 20787 static inline int 20788 inc (int *a) 20789 { 20790 (*a)++; 20791 } 20792 20793 If you are writing a header file to be included in ISO C89 programs, 20794 write `__inline__' instead of `inline'. *Note Alternate Keywords::. 20795 20796 The three types of inlining behave similarly in two important cases: 20797 when the `inline' keyword is used on a `static' function, like the 20798 example above, and when a function is first declared without using the 20799 `inline' keyword and then is defined with `inline', like this: 20800 20801 extern int inc (int *a); 20802 inline int 20803 inc (int *a) 20804 { 20805 (*a)++; 20806 } 20807 20808 In both of these common cases, the program behaves the same as if you 20809 had not used the `inline' keyword, except for its speed. 20810 20811 When a function is both inline and `static', if all calls to the 20812 function are integrated into the caller, and the function's address is 20813 never used, then the function's own assembler code is never referenced. 20814 In this case, GCC does not actually output assembler code for the 20815 function, unless you specify the option `-fkeep-inline-functions'. 20816 Some calls cannot be integrated for various reasons (in particular, 20817 calls that precede the function's definition cannot be integrated, and 20818 neither can recursive calls within the definition). If there is a 20819 nonintegrated call, then the function is compiled to assembler code as 20820 usual. The function must also be compiled as usual if the program 20821 refers to its address, because that can't be inlined. 20822 20823 Note that certain usages in a function definition can make it 20824 unsuitable for inline substitution. Among these usages are: use of 20825 varargs, use of alloca, use of variable sized data types (*note 20826 Variable Length::), use of computed goto (*note Labels as Values::), 20827 use of nonlocal goto, and nested functions (*note Nested Functions::). 20828 Using `-Winline' will warn when a function marked `inline' could not be 20829 substituted, and will give the reason for the failure. 20830 20831 As required by ISO C++, GCC considers member functions defined within 20832 the body of a class to be marked inline even if they are not explicitly 20833 declared with the `inline' keyword. You can override this with 20834 `-fno-default-inline'; *note Options Controlling C++ Dialect: C++ 20835 Dialect Options. 20836 20837 GCC does not inline any functions when not optimizing unless you 20838 specify the `always_inline' attribute for the function, like this: 20839 20840 /* Prototype. */ 20841 inline void foo (const char) __attribute__((always_inline)); 20842 20843 The remainder of this section is specific to GNU C89 inlining. 20844 20845 When an inline function is not `static', then the compiler must assume 20846 that there may be calls from other source files; since a global symbol 20847 can be defined only once in any program, the function must not be 20848 defined in the other source files, so the calls therein cannot be 20849 integrated. Therefore, a non-`static' inline function is always 20850 compiled on its own in the usual fashion. 20851 20852 If you specify both `inline' and `extern' in the function definition, 20853 then the definition is used only for inlining. In no case is the 20854 function compiled on its own, not even if you refer to its address 20855 explicitly. Such an address becomes an external reference, as if you 20856 had only declared the function, and had not defined it. 20857 20858 This combination of `inline' and `extern' has almost the effect of a 20859 macro. The way to use it is to put a function definition in a header 20860 file with these keywords, and put another copy of the definition 20861 (lacking `inline' and `extern') in a library file. The definition in 20862 the header file will cause most calls to the function to be inlined. 20863 If any uses of the function remain, they will refer to the single copy 20864 in the library. 20865 20866 20867 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions 20868 20869 5.37 Assembler Instructions with C Expression Operands 20870 ====================================================== 20871 20872 In an assembler instruction using `asm', you can specify the operands 20873 of the instruction using C expressions. This means you need not guess 20874 which registers or memory locations will contain the data you want to 20875 use. 20876 20877 You must specify an assembler instruction template much like what 20878 appears in a machine description, plus an operand constraint string for 20879 each operand. 20880 20881 For example, here is how to use the 68881's `fsinx' instruction: 20882 20883 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 20884 20885 Here `angle' is the C expression for the input operand while `result' 20886 is that of the output operand. Each has `"f"' as its operand 20887 constraint, saying that a floating point register is required. The `=' 20888 in `=f' indicates that the operand is an output; all output operands' 20889 constraints must use `='. The constraints use the same language used 20890 in the machine description (*note Constraints::). 20891 20892 Each operand is described by an operand-constraint string followed by 20893 the C expression in parentheses. A colon separates the assembler 20894 template from the first output operand and another separates the last 20895 output operand from the first input, if any. Commas separate the 20896 operands within each group. The total number of operands is currently 20897 limited to 30; this limitation may be lifted in some future version of 20898 GCC. 20899 20900 If there are no output operands but there are input operands, you must 20901 place two consecutive colons surrounding the place where the output 20902 operands would go. 20903 20904 As of GCC version 3.1, it is also possible to specify input and output 20905 operands using symbolic names which can be referenced within the 20906 assembler code. These names are specified inside square brackets 20907 preceding the constraint string, and can be referenced inside the 20908 assembler code using `%[NAME]' instead of a percentage sign followed by 20909 the operand number. Using named operands the above example could look 20910 like: 20911 20912 asm ("fsinx %[angle],%[output]" 20913 : [output] "=f" (result) 20914 : [angle] "f" (angle)); 20915 20916 Note that the symbolic operand names have no relation whatsoever to 20917 other C identifiers. You may use any name you like, even those of 20918 existing C symbols, but you must ensure that no two operands within the 20919 same assembler construct use the same symbolic name. 20920 20921 Output operand expressions must be lvalues; the compiler can check 20922 this. The input operands need not be lvalues. The compiler cannot 20923 check whether the operands have data types that are reasonable for the 20924 instruction being executed. It does not parse the assembler instruction 20925 template and does not know what it means or even whether it is valid 20926 assembler input. The extended `asm' feature is most often used for 20927 machine instructions the compiler itself does not know exist. If the 20928 output expression cannot be directly addressed (for example, it is a 20929 bit-field), your constraint must allow a register. In that case, GCC 20930 will use the register as the output of the `asm', and then store that 20931 register into the output. 20932 20933 The ordinary output operands must be write-only; GCC will assume that 20934 the values in these operands before the instruction are dead and need 20935 not be generated. Extended asm supports input-output or read-write 20936 operands. Use the constraint character `+' to indicate such an operand 20937 and list it with the output operands. You should only use read-write 20938 operands when the constraints for the operand (or the operand in which 20939 only some of the bits are to be changed) allow a register. 20940 20941 You may, as an alternative, logically split its function into two 20942 separate operands, one input operand and one write-only output operand. 20943 The connection between them is expressed by constraints which say they 20944 need to be in the same location when the instruction executes. You can 20945 use the same C expression for both operands, or different expressions. 20946 For example, here we write the (fictitious) `combine' instruction with 20947 `bar' as its read-only source operand and `foo' as its read-write 20948 destination: 20949 20950 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); 20951 20952 The constraint `"0"' for operand 1 says that it must occupy the same 20953 location as operand 0. A number in constraint is allowed only in an 20954 input operand and it must refer to an output operand. 20955 20956 Only a number in the constraint can guarantee that one operand will be 20957 in the same place as another. The mere fact that `foo' is the value of 20958 both operands is not enough to guarantee that they will be in the same 20959 place in the generated assembler code. The following would not work 20960 reliably: 20961 20962 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); 20963 20964 Various optimizations or reloading could cause operands 0 and 1 to be 20965 in different registers; GCC knows no reason not to do so. For example, 20966 the compiler might find a copy of the value of `foo' in one register and 20967 use it for operand 1, but generate the output operand 0 in a different 20968 register (copying it afterward to `foo''s own address). Of course, 20969 since the register for operand 1 is not even mentioned in the assembler 20970 code, the result will not work, but GCC can't tell that. 20971 20972 As of GCC version 3.1, one may write `[NAME]' instead of the operand 20973 number for a matching constraint. For example: 20974 20975 asm ("cmoveq %1,%2,%[result]" 20976 : [result] "=r"(result) 20977 : "r" (test), "r"(new), "[result]"(old)); 20978 20979 Sometimes you need to make an `asm' operand be a specific register, 20980 but there's no matching constraint letter for that register _by 20981 itself_. To force the operand into that register, use a local variable 20982 for the operand and specify the register in the variable declaration. 20983 *Note Explicit Reg Vars::. Then for the `asm' operand, use any 20984 register constraint letter that matches the register: 20985 20986 register int *p1 asm ("r0") = ...; 20987 register int *p2 asm ("r1") = ...; 20988 register int *result asm ("r0"); 20989 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 20990 20991 In the above example, beware that a register that is call-clobbered by 20992 the target ABI will be overwritten by any function call in the 20993 assignment, including library calls for arithmetic operators. Also a 20994 register may be clobbered when generating some operations, like 20995 variable shift, memory copy or memory move on x86. Assuming it is a 20996 call-clobbered register, this may happen to `r0' above by the 20997 assignment to `p2'. If you have to use such a register, use temporary 20998 variables for expressions between the register assignment and use: 20999 21000 int t1 = ...; 21001 register int *p1 asm ("r0") = ...; 21002 register int *p2 asm ("r1") = t1; 21003 register int *result asm ("r0"); 21004 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2)); 21005 21006 Some instructions clobber specific hard registers. To describe this, 21007 write a third colon after the input operands, followed by the names of 21008 the clobbered hard registers (given as strings). Here is a realistic 21009 example for the VAX: 21010 21011 asm volatile ("movc3 %0,%1,%2" 21012 : /* no outputs */ 21013 : "g" (from), "g" (to), "g" (count) 21014 : "r0", "r1", "r2", "r3", "r4", "r5"); 21015 21016 You may not write a clobber description in a way that overlaps with an 21017 input or output operand. For example, you may not have an operand 21018 describing a register class with one member if you mention that register 21019 in the clobber list. Variables declared to live in specific registers 21020 (*note Explicit Reg Vars::), and used as asm input or output operands 21021 must have no part mentioned in the clobber description. There is no 21022 way for you to specify that an input operand is modified without also 21023 specifying it as an output operand. Note that if all the output 21024 operands you specify are for this purpose (and hence unused), you will 21025 then also need to specify `volatile' for the `asm' construct, as 21026 described below, to prevent GCC from deleting the `asm' statement as 21027 unused. 21028 21029 If you refer to a particular hardware register from the assembler code, 21030 you will probably have to list the register after the third colon to 21031 tell the compiler the register's value is modified. In some assemblers, 21032 the register names begin with `%'; to produce one `%' in the assembler 21033 code, you must write `%%' in the input. 21034 21035 If your assembler instruction can alter the condition code register, 21036 add `cc' to the list of clobbered registers. GCC on some machines 21037 represents the condition codes as a specific hardware register; `cc' 21038 serves to name this register. On other machines, the condition code is 21039 handled differently, and specifying `cc' has no effect. But it is 21040 valid no matter what the machine. 21041 21042 If your assembler instructions access memory in an unpredictable 21043 fashion, add `memory' to the list of clobbered registers. This will 21044 cause GCC to not keep memory values cached in registers across the 21045 assembler instruction and not optimize stores or loads to that memory. 21046 You will also want to add the `volatile' keyword if the memory affected 21047 is not listed in the inputs or outputs of the `asm', as the `memory' 21048 clobber does not count as a side-effect of the `asm'. If you know how 21049 large the accessed memory is, you can add it as input or output but if 21050 this is not known, you should add `memory'. As an example, if you 21051 access ten bytes of a string, you can use a memory input like: 21052 21053 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}. 21054 21055 Note that in the following example the memory input is necessary, 21056 otherwise GCC might optimize the store to `x' away: 21057 int foo () 21058 { 21059 int x = 42; 21060 int *y = &x; 21061 int result; 21062 asm ("magic stuff accessing an 'int' pointed to by '%1'" 21063 "=&d" (r) : "a" (y), "m" (*y)); 21064 return result; 21065 } 21066 21067 You can put multiple assembler instructions together in a single `asm' 21068 template, separated by the characters normally used in assembly code 21069 for the system. A combination that works in most places is a newline 21070 to break the line, plus a tab character to move to the instruction field 21071 (written as `\n\t'). Sometimes semicolons can be used, if the 21072 assembler allows semicolons as a line-breaking character. Note that 21073 some assembler dialects use semicolons to start a comment. The input 21074 operands are guaranteed not to use any of the clobbered registers, and 21075 neither will the output operands' addresses, so you can read and write 21076 the clobbered registers as many times as you like. Here is an example 21077 of multiple instructions in a template; it assumes the subroutine 21078 `_foo' accepts arguments in registers 9 and 10: 21079 21080 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo" 21081 : /* no outputs */ 21082 : "g" (from), "g" (to) 21083 : "r9", "r10"); 21084 21085 Unless an output operand has the `&' constraint modifier, GCC may 21086 allocate it in the same register as an unrelated input operand, on the 21087 assumption the inputs are consumed before the outputs are produced. 21088 This assumption may be false if the assembler code actually consists of 21089 more than one instruction. In such a case, use `&' for each output 21090 operand that may not overlap an input. *Note Modifiers::. 21091 21092 If you want to test the condition code produced by an assembler 21093 instruction, you must include a branch and a label in the `asm' 21094 construct, as follows: 21095 21096 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:" 21097 : "g" (result) 21098 : "g" (input)); 21099 21100 This assumes your assembler supports local labels, as the GNU assembler 21101 and most Unix assemblers do. 21102 21103 Speaking of labels, jumps from one `asm' to another are not supported. 21104 The compiler's optimizers do not know about these jumps, and therefore 21105 they cannot take account of them when deciding how to optimize. 21106 21107 Usually the most convenient way to use these `asm' instructions is to 21108 encapsulate them in macros that look like functions. For example, 21109 21110 #define sin(x) \ 21111 ({ double __value, __arg = (x); \ 21112 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ 21113 __value; }) 21114 21115 Here the variable `__arg' is used to make sure that the instruction 21116 operates on a proper `double' value, and to accept only those arguments 21117 `x' which can convert automatically to a `double'. 21118 21119 Another way to make sure the instruction operates on the correct data 21120 type is to use a cast in the `asm'. This is different from using a 21121 variable `__arg' in that it converts more different types. For 21122 example, if the desired type were `int', casting the argument to `int' 21123 would accept a pointer with no complaint, while assigning the argument 21124 to an `int' variable named `__arg' would warn about using a pointer 21125 unless the caller explicitly casts it. 21126 21127 If an `asm' has output operands, GCC assumes for optimization purposes 21128 the instruction has no side effects except to change the output 21129 operands. This does not mean instructions with a side effect cannot be 21130 used, but you must be careful, because the compiler may eliminate them 21131 if the output operands aren't used, or move them out of loops, or 21132 replace two with one if they constitute a common subexpression. Also, 21133 if your instruction does have a side effect on a variable that otherwise 21134 appears not to change, the old value of the variable may be reused later 21135 if it happens to be found in a register. 21136 21137 You can prevent an `asm' instruction from being deleted by writing the 21138 keyword `volatile' after the `asm'. For example: 21139 21140 #define get_and_set_priority(new) \ 21141 ({ int __old; \ 21142 asm volatile ("get_and_set_priority %0, %1" \ 21143 : "=g" (__old) : "g" (new)); \ 21144 __old; }) 21145 21146 The `volatile' keyword indicates that the instruction has important 21147 side-effects. GCC will not delete a volatile `asm' if it is reachable. 21148 (The instruction can still be deleted if GCC can prove that 21149 control-flow will never reach the location of the instruction.) Note 21150 that even a volatile `asm' instruction can be moved relative to other 21151 code, including across jump instructions. For example, on many targets 21152 there is a system register which can be set to control the rounding 21153 mode of floating point operations. You might try setting it with a 21154 volatile `asm', like this PowerPC example: 21155 21156 asm volatile("mtfsf 255,%0" : : "f" (fpenv)); 21157 sum = x + y; 21158 21159 This will not work reliably, as the compiler may move the addition back 21160 before the volatile `asm'. To make it work you need to add an 21161 artificial dependency to the `asm' referencing a variable in the code 21162 you don't want moved, for example: 21163 21164 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv)); 21165 sum = x + y; 21166 21167 Similarly, you can't expect a sequence of volatile `asm' instructions 21168 to remain perfectly consecutive. If you want consecutive output, use a 21169 single `asm'. Also, GCC will perform some optimizations across a 21170 volatile `asm' instruction; GCC does not "forget everything" when it 21171 encounters a volatile `asm' instruction the way some other compilers do. 21172 21173 An `asm' instruction without any output operands will be treated 21174 identically to a volatile `asm' instruction. 21175 21176 It is a natural idea to look for a way to give access to the condition 21177 code left by the assembler instruction. However, when we attempted to 21178 implement this, we found no way to make it work reliably. The problem 21179 is that output operands might need reloading, which would result in 21180 additional following "store" instructions. On most machines, these 21181 instructions would alter the condition code before there was time to 21182 test it. This problem doesn't arise for ordinary "test" and "compare" 21183 instructions because they don't have any output operands. 21184 21185 For reasons similar to those described above, it is not possible to 21186 give an assembler instruction access to the condition code left by 21187 previous instructions. 21188 21189 If you are writing a header file that should be includable in ISO C 21190 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::. 21191 21192 5.37.1 Size of an `asm' 21193 ----------------------- 21194 21195 Some targets require that GCC track the size of each instruction used in 21196 order to generate correct code. Because the final length of an `asm' 21197 is only known by the assembler, GCC must make an estimate as to how big 21198 it will be. The estimate is formed by counting the number of 21199 statements in the pattern of the `asm' and multiplying that by the 21200 length of the longest instruction on that processor. Statements in the 21201 `asm' are identified by newline characters and whatever statement 21202 separator characters are supported by the assembler; on most processors 21203 this is the ``;'' character. 21204 21205 Normally, GCC's estimate is perfectly adequate to ensure that correct 21206 code is generated, but it is possible to confuse the compiler if you use 21207 pseudo instructions or assembler macros that expand into multiple real 21208 instructions or if you use assembler directives that expand to more 21209 space in the object file than would be needed for a single instruction. 21210 If this happens then the assembler will produce a diagnostic saying that 21211 a label is unreachable. 21212 21213 5.37.2 i386 floating point asm operands 21214 --------------------------------------- 21215 21216 There are several rules on the usage of stack-like regs in asm_operands 21217 insns. These rules apply only to the operands that are stack-like regs: 21218 21219 1. Given a set of input regs that die in an asm_operands, it is 21220 necessary to know which are implicitly popped by the asm, and 21221 which must be explicitly popped by gcc. 21222 21223 An input reg that is implicitly popped by the asm must be 21224 explicitly clobbered, unless it is constrained to match an output 21225 operand. 21226 21227 2. For any input reg that is implicitly popped by an asm, it is 21228 necessary to know how to adjust the stack to compensate for the 21229 pop. If any non-popped input is closer to the top of the 21230 reg-stack than the implicitly popped reg, it would not be possible 21231 to know what the stack looked like--it's not clear how the rest of 21232 the stack "slides up". 21233 21234 All implicitly popped input regs must be closer to the top of the 21235 reg-stack than any input that is not implicitly popped. 21236 21237 It is possible that if an input dies in an insn, reload might use 21238 the input reg for an output reload. Consider this example: 21239 21240 asm ("foo" : "=t" (a) : "f" (b)); 21241 21242 This asm says that input B is not popped by the asm, and that the 21243 asm pushes a result onto the reg-stack, i.e., the stack is one 21244 deeper after the asm than it was before. But, it is possible that 21245 reload will think that it can use the same reg for both the input 21246 and the output, if input B dies in this insn. 21247 21248 If any input operand uses the `f' constraint, all output reg 21249 constraints must use the `&' earlyclobber. 21250 21251 The asm above would be written as 21252 21253 asm ("foo" : "=&t" (a) : "f" (b)); 21254 21255 3. Some operands need to be in particular places on the stack. All 21256 output operands fall in this category--there is no other way to 21257 know which regs the outputs appear in unless the user indicates 21258 this in the constraints. 21259 21260 Output operands must specifically indicate which reg an output 21261 appears in after an asm. `=f' is not allowed: the operand 21262 constraints must select a class with a single reg. 21263 21264 4. Output operands may not be "inserted" between existing stack regs. 21265 Since no 387 opcode uses a read/write operand, all output operands 21266 are dead before the asm_operands, and are pushed by the 21267 asm_operands. It makes no sense to push anywhere but the top of 21268 the reg-stack. 21269 21270 Output operands must start at the top of the reg-stack: output 21271 operands may not "skip" a reg. 21272 21273 5. Some asm statements may need extra stack space for internal 21274 calculations. This can be guaranteed by clobbering stack registers 21275 unrelated to the inputs and outputs. 21276 21277 21278 Here are a couple of reasonable asms to want to write. This asm takes 21279 one input, which is internally popped, and produces two outputs. 21280 21281 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp)); 21282 21283 This asm takes two inputs, which are popped by the `fyl2xp1' opcode, 21284 and replaces them with one output. The user must code the `st(1)' 21285 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs. 21286 21287 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)"); 21288 21289 21290 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions 21291 21292 5.38 Constraints for `asm' Operands 21293 =================================== 21294 21295 Here are specific details on what constraint letters you can use with 21296 `asm' operands. Constraints can say whether an operand may be in a 21297 register, and which kinds of register; whether the operand can be a 21298 memory reference, and which kinds of address; whether the operand may 21299 be an immediate constant, and which possible values it may have. 21300 Constraints can also require two operands to match. 21301 21302 * Menu: 21303 21304 * Simple Constraints:: Basic use of constraints. 21305 * Multi-Alternative:: When an insn has two alternative constraint-patterns. 21306 * Modifiers:: More precise control over effects of constraints. 21307 * Machine Constraints:: Special constraints for some particular machines. 21308 21309 21310 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 21311 21312 5.38.1 Simple Constraints 21313 ------------------------- 21314 21315 The simplest kind of constraint is a string full of letters, each of 21316 which describes one kind of operand that is permitted. Here are the 21317 letters that are allowed: 21318 21319 whitespace 21320 Whitespace characters are ignored and can be inserted at any 21321 position except the first. This enables each alternative for 21322 different operands to be visually aligned in the machine 21323 description even if they have different number of constraints and 21324 modifiers. 21325 21326 `m' 21327 A memory operand is allowed, with any kind of address that the 21328 machine supports in general. Note that the letter used for the 21329 general memory constraint can be re-defined by a back end using 21330 the `TARGET_MEM_CONSTRAINT' macro. 21331 21332 `o' 21333 A memory operand is allowed, but only if the address is 21334 "offsettable". This means that adding a small integer (actually, 21335 the width in bytes of the operand, as determined by its machine 21336 mode) may be added to the address and the result is also a valid 21337 memory address. 21338 21339 For example, an address which is constant is offsettable; so is an 21340 address that is the sum of a register and a constant (as long as a 21341 slightly larger constant is also within the range of 21342 address-offsets supported by the machine); but an autoincrement or 21343 autodecrement address is not offsettable. More complicated 21344 indirect/indexed addresses may or may not be offsettable depending 21345 on the other addressing modes that the machine supports. 21346 21347 Note that in an output operand which can be matched by another 21348 operand, the constraint letter `o' is valid only when accompanied 21349 by both `<' (if the target machine has predecrement addressing) 21350 and `>' (if the target machine has preincrement addressing). 21351 21352 `V' 21353 A memory operand that is not offsettable. In other words, 21354 anything that would fit the `m' constraint but not the `o' 21355 constraint. 21356 21357 `<' 21358 A memory operand with autodecrement addressing (either 21359 predecrement or postdecrement) is allowed. 21360 21361 `>' 21362 A memory operand with autoincrement addressing (either 21363 preincrement or postincrement) is allowed. 21364 21365 `r' 21366 A register operand is allowed provided that it is in a general 21367 register. 21368 21369 `i' 21370 An immediate integer operand (one with constant value) is allowed. 21371 This includes symbolic constants whose values will be known only at 21372 assembly time or later. 21373 21374 `n' 21375 An immediate integer operand with a known numeric value is allowed. 21376 Many systems cannot support assembly-time constants for operands 21377 less than a word wide. Constraints for these operands should use 21378 `n' rather than `i'. 21379 21380 `I', `J', `K', ... `P' 21381 Other letters in the range `I' through `P' may be defined in a 21382 machine-dependent fashion to permit immediate integer operands with 21383 explicit integer values in specified ranges. For example, on the 21384 68000, `I' is defined to stand for the range of values 1 to 8. 21385 This is the range permitted as a shift count in the shift 21386 instructions. 21387 21388 `E' 21389 An immediate floating operand (expression code `const_double') is 21390 allowed, but only if the target floating point format is the same 21391 as that of the host machine (on which the compiler is running). 21392 21393 `F' 21394 An immediate floating operand (expression code `const_double' or 21395 `const_vector') is allowed. 21396 21397 `G', `H' 21398 `G' and `H' may be defined in a machine-dependent fashion to 21399 permit immediate floating operands in particular ranges of values. 21400 21401 `s' 21402 An immediate integer operand whose value is not an explicit 21403 integer is allowed. 21404 21405 This might appear strange; if an insn allows a constant operand 21406 with a value not known at compile time, it certainly must allow 21407 any known value. So why use `s' instead of `i'? Sometimes it 21408 allows better code to be generated. 21409 21410 For example, on the 68000 in a fullword instruction it is possible 21411 to use an immediate operand; but if the immediate value is between 21412 -128 and 127, better code results from loading the value into a 21413 register and using the register. This is because the load into 21414 the register can be done with a `moveq' instruction. We arrange 21415 for this to happen by defining the letter `K' to mean "any integer 21416 outside the range -128 to 127", and then specifying `Ks' in the 21417 operand constraints. 21418 21419 `g' 21420 Any register, memory or immediate integer operand is allowed, 21421 except for registers that are not general registers. 21422 21423 `X' 21424 Any operand whatsoever is allowed. 21425 21426 `0', `1', `2', ... `9' 21427 An operand that matches the specified operand number is allowed. 21428 If a digit is used together with letters within the same 21429 alternative, the digit should come last. 21430 21431 This number is allowed to be more than a single digit. If multiple 21432 digits are encountered consecutively, they are interpreted as a 21433 single decimal integer. There is scant chance for ambiguity, 21434 since to-date it has never been desirable that `10' be interpreted 21435 as matching either operand 1 _or_ operand 0. Should this be 21436 desired, one can use multiple alternatives instead. 21437 21438 This is called a "matching constraint" and what it really means is 21439 that the assembler has only a single operand that fills two roles 21440 which `asm' distinguishes. For example, an add instruction uses 21441 two input operands and an output operand, but on most CISC 21442 machines an add instruction really has only two operands, one of 21443 them an input-output operand: 21444 21445 addl #35,r12 21446 21447 Matching constraints are used in these circumstances. More 21448 precisely, the two operands that match must include one input-only 21449 operand and one output-only operand. Moreover, the digit must be a 21450 smaller number than the number of the operand that uses it in the 21451 constraint. 21452 21453 `p' 21454 An operand that is a valid memory address is allowed. This is for 21455 "load address" and "push address" instructions. 21456 21457 `p' in the constraint must be accompanied by `address_operand' as 21458 the predicate in the `match_operand'. This predicate interprets 21459 the mode specified in the `match_operand' as the mode of the memory 21460 reference for which the address would be valid. 21461 21462 OTHER-LETTERS 21463 Other letters can be defined in machine-dependent fashion to stand 21464 for particular classes of registers or other arbitrary operand 21465 types. `d', `a' and `f' are defined on the 68000/68020 to stand 21466 for data, address and floating point registers. 21467 21468 21469 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints 21470 21471 5.38.2 Multiple Alternative Constraints 21472 --------------------------------------- 21473 21474 Sometimes a single instruction has multiple alternative sets of possible 21475 operands. For example, on the 68000, a logical-or instruction can 21476 combine register or an immediate value into memory, or it can combine 21477 any kind of operand into a register; but it cannot combine one memory 21478 location into another. 21479 21480 These constraints are represented as multiple alternatives. An 21481 alternative can be described by a series of letters for each operand. 21482 The overall constraint for an operand is made from the letters for this 21483 operand from the first alternative, a comma, the letters for this 21484 operand from the second alternative, a comma, and so on until the last 21485 alternative. 21486 21487 If all the operands fit any one alternative, the instruction is valid. 21488 Otherwise, for each alternative, the compiler counts how many 21489 instructions must be added to copy the operands so that that 21490 alternative applies. The alternative requiring the least copying is 21491 chosen. If two alternatives need the same amount of copying, the one 21492 that comes first is chosen. These choices can be altered with the `?' 21493 and `!' characters: 21494 21495 `?' 21496 Disparage slightly the alternative that the `?' appears in, as a 21497 choice when no alternative applies exactly. The compiler regards 21498 this alternative as one unit more costly for each `?' that appears 21499 in it. 21500 21501 `!' 21502 Disparage severely the alternative that the `!' appears in. This 21503 alternative can still be used if it fits without reloading, but if 21504 reloading is needed, some other alternative will be used. 21505 21506 21507 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints 21508 21509 5.38.3 Constraint Modifier Characters 21510 ------------------------------------- 21511 21512 Here are constraint modifier characters. 21513 21514 `=' 21515 Means that this operand is write-only for this instruction: the 21516 previous value is discarded and replaced by output data. 21517 21518 `+' 21519 Means that this operand is both read and written by the 21520 instruction. 21521 21522 When the compiler fixes up the operands to satisfy the constraints, 21523 it needs to know which operands are inputs to the instruction and 21524 which are outputs from it. `=' identifies an output; `+' 21525 identifies an operand that is both input and output; all other 21526 operands are assumed to be input only. 21527 21528 If you specify `=' or `+' in a constraint, you put it in the first 21529 character of the constraint string. 21530 21531 `&' 21532 Means (in a particular alternative) that this operand is an 21533 "earlyclobber" operand, which is modified before the instruction is 21534 finished using the input operands. Therefore, this operand may 21535 not lie in a register that is used as an input operand or as part 21536 of any memory address. 21537 21538 `&' applies only to the alternative in which it is written. In 21539 constraints with multiple alternatives, sometimes one alternative 21540 requires `&' while others do not. See, for example, the `movdf' 21541 insn of the 68000. 21542 21543 An input operand can be tied to an earlyclobber operand if its only 21544 use as an input occurs before the early result is written. Adding 21545 alternatives of this form often allows GCC to produce better code 21546 when only some of the inputs can be affected by the earlyclobber. 21547 See, for example, the `mulsi3' insn of the ARM. 21548 21549 `&' does not obviate the need to write `='. 21550 21551 `%' 21552 Declares the instruction to be commutative for this operand and the 21553 following operand. This means that the compiler may interchange 21554 the two operands if that is the cheapest way to make all operands 21555 fit the constraints. GCC can only handle one commutative pair in 21556 an asm; if you use more, the compiler may fail. Note that you 21557 need not use the modifier if the two alternatives are strictly 21558 identical; this would only waste time in the reload pass. The 21559 modifier is not operational after register allocation, so the 21560 result of `define_peephole2' and `define_split's performed after 21561 reload cannot rely on `%' to make the intended insn match. 21562 21563 `#' 21564 Says that all following characters, up to the next comma, are to be 21565 ignored as a constraint. They are significant only for choosing 21566 register preferences. 21567 21568 `*' 21569 Says that the following character should be ignored when choosing 21570 register preferences. `*' has no effect on the meaning of the 21571 constraint as a constraint, and no effect on reloading. 21572 21573 21574 21575 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints 21576 21577 5.38.4 Constraints for Particular Machines 21578 ------------------------------------------ 21579 21580 Whenever possible, you should use the general-purpose constraint letters 21581 in `asm' arguments, since they will convey meaning more readily to 21582 people reading your code. Failing that, use the constraint letters 21583 that usually have very similar meanings across architectures. The most 21584 commonly used constraints are `m' and `r' (for memory and 21585 general-purpose registers respectively; *note Simple Constraints::), and 21586 `I', usually the letter indicating the most common immediate-constant 21587 format. 21588 21589 Each architecture defines additional constraints. These constraints 21590 are used by the compiler itself for instruction generation, as well as 21591 for `asm' statements; therefore, some of the constraints are not 21592 particularly useful for `asm'. Here is a summary of some of the 21593 machine-dependent constraints available on some particular machines; it 21594 includes both constraints that are useful for `asm' and constraints 21595 that aren't. The compiler source file mentioned in the table heading 21596 for each architecture is the definitive reference for the meanings of 21597 that architecture's constraints. 21598 21599 _ARM family--`config/arm/arm.h'_ 21600 21601 `f' 21602 Floating-point register 21603 21604 `w' 21605 VFP floating-point register 21606 21607 `F' 21608 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0, 21609 4.0, 5.0 or 10.0 21610 21611 `G' 21612 Floating-point constant that would satisfy the constraint `F' 21613 if it were negated 21614 21615 `I' 21616 Integer that is valid as an immediate operand in a data 21617 processing instruction. That is, an integer in the range 0 21618 to 255 rotated by a multiple of 2 21619 21620 `J' 21621 Integer in the range -4095 to 4095 21622 21623 `K' 21624 Integer that satisfies constraint `I' when inverted (ones 21625 complement) 21626 21627 `L' 21628 Integer that satisfies constraint `I' when negated (twos 21629 complement) 21630 21631 `M' 21632 Integer in the range 0 to 32 21633 21634 `Q' 21635 A memory reference where the exact address is in a single 21636 register (``m'' is preferable for `asm' statements) 21637 21638 `R' 21639 An item in the constant pool 21640 21641 `S' 21642 A symbol in the text segment of the current file 21643 21644 `Uv' 21645 A memory reference suitable for VFP load/store insns 21646 (reg+constant offset) 21647 21648 `Uy' 21649 A memory reference suitable for iWMMXt load/store 21650 instructions. 21651 21652 `Uq' 21653 A memory reference suitable for the ARMv4 ldrsb instruction. 21654 21655 _AVR family--`config/avr/constraints.md'_ 21656 21657 `l' 21658 Registers from r0 to r15 21659 21660 `a' 21661 Registers from r16 to r23 21662 21663 `d' 21664 Registers from r16 to r31 21665 21666 `w' 21667 Registers from r24 to r31. These registers can be used in 21668 `adiw' command 21669 21670 `e' 21671 Pointer register (r26-r31) 21672 21673 `b' 21674 Base pointer register (r28-r31) 21675 21676 `q' 21677 Stack pointer register (SPH:SPL) 21678 21679 `t' 21680 Temporary register r0 21681 21682 `x' 21683 Register pair X (r27:r26) 21684 21685 `y' 21686 Register pair Y (r29:r28) 21687 21688 `z' 21689 Register pair Z (r31:r30) 21690 21691 `I' 21692 Constant greater than -1, less than 64 21693 21694 `J' 21695 Constant greater than -64, less than 1 21696 21697 `K' 21698 Constant integer 2 21699 21700 `L' 21701 Constant integer 0 21702 21703 `M' 21704 Constant that fits in 8 bits 21705 21706 `N' 21707 Constant integer -1 21708 21709 `O' 21710 Constant integer 8, 16, or 24 21711 21712 `P' 21713 Constant integer 1 21714 21715 `G' 21716 A floating point constant 0.0 21717 21718 `R' 21719 Integer constant in the range -6 ... 5. 21720 21721 `Q' 21722 A memory address based on Y or Z pointer with displacement. 21723 21724 _CRX Architecture--`config/crx/crx.h'_ 21725 21726 `b' 21727 Registers from r0 to r14 (registers without stack pointer) 21728 21729 `l' 21730 Register r16 (64-bit accumulator lo register) 21731 21732 `h' 21733 Register r17 (64-bit accumulator hi register) 21734 21735 `k' 21736 Register pair r16-r17. (64-bit accumulator lo-hi pair) 21737 21738 `I' 21739 Constant that fits in 3 bits 21740 21741 `J' 21742 Constant that fits in 4 bits 21743 21744 `K' 21745 Constant that fits in 5 bits 21746 21747 `L' 21748 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 21749 21750 `G' 21751 Floating point constant that is legal for store immediate 21752 21753 _Hewlett-Packard PA-RISC--`config/pa/pa.h'_ 21754 21755 `a' 21756 General register 1 21757 21758 `f' 21759 Floating point register 21760 21761 `q' 21762 Shift amount register 21763 21764 `x' 21765 Floating point register (deprecated) 21766 21767 `y' 21768 Upper floating point register (32-bit), floating point 21769 register (64-bit) 21770 21771 `Z' 21772 Any register 21773 21774 `I' 21775 Signed 11-bit integer constant 21776 21777 `J' 21778 Signed 14-bit integer constant 21779 21780 `K' 21781 Integer constant that can be deposited with a `zdepi' 21782 instruction 21783 21784 `L' 21785 Signed 5-bit integer constant 21786 21787 `M' 21788 Integer constant 0 21789 21790 `N' 21791 Integer constant that can be loaded with a `ldil' instruction 21792 21793 `O' 21794 Integer constant whose value plus one is a power of 2 21795 21796 `P' 21797 Integer constant that can be used for `and' operations in 21798 `depi' and `extru' instructions 21799 21800 `S' 21801 Integer constant 31 21802 21803 `U' 21804 Integer constant 63 21805 21806 `G' 21807 Floating-point constant 0.0 21808 21809 `A' 21810 A `lo_sum' data-linkage-table memory operand 21811 21812 `Q' 21813 A memory operand that can be used as the destination operand 21814 of an integer store instruction 21815 21816 `R' 21817 A scaled or unscaled indexed memory operand 21818 21819 `T' 21820 A memory operand for floating-point loads and stores 21821 21822 `W' 21823 A register indirect memory operand 21824 21825 _picoChip family--`picochip.h'_ 21826 21827 `k' 21828 Stack register. 21829 21830 `f' 21831 Pointer register. A register which can be used to access 21832 memory without supplying an offset. Any other register can 21833 be used to access memory, but will need a constant offset. 21834 In the case of the offset being zero, it is more efficient to 21835 use a pointer register, since this reduces code size. 21836 21837 `t' 21838 A twin register. A register which may be paired with an 21839 adjacent register to create a 32-bit register. 21840 21841 `a' 21842 Any absolute memory address (e.g., symbolic constant, symbolic 21843 constant + offset). 21844 21845 `I' 21846 4-bit signed integer. 21847 21848 `J' 21849 4-bit unsigned integer. 21850 21851 `K' 21852 8-bit signed integer. 21853 21854 `M' 21855 Any constant whose absolute value is no greater than 4-bits. 21856 21857 `N' 21858 10-bit signed integer 21859 21860 `O' 21861 16-bit signed integer. 21862 21863 21864 _PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_ 21865 21866 `b' 21867 Address base register 21868 21869 `f' 21870 Floating point register 21871 21872 `v' 21873 Vector register 21874 21875 `h' 21876 `MQ', `CTR', or `LINK' register 21877 21878 `q' 21879 `MQ' register 21880 21881 `c' 21882 `CTR' register 21883 21884 `l' 21885 `LINK' register 21886 21887 `x' 21888 `CR' register (condition register) number 0 21889 21890 `y' 21891 `CR' register (condition register) 21892 21893 `z' 21894 `FPMEM' stack memory for FPR-GPR transfers 21895 21896 `I' 21897 Signed 16-bit constant 21898 21899 `J' 21900 Unsigned 16-bit constant shifted left 16 bits (use `L' 21901 instead for `SImode' constants) 21902 21903 `K' 21904 Unsigned 16-bit constant 21905 21906 `L' 21907 Signed 16-bit constant shifted left 16 bits 21908 21909 `M' 21910 Constant larger than 31 21911 21912 `N' 21913 Exact power of 2 21914 21915 `O' 21916 Zero 21917 21918 `P' 21919 Constant whose negation is a signed 16-bit constant 21920 21921 `G' 21922 Floating point constant that can be loaded into a register 21923 with one instruction per word 21924 21925 `H' 21926 Integer/Floating point constant that can be loaded into a 21927 register using three instructions 21928 21929 `Q' 21930 Memory operand that is an offset from a register (`m' is 21931 preferable for `asm' statements) 21932 21933 `Z' 21934 Memory operand that is an indexed or indirect from a register 21935 (`m' is preferable for `asm' statements) 21936 21937 `R' 21938 AIX TOC entry 21939 21940 `a' 21941 Address operand that is an indexed or indirect from a 21942 register (`p' is preferable for `asm' statements) 21943 21944 `S' 21945 Constant suitable as a 64-bit mask operand 21946 21947 `T' 21948 Constant suitable as a 32-bit mask operand 21949 21950 `U' 21951 System V Release 4 small data area reference 21952 21953 `t' 21954 AND masks that can be performed by two rldic{l, r} 21955 instructions 21956 21957 `W' 21958 Vector constant that does not require memory 21959 21960 21961 _Intel 386--`config/i386/constraints.md'_ 21962 21963 `R' 21964 Legacy register--the eight integer registers available on all 21965 i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp'). 21966 21967 `q' 21968 Any register accessible as `Rl'. In 32-bit mode, `a', `b', 21969 `c', and `d'; in 64-bit mode, any integer register. 21970 21971 `Q' 21972 Any register accessible as `Rh': `a', `b', `c', and `d'. 21973 21974 `a' 21975 The `a' register. 21976 21977 `b' 21978 The `b' register. 21979 21980 `c' 21981 The `c' register. 21982 21983 `d' 21984 The `d' register. 21985 21986 `S' 21987 The `si' register. 21988 21989 `D' 21990 The `di' register. 21991 21992 `A' 21993 The `a' and `d' registers, as a pair (for instructions that 21994 return half the result in one and half in the other). 21995 21996 `f' 21997 Any 80387 floating-point (stack) register. 21998 21999 `t' 22000 Top of 80387 floating-point stack (`%st(0)'). 22001 22002 `u' 22003 Second from top of 80387 floating-point stack (`%st(1)'). 22004 22005 `y' 22006 Any MMX register. 22007 22008 `x' 22009 Any SSE register. 22010 22011 `Yz' 22012 First SSE register (`%xmm0'). 22013 22014 `I' 22015 Integer constant in the range 0 ... 31, for 32-bit shifts. 22016 22017 `J' 22018 Integer constant in the range 0 ... 63, for 64-bit shifts. 22019 22020 `K' 22021 Signed 8-bit integer constant. 22022 22023 `L' 22024 `0xFF' or `0xFFFF', for andsi as a zero-extending move. 22025 22026 `M' 22027 0, 1, 2, or 3 (shifts for the `lea' instruction). 22028 22029 `N' 22030 Unsigned 8-bit integer constant (for `in' and `out' 22031 instructions). 22032 22033 `G' 22034 Standard 80387 floating point constant. 22035 22036 `C' 22037 Standard SSE floating point constant. 22038 22039 `e' 22040 32-bit signed integer constant, or a symbolic reference known 22041 to fit that range (for immediate operands in sign-extending 22042 x86-64 instructions). 22043 22044 `Z' 22045 32-bit unsigned integer constant, or a symbolic reference 22046 known to fit that range (for immediate operands in 22047 zero-extending x86-64 instructions). 22048 22049 22050 _Intel IA-64--`config/ia64/ia64.h'_ 22051 22052 `a' 22053 General register `r0' to `r3' for `addl' instruction 22054 22055 `b' 22056 Branch register 22057 22058 `c' 22059 Predicate register (`c' as in "conditional") 22060 22061 `d' 22062 Application register residing in M-unit 22063 22064 `e' 22065 Application register residing in I-unit 22066 22067 `f' 22068 Floating-point register 22069 22070 `m' 22071 Memory operand. Remember that `m' allows postincrement and 22072 postdecrement which require printing with `%Pn' on IA-64. 22073 Use `S' to disallow postincrement and postdecrement. 22074 22075 `G' 22076 Floating-point constant 0.0 or 1.0 22077 22078 `I' 22079 14-bit signed integer constant 22080 22081 `J' 22082 22-bit signed integer constant 22083 22084 `K' 22085 8-bit signed integer constant for logical instructions 22086 22087 `L' 22088 8-bit adjusted signed integer constant for compare pseudo-ops 22089 22090 `M' 22091 6-bit unsigned integer constant for shift counts 22092 22093 `N' 22094 9-bit signed integer constant for load and store 22095 postincrements 22096 22097 `O' 22098 The constant zero 22099 22100 `P' 22101 0 or -1 for `dep' instruction 22102 22103 `Q' 22104 Non-volatile memory for floating-point loads and stores 22105 22106 `R' 22107 Integer constant in the range 1 to 4 for `shladd' instruction 22108 22109 `S' 22110 Memory operand except postincrement and postdecrement 22111 22112 _FRV--`config/frv/frv.h'_ 22113 22114 `a' 22115 Register in the class `ACC_REGS' (`acc0' to `acc7'). 22116 22117 `b' 22118 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7'). 22119 22120 `c' 22121 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0' 22122 to `icc3'). 22123 22124 `d' 22125 Register in the class `GPR_REGS' (`gr0' to `gr63'). 22126 22127 `e' 22128 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd 22129 registers are excluded not in the class but through the use 22130 of a machine mode larger than 4 bytes. 22131 22132 `f' 22133 Register in the class `FPR_REGS' (`fr0' to `fr63'). 22134 22135 `h' 22136 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd 22137 registers are excluded not in the class but through the use 22138 of a machine mode larger than 4 bytes. 22139 22140 `l' 22141 Register in the class `LR_REG' (the `lr' register). 22142 22143 `q' 22144 Register in the class `QUAD_REGS' (`gr2' to `gr63'). 22145 Register numbers not divisible by 4 are excluded not in the 22146 class but through the use of a machine mode larger than 8 22147 bytes. 22148 22149 `t' 22150 Register in the class `ICC_REGS' (`icc0' to `icc3'). 22151 22152 `u' 22153 Register in the class `FCC_REGS' (`fcc0' to `fcc3'). 22154 22155 `v' 22156 Register in the class `ICR_REGS' (`cc4' to `cc7'). 22157 22158 `w' 22159 Register in the class `FCR_REGS' (`cc0' to `cc3'). 22160 22161 `x' 22162 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63'). 22163 Register numbers not divisible by 4 are excluded not in the 22164 class but through the use of a machine mode larger than 8 22165 bytes. 22166 22167 `z' 22168 Register in the class `SPR_REGS' (`lcr' and `lr'). 22169 22170 `A' 22171 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7'). 22172 22173 `B' 22174 Register in the class `ACCG_REGS' (`accg0' to `accg7'). 22175 22176 `C' 22177 Register in the class `CR_REGS' (`cc0' to `cc7'). 22178 22179 `G' 22180 Floating point constant zero 22181 22182 `I' 22183 6-bit signed integer constant 22184 22185 `J' 22186 10-bit signed integer constant 22187 22188 `L' 22189 16-bit signed integer constant 22190 22191 `M' 22192 16-bit unsigned integer constant 22193 22194 `N' 22195 12-bit signed integer constant that is negative--i.e. in the 22196 range of -2048 to -1 22197 22198 `O' 22199 Constant zero 22200 22201 `P' 22202 12-bit signed integer constant that is greater than 22203 zero--i.e. in the range of 1 to 2047. 22204 22205 22206 _Blackfin family--`config/bfin/constraints.md'_ 22207 22208 `a' 22209 P register 22210 22211 `d' 22212 D register 22213 22214 `z' 22215 A call clobbered P register. 22216 22217 `qN' 22218 A single register. If N is in the range 0 to 7, the 22219 corresponding D register. If it is `A', then the register P0. 22220 22221 `D' 22222 Even-numbered D register 22223 22224 `W' 22225 Odd-numbered D register 22226 22227 `e' 22228 Accumulator register. 22229 22230 `A' 22231 Even-numbered accumulator register. 22232 22233 `B' 22234 Odd-numbered accumulator register. 22235 22236 `b' 22237 I register 22238 22239 `v' 22240 B register 22241 22242 `f' 22243 M register 22244 22245 `c' 22246 Registers used for circular buffering, i.e. I, B, or L 22247 registers. 22248 22249 `C' 22250 The CC register. 22251 22252 `t' 22253 LT0 or LT1. 22254 22255 `k' 22256 LC0 or LC1. 22257 22258 `u' 22259 LB0 or LB1. 22260 22261 `x' 22262 Any D, P, B, M, I or L register. 22263 22264 `y' 22265 Additional registers typically used only in prologues and 22266 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 22267 USP. 22268 22269 `w' 22270 Any register except accumulators or CC. 22271 22272 `Ksh' 22273 Signed 16 bit integer (in the range -32768 to 32767) 22274 22275 `Kuh' 22276 Unsigned 16 bit integer (in the range 0 to 65535) 22277 22278 `Ks7' 22279 Signed 7 bit integer (in the range -64 to 63) 22280 22281 `Ku7' 22282 Unsigned 7 bit integer (in the range 0 to 127) 22283 22284 `Ku5' 22285 Unsigned 5 bit integer (in the range 0 to 31) 22286 22287 `Ks4' 22288 Signed 4 bit integer (in the range -8 to 7) 22289 22290 `Ks3' 22291 Signed 3 bit integer (in the range -3 to 4) 22292 22293 `Ku3' 22294 Unsigned 3 bit integer (in the range 0 to 7) 22295 22296 `PN' 22297 Constant N, where N is a single-digit constant in the range 0 22298 to 4. 22299 22300 `PA' 22301 An integer equal to one of the MACFLAG_XXX constants that is 22302 suitable for use with either accumulator. 22303 22304 `PB' 22305 An integer equal to one of the MACFLAG_XXX constants that is 22306 suitable for use only with accumulator A1. 22307 22308 `M1' 22309 Constant 255. 22310 22311 `M2' 22312 Constant 65535. 22313 22314 `J' 22315 An integer constant with exactly a single bit set. 22316 22317 `L' 22318 An integer constant with all bits set except exactly one. 22319 22320 `H' 22321 22322 `Q' 22323 Any SYMBOL_REF. 22324 22325 _M32C--`config/m32c/m32c.c'_ 22326 22327 `Rsp' 22328 `Rfb' 22329 `Rsb' 22330 `$sp', `$fb', `$sb'. 22331 22332 `Rcr' 22333 Any control register, when they're 16 bits wide (nothing if 22334 control registers are 24 bits wide) 22335 22336 `Rcl' 22337 Any control register, when they're 24 bits wide. 22338 22339 `R0w' 22340 `R1w' 22341 `R2w' 22342 `R3w' 22343 $r0, $r1, $r2, $r3. 22344 22345 `R02' 22346 $r0 or $r2, or $r2r0 for 32 bit values. 22347 22348 `R13' 22349 $r1 or $r3, or $r3r1 for 32 bit values. 22350 22351 `Rdi' 22352 A register that can hold a 64 bit value. 22353 22354 `Rhl' 22355 $r0 or $r1 (registers with addressable high/low bytes) 22356 22357 `R23' 22358 $r2 or $r3 22359 22360 `Raa' 22361 Address registers 22362 22363 `Raw' 22364 Address registers when they're 16 bits wide. 22365 22366 `Ral' 22367 Address registers when they're 24 bits wide. 22368 22369 `Rqi' 22370 Registers that can hold QI values. 22371 22372 `Rad' 22373 Registers that can be used with displacements ($a0, $a1, $sb). 22374 22375 `Rsi' 22376 Registers that can hold 32 bit values. 22377 22378 `Rhi' 22379 Registers that can hold 16 bit values. 22380 22381 `Rhc' 22382 Registers chat can hold 16 bit values, including all control 22383 registers. 22384 22385 `Rra' 22386 $r0 through R1, plus $a0 and $a1. 22387 22388 `Rfl' 22389 The flags register. 22390 22391 `Rmm' 22392 The memory-based pseudo-registers $mem0 through $mem15. 22393 22394 `Rpi' 22395 Registers that can hold pointers (16 bit registers for r8c, 22396 m16c; 24 bit registers for m32cm, m32c). 22397 22398 `Rpa' 22399 Matches multiple registers in a PARALLEL to form a larger 22400 register. Used to match function return values. 22401 22402 `Is3' 22403 -8 ... 7 22404 22405 `IS1' 22406 -128 ... 127 22407 22408 `IS2' 22409 -32768 ... 32767 22410 22411 `IU2' 22412 0 ... 65535 22413 22414 `In4' 22415 -8 ... -1 or 1 ... 8 22416 22417 `In5' 22418 -16 ... -1 or 1 ... 16 22419 22420 `In6' 22421 -32 ... -1 or 1 ... 32 22422 22423 `IM2' 22424 -65536 ... -1 22425 22426 `Ilb' 22427 An 8 bit value with exactly one bit set. 22428 22429 `Ilw' 22430 A 16 bit value with exactly one bit set. 22431 22432 `Sd' 22433 The common src/dest memory addressing modes. 22434 22435 `Sa' 22436 Memory addressed using $a0 or $a1. 22437 22438 `Si' 22439 Memory addressed with immediate addresses. 22440 22441 `Ss' 22442 Memory addressed using the stack pointer ($sp). 22443 22444 `Sf' 22445 Memory addressed using the frame base register ($fb). 22446 22447 `Ss' 22448 Memory addressed using the small base register ($sb). 22449 22450 `S1' 22451 $r1h 22452 22453 _MIPS--`config/mips/constraints.md'_ 22454 22455 `d' 22456 An address register. This is equivalent to `r' unless 22457 generating MIPS16 code. 22458 22459 `f' 22460 A floating-point register (if available). 22461 22462 `h' 22463 Formerly the `hi' register. This constraint is no longer 22464 supported. 22465 22466 `l' 22467 The `lo' register. Use this register to store values that are 22468 no bigger than a word. 22469 22470 `x' 22471 The concatenated `hi' and `lo' registers. Use this register 22472 to store doubleword values. 22473 22474 `c' 22475 A register suitable for use in an indirect jump. This will 22476 always be `$25' for `-mabicalls'. 22477 22478 `v' 22479 Register `$3'. Do not use this constraint in new code; it is 22480 retained only for compatibility with glibc. 22481 22482 `y' 22483 Equivalent to `r'; retained for backwards compatibility. 22484 22485 `z' 22486 A floating-point condition code register. 22487 22488 `I' 22489 A signed 16-bit constant (for arithmetic instructions). 22490 22491 `J' 22492 Integer zero. 22493 22494 `K' 22495 An unsigned 16-bit constant (for logic instructions). 22496 22497 `L' 22498 A signed 32-bit constant in which the lower 16 bits are zero. 22499 Such constants can be loaded using `lui'. 22500 22501 `M' 22502 A constant that cannot be loaded using `lui', `addiu' or 22503 `ori'. 22504 22505 `N' 22506 A constant in the range -65535 to -1 (inclusive). 22507 22508 `O' 22509 A signed 15-bit constant. 22510 22511 `P' 22512 A constant in the range 1 to 65535 (inclusive). 22513 22514 `G' 22515 Floating-point zero. 22516 22517 `R' 22518 An address that can be used in a non-macro load or store. 22519 22520 _Motorola 680x0--`config/m68k/constraints.md'_ 22521 22522 `a' 22523 Address register 22524 22525 `d' 22526 Data register 22527 22528 `f' 22529 68881 floating-point register, if available 22530 22531 `I' 22532 Integer in the range 1 to 8 22533 22534 `J' 22535 16-bit signed number 22536 22537 `K' 22538 Signed number whose magnitude is greater than 0x80 22539 22540 `L' 22541 Integer in the range -8 to -1 22542 22543 `M' 22544 Signed number whose magnitude is greater than 0x100 22545 22546 `N' 22547 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 22548 22549 `O' 22550 16 (for rotate using swap) 22551 22552 `P' 22553 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 22554 22555 `R' 22556 Numbers that mov3q can handle 22557 22558 `G' 22559 Floating point constant that is not a 68881 constant 22560 22561 `S' 22562 Operands that satisfy 'm' when -mpcrel is in effect 22563 22564 `T' 22565 Operands that satisfy 's' when -mpcrel is not in effect 22566 22567 `Q' 22568 Address register indirect addressing mode 22569 22570 `U' 22571 Register offset addressing 22572 22573 `W' 22574 const_call_operand 22575 22576 `Cs' 22577 symbol_ref or const 22578 22579 `Ci' 22580 const_int 22581 22582 `C0' 22583 const_int 0 22584 22585 `Cj' 22586 Range of signed numbers that don't fit in 16 bits 22587 22588 `Cmvq' 22589 Integers valid for mvq 22590 22591 `Capsw' 22592 Integers valid for a moveq followed by a swap 22593 22594 `Cmvz' 22595 Integers valid for mvz 22596 22597 `Cmvs' 22598 Integers valid for mvs 22599 22600 `Ap' 22601 push_operand 22602 22603 `Ac' 22604 Non-register operands allowed in clr 22605 22606 22607 _Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_ 22608 22609 `a' 22610 Register `a' 22611 22612 `b' 22613 Register `b' 22614 22615 `d' 22616 Register `d' 22617 22618 `q' 22619 An 8-bit register 22620 22621 `t' 22622 Temporary soft register _.tmp 22623 22624 `u' 22625 A soft register _.d1 to _.d31 22626 22627 `w' 22628 Stack pointer register 22629 22630 `x' 22631 Register `x' 22632 22633 `y' 22634 Register `y' 22635 22636 `z' 22637 Pseudo register `z' (replaced by `x' or `y' at the end) 22638 22639 `A' 22640 An address register: x, y or z 22641 22642 `B' 22643 An address register: x or y 22644 22645 `D' 22646 Register pair (x:d) to form a 32-bit value 22647 22648 `L' 22649 Constants in the range -65536 to 65535 22650 22651 `M' 22652 Constants whose 16-bit low part is zero 22653 22654 `N' 22655 Constant integer 1 or -1 22656 22657 `O' 22658 Constant integer 16 22659 22660 `P' 22661 Constants in the range -8 to 2 22662 22663 22664 _SPARC--`config/sparc/sparc.h'_ 22665 22666 `f' 22667 Floating-point register on the SPARC-V8 architecture and 22668 lower floating-point register on the SPARC-V9 architecture. 22669 22670 `e' 22671 Floating-point register. It is equivalent to `f' on the 22672 SPARC-V8 architecture and contains both lower and upper 22673 floating-point registers on the SPARC-V9 architecture. 22674 22675 `c' 22676 Floating-point condition code register. 22677 22678 `d' 22679 Lower floating-point register. It is only valid on the 22680 SPARC-V9 architecture when the Visual Instruction Set is 22681 available. 22682 22683 `b' 22684 Floating-point register. It is only valid on the SPARC-V9 22685 architecture when the Visual Instruction Set is available. 22686 22687 `h' 22688 64-bit global or out register for the SPARC-V8+ architecture. 22689 22690 `D' 22691 A vector constant 22692 22693 `I' 22694 Signed 13-bit constant 22695 22696 `J' 22697 Zero 22698 22699 `K' 22700 32-bit constant with the low 12 bits clear (a constant that 22701 can be loaded with the `sethi' instruction) 22702 22703 `L' 22704 A constant in the range supported by `movcc' instructions 22705 22706 `M' 22707 A constant in the range supported by `movrcc' instructions 22708 22709 `N' 22710 Same as `K', except that it verifies that bits that are not 22711 in the lower 32-bit range are all zero. Must be used instead 22712 of `K' for modes wider than `SImode' 22713 22714 `O' 22715 The constant 4096 22716 22717 `G' 22718 Floating-point zero 22719 22720 `H' 22721 Signed 13-bit constant, sign-extended to 32 or 64 bits 22722 22723 `Q' 22724 Floating-point constant whose integral representation can be 22725 moved into an integer register using a single sethi 22726 instruction 22727 22728 `R' 22729 Floating-point constant whose integral representation can be 22730 moved into an integer register using a single mov instruction 22731 22732 `S' 22733 Floating-point constant whose integral representation can be 22734 moved into an integer register using a high/lo_sum 22735 instruction sequence 22736 22737 `T' 22738 Memory address aligned to an 8-byte boundary 22739 22740 `U' 22741 Even register 22742 22743 `W' 22744 Memory address for `e' constraint registers 22745 22746 `Y' 22747 Vector zero 22748 22749 22750 _SPU--`config/spu/spu.h'_ 22751 22752 `a' 22753 An immediate which can be loaded with the il/ila/ilh/ilhu 22754 instructions. const_int is treated as a 64 bit value. 22755 22756 `c' 22757 An immediate for and/xor/or instructions. const_int is 22758 treated as a 64 bit value. 22759 22760 `d' 22761 An immediate for the `iohl' instruction. const_int is 22762 treated as a 64 bit value. 22763 22764 `f' 22765 An immediate which can be loaded with `fsmbi'. 22766 22767 `A' 22768 An immediate which can be loaded with the il/ila/ilh/ilhu 22769 instructions. const_int is treated as a 32 bit value. 22770 22771 `B' 22772 An immediate for most arithmetic instructions. const_int is 22773 treated as a 32 bit value. 22774 22775 `C' 22776 An immediate for and/xor/or instructions. const_int is 22777 treated as a 32 bit value. 22778 22779 `D' 22780 An immediate for the `iohl' instruction. const_int is 22781 treated as a 32 bit value. 22782 22783 `I' 22784 A constant in the range [-64, 63] for shift/rotate 22785 instructions. 22786 22787 `J' 22788 An unsigned 7-bit constant for conversion/nop/channel 22789 instructions. 22790 22791 `K' 22792 A signed 10-bit constant for most arithmetic instructions. 22793 22794 `M' 22795 A signed 16 bit immediate for `stop'. 22796 22797 `N' 22798 An unsigned 16-bit constant for `iohl' and `fsmbi'. 22799 22800 `O' 22801 An unsigned 7-bit constant whose 3 least significant bits are 22802 0. 22803 22804 `P' 22805 An unsigned 3-bit constant for 16-byte rotates and shifts 22806 22807 `R' 22808 Call operand, reg, for indirect calls 22809 22810 `S' 22811 Call operand, symbol, for relative calls. 22812 22813 `T' 22814 Call operand, const_int, for absolute calls. 22815 22816 `U' 22817 An immediate which can be loaded with the il/ila/ilh/ilhu 22818 instructions. const_int is sign extended to 128 bit. 22819 22820 `W' 22821 An immediate for shift and rotate instructions. const_int is 22822 treated as a 32 bit value. 22823 22824 `Y' 22825 An immediate for and/xor/or instructions. const_int is sign 22826 extended as a 128 bit. 22827 22828 `Z' 22829 An immediate for the `iohl' instruction. const_int is sign 22830 extended to 128 bit. 22831 22832 22833 _S/390 and zSeries--`config/s390/s390.h'_ 22834 22835 `a' 22836 Address register (general purpose register except r0) 22837 22838 `c' 22839 Condition code register 22840 22841 `d' 22842 Data register (arbitrary general purpose register) 22843 22844 `f' 22845 Floating-point register 22846 22847 `I' 22848 Unsigned 8-bit constant (0-255) 22849 22850 `J' 22851 Unsigned 12-bit constant (0-4095) 22852 22853 `K' 22854 Signed 16-bit constant (-32768-32767) 22855 22856 `L' 22857 Value appropriate as displacement. 22858 `(0..4095)' 22859 for short displacement 22860 22861 `(-524288..524287)' 22862 for long displacement 22863 22864 `M' 22865 Constant integer with a value of 0x7fffffff. 22866 22867 `N' 22868 Multiple letter constraint followed by 4 parameter letters. 22869 `0..9:' 22870 number of the part counting from most to least 22871 significant 22872 22873 `H,Q:' 22874 mode of the part 22875 22876 `D,S,H:' 22877 mode of the containing operand 22878 22879 `0,F:' 22880 value of the other parts (F--all bits set) 22881 The constraint matches if the specified part of a constant 22882 has a value different from its other parts. 22883 22884 `Q' 22885 Memory reference without index register and with short 22886 displacement. 22887 22888 `R' 22889 Memory reference with index register and short displacement. 22890 22891 `S' 22892 Memory reference without index register but with long 22893 displacement. 22894 22895 `T' 22896 Memory reference with index register and long displacement. 22897 22898 `U' 22899 Pointer with short displacement. 22900 22901 `W' 22902 Pointer with long displacement. 22903 22904 `Y' 22905 Shift count operand. 22906 22907 22908 _Score family--`config/score/score.h'_ 22909 22910 `d' 22911 Registers from r0 to r32. 22912 22913 `e' 22914 Registers from r0 to r16. 22915 22916 `t' 22917 r8--r11 or r22--r27 registers. 22918 22919 `h' 22920 hi register. 22921 22922 `l' 22923 lo register. 22924 22925 `x' 22926 hi + lo register. 22927 22928 `q' 22929 cnt register. 22930 22931 `y' 22932 lcb register. 22933 22934 `z' 22935 scb register. 22936 22937 `a' 22938 cnt + lcb + scb register. 22939 22940 `c' 22941 cr0--cr15 register. 22942 22943 `b' 22944 cp1 registers. 22945 22946 `f' 22947 cp2 registers. 22948 22949 `i' 22950 cp3 registers. 22951 22952 `j' 22953 cp1 + cp2 + cp3 registers. 22954 22955 `I' 22956 High 16-bit constant (32-bit constant with 16 LSBs zero). 22957 22958 `J' 22959 Unsigned 5 bit integer (in the range 0 to 31). 22960 22961 `K' 22962 Unsigned 16 bit integer (in the range 0 to 65535). 22963 22964 `L' 22965 Signed 16 bit integer (in the range -32768 to 32767). 22966 22967 `M' 22968 Unsigned 14 bit integer (in the range 0 to 16383). 22969 22970 `N' 22971 Signed 14 bit integer (in the range -8192 to 8191). 22972 22973 `Z' 22974 Any SYMBOL_REF. 22975 22976 _Xstormy16--`config/stormy16/stormy16.h'_ 22977 22978 `a' 22979 Register r0. 22980 22981 `b' 22982 Register r1. 22983 22984 `c' 22985 Register r2. 22986 22987 `d' 22988 Register r8. 22989 22990 `e' 22991 Registers r0 through r7. 22992 22993 `t' 22994 Registers r0 and r1. 22995 22996 `y' 22997 The carry register. 22998 22999 `z' 23000 Registers r8 and r9. 23001 23002 `I' 23003 A constant between 0 and 3 inclusive. 23004 23005 `J' 23006 A constant that has exactly one bit set. 23007 23008 `K' 23009 A constant that has exactly one bit clear. 23010 23011 `L' 23012 A constant between 0 and 255 inclusive. 23013 23014 `M' 23015 A constant between -255 and 0 inclusive. 23016 23017 `N' 23018 A constant between -3 and 0 inclusive. 23019 23020 `O' 23021 A constant between 1 and 4 inclusive. 23022 23023 `P' 23024 A constant between -4 and -1 inclusive. 23025 23026 `Q' 23027 A memory reference that is a stack push. 23028 23029 `R' 23030 A memory reference that is a stack pop. 23031 23032 `S' 23033 A memory reference that refers to a constant address of known 23034 value. 23035 23036 `T' 23037 The register indicated by Rx (not implemented yet). 23038 23039 `U' 23040 A constant that is not between 2 and 15 inclusive. 23041 23042 `Z' 23043 The constant 0. 23044 23045 23046 _Xtensa--`config/xtensa/constraints.md'_ 23047 23048 `a' 23049 General-purpose 32-bit register 23050 23051 `b' 23052 One-bit boolean register 23053 23054 `A' 23055 MAC16 40-bit accumulator register 23056 23057 `I' 23058 Signed 12-bit integer constant, for use in MOVI instructions 23059 23060 `J' 23061 Signed 8-bit integer constant, for use in ADDI instructions 23062 23063 `K' 23064 Integer constant valid for BccI instructions 23065 23066 `L' 23067 Unsigned constant valid for BccUI instructions 23068 23069 23070 23071 23072 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions 23073 23074 5.39 Controlling Names Used in Assembler Code 23075 ============================================= 23076 23077 You can specify the name to be used in the assembler code for a C 23078 function or variable by writing the `asm' (or `__asm__') keyword after 23079 the declarator as follows: 23080 23081 int foo asm ("myfoo") = 2; 23082 23083 This specifies that the name to be used for the variable `foo' in the 23084 assembler code should be `myfoo' rather than the usual `_foo'. 23085 23086 On systems where an underscore is normally prepended to the name of a C 23087 function or variable, this feature allows you to define names for the 23088 linker that do not start with an underscore. 23089 23090 It does not make sense to use this feature with a non-static local 23091 variable since such variables do not have assembler names. If you are 23092 trying to put the variable in a particular register, see *Note Explicit 23093 Reg Vars::. GCC presently accepts such code with a warning, but will 23094 probably be changed to issue an error, rather than a warning, in the 23095 future. 23096 23097 You cannot use `asm' in this way in a function _definition_; but you 23098 can get the same effect by writing a declaration for the function 23099 before its definition and putting `asm' there, like this: 23100 23101 extern func () asm ("FUNC"); 23102 23103 func (x, y) 23104 int x, y; 23105 /* ... */ 23106 23107 It is up to you to make sure that the assembler names you choose do not 23108 conflict with any other assembler symbols. Also, you must not use a 23109 register name; that would produce completely invalid assembler code. 23110 GCC does not as yet have the ability to store static variables in 23111 registers. Perhaps that will be added. 23112 23113 23114 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions 23115 23116 5.40 Variables in Specified Registers 23117 ===================================== 23118 23119 GNU C allows you to put a few global variables into specified hardware 23120 registers. You can also specify the register in which an ordinary 23121 register variable should be allocated. 23122 23123 * Global register variables reserve registers throughout the program. 23124 This may be useful in programs such as programming language 23125 interpreters which have a couple of global variables that are 23126 accessed very often. 23127 23128 * Local register variables in specific registers do not reserve the 23129 registers, except at the point where they are used as input or 23130 output operands in an `asm' statement and the `asm' statement 23131 itself is not deleted. The compiler's data flow analysis is 23132 capable of determining where the specified registers contain live 23133 values, and where they are available for other uses. Stores into 23134 local register variables may be deleted when they appear to be 23135 dead according to dataflow analysis. References to local register 23136 variables may be deleted or moved or simplified. 23137 23138 These local variables are sometimes convenient for use with the 23139 extended `asm' feature (*note Extended Asm::), if you want to 23140 write one output of the assembler instruction directly into a 23141 particular register. (This will work provided the register you 23142 specify fits the constraints specified for that operand in the 23143 `asm'.) 23144 23145 * Menu: 23146 23147 * Global Reg Vars:: 23148 * Local Reg Vars:: 23149 23150 23151 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars 23152 23153 5.40.1 Defining Global Register Variables 23154 ----------------------------------------- 23155 23156 You can define a global register variable in GNU C like this: 23157 23158 register int *foo asm ("a5"); 23159 23160 Here `a5' is the name of the register which should be used. Choose a 23161 register which is normally saved and restored by function calls on your 23162 machine, so that library routines will not clobber it. 23163 23164 Naturally the register name is cpu-dependent, so you would need to 23165 conditionalize your program according to cpu type. The register `a5' 23166 would be a good choice on a 68000 for a variable of pointer type. On 23167 machines with register windows, be sure to choose a "global" register 23168 that is not affected magically by the function call mechanism. 23169 23170 In addition, operating systems on one type of cpu may differ in how 23171 they name the registers; then you would need additional conditionals. 23172 For example, some 68000 operating systems call this register `%a5'. 23173 23174 Eventually there may be a way of asking the compiler to choose a 23175 register automatically, but first we need to figure out how it should 23176 choose and how to enable you to guide the choice. No solution is 23177 evident. 23178 23179 Defining a global register variable in a certain register reserves that 23180 register entirely for this use, at least within the current compilation. 23181 The register will not be allocated for any other purpose in the 23182 functions in the current compilation. The register will not be saved 23183 and restored by these functions. Stores into this register are never 23184 deleted even if they would appear to be dead, but references may be 23185 deleted or moved or simplified. 23186 23187 It is not safe to access the global register variables from signal 23188 handlers, or from more than one thread of control, because the system 23189 library routines may temporarily use the register for other things 23190 (unless you recompile them specially for the task at hand). 23191 23192 It is not safe for one function that uses a global register variable to 23193 call another such function `foo' by way of a third function `lose' that 23194 was compiled without knowledge of this variable (i.e. in a different 23195 source file in which the variable wasn't declared). This is because 23196 `lose' might save the register and put some other value there. For 23197 example, you can't expect a global register variable to be available in 23198 the comparison-function that you pass to `qsort', since `qsort' might 23199 have put something else in that register. (If you are prepared to 23200 recompile `qsort' with the same global register variable, you can solve 23201 this problem.) 23202 23203 If you want to recompile `qsort' or other source files which do not 23204 actually use your global register variable, so that they will not use 23205 that register for any other purpose, then it suffices to specify the 23206 compiler option `-ffixed-REG'. You need not actually add a global 23207 register declaration to their source code. 23208 23209 A function which can alter the value of a global register variable 23210 cannot safely be called from a function compiled without this variable, 23211 because it could clobber the value the caller expects to find there on 23212 return. Therefore, the function which is the entry point into the part 23213 of the program that uses the global register variable must explicitly 23214 save and restore the value which belongs to its caller. 23215 23216 On most machines, `longjmp' will restore to each global register 23217 variable the value it had at the time of the `setjmp'. On some 23218 machines, however, `longjmp' will not change the value of global 23219 register variables. To be portable, the function that called `setjmp' 23220 should make other arrangements to save the values of the global register 23221 variables, and to restore them in a `longjmp'. This way, the same 23222 thing will happen regardless of what `longjmp' does. 23223 23224 All global register variable declarations must precede all function 23225 definitions. If such a declaration could appear after function 23226 definitions, the declaration would be too late to prevent the register 23227 from being used for other purposes in the preceding functions. 23228 23229 Global register variables may not have initial values, because an 23230 executable file has no means to supply initial contents for a register. 23231 23232 On the SPARC, there are reports that g3 ... g7 are suitable registers, 23233 but certain library functions, such as `getwd', as well as the 23234 subroutines for division and remainder, modify g3 and g4. g1 and g2 23235 are local temporaries. 23236 23237 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of 23238 course, it will not do to use more than a few of those. 23239 23240 23241 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars 23242 23243 5.40.2 Specifying Registers for Local Variables 23244 ----------------------------------------------- 23245 23246 You can define a local register variable with a specified register like 23247 this: 23248 23249 register int *foo asm ("a5"); 23250 23251 Here `a5' is the name of the register which should be used. Note that 23252 this is the same syntax used for defining global register variables, 23253 but for a local variable it would appear within a function. 23254 23255 Naturally the register name is cpu-dependent, but this is not a 23256 problem, since specific registers are most often useful with explicit 23257 assembler instructions (*note Extended Asm::). Both of these things 23258 generally require that you conditionalize your program according to cpu 23259 type. 23260 23261 In addition, operating systems on one type of cpu may differ in how 23262 they name the registers; then you would need additional conditionals. 23263 For example, some 68000 operating systems call this register `%a5'. 23264 23265 Defining such a register variable does not reserve the register; it 23266 remains available for other uses in places where flow control determines 23267 the variable's value is not live. 23268 23269 This option does not guarantee that GCC will generate code that has 23270 this variable in the register you specify at all times. You may not 23271 code an explicit reference to this register in the _assembler 23272 instruction template_ part of an `asm' statement and assume it will 23273 always refer to this variable. However, using the variable as an `asm' 23274 _operand_ guarantees that the specified register is used for the 23275 operand. 23276 23277 Stores into local register variables may be deleted when they appear 23278 to be dead according to dataflow analysis. References to local 23279 register variables may be deleted or moved or simplified. 23280 23281 As for global register variables, it's recommended that you choose a 23282 register which is normally saved and restored by function calls on your 23283 machine, so that library routines will not clobber it. A common 23284 pitfall is to initialize multiple call-clobbered registers with 23285 arbitrary expressions, where a function call or library call for an 23286 arithmetic operator will overwrite a register value from a previous 23287 assignment, for example `r0' below: 23288 register int *p1 asm ("r0") = ...; 23289 register int *p2 asm ("r1") = ...; 23290 In those cases, a solution is to use a temporary variable for each 23291 arbitrary expression. *Note Example of asm with clobbered asm reg::. 23292 23293 23294 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions 23295 23296 5.41 Alternate Keywords 23297 ======================= 23298 23299 `-ansi' and the various `-std' options disable certain keywords. This 23300 causes trouble when you want to use GNU C extensions, or a 23301 general-purpose header file that should be usable by all programs, 23302 including ISO C programs. The keywords `asm', `typeof' and `inline' 23303 are not available in programs compiled with `-ansi' or `-std' (although 23304 `inline' can be used in a program compiled with `-std=c99'). The ISO 23305 C99 keyword `restrict' is only available when `-std=gnu99' (which will 23306 eventually be the default) or `-std=c99' (or the equivalent 23307 `-std=iso9899:1999') is used. 23308 23309 The way to solve these problems is to put `__' at the beginning and 23310 end of each problematical keyword. For example, use `__asm__' instead 23311 of `asm', and `__inline__' instead of `inline'. 23312 23313 Other C compilers won't accept these alternative keywords; if you want 23314 to compile with another compiler, you can define the alternate keywords 23315 as macros to replace them with the customary keywords. It looks like 23316 this: 23317 23318 #ifndef __GNUC__ 23319 #define __asm__ asm 23320 #endif 23321 23322 `-pedantic' and other options cause warnings for many GNU C extensions. 23323 You can prevent such warnings within one expression by writing 23324 `__extension__' before the expression. `__extension__' has no effect 23325 aside from this. 23326 23327 23328 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions 23329 23330 5.42 Incomplete `enum' Types 23331 ============================ 23332 23333 You can define an `enum' tag without specifying its possible values. 23334 This results in an incomplete type, much like what you get if you write 23335 `struct foo' without describing the elements. A later declaration 23336 which does specify the possible values completes the type. 23337 23338 You can't allocate variables or storage using the type while it is 23339 incomplete. However, you can work with pointers to that type. 23340 23341 This extension may not be very useful, but it makes the handling of 23342 `enum' more consistent with the way `struct' and `union' are handled. 23343 23344 This extension is not supported by GNU C++. 23345 23346 23347 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions 23348 23349 5.43 Function Names as Strings 23350 ============================== 23351 23352 GCC provides three magic variables which hold the name of the current 23353 function, as a string. The first of these is `__func__', which is part 23354 of the C99 standard: 23355 23356 The identifier `__func__' is implicitly declared by the translator as 23357 if, immediately following the opening brace of each function 23358 definition, the declaration 23359 23360 static const char __func__[] = "function-name"; 23361 23362 appeared, where function-name is the name of the lexically-enclosing 23363 function. This name is the unadorned name of the function. 23364 23365 `__FUNCTION__' is another name for `__func__'. Older versions of GCC 23366 recognize only this name. However, it is not standardized. For 23367 maximum portability, we recommend you use `__func__', but provide a 23368 fallback definition with the preprocessor: 23369 23370 #if __STDC_VERSION__ < 199901L 23371 # if __GNUC__ >= 2 23372 # define __func__ __FUNCTION__ 23373 # else 23374 # define __func__ "<unknown>" 23375 # endif 23376 #endif 23377 23378 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'. 23379 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of 23380 the function as well as its bare name. For example, this program: 23381 23382 extern "C" { 23383 extern int printf (char *, ...); 23384 } 23385 23386 class a { 23387 public: 23388 void sub (int i) 23389 { 23390 printf ("__FUNCTION__ = %s\n", __FUNCTION__); 23391 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__); 23392 } 23393 }; 23394 23395 int 23396 main (void) 23397 { 23398 a ax; 23399 ax.sub (0); 23400 return 0; 23401 } 23402 23403 gives this output: 23404 23405 __FUNCTION__ = sub 23406 __PRETTY_FUNCTION__ = void a::sub(int) 23407 23408 These identifiers are not preprocessor macros. In GCC 3.3 and 23409 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were 23410 treated as string literals; they could be used to initialize `char' 23411 arrays, and they could be concatenated with other string literals. GCC 23412 3.4 and later treat them as variables, like `__func__'. In C++, 23413 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables. 23414 23415 23416 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions 23417 23418 5.44 Getting the Return or Frame Address of a Function 23419 ====================================================== 23420 23421 These functions may be used to get information about the callers of a 23422 function. 23423 23424 -- Built-in Function: void * __builtin_return_address (unsigned int 23425 LEVEL) 23426 This function returns the return address of the current function, 23427 or of one of its callers. The LEVEL argument is number of frames 23428 to scan up the call stack. A value of `0' yields the return 23429 address of the current function, a value of `1' yields the return 23430 address of the caller of the current function, and so forth. When 23431 inlining the expected behavior is that the function will return 23432 the address of the function that will be returned to. To work 23433 around this behavior use the `noinline' function attribute. 23434 23435 The LEVEL argument must be a constant integer. 23436 23437 On some machines it may be impossible to determine the return 23438 address of any function other than the current one; in such cases, 23439 or when the top of the stack has been reached, this function will 23440 return `0' or a random value. In addition, 23441 `__builtin_frame_address' may be used to determine if the top of 23442 the stack has been reached. 23443 23444 This function should only be used with a nonzero argument for 23445 debugging purposes. 23446 23447 -- Built-in Function: void * __builtin_frame_address (unsigned int 23448 LEVEL) 23449 This function is similar to `__builtin_return_address', but it 23450 returns the address of the function frame rather than the return 23451 address of the function. Calling `__builtin_frame_address' with a 23452 value of `0' yields the frame address of the current function, a 23453 value of `1' yields the frame address of the caller of the current 23454 function, and so forth. 23455 23456 The frame is the area on the stack which holds local variables and 23457 saved registers. The frame address is normally the address of the 23458 first word pushed on to the stack by the function. However, the 23459 exact definition depends upon the processor and the calling 23460 convention. If the processor has a dedicated frame pointer 23461 register, and the function has a frame, then 23462 `__builtin_frame_address' will return the value of the frame 23463 pointer register. 23464 23465 On some machines it may be impossible to determine the frame 23466 address of any function other than the current one; in such cases, 23467 or when the top of the stack has been reached, this function will 23468 return `0' if the first frame pointer is properly initialized by 23469 the startup code. 23470 23471 This function should only be used with a nonzero argument for 23472 debugging purposes. 23473 23474 23475 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions 23476 23477 5.45 Using vector instructions through built-in functions 23478 ========================================================= 23479 23480 On some targets, the instruction set contains SIMD vector instructions 23481 that operate on multiple values contained in one large register at the 23482 same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions 23483 can be used this way. 23484 23485 The first step in using these extensions is to provide the necessary 23486 data types. This should be done using an appropriate `typedef': 23487 23488 typedef int v4si __attribute__ ((vector_size (16))); 23489 23490 The `int' type specifies the base type, while the attribute specifies 23491 the vector size for the variable, measured in bytes. For example, the 23492 declaration above causes the compiler to set the mode for the `v4si' 23493 type to be 16 bytes wide and divided into `int' sized units. For a 23494 32-bit `int' this means a vector of 4 units of 4 bytes, and the 23495 corresponding mode of `foo' will be V4SI. 23496 23497 The `vector_size' attribute is only applicable to integral and float 23498 scalars, although arrays, pointers, and function return values are 23499 allowed in conjunction with this construct. 23500 23501 All the basic integer types can be used as base types, both as signed 23502 and as unsigned: `char', `short', `int', `long', `long long'. In 23503 addition, `float' and `double' can be used to build floating-point 23504 vector types. 23505 23506 Specifying a combination that is not valid for the current architecture 23507 will cause GCC to synthesize the instructions using a narrower mode. 23508 For example, if you specify a variable of type `V4SI' and your 23509 architecture does not allow for this specific SIMD type, GCC will 23510 produce code that uses 4 `SIs'. 23511 23512 The types defined in this manner can be used with a subset of normal C 23513 operations. Currently, GCC will allow using the following operators on 23514 these types: `+, -, *, /, unary minus, ^, |, &, ~'. 23515 23516 The operations behave like C++ `valarrays'. Addition is defined as 23517 the addition of the corresponding elements of the operands. For 23518 example, in the code below, each of the 4 elements in A will be added 23519 to the corresponding 4 elements in B and the resulting vector will be 23520 stored in C. 23521 23522 typedef int v4si __attribute__ ((vector_size (16))); 23523 23524 v4si a, b, c; 23525 23526 c = a + b; 23527 23528 Subtraction, multiplication, division, and the logical operations 23529 operate in a similar manner. Likewise, the result of using the unary 23530 minus or complement operators on a vector type is a vector whose 23531 elements are the negative or complemented values of the corresponding 23532 elements in the operand. 23533 23534 You can declare variables and use them in function calls and returns, 23535 as well as in assignments and some casts. You can specify a vector 23536 type as a return type for a function. Vector types can also be used as 23537 function arguments. It is possible to cast from one vector type to 23538 another, provided they are of the same size (in fact, you can also cast 23539 vectors to and from other datatypes of the same size). 23540 23541 You cannot operate between vectors of different lengths or different 23542 signedness without a cast. 23543 23544 A port that supports hardware vector operations, usually provides a set 23545 of built-in functions that can be used to operate on vectors. For 23546 example, a function to add two vectors and multiply the result by a 23547 third could look like this: 23548 23549 v4si f (v4si a, v4si b, v4si c) 23550 { 23551 v4si tmp = __builtin_addv4si (a, b); 23552 return __builtin_mulv4si (tmp, c); 23553 } 23554 23555 23556 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions 23557 23558 5.46 Offsetof 23559 ============= 23560 23561 GCC implements for both C and C++ a syntactic extension to implement 23562 the `offsetof' macro. 23563 23564 primary: 23565 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")" 23566 23567 offsetof_member_designator: 23568 `identifier' 23569 | offsetof_member_designator "." `identifier' 23570 | offsetof_member_designator "[" `expr' "]" 23571 23572 This extension is sufficient such that 23573 23574 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 23575 23576 is a suitable definition of the `offsetof' macro. In C++, TYPE may be 23577 dependent. In either case, MEMBER may consist of a single identifier, 23578 or a sequence of member accesses and array references. 23579 23580 23581 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions 23582 23583 5.47 Built-in functions for atomic memory access 23584 ================================================ 23585 23586 The following builtins are intended to be compatible with those 23587 described in the `Intel Itanium Processor-specific Application Binary 23588 Interface', section 7.4. As such, they depart from the normal GCC 23589 practice of using the "__builtin_" prefix, and further that they are 23590 overloaded such that they work on multiple types. 23591 23592 The definition given in the Intel documentation allows only for the 23593 use of the types `int', `long', `long long' as well as their unsigned 23594 counterparts. GCC will allow any integral scalar or pointer type that 23595 is 1, 2, 4 or 8 bytes in length. 23596 23597 Not all operations are supported by all target processors. If a 23598 particular operation cannot be implemented on the target processor, a 23599 warning will be generated and a call an external function will be 23600 generated. The external function will carry the same name as the 23601 builtin, with an additional suffix `_N' where N is the size of the data 23602 type. 23603 23604 In most cases, these builtins are considered a "full barrier". That 23605 is, no memory operand will be moved across the operation, either 23606 forward or backward. Further, instructions will be issued as necessary 23607 to prevent the processor from speculating loads across the operation 23608 and from queuing stores after the operation. 23609 23610 All of the routines are described in the Intel documentation to take 23611 "an optional list of variables protected by the memory barrier". It's 23612 not clear what is meant by that; it could mean that _only_ the 23613 following variables are protected, or it could mean that these variables 23614 should in addition be protected. At present GCC ignores this list and 23615 protects all variables which are globally accessible. If in the future 23616 we make some use of this list, an empty list will continue to mean all 23617 globally accessible variables. 23618 23619 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)' 23620 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)' 23621 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)' 23622 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)' 23623 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)' 23624 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)' 23625 These builtins perform the operation suggested by the name, and 23626 returns the value that had previously been in memory. That is, 23627 23628 { tmp = *ptr; *ptr OP= value; return tmp; } 23629 { tmp = *ptr; *ptr = ~(tmp & value); return tmp; } // nand 23630 23631 _Note:_ GCC 4.4 and later implement `__sync_fetch_and_nand' 23632 builtin as `*ptr = ~(tmp & value)' instead of `*ptr = ~tmp & 23633 value'. 23634 23635 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)' 23636 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)' 23637 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)' 23638 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)' 23639 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)' 23640 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)' 23641 These builtins perform the operation suggested by the name, and 23642 return the new value. That is, 23643 23644 { *ptr OP= value; return *ptr; } 23645 { *ptr = ~(*ptr & value); return *ptr; } // nand 23646 23647 _Note:_ GCC 4.4 and later implement `__sync_nand_and_fetch' 23648 builtin as `*ptr = ~(*ptr & value)' instead of `*ptr = ~*ptr & 23649 value'. 23650 23651 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 23652 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)' 23653 These builtins perform an atomic compare and swap. That is, if 23654 the current value of `*PTR' is OLDVAL, then write NEWVAL into 23655 `*PTR'. 23656 23657 The "bool" version returns true if the comparison is successful and 23658 NEWVAL was written. The "val" version returns the contents of 23659 `*PTR' before the operation. 23660 23661 `__sync_synchronize (...)' 23662 This builtin issues a full memory barrier. 23663 23664 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)' 23665 This builtin, as described by Intel, is not a traditional 23666 test-and-set operation, but rather an atomic exchange operation. 23667 It writes VALUE into `*PTR', and returns the previous contents of 23668 `*PTR'. 23669 23670 Many targets have only minimal support for such locks, and do not 23671 support a full exchange operation. In this case, a target may 23672 support reduced functionality here by which the _only_ valid value 23673 to store is the immediate constant 1. The exact value actually 23674 stored in `*PTR' is implementation defined. 23675 23676 This builtin is not a full barrier, but rather an "acquire 23677 barrier". This means that references after the builtin cannot 23678 move to (or be speculated to) before the builtin, but previous 23679 memory stores may not be globally visible yet, and previous memory 23680 loads may not yet be satisfied. 23681 23682 `void __sync_lock_release (TYPE *ptr, ...)' 23683 This builtin releases the lock acquired by 23684 `__sync_lock_test_and_set'. Normally this means writing the 23685 constant 0 to `*PTR'. 23686 23687 This builtin is not a full barrier, but rather a "release barrier". 23688 This means that all previous memory stores are globally visible, 23689 and all previous memory loads have been satisfied, but following 23690 memory reads are not prevented from being speculated to before the 23691 barrier. 23692 23693 23694 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions 23695 23696 5.48 Object Size Checking Builtins 23697 ================================== 23698 23699 GCC implements a limited buffer overflow protection mechanism that can 23700 prevent some buffer overflow attacks. 23701 23702 -- Built-in Function: size_t __builtin_object_size (void * PTR, int 23703 TYPE) 23704 is a built-in construct that returns a constant number of bytes 23705 from PTR to the end of the object PTR pointer points to (if known 23706 at compile time). `__builtin_object_size' never evaluates its 23707 arguments for side-effects. If there are any side-effects in 23708 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0' 23709 for TYPE 2 or 3. If there are multiple objects PTR can point to 23710 and all of them are known at compile time, the returned number is 23711 the maximum of remaining byte counts in those objects if TYPE & 2 23712 is 0 and minimum if nonzero. If it is not possible to determine 23713 which objects PTR points to at compile time, 23714 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or 23715 1 and `(size_t) 0' for TYPE 2 or 3. 23716 23717 TYPE is an integer constant from 0 to 3. If the least significant 23718 bit is clear, objects are whole variables, if it is set, a closest 23719 surrounding subobject is considered the object a pointer points to. 23720 The second bit determines if maximum or minimum of remaining bytes 23721 is computed. 23722 23723 struct V { char buf1[10]; int b; char buf2[10]; } var; 23724 char *p = &var.buf1[1], *q = &var.b; 23725 23726 /* Here the object p points to is var. */ 23727 assert (__builtin_object_size (p, 0) == sizeof (var) - 1); 23728 /* The subobject p points to is var.buf1. */ 23729 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1); 23730 /* The object q points to is var. */ 23731 assert (__builtin_object_size (q, 0) 23732 == (char *) (&var + 1) - (char *) &var.b); 23733 /* The subobject q points to is var.b. */ 23734 assert (__builtin_object_size (q, 1) == sizeof (var.b)); 23735 23736 There are built-in functions added for many common string operation 23737 functions, e.g., for `memcpy' `__builtin___memcpy_chk' built-in is 23738 provided. This built-in has an additional last argument, which is the 23739 number of bytes remaining in object the DEST argument points to or 23740 `(size_t) -1' if the size is not known. 23741 23742 The built-in functions are optimized into the normal string functions 23743 like `memcpy' if the last argument is `(size_t) -1' or if it is known 23744 at compile time that the destination object will not be overflown. If 23745 the compiler can determine at compile time the object will be always 23746 overflown, it issues a warning. 23747 23748 The intended use can be e.g. 23749 23750 #undef memcpy 23751 #define bos0(dest) __builtin_object_size (dest, 0) 23752 #define memcpy(dest, src, n) \ 23753 __builtin___memcpy_chk (dest, src, n, bos0 (dest)) 23754 23755 char *volatile p; 23756 char buf[10]; 23757 /* It is unknown what object p points to, so this is optimized 23758 into plain memcpy - no checking is possible. */ 23759 memcpy (p, "abcde", n); 23760 /* Destination is known and length too. It is known at compile 23761 time there will be no overflow. */ 23762 memcpy (&buf[5], "abcde", 5); 23763 /* Destination is known, but the length is not known at compile time. 23764 This will result in __memcpy_chk call that can check for overflow 23765 at runtime. */ 23766 memcpy (&buf[5], "abcde", n); 23767 /* Destination is known and it is known at compile time there will 23768 be overflow. There will be a warning and __memcpy_chk call that 23769 will abort the program at runtime. */ 23770 memcpy (&buf[6], "abcde", 5); 23771 23772 Such built-in functions are provided for `memcpy', `mempcpy', 23773 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and 23774 `strncat'. 23775 23776 There are also checking built-in functions for formatted output 23777 functions. 23778 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...); 23779 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os, 23780 const char *fmt, ...); 23781 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt, 23782 va_list ap); 23783 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os, 23784 const char *fmt, va_list ap); 23785 23786 The added FLAG argument is passed unchanged to `__sprintf_chk' etc. 23787 functions and can contain implementation specific flags on what 23788 additional security measures the checking function might take, such as 23789 handling `%n' differently. 23790 23791 The OS argument is the object size S points to, like in the other 23792 built-in functions. There is a small difference in the behavior 23793 though, if OS is `(size_t) -1', the built-in functions are optimized 23794 into the non-checking functions only if FLAG is 0, otherwise the 23795 checking function is called with OS argument set to `(size_t) -1'. 23796 23797 In addition to this, there are checking built-in functions 23798 `__builtin___printf_chk', `__builtin___vprintf_chk', 23799 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have 23800 just one additional argument, FLAG, right before format string FMT. If 23801 the compiler is able to optimize them to `fputc' etc. functions, it 23802 will, otherwise the checking function should be called and the FLAG 23803 argument passed to it. 23804 23805 23806 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions 23807 23808 5.49 Other built-in functions provided by GCC 23809 ============================================= 23810 23811 GCC provides a large number of built-in functions other than the ones 23812 mentioned above. Some of these are for internal use in the processing 23813 of exceptions or variable-length argument lists and will not be 23814 documented here because they may change from time to time; we do not 23815 recommend general use of these functions. 23816 23817 The remaining functions are provided for optimization purposes. 23818 23819 GCC includes built-in versions of many of the functions in the standard 23820 C library. The versions prefixed with `__builtin_' will always be 23821 treated as having the same meaning as the C library function even if you 23822 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of 23823 these functions are only optimized in certain cases; if they are not 23824 optimized in a particular case, a call to the library function will be 23825 emitted. 23826 23827 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the 23828 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext', 23829 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl', 23830 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal', 23831 `gamma', `gammaf_r', `gammal_r', `gamma_r', `gettext', `index', 23832 `isascii', `j0f', `j0l', `j0', `j1f', `j1l', `j1', `jnf', `jnl', `jn', 23833 `lgammaf_r', `lgammal_r', `lgamma_r', `mempcpy', `pow10f', `pow10l', 23834 `pow10', `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', 23835 `signbit', `signbitf', `signbitl', `signbitd32', `signbitd64', 23836 `signbitd128', `significandf', `significandl', `significand', `sincosf', 23837 `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp', `strdup', 23838 `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l', `y0', 23839 `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in 23840 functions. All these functions have corresponding versions prefixed 23841 with `__builtin_', which may be used even in strict C89 mode. 23842 23843 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf', 23844 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl', 23845 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos', 23846 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh', 23847 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl', 23848 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl', 23849 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl', 23850 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj', 23851 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow', 23852 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf', 23853 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl', 23854 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan', 23855 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l', 23856 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf', 23857 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin', 23858 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs', 23859 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs', 23860 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround', 23861 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', 23862 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', 23863 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', 23864 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward', 23865 `remainderf', `remainderl', `remainder', `remquof', `remquol', 23866 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round', 23867 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn', 23868 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc', 23869 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in 23870 functions except in strict ISO C90 mode (`-ansi' or `-std=c89'). 23871 23872 There are also built-in versions of the ISO C99 functions `acosf', 23873 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl', 23874 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl', 23875 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf', 23876 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl', 23877 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl', 23878 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are 23879 recognized in any mode since ISO C90 reserves these names for the 23880 purpose to which ISO C99 puts them. All these functions have 23881 corresponding versions prefixed with `__builtin_'. 23882 23883 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit', 23884 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper', 23885 `iswxdigit', `towlower' and `towupper' are handled as built-in functions 23886 except in strict ISO C90 mode (`-ansi' or `-std=c89'). 23887 23888 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan', 23889 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod', 23890 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl', 23891 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace', 23892 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10', 23893 `log', `malloc', `memchr', `memcmp', `memcpy', `memset', `modf', `pow', 23894 `printf', `putchar', `puts', `scanf', `sinh', `sin', `snprintf', 23895 `sprintf', `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', 23896 `strcspn', `strlen', `strncat', `strncmp', `strncpy', `strpbrk', 23897 `strrchr', `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and 23898 `vsprintf' are all recognized as built-in functions unless 23899 `-fno-builtin' is specified (or `-fno-builtin-FUNCTION' is specified 23900 for an individual function). All of these functions have corresponding 23901 versions prefixed with `__builtin_'. 23902 23903 GCC provides built-in versions of the ISO C99 floating point comparison 23904 macros that avoid raising exceptions for unordered operands. They have 23905 the same names as the standard macros ( `isgreater', `isgreaterequal', 23906 `isless', `islessequal', `islessgreater', and `isunordered') , with 23907 `__builtin_' prefixed. We intend for a library implementor to be able 23908 to simply `#define' each standard macro to its built-in equivalent. In 23909 the same fashion, GCC provides `fpclassify', `isfinite', `isinf_sign' 23910 and `isnormal' built-ins used with `__builtin_' prefixed. The `isinf' 23911 and `isnan' builtins appear both with and without the `__builtin_' 23912 prefix. 23913 23914 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2) 23915 You can use the built-in function `__builtin_types_compatible_p' to 23916 determine whether two types are the same. 23917 23918 This built-in function returns 1 if the unqualified versions of the 23919 types TYPE1 and TYPE2 (which are types, not expressions) are 23920 compatible, 0 otherwise. The result of this built-in function can 23921 be used in integer constant expressions. 23922 23923 This built-in function ignores top level qualifiers (e.g., `const', 23924 `volatile'). For example, `int' is equivalent to `const int'. 23925 23926 The type `int[]' and `int[5]' are compatible. On the other hand, 23927 `int' and `char *' are not compatible, even if the size of their 23928 types, on the particular architecture are the same. Also, the 23929 amount of pointer indirection is taken into account when 23930 determining similarity. Consequently, `short *' is not similar to 23931 `short **'. Furthermore, two types that are typedefed are 23932 considered compatible if their underlying types are compatible. 23933 23934 An `enum' type is not considered to be compatible with another 23935 `enum' type even if both are compatible with the same integer 23936 type; this is what the C standard specifies. For example, `enum 23937 {foo, bar}' is not similar to `enum {hot, dog}'. 23938 23939 You would typically use this function in code whose execution 23940 varies depending on the arguments' types. For example: 23941 23942 #define foo(x) \ 23943 ({ \ 23944 typeof (x) tmp = (x); \ 23945 if (__builtin_types_compatible_p (typeof (x), long double)) \ 23946 tmp = foo_long_double (tmp); \ 23947 else if (__builtin_types_compatible_p (typeof (x), double)) \ 23948 tmp = foo_double (tmp); \ 23949 else if (__builtin_types_compatible_p (typeof (x), float)) \ 23950 tmp = foo_float (tmp); \ 23951 else \ 23952 abort (); \ 23953 tmp; \ 23954 }) 23955 23956 _Note:_ This construct is only available for C. 23957 23958 23959 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, 23960 EXP2) 23961 You can use the built-in function `__builtin_choose_expr' to 23962 evaluate code depending on the value of a constant expression. 23963 This built-in function returns EXP1 if CONST_EXP, which is a 23964 constant expression that must be able to be determined at compile 23965 time, is nonzero. Otherwise it returns 0. 23966 23967 This built-in function is analogous to the `? :' operator in C, 23968 except that the expression returned has its type unaltered by 23969 promotion rules. Also, the built-in function does not evaluate 23970 the expression that was not chosen. For example, if CONST_EXP 23971 evaluates to true, EXP2 is not evaluated even if it has 23972 side-effects. 23973 23974 This built-in function can return an lvalue if the chosen argument 23975 is an lvalue. 23976 23977 If EXP1 is returned, the return type is the same as EXP1's type. 23978 Similarly, if EXP2 is returned, its return type is the same as 23979 EXP2. 23980 23981 Example: 23982 23983 #define foo(x) \ 23984 __builtin_choose_expr ( \ 23985 __builtin_types_compatible_p (typeof (x), double), \ 23986 foo_double (x), \ 23987 __builtin_choose_expr ( \ 23988 __builtin_types_compatible_p (typeof (x), float), \ 23989 foo_float (x), \ 23990 /* The void expression results in a compile-time error \ 23991 when assigning the result to something. */ \ 23992 (void)0)) 23993 23994 _Note:_ This construct is only available for C. Furthermore, the 23995 unused expression (EXP1 or EXP2 depending on the value of 23996 CONST_EXP) may still generate syntax errors. This may change in 23997 future revisions. 23998 23999 24000 -- Built-in Function: int __builtin_constant_p (EXP) 24001 You can use the built-in function `__builtin_constant_p' to 24002 determine if a value is known to be constant at compile-time and 24003 hence that GCC can perform constant-folding on expressions 24004 involving that value. The argument of the function is the value 24005 to test. The function returns the integer 1 if the argument is 24006 known to be a compile-time constant and 0 if it is not known to be 24007 a compile-time constant. A return of 0 does not indicate that the 24008 value is _not_ a constant, but merely that GCC cannot prove it is 24009 a constant with the specified value of the `-O' option. 24010 24011 You would typically use this function in an embedded application 24012 where memory was a critical resource. If you have some complex 24013 calculation, you may want it to be folded if it involves 24014 constants, but need to call a function if it does not. For 24015 example: 24016 24017 #define Scale_Value(X) \ 24018 (__builtin_constant_p (X) \ 24019 ? ((X) * SCALE + OFFSET) : Scale (X)) 24020 24021 You may use this built-in function in either a macro or an inline 24022 function. However, if you use it in an inlined function and pass 24023 an argument of the function as the argument to the built-in, GCC 24024 will never return 1 when you call the inline function with a 24025 string constant or compound literal (*note Compound Literals::) 24026 and will not return 1 when you pass a constant numeric value to 24027 the inline function unless you specify the `-O' option. 24028 24029 You may also use `__builtin_constant_p' in initializers for static 24030 data. For instance, you can write 24031 24032 static const int table[] = { 24033 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1, 24034 /* ... */ 24035 }; 24036 24037 This is an acceptable initializer even if EXPRESSION is not a 24038 constant expression. GCC must be more conservative about 24039 evaluating the built-in in this case, because it has no 24040 opportunity to perform optimization. 24041 24042 Previous versions of GCC did not accept this built-in in data 24043 initializers. The earliest version where it is completely safe is 24044 3.0.1. 24045 24046 -- Built-in Function: long __builtin_expect (long EXP, long C) 24047 You may use `__builtin_expect' to provide the compiler with branch 24048 prediction information. In general, you should prefer to use 24049 actual profile feedback for this (`-fprofile-arcs'), as 24050 programmers are notoriously bad at predicting how their programs 24051 actually perform. However, there are applications in which this 24052 data is hard to collect. 24053 24054 The return value is the value of EXP, which should be an integral 24055 expression. The semantics of the built-in are that it is expected 24056 that EXP == C. For example: 24057 24058 if (__builtin_expect (x, 0)) 24059 foo (); 24060 24061 would indicate that we do not expect to call `foo', since we 24062 expect `x' to be zero. Since you are limited to integral 24063 expressions for EXP, you should use constructions such as 24064 24065 if (__builtin_expect (ptr != NULL, 1)) 24066 error (); 24067 24068 when testing pointer or floating-point values. 24069 24070 -- Built-in Function: void __builtin_trap (void) 24071 This function causes the program to exit abnormally. GCC 24072 implements this function by using a target-dependent mechanism 24073 (such as intentionally executing an illegal instruction) or by 24074 calling `abort'. The mechanism used may vary from release to 24075 release so you should not rely on any particular implementation. 24076 24077 -- Built-in Function: void __builtin___clear_cache (char *BEGIN, char 24078 *END) 24079 This function is used to flush the processor's instruction cache 24080 for the region of memory between BEGIN inclusive and END 24081 exclusive. Some targets require that the instruction cache be 24082 flushed, after modifying memory containing code, in order to obtain 24083 deterministic behavior. 24084 24085 If the target does not require instruction cache flushes, 24086 `__builtin___clear_cache' has no effect. Otherwise either 24087 instructions are emitted in-line to clear the instruction cache or 24088 a call to the `__clear_cache' function in libgcc is made. 24089 24090 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...) 24091 This function is used to minimize cache-miss latency by moving 24092 data into a cache before it is accessed. You can insert calls to 24093 `__builtin_prefetch' into code for which you know addresses of 24094 data in memory that is likely to be accessed soon. If the target 24095 supports them, data prefetch instructions will be generated. If 24096 the prefetch is done early enough before the access then the data 24097 will be in the cache by the time it is accessed. 24098 24099 The value of ADDR is the address of the memory to prefetch. There 24100 are two optional arguments, RW and LOCALITY. The value of RW is a 24101 compile-time constant one or zero; one means that the prefetch is 24102 preparing for a write to the memory address and zero, the default, 24103 means that the prefetch is preparing for a read. The value 24104 LOCALITY must be a compile-time constant integer between zero and 24105 three. A value of zero means that the data has no temporal 24106 locality, so it need not be left in the cache after the access. A 24107 value of three means that the data has a high degree of temporal 24108 locality and should be left in all levels of cache possible. 24109 Values of one and two mean, respectively, a low or moderate degree 24110 of temporal locality. The default is three. 24111 24112 for (i = 0; i < n; i++) 24113 { 24114 a[i] = a[i] + b[i]; 24115 __builtin_prefetch (&a[i+j], 1, 1); 24116 __builtin_prefetch (&b[i+j], 0, 1); 24117 /* ... */ 24118 } 24119 24120 Data prefetch does not generate faults if ADDR is invalid, but the 24121 address expression itself must be valid. For example, a prefetch 24122 of `p->next' will not fault if `p->next' is not a valid address, 24123 but evaluation will fault if `p' is not a valid address. 24124 24125 If the target does not support data prefetch, the address 24126 expression is evaluated if it includes side effects but no other 24127 code is generated and GCC does not issue a warning. 24128 24129 -- Built-in Function: double __builtin_huge_val (void) 24130 Returns a positive infinity, if supported by the floating-point 24131 format, else `DBL_MAX'. This function is suitable for 24132 implementing the ISO C macro `HUGE_VAL'. 24133 24134 -- Built-in Function: float __builtin_huge_valf (void) 24135 Similar to `__builtin_huge_val', except the return type is `float'. 24136 24137 -- Built-in Function: long double __builtin_huge_vall (void) 24138 Similar to `__builtin_huge_val', except the return type is `long 24139 double'. 24140 24141 -- Built-in Function: int __builtin_fpclassify (int, int, int, int, 24142 int, ...) 24143 This built-in implements the C99 fpclassify functionality. The 24144 first five int arguments should be the target library's notion of 24145 the possible FP classes and are used for return values. They must 24146 be constant values and they must appear in this order: `FP_NAN', 24147 `FP_INFINITE', `FP_NORMAL', `FP_SUBNORMAL' and `FP_ZERO'. The 24148 ellipsis is for exactly one floating point value to classify. GCC 24149 treats the last argument as type-generic, which means it does not 24150 do default promotion from float to double. 24151 24152 -- Built-in Function: double __builtin_inf (void) 24153 Similar to `__builtin_huge_val', except a warning is generated if 24154 the target floating-point format does not support infinities. 24155 24156 -- Built-in Function: _Decimal32 __builtin_infd32 (void) 24157 Similar to `__builtin_inf', except the return type is `_Decimal32'. 24158 24159 -- Built-in Function: _Decimal64 __builtin_infd64 (void) 24160 Similar to `__builtin_inf', except the return type is `_Decimal64'. 24161 24162 -- Built-in Function: _Decimal128 __builtin_infd128 (void) 24163 Similar to `__builtin_inf', except the return type is 24164 `_Decimal128'. 24165 24166 -- Built-in Function: float __builtin_inff (void) 24167 Similar to `__builtin_inf', except the return type is `float'. 24168 This function is suitable for implementing the ISO C99 macro 24169 `INFINITY'. 24170 24171 -- Built-in Function: long double __builtin_infl (void) 24172 Similar to `__builtin_inf', except the return type is `long 24173 double'. 24174 24175 -- Built-in Function: int __builtin_isinf_sign (...) 24176 Similar to `isinf', except the return value will be negative for 24177 an argument of `-Inf'. Note while the parameter list is an 24178 ellipsis, this function only accepts exactly one floating point 24179 argument. GCC treats this parameter as type-generic, which means 24180 it does not do default promotion from float to double. 24181 24182 -- Built-in Function: double __builtin_nan (const char *str) 24183 This is an implementation of the ISO C99 function `nan'. 24184 24185 Since ISO C99 defines this function in terms of `strtod', which we 24186 do not implement, a description of the parsing is in order. The 24187 string is parsed as by `strtol'; that is, the base is recognized by 24188 leading `0' or `0x' prefixes. The number parsed is placed in the 24189 significand such that the least significant bit of the number is 24190 at the least significant bit of the significand. The number is 24191 truncated to fit the significand field provided. The significand 24192 is forced to be a quiet NaN. 24193 24194 This function, if given a string literal all of which would have 24195 been consumed by strtol, is evaluated early enough that it is 24196 considered a compile-time constant. 24197 24198 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str) 24199 Similar to `__builtin_nan', except the return type is `_Decimal32'. 24200 24201 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str) 24202 Similar to `__builtin_nan', except the return type is `_Decimal64'. 24203 24204 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str) 24205 Similar to `__builtin_nan', except the return type is 24206 `_Decimal128'. 24207 24208 -- Built-in Function: float __builtin_nanf (const char *str) 24209 Similar to `__builtin_nan', except the return type is `float'. 24210 24211 -- Built-in Function: long double __builtin_nanl (const char *str) 24212 Similar to `__builtin_nan', except the return type is `long 24213 double'. 24214 24215 -- Built-in Function: double __builtin_nans (const char *str) 24216 Similar to `__builtin_nan', except the significand is forced to be 24217 a signaling NaN. The `nans' function is proposed by WG14 N965. 24218 24219 -- Built-in Function: float __builtin_nansf (const char *str) 24220 Similar to `__builtin_nans', except the return type is `float'. 24221 24222 -- Built-in Function: long double __builtin_nansl (const char *str) 24223 Similar to `__builtin_nans', except the return type is `long 24224 double'. 24225 24226 -- Built-in Function: int __builtin_ffs (unsigned int x) 24227 Returns one plus the index of the least significant 1-bit of X, or 24228 if X is zero, returns zero. 24229 24230 -- Built-in Function: int __builtin_clz (unsigned int x) 24231 Returns the number of leading 0-bits in X, starting at the most 24232 significant bit position. If X is 0, the result is undefined. 24233 24234 -- Built-in Function: int __builtin_ctz (unsigned int x) 24235 Returns the number of trailing 0-bits in X, starting at the least 24236 significant bit position. If X is 0, the result is undefined. 24237 24238 -- Built-in Function: int __builtin_popcount (unsigned int x) 24239 Returns the number of 1-bits in X. 24240 24241 -- Built-in Function: int __builtin_parity (unsigned int x) 24242 Returns the parity of X, i.e. the number of 1-bits in X modulo 2. 24243 24244 -- Built-in Function: int __builtin_ffsl (unsigned long) 24245 Similar to `__builtin_ffs', except the argument type is `unsigned 24246 long'. 24247 24248 -- Built-in Function: int __builtin_clzl (unsigned long) 24249 Similar to `__builtin_clz', except the argument type is `unsigned 24250 long'. 24251 24252 -- Built-in Function: int __builtin_ctzl (unsigned long) 24253 Similar to `__builtin_ctz', except the argument type is `unsigned 24254 long'. 24255 24256 -- Built-in Function: int __builtin_popcountl (unsigned long) 24257 Similar to `__builtin_popcount', except the argument type is 24258 `unsigned long'. 24259 24260 -- Built-in Function: int __builtin_parityl (unsigned long) 24261 Similar to `__builtin_parity', except the argument type is 24262 `unsigned long'. 24263 24264 -- Built-in Function: int __builtin_ffsll (unsigned long long) 24265 Similar to `__builtin_ffs', except the argument type is `unsigned 24266 long long'. 24267 24268 -- Built-in Function: int __builtin_clzll (unsigned long long) 24269 Similar to `__builtin_clz', except the argument type is `unsigned 24270 long long'. 24271 24272 -- Built-in Function: int __builtin_ctzll (unsigned long long) 24273 Similar to `__builtin_ctz', except the argument type is `unsigned 24274 long long'. 24275 24276 -- Built-in Function: int __builtin_popcountll (unsigned long long) 24277 Similar to `__builtin_popcount', except the argument type is 24278 `unsigned long long'. 24279 24280 -- Built-in Function: int __builtin_parityll (unsigned long long) 24281 Similar to `__builtin_parity', except the argument type is 24282 `unsigned long long'. 24283 24284 -- Built-in Function: double __builtin_powi (double, int) 24285 Returns the first argument raised to the power of the second. 24286 Unlike the `pow' function no guarantees about precision and 24287 rounding are made. 24288 24289 -- Built-in Function: float __builtin_powif (float, int) 24290 Similar to `__builtin_powi', except the argument and return types 24291 are `float'. 24292 24293 -- Built-in Function: long double __builtin_powil (long double, int) 24294 Similar to `__builtin_powi', except the argument and return types 24295 are `long double'. 24296 24297 -- Built-in Function: int32_t __builtin_bswap32 (int32_t x) 24298 Returns X with the order of the bytes reversed; for example, 24299 `0xaabbccdd' becomes `0xddccbbaa'. Byte here always means exactly 24300 8 bits. 24301 24302 -- Built-in Function: int64_t __builtin_bswap64 (int64_t x) 24303 Similar to `__builtin_bswap32', except the argument and return 24304 types are 64-bit. 24305 24306 24307 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions 24308 24309 5.50 Built-in Functions Specific to Particular Target Machines 24310 ============================================================== 24311 24312 On some target machines, GCC supports many built-in functions specific 24313 to those machines. Generally these generate calls to specific machine 24314 instructions, but allow the compiler to schedule those calls. 24315 24316 * Menu: 24317 24318 * Alpha Built-in Functions:: 24319 * ARM iWMMXt Built-in Functions:: 24320 * ARM NEON Intrinsics:: 24321 * Blackfin Built-in Functions:: 24322 * FR-V Built-in Functions:: 24323 * X86 Built-in Functions:: 24324 * MIPS DSP Built-in Functions:: 24325 * MIPS Paired-Single Support:: 24326 * MIPS Loongson Built-in Functions:: 24327 * Other MIPS Built-in Functions:: 24328 * picoChip Built-in Functions:: 24329 * PowerPC AltiVec Built-in Functions:: 24330 * SPARC VIS Built-in Functions:: 24331 * SPU Built-in Functions:: 24332 24333 24334 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM iWMMXt Built-in Functions, Up: Target Builtins 24335 24336 5.50.1 Alpha Built-in Functions 24337 ------------------------------- 24338 24339 These built-in functions are available for the Alpha family of 24340 processors, depending on the command-line switches used. 24341 24342 The following built-in functions are always available. They all 24343 generate the machine instruction that is part of the name. 24344 24345 long __builtin_alpha_implver (void) 24346 long __builtin_alpha_rpcc (void) 24347 long __builtin_alpha_amask (long) 24348 long __builtin_alpha_cmpbge (long, long) 24349 long __builtin_alpha_extbl (long, long) 24350 long __builtin_alpha_extwl (long, long) 24351 long __builtin_alpha_extll (long, long) 24352 long __builtin_alpha_extql (long, long) 24353 long __builtin_alpha_extwh (long, long) 24354 long __builtin_alpha_extlh (long, long) 24355 long __builtin_alpha_extqh (long, long) 24356 long __builtin_alpha_insbl (long, long) 24357 long __builtin_alpha_inswl (long, long) 24358 long __builtin_alpha_insll (long, long) 24359 long __builtin_alpha_insql (long, long) 24360 long __builtin_alpha_inswh (long, long) 24361 long __builtin_alpha_inslh (long, long) 24362 long __builtin_alpha_insqh (long, long) 24363 long __builtin_alpha_mskbl (long, long) 24364 long __builtin_alpha_mskwl (long, long) 24365 long __builtin_alpha_mskll (long, long) 24366 long __builtin_alpha_mskql (long, long) 24367 long __builtin_alpha_mskwh (long, long) 24368 long __builtin_alpha_msklh (long, long) 24369 long __builtin_alpha_mskqh (long, long) 24370 long __builtin_alpha_umulh (long, long) 24371 long __builtin_alpha_zap (long, long) 24372 long __builtin_alpha_zapnot (long, long) 24373 24374 The following built-in functions are always with `-mmax' or 24375 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the 24376 machine instruction that is part of the name. 24377 24378 long __builtin_alpha_pklb (long) 24379 long __builtin_alpha_pkwb (long) 24380 long __builtin_alpha_unpkbl (long) 24381 long __builtin_alpha_unpkbw (long) 24382 long __builtin_alpha_minub8 (long, long) 24383 long __builtin_alpha_minsb8 (long, long) 24384 long __builtin_alpha_minuw4 (long, long) 24385 long __builtin_alpha_minsw4 (long, long) 24386 long __builtin_alpha_maxub8 (long, long) 24387 long __builtin_alpha_maxsb8 (long, long) 24388 long __builtin_alpha_maxuw4 (long, long) 24389 long __builtin_alpha_maxsw4 (long, long) 24390 long __builtin_alpha_perr (long, long) 24391 24392 The following built-in functions are always with `-mcix' or 24393 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the 24394 machine instruction that is part of the name. 24395 24396 long __builtin_alpha_cttz (long) 24397 long __builtin_alpha_ctlz (long) 24398 long __builtin_alpha_ctpop (long) 24399 24400 The following builtins are available on systems that use the OSF/1 24401 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but 24402 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'. 24403 24404 void *__builtin_thread_pointer (void) 24405 void __builtin_set_thread_pointer (void *) 24406 24407 24408 File: gcc.info, Node: ARM iWMMXt Built-in Functions, Next: ARM NEON Intrinsics, Prev: Alpha Built-in Functions, Up: Target Builtins 24409 24410 5.50.2 ARM iWMMXt Built-in Functions 24411 ------------------------------------ 24412 24413 These built-in functions are available for the ARM family of processors 24414 when the `-mcpu=iwmmxt' switch is used: 24415 24416 typedef int v2si __attribute__ ((vector_size (8))); 24417 typedef short v4hi __attribute__ ((vector_size (8))); 24418 typedef char v8qi __attribute__ ((vector_size (8))); 24419 24420 int __builtin_arm_getwcx (int) 24421 void __builtin_arm_setwcx (int, int) 24422 int __builtin_arm_textrmsb (v8qi, int) 24423 int __builtin_arm_textrmsh (v4hi, int) 24424 int __builtin_arm_textrmsw (v2si, int) 24425 int __builtin_arm_textrmub (v8qi, int) 24426 int __builtin_arm_textrmuh (v4hi, int) 24427 int __builtin_arm_textrmuw (v2si, int) 24428 v8qi __builtin_arm_tinsrb (v8qi, int) 24429 v4hi __builtin_arm_tinsrh (v4hi, int) 24430 v2si __builtin_arm_tinsrw (v2si, int) 24431 long long __builtin_arm_tmia (long long, int, int) 24432 long long __builtin_arm_tmiabb (long long, int, int) 24433 long long __builtin_arm_tmiabt (long long, int, int) 24434 long long __builtin_arm_tmiaph (long long, int, int) 24435 long long __builtin_arm_tmiatb (long long, int, int) 24436 long long __builtin_arm_tmiatt (long long, int, int) 24437 int __builtin_arm_tmovmskb (v8qi) 24438 int __builtin_arm_tmovmskh (v4hi) 24439 int __builtin_arm_tmovmskw (v2si) 24440 long long __builtin_arm_waccb (v8qi) 24441 long long __builtin_arm_wacch (v4hi) 24442 long long __builtin_arm_waccw (v2si) 24443 v8qi __builtin_arm_waddb (v8qi, v8qi) 24444 v8qi __builtin_arm_waddbss (v8qi, v8qi) 24445 v8qi __builtin_arm_waddbus (v8qi, v8qi) 24446 v4hi __builtin_arm_waddh (v4hi, v4hi) 24447 v4hi __builtin_arm_waddhss (v4hi, v4hi) 24448 v4hi __builtin_arm_waddhus (v4hi, v4hi) 24449 v2si __builtin_arm_waddw (v2si, v2si) 24450 v2si __builtin_arm_waddwss (v2si, v2si) 24451 v2si __builtin_arm_waddwus (v2si, v2si) 24452 v8qi __builtin_arm_walign (v8qi, v8qi, int) 24453 long long __builtin_arm_wand(long long, long long) 24454 long long __builtin_arm_wandn (long long, long long) 24455 v8qi __builtin_arm_wavg2b (v8qi, v8qi) 24456 v8qi __builtin_arm_wavg2br (v8qi, v8qi) 24457 v4hi __builtin_arm_wavg2h (v4hi, v4hi) 24458 v4hi __builtin_arm_wavg2hr (v4hi, v4hi) 24459 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi) 24460 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi) 24461 v2si __builtin_arm_wcmpeqw (v2si, v2si) 24462 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi) 24463 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi) 24464 v2si __builtin_arm_wcmpgtsw (v2si, v2si) 24465 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi) 24466 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi) 24467 v2si __builtin_arm_wcmpgtuw (v2si, v2si) 24468 long long __builtin_arm_wmacs (long long, v4hi, v4hi) 24469 long long __builtin_arm_wmacsz (v4hi, v4hi) 24470 long long __builtin_arm_wmacu (long long, v4hi, v4hi) 24471 long long __builtin_arm_wmacuz (v4hi, v4hi) 24472 v4hi __builtin_arm_wmadds (v4hi, v4hi) 24473 v4hi __builtin_arm_wmaddu (v4hi, v4hi) 24474 v8qi __builtin_arm_wmaxsb (v8qi, v8qi) 24475 v4hi __builtin_arm_wmaxsh (v4hi, v4hi) 24476 v2si __builtin_arm_wmaxsw (v2si, v2si) 24477 v8qi __builtin_arm_wmaxub (v8qi, v8qi) 24478 v4hi __builtin_arm_wmaxuh (v4hi, v4hi) 24479 v2si __builtin_arm_wmaxuw (v2si, v2si) 24480 v8qi __builtin_arm_wminsb (v8qi, v8qi) 24481 v4hi __builtin_arm_wminsh (v4hi, v4hi) 24482 v2si __builtin_arm_wminsw (v2si, v2si) 24483 v8qi __builtin_arm_wminub (v8qi, v8qi) 24484 v4hi __builtin_arm_wminuh (v4hi, v4hi) 24485 v2si __builtin_arm_wminuw (v2si, v2si) 24486 v4hi __builtin_arm_wmulsm (v4hi, v4hi) 24487 v4hi __builtin_arm_wmulul (v4hi, v4hi) 24488 v4hi __builtin_arm_wmulum (v4hi, v4hi) 24489 long long __builtin_arm_wor (long long, long long) 24490 v2si __builtin_arm_wpackdss (long long, long long) 24491 v2si __builtin_arm_wpackdus (long long, long long) 24492 v8qi __builtin_arm_wpackhss (v4hi, v4hi) 24493 v8qi __builtin_arm_wpackhus (v4hi, v4hi) 24494 v4hi __builtin_arm_wpackwss (v2si, v2si) 24495 v4hi __builtin_arm_wpackwus (v2si, v2si) 24496 long long __builtin_arm_wrord (long long, long long) 24497 long long __builtin_arm_wrordi (long long, int) 24498 v4hi __builtin_arm_wrorh (v4hi, long long) 24499 v4hi __builtin_arm_wrorhi (v4hi, int) 24500 v2si __builtin_arm_wrorw (v2si, long long) 24501 v2si __builtin_arm_wrorwi (v2si, int) 24502 v2si __builtin_arm_wsadb (v8qi, v8qi) 24503 v2si __builtin_arm_wsadbz (v8qi, v8qi) 24504 v2si __builtin_arm_wsadh (v4hi, v4hi) 24505 v2si __builtin_arm_wsadhz (v4hi, v4hi) 24506 v4hi __builtin_arm_wshufh (v4hi, int) 24507 long long __builtin_arm_wslld (long long, long long) 24508 long long __builtin_arm_wslldi (long long, int) 24509 v4hi __builtin_arm_wsllh (v4hi, long long) 24510 v4hi __builtin_arm_wsllhi (v4hi, int) 24511 v2si __builtin_arm_wsllw (v2si, long long) 24512 v2si __builtin_arm_wsllwi (v2si, int) 24513 long long __builtin_arm_wsrad (long long, long long) 24514 long long __builtin_arm_wsradi (long long, int) 24515 v4hi __builtin_arm_wsrah (v4hi, long long) 24516 v4hi __builtin_arm_wsrahi (v4hi, int) 24517 v2si __builtin_arm_wsraw (v2si, long long) 24518 v2si __builtin_arm_wsrawi (v2si, int) 24519 long long __builtin_arm_wsrld (long long, long long) 24520 long long __builtin_arm_wsrldi (long long, int) 24521 v4hi __builtin_arm_wsrlh (v4hi, long long) 24522 v4hi __builtin_arm_wsrlhi (v4hi, int) 24523 v2si __builtin_arm_wsrlw (v2si, long long) 24524 v2si __builtin_arm_wsrlwi (v2si, int) 24525 v8qi __builtin_arm_wsubb (v8qi, v8qi) 24526 v8qi __builtin_arm_wsubbss (v8qi, v8qi) 24527 v8qi __builtin_arm_wsubbus (v8qi, v8qi) 24528 v4hi __builtin_arm_wsubh (v4hi, v4hi) 24529 v4hi __builtin_arm_wsubhss (v4hi, v4hi) 24530 v4hi __builtin_arm_wsubhus (v4hi, v4hi) 24531 v2si __builtin_arm_wsubw (v2si, v2si) 24532 v2si __builtin_arm_wsubwss (v2si, v2si) 24533 v2si __builtin_arm_wsubwus (v2si, v2si) 24534 v4hi __builtin_arm_wunpckehsb (v8qi) 24535 v2si __builtin_arm_wunpckehsh (v4hi) 24536 long long __builtin_arm_wunpckehsw (v2si) 24537 v4hi __builtin_arm_wunpckehub (v8qi) 24538 v2si __builtin_arm_wunpckehuh (v4hi) 24539 long long __builtin_arm_wunpckehuw (v2si) 24540 v4hi __builtin_arm_wunpckelsb (v8qi) 24541 v2si __builtin_arm_wunpckelsh (v4hi) 24542 long long __builtin_arm_wunpckelsw (v2si) 24543 v4hi __builtin_arm_wunpckelub (v8qi) 24544 v2si __builtin_arm_wunpckeluh (v4hi) 24545 long long __builtin_arm_wunpckeluw (v2si) 24546 v8qi __builtin_arm_wunpckihb (v8qi, v8qi) 24547 v4hi __builtin_arm_wunpckihh (v4hi, v4hi) 24548 v2si __builtin_arm_wunpckihw (v2si, v2si) 24549 v8qi __builtin_arm_wunpckilb (v8qi, v8qi) 24550 v4hi __builtin_arm_wunpckilh (v4hi, v4hi) 24551 v2si __builtin_arm_wunpckilw (v2si, v2si) 24552 long long __builtin_arm_wxor (long long, long long) 24553 long long __builtin_arm_wzero () 24554 24555 24556 File: gcc.info, Node: ARM NEON Intrinsics, Next: Blackfin Built-in Functions, Prev: ARM iWMMXt Built-in Functions, Up: Target Builtins 24557 24558 5.50.3 ARM NEON Intrinsics 24559 -------------------------- 24560 24561 These built-in intrinsics for the ARM Advanced SIMD extension are 24562 available when the `-mfpu=neon' switch is used: 24563 24564 5.50.3.1 Addition 24565 ................. 24566 24567 * uint32x2_t vadd_u32 (uint32x2_t, uint32x2_t) 24568 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 24569 24570 * uint16x4_t vadd_u16 (uint16x4_t, uint16x4_t) 24571 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 24572 24573 * uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t) 24574 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 24575 24576 * int32x2_t vadd_s32 (int32x2_t, int32x2_t) 24577 _Form of expected instruction(s):_ `vadd.i32 D0, D0, D0' 24578 24579 * int16x4_t vadd_s16 (int16x4_t, int16x4_t) 24580 _Form of expected instruction(s):_ `vadd.i16 D0, D0, D0' 24581 24582 * int8x8_t vadd_s8 (int8x8_t, int8x8_t) 24583 _Form of expected instruction(s):_ `vadd.i8 D0, D0, D0' 24584 24585 * uint64x1_t vadd_u64 (uint64x1_t, uint64x1_t) 24586 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 24587 24588 * int64x1_t vadd_s64 (int64x1_t, int64x1_t) 24589 _Form of expected instruction(s):_ `vadd.i64 D0, D0, D0' 24590 24591 * float32x2_t vadd_f32 (float32x2_t, float32x2_t) 24592 _Form of expected instruction(s):_ `vadd.f32 D0, D0, D0' 24593 24594 * uint32x4_t vaddq_u32 (uint32x4_t, uint32x4_t) 24595 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 24596 24597 * uint16x8_t vaddq_u16 (uint16x8_t, uint16x8_t) 24598 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 24599 24600 * uint8x16_t vaddq_u8 (uint8x16_t, uint8x16_t) 24601 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 24602 24603 * int32x4_t vaddq_s32 (int32x4_t, int32x4_t) 24604 _Form of expected instruction(s):_ `vadd.i32 Q0, Q0, Q0' 24605 24606 * int16x8_t vaddq_s16 (int16x8_t, int16x8_t) 24607 _Form of expected instruction(s):_ `vadd.i16 Q0, Q0, Q0' 24608 24609 * int8x16_t vaddq_s8 (int8x16_t, int8x16_t) 24610 _Form of expected instruction(s):_ `vadd.i8 Q0, Q0, Q0' 24611 24612 * uint64x2_t vaddq_u64 (uint64x2_t, uint64x2_t) 24613 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 24614 24615 * int64x2_t vaddq_s64 (int64x2_t, int64x2_t) 24616 _Form of expected instruction(s):_ `vadd.i64 Q0, Q0, Q0' 24617 24618 * float32x4_t vaddq_f32 (float32x4_t, float32x4_t) 24619 _Form of expected instruction(s):_ `vadd.f32 Q0, Q0, Q0' 24620 24621 * uint64x2_t vaddl_u32 (uint32x2_t, uint32x2_t) 24622 _Form of expected instruction(s):_ `vaddl.u32 Q0, D0, D0' 24623 24624 * uint32x4_t vaddl_u16 (uint16x4_t, uint16x4_t) 24625 _Form of expected instruction(s):_ `vaddl.u16 Q0, D0, D0' 24626 24627 * uint16x8_t vaddl_u8 (uint8x8_t, uint8x8_t) 24628 _Form of expected instruction(s):_ `vaddl.u8 Q0, D0, D0' 24629 24630 * int64x2_t vaddl_s32 (int32x2_t, int32x2_t) 24631 _Form of expected instruction(s):_ `vaddl.s32 Q0, D0, D0' 24632 24633 * int32x4_t vaddl_s16 (int16x4_t, int16x4_t) 24634 _Form of expected instruction(s):_ `vaddl.s16 Q0, D0, D0' 24635 24636 * int16x8_t vaddl_s8 (int8x8_t, int8x8_t) 24637 _Form of expected instruction(s):_ `vaddl.s8 Q0, D0, D0' 24638 24639 * uint64x2_t vaddw_u32 (uint64x2_t, uint32x2_t) 24640 _Form of expected instruction(s):_ `vaddw.u32 Q0, Q0, D0' 24641 24642 * uint32x4_t vaddw_u16 (uint32x4_t, uint16x4_t) 24643 _Form of expected instruction(s):_ `vaddw.u16 Q0, Q0, D0' 24644 24645 * uint16x8_t vaddw_u8 (uint16x8_t, uint8x8_t) 24646 _Form of expected instruction(s):_ `vaddw.u8 Q0, Q0, D0' 24647 24648 * int64x2_t vaddw_s32 (int64x2_t, int32x2_t) 24649 _Form of expected instruction(s):_ `vaddw.s32 Q0, Q0, D0' 24650 24651 * int32x4_t vaddw_s16 (int32x4_t, int16x4_t) 24652 _Form of expected instruction(s):_ `vaddw.s16 Q0, Q0, D0' 24653 24654 * int16x8_t vaddw_s8 (int16x8_t, int8x8_t) 24655 _Form of expected instruction(s):_ `vaddw.s8 Q0, Q0, D0' 24656 24657 * uint32x2_t vhadd_u32 (uint32x2_t, uint32x2_t) 24658 _Form of expected instruction(s):_ `vhadd.u32 D0, D0, D0' 24659 24660 * uint16x4_t vhadd_u16 (uint16x4_t, uint16x4_t) 24661 _Form of expected instruction(s):_ `vhadd.u16 D0, D0, D0' 24662 24663 * uint8x8_t vhadd_u8 (uint8x8_t, uint8x8_t) 24664 _Form of expected instruction(s):_ `vhadd.u8 D0, D0, D0' 24665 24666 * int32x2_t vhadd_s32 (int32x2_t, int32x2_t) 24667 _Form of expected instruction(s):_ `vhadd.s32 D0, D0, D0' 24668 24669 * int16x4_t vhadd_s16 (int16x4_t, int16x4_t) 24670 _Form of expected instruction(s):_ `vhadd.s16 D0, D0, D0' 24671 24672 * int8x8_t vhadd_s8 (int8x8_t, int8x8_t) 24673 _Form of expected instruction(s):_ `vhadd.s8 D0, D0, D0' 24674 24675 * uint32x4_t vhaddq_u32 (uint32x4_t, uint32x4_t) 24676 _Form of expected instruction(s):_ `vhadd.u32 Q0, Q0, Q0' 24677 24678 * uint16x8_t vhaddq_u16 (uint16x8_t, uint16x8_t) 24679 _Form of expected instruction(s):_ `vhadd.u16 Q0, Q0, Q0' 24680 24681 * uint8x16_t vhaddq_u8 (uint8x16_t, uint8x16_t) 24682 _Form of expected instruction(s):_ `vhadd.u8 Q0, Q0, Q0' 24683 24684 * int32x4_t vhaddq_s32 (int32x4_t, int32x4_t) 24685 _Form of expected instruction(s):_ `vhadd.s32 Q0, Q0, Q0' 24686 24687 * int16x8_t vhaddq_s16 (int16x8_t, int16x8_t) 24688 _Form of expected instruction(s):_ `vhadd.s16 Q0, Q0, Q0' 24689 24690 * int8x16_t vhaddq_s8 (int8x16_t, int8x16_t) 24691 _Form of expected instruction(s):_ `vhadd.s8 Q0, Q0, Q0' 24692 24693 * uint32x2_t vrhadd_u32 (uint32x2_t, uint32x2_t) 24694 _Form of expected instruction(s):_ `vrhadd.u32 D0, D0, D0' 24695 24696 * uint16x4_t vrhadd_u16 (uint16x4_t, uint16x4_t) 24697 _Form of expected instruction(s):_ `vrhadd.u16 D0, D0, D0' 24698 24699 * uint8x8_t vrhadd_u8 (uint8x8_t, uint8x8_t) 24700 _Form of expected instruction(s):_ `vrhadd.u8 D0, D0, D0' 24701 24702 * int32x2_t vrhadd_s32 (int32x2_t, int32x2_t) 24703 _Form of expected instruction(s):_ `vrhadd.s32 D0, D0, D0' 24704 24705 * int16x4_t vrhadd_s16 (int16x4_t, int16x4_t) 24706 _Form of expected instruction(s):_ `vrhadd.s16 D0, D0, D0' 24707 24708 * int8x8_t vrhadd_s8 (int8x8_t, int8x8_t) 24709 _Form of expected instruction(s):_ `vrhadd.s8 D0, D0, D0' 24710 24711 * uint32x4_t vrhaddq_u32 (uint32x4_t, uint32x4_t) 24712 _Form of expected instruction(s):_ `vrhadd.u32 Q0, Q0, Q0' 24713 24714 * uint16x8_t vrhaddq_u16 (uint16x8_t, uint16x8_t) 24715 _Form of expected instruction(s):_ `vrhadd.u16 Q0, Q0, Q0' 24716 24717 * uint8x16_t vrhaddq_u8 (uint8x16_t, uint8x16_t) 24718 _Form of expected instruction(s):_ `vrhadd.u8 Q0, Q0, Q0' 24719 24720 * int32x4_t vrhaddq_s32 (int32x4_t, int32x4_t) 24721 _Form of expected instruction(s):_ `vrhadd.s32 Q0, Q0, Q0' 24722 24723 * int16x8_t vrhaddq_s16 (int16x8_t, int16x8_t) 24724 _Form of expected instruction(s):_ `vrhadd.s16 Q0, Q0, Q0' 24725 24726 * int8x16_t vrhaddq_s8 (int8x16_t, int8x16_t) 24727 _Form of expected instruction(s):_ `vrhadd.s8 Q0, Q0, Q0' 24728 24729 * uint32x2_t vqadd_u32 (uint32x2_t, uint32x2_t) 24730 _Form of expected instruction(s):_ `vqadd.u32 D0, D0, D0' 24731 24732 * uint16x4_t vqadd_u16 (uint16x4_t, uint16x4_t) 24733 _Form of expected instruction(s):_ `vqadd.u16 D0, D0, D0' 24734 24735 * uint8x8_t vqadd_u8 (uint8x8_t, uint8x8_t) 24736 _Form of expected instruction(s):_ `vqadd.u8 D0, D0, D0' 24737 24738 * int32x2_t vqadd_s32 (int32x2_t, int32x2_t) 24739 _Form of expected instruction(s):_ `vqadd.s32 D0, D0, D0' 24740 24741 * int16x4_t vqadd_s16 (int16x4_t, int16x4_t) 24742 _Form of expected instruction(s):_ `vqadd.s16 D0, D0, D0' 24743 24744 * int8x8_t vqadd_s8 (int8x8_t, int8x8_t) 24745 _Form of expected instruction(s):_ `vqadd.s8 D0, D0, D0' 24746 24747 * uint64x1_t vqadd_u64 (uint64x1_t, uint64x1_t) 24748 _Form of expected instruction(s):_ `vqadd.u64 D0, D0, D0' 24749 24750 * int64x1_t vqadd_s64 (int64x1_t, int64x1_t) 24751 _Form of expected instruction(s):_ `vqadd.s64 D0, D0, D0' 24752 24753 * uint32x4_t vqaddq_u32 (uint32x4_t, uint32x4_t) 24754 _Form of expected instruction(s):_ `vqadd.u32 Q0, Q0, Q0' 24755 24756 * uint16x8_t vqaddq_u16 (uint16x8_t, uint16x8_t) 24757 _Form of expected instruction(s):_ `vqadd.u16 Q0, Q0, Q0' 24758 24759 * uint8x16_t vqaddq_u8 (uint8x16_t, uint8x16_t) 24760 _Form of expected instruction(s):_ `vqadd.u8 Q0, Q0, Q0' 24761 24762 * int32x4_t vqaddq_s32 (int32x4_t, int32x4_t) 24763 _Form of expected instruction(s):_ `vqadd.s32 Q0, Q0, Q0' 24764 24765 * int16x8_t vqaddq_s16 (int16x8_t, int16x8_t) 24766 _Form of expected instruction(s):_ `vqadd.s16 Q0, Q0, Q0' 24767 24768 * int8x16_t vqaddq_s8 (int8x16_t, int8x16_t) 24769 _Form of expected instruction(s):_ `vqadd.s8 Q0, Q0, Q0' 24770 24771 * uint64x2_t vqaddq_u64 (uint64x2_t, uint64x2_t) 24772 _Form of expected instruction(s):_ `vqadd.u64 Q0, Q0, Q0' 24773 24774 * int64x2_t vqaddq_s64 (int64x2_t, int64x2_t) 24775 _Form of expected instruction(s):_ `vqadd.s64 Q0, Q0, Q0' 24776 24777 * uint32x2_t vaddhn_u64 (uint64x2_t, uint64x2_t) 24778 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 24779 24780 * uint16x4_t vaddhn_u32 (uint32x4_t, uint32x4_t) 24781 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 24782 24783 * uint8x8_t vaddhn_u16 (uint16x8_t, uint16x8_t) 24784 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 24785 24786 * int32x2_t vaddhn_s64 (int64x2_t, int64x2_t) 24787 _Form of expected instruction(s):_ `vaddhn.i64 D0, Q0, Q0' 24788 24789 * int16x4_t vaddhn_s32 (int32x4_t, int32x4_t) 24790 _Form of expected instruction(s):_ `vaddhn.i32 D0, Q0, Q0' 24791 24792 * int8x8_t vaddhn_s16 (int16x8_t, int16x8_t) 24793 _Form of expected instruction(s):_ `vaddhn.i16 D0, Q0, Q0' 24794 24795 * uint32x2_t vraddhn_u64 (uint64x2_t, uint64x2_t) 24796 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 24797 24798 * uint16x4_t vraddhn_u32 (uint32x4_t, uint32x4_t) 24799 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 24800 24801 * uint8x8_t vraddhn_u16 (uint16x8_t, uint16x8_t) 24802 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 24803 24804 * int32x2_t vraddhn_s64 (int64x2_t, int64x2_t) 24805 _Form of expected instruction(s):_ `vraddhn.i64 D0, Q0, Q0' 24806 24807 * int16x4_t vraddhn_s32 (int32x4_t, int32x4_t) 24808 _Form of expected instruction(s):_ `vraddhn.i32 D0, Q0, Q0' 24809 24810 * int8x8_t vraddhn_s16 (int16x8_t, int16x8_t) 24811 _Form of expected instruction(s):_ `vraddhn.i16 D0, Q0, Q0' 24812 24813 5.50.3.2 Multiplication 24814 ....................... 24815 24816 * uint32x2_t vmul_u32 (uint32x2_t, uint32x2_t) 24817 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 24818 24819 * uint16x4_t vmul_u16 (uint16x4_t, uint16x4_t) 24820 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 24821 24822 * uint8x8_t vmul_u8 (uint8x8_t, uint8x8_t) 24823 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 24824 24825 * int32x2_t vmul_s32 (int32x2_t, int32x2_t) 24826 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0' 24827 24828 * int16x4_t vmul_s16 (int16x4_t, int16x4_t) 24829 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0' 24830 24831 * int8x8_t vmul_s8 (int8x8_t, int8x8_t) 24832 _Form of expected instruction(s):_ `vmul.i8 D0, D0, D0' 24833 24834 * float32x2_t vmul_f32 (float32x2_t, float32x2_t) 24835 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0' 24836 24837 * poly8x8_t vmul_p8 (poly8x8_t, poly8x8_t) 24838 _Form of expected instruction(s):_ `vmul.p8 D0, D0, D0' 24839 24840 * uint32x4_t vmulq_u32 (uint32x4_t, uint32x4_t) 24841 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 24842 24843 * uint16x8_t vmulq_u16 (uint16x8_t, uint16x8_t) 24844 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 24845 24846 * uint8x16_t vmulq_u8 (uint8x16_t, uint8x16_t) 24847 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 24848 24849 * int32x4_t vmulq_s32 (int32x4_t, int32x4_t) 24850 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, Q0' 24851 24852 * int16x8_t vmulq_s16 (int16x8_t, int16x8_t) 24853 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, Q0' 24854 24855 * int8x16_t vmulq_s8 (int8x16_t, int8x16_t) 24856 _Form of expected instruction(s):_ `vmul.i8 Q0, Q0, Q0' 24857 24858 * float32x4_t vmulq_f32 (float32x4_t, float32x4_t) 24859 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, Q0' 24860 24861 * poly8x16_t vmulq_p8 (poly8x16_t, poly8x16_t) 24862 _Form of expected instruction(s):_ `vmul.p8 Q0, Q0, Q0' 24863 24864 * int32x2_t vqdmulh_s32 (int32x2_t, int32x2_t) 24865 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0' 24866 24867 * int16x4_t vqdmulh_s16 (int16x4_t, int16x4_t) 24868 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0' 24869 24870 * int32x4_t vqdmulhq_s32 (int32x4_t, int32x4_t) 24871 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, Q0' 24872 24873 * int16x8_t vqdmulhq_s16 (int16x8_t, int16x8_t) 24874 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, Q0' 24875 24876 * int32x2_t vqrdmulh_s32 (int32x2_t, int32x2_t) 24877 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0' 24878 24879 * int16x4_t vqrdmulh_s16 (int16x4_t, int16x4_t) 24880 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0' 24881 24882 * int32x4_t vqrdmulhq_s32 (int32x4_t, int32x4_t) 24883 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, Q0' 24884 24885 * int16x8_t vqrdmulhq_s16 (int16x8_t, int16x8_t) 24886 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, Q0' 24887 24888 * uint64x2_t vmull_u32 (uint32x2_t, uint32x2_t) 24889 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0' 24890 24891 * uint32x4_t vmull_u16 (uint16x4_t, uint16x4_t) 24892 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0' 24893 24894 * uint16x8_t vmull_u8 (uint8x8_t, uint8x8_t) 24895 _Form of expected instruction(s):_ `vmull.u8 Q0, D0, D0' 24896 24897 * int64x2_t vmull_s32 (int32x2_t, int32x2_t) 24898 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0' 24899 24900 * int32x4_t vmull_s16 (int16x4_t, int16x4_t) 24901 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0' 24902 24903 * int16x8_t vmull_s8 (int8x8_t, int8x8_t) 24904 _Form of expected instruction(s):_ `vmull.s8 Q0, D0, D0' 24905 24906 * poly16x8_t vmull_p8 (poly8x8_t, poly8x8_t) 24907 _Form of expected instruction(s):_ `vmull.p8 Q0, D0, D0' 24908 24909 * int64x2_t vqdmull_s32 (int32x2_t, int32x2_t) 24910 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0' 24911 24912 * int32x4_t vqdmull_s16 (int16x4_t, int16x4_t) 24913 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0' 24914 24915 5.50.3.3 Multiply-accumulate 24916 ............................ 24917 24918 * uint32x2_t vmla_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 24919 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 24920 24921 * uint16x4_t vmla_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 24922 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 24923 24924 * uint8x8_t vmla_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 24925 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 24926 24927 * int32x2_t vmla_s32 (int32x2_t, int32x2_t, int32x2_t) 24928 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0' 24929 24930 * int16x4_t vmla_s16 (int16x4_t, int16x4_t, int16x4_t) 24931 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0' 24932 24933 * int8x8_t vmla_s8 (int8x8_t, int8x8_t, int8x8_t) 24934 _Form of expected instruction(s):_ `vmla.i8 D0, D0, D0' 24935 24936 * float32x2_t vmla_f32 (float32x2_t, float32x2_t, float32x2_t) 24937 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0' 24938 24939 * uint32x4_t vmlaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 24940 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 24941 24942 * uint16x8_t vmlaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 24943 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 24944 24945 * uint8x16_t vmlaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 24946 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 24947 24948 * int32x4_t vmlaq_s32 (int32x4_t, int32x4_t, int32x4_t) 24949 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, Q0' 24950 24951 * int16x8_t vmlaq_s16 (int16x8_t, int16x8_t, int16x8_t) 24952 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, Q0' 24953 24954 * int8x16_t vmlaq_s8 (int8x16_t, int8x16_t, int8x16_t) 24955 _Form of expected instruction(s):_ `vmla.i8 Q0, Q0, Q0' 24956 24957 * float32x4_t vmlaq_f32 (float32x4_t, float32x4_t, float32x4_t) 24958 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, Q0' 24959 24960 * uint64x2_t vmlal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 24961 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0' 24962 24963 * uint32x4_t vmlal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 24964 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0' 24965 24966 * uint16x8_t vmlal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 24967 _Form of expected instruction(s):_ `vmlal.u8 Q0, D0, D0' 24968 24969 * int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 24970 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0' 24971 24972 * int32x4_t vmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 24973 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0' 24974 24975 * int16x8_t vmlal_s8 (int16x8_t, int8x8_t, int8x8_t) 24976 _Form of expected instruction(s):_ `vmlal.s8 Q0, D0, D0' 24977 24978 * int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t) 24979 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0' 24980 24981 * int32x4_t vqdmlal_s16 (int32x4_t, int16x4_t, int16x4_t) 24982 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0' 24983 24984 5.50.3.4 Multiply-subtract 24985 .......................... 24986 24987 * uint32x2_t vmls_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 24988 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 24989 24990 * uint16x4_t vmls_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 24991 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 24992 24993 * uint8x8_t vmls_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 24994 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 24995 24996 * int32x2_t vmls_s32 (int32x2_t, int32x2_t, int32x2_t) 24997 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0' 24998 24999 * int16x4_t vmls_s16 (int16x4_t, int16x4_t, int16x4_t) 25000 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0' 25001 25002 * int8x8_t vmls_s8 (int8x8_t, int8x8_t, int8x8_t) 25003 _Form of expected instruction(s):_ `vmls.i8 D0, D0, D0' 25004 25005 * float32x2_t vmls_f32 (float32x2_t, float32x2_t, float32x2_t) 25006 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0' 25007 25008 * uint32x4_t vmlsq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 25009 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 25010 25011 * uint16x8_t vmlsq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 25012 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 25013 25014 * uint8x16_t vmlsq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 25015 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 25016 25017 * int32x4_t vmlsq_s32 (int32x4_t, int32x4_t, int32x4_t) 25018 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, Q0' 25019 25020 * int16x8_t vmlsq_s16 (int16x8_t, int16x8_t, int16x8_t) 25021 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, Q0' 25022 25023 * int8x16_t vmlsq_s8 (int8x16_t, int8x16_t, int8x16_t) 25024 _Form of expected instruction(s):_ `vmls.i8 Q0, Q0, Q0' 25025 25026 * float32x4_t vmlsq_f32 (float32x4_t, float32x4_t, float32x4_t) 25027 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, Q0' 25028 25029 * uint64x2_t vmlsl_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 25030 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0' 25031 25032 * uint32x4_t vmlsl_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 25033 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0' 25034 25035 * uint16x8_t vmlsl_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 25036 _Form of expected instruction(s):_ `vmlsl.u8 Q0, D0, D0' 25037 25038 * int64x2_t vmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 25039 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0' 25040 25041 * int32x4_t vmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 25042 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0' 25043 25044 * int16x8_t vmlsl_s8 (int16x8_t, int8x8_t, int8x8_t) 25045 _Form of expected instruction(s):_ `vmlsl.s8 Q0, D0, D0' 25046 25047 * int64x2_t vqdmlsl_s32 (int64x2_t, int32x2_t, int32x2_t) 25048 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0' 25049 25050 * int32x4_t vqdmlsl_s16 (int32x4_t, int16x4_t, int16x4_t) 25051 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0' 25052 25053 5.50.3.5 Subtraction 25054 .................... 25055 25056 * uint32x2_t vsub_u32 (uint32x2_t, uint32x2_t) 25057 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 25058 25059 * uint16x4_t vsub_u16 (uint16x4_t, uint16x4_t) 25060 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 25061 25062 * uint8x8_t vsub_u8 (uint8x8_t, uint8x8_t) 25063 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 25064 25065 * int32x2_t vsub_s32 (int32x2_t, int32x2_t) 25066 _Form of expected instruction(s):_ `vsub.i32 D0, D0, D0' 25067 25068 * int16x4_t vsub_s16 (int16x4_t, int16x4_t) 25069 _Form of expected instruction(s):_ `vsub.i16 D0, D0, D0' 25070 25071 * int8x8_t vsub_s8 (int8x8_t, int8x8_t) 25072 _Form of expected instruction(s):_ `vsub.i8 D0, D0, D0' 25073 25074 * uint64x1_t vsub_u64 (uint64x1_t, uint64x1_t) 25075 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 25076 25077 * int64x1_t vsub_s64 (int64x1_t, int64x1_t) 25078 _Form of expected instruction(s):_ `vsub.i64 D0, D0, D0' 25079 25080 * float32x2_t vsub_f32 (float32x2_t, float32x2_t) 25081 _Form of expected instruction(s):_ `vsub.f32 D0, D0, D0' 25082 25083 * uint32x4_t vsubq_u32 (uint32x4_t, uint32x4_t) 25084 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 25085 25086 * uint16x8_t vsubq_u16 (uint16x8_t, uint16x8_t) 25087 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 25088 25089 * uint8x16_t vsubq_u8 (uint8x16_t, uint8x16_t) 25090 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 25091 25092 * int32x4_t vsubq_s32 (int32x4_t, int32x4_t) 25093 _Form of expected instruction(s):_ `vsub.i32 Q0, Q0, Q0' 25094 25095 * int16x8_t vsubq_s16 (int16x8_t, int16x8_t) 25096 _Form of expected instruction(s):_ `vsub.i16 Q0, Q0, Q0' 25097 25098 * int8x16_t vsubq_s8 (int8x16_t, int8x16_t) 25099 _Form of expected instruction(s):_ `vsub.i8 Q0, Q0, Q0' 25100 25101 * uint64x2_t vsubq_u64 (uint64x2_t, uint64x2_t) 25102 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 25103 25104 * int64x2_t vsubq_s64 (int64x2_t, int64x2_t) 25105 _Form of expected instruction(s):_ `vsub.i64 Q0, Q0, Q0' 25106 25107 * float32x4_t vsubq_f32 (float32x4_t, float32x4_t) 25108 _Form of expected instruction(s):_ `vsub.f32 Q0, Q0, Q0' 25109 25110 * uint64x2_t vsubl_u32 (uint32x2_t, uint32x2_t) 25111 _Form of expected instruction(s):_ `vsubl.u32 Q0, D0, D0' 25112 25113 * uint32x4_t vsubl_u16 (uint16x4_t, uint16x4_t) 25114 _Form of expected instruction(s):_ `vsubl.u16 Q0, D0, D0' 25115 25116 * uint16x8_t vsubl_u8 (uint8x8_t, uint8x8_t) 25117 _Form of expected instruction(s):_ `vsubl.u8 Q0, D0, D0' 25118 25119 * int64x2_t vsubl_s32 (int32x2_t, int32x2_t) 25120 _Form of expected instruction(s):_ `vsubl.s32 Q0, D0, D0' 25121 25122 * int32x4_t vsubl_s16 (int16x4_t, int16x4_t) 25123 _Form of expected instruction(s):_ `vsubl.s16 Q0, D0, D0' 25124 25125 * int16x8_t vsubl_s8 (int8x8_t, int8x8_t) 25126 _Form of expected instruction(s):_ `vsubl.s8 Q0, D0, D0' 25127 25128 * uint64x2_t vsubw_u32 (uint64x2_t, uint32x2_t) 25129 _Form of expected instruction(s):_ `vsubw.u32 Q0, Q0, D0' 25130 25131 * uint32x4_t vsubw_u16 (uint32x4_t, uint16x4_t) 25132 _Form of expected instruction(s):_ `vsubw.u16 Q0, Q0, D0' 25133 25134 * uint16x8_t vsubw_u8 (uint16x8_t, uint8x8_t) 25135 _Form of expected instruction(s):_ `vsubw.u8 Q0, Q0, D0' 25136 25137 * int64x2_t vsubw_s32 (int64x2_t, int32x2_t) 25138 _Form of expected instruction(s):_ `vsubw.s32 Q0, Q0, D0' 25139 25140 * int32x4_t vsubw_s16 (int32x4_t, int16x4_t) 25141 _Form of expected instruction(s):_ `vsubw.s16 Q0, Q0, D0' 25142 25143 * int16x8_t vsubw_s8 (int16x8_t, int8x8_t) 25144 _Form of expected instruction(s):_ `vsubw.s8 Q0, Q0, D0' 25145 25146 * uint32x2_t vhsub_u32 (uint32x2_t, uint32x2_t) 25147 _Form of expected instruction(s):_ `vhsub.u32 D0, D0, D0' 25148 25149 * uint16x4_t vhsub_u16 (uint16x4_t, uint16x4_t) 25150 _Form of expected instruction(s):_ `vhsub.u16 D0, D0, D0' 25151 25152 * uint8x8_t vhsub_u8 (uint8x8_t, uint8x8_t) 25153 _Form of expected instruction(s):_ `vhsub.u8 D0, D0, D0' 25154 25155 * int32x2_t vhsub_s32 (int32x2_t, int32x2_t) 25156 _Form of expected instruction(s):_ `vhsub.s32 D0, D0, D0' 25157 25158 * int16x4_t vhsub_s16 (int16x4_t, int16x4_t) 25159 _Form of expected instruction(s):_ `vhsub.s16 D0, D0, D0' 25160 25161 * int8x8_t vhsub_s8 (int8x8_t, int8x8_t) 25162 _Form of expected instruction(s):_ `vhsub.s8 D0, D0, D0' 25163 25164 * uint32x4_t vhsubq_u32 (uint32x4_t, uint32x4_t) 25165 _Form of expected instruction(s):_ `vhsub.u32 Q0, Q0, Q0' 25166 25167 * uint16x8_t vhsubq_u16 (uint16x8_t, uint16x8_t) 25168 _Form of expected instruction(s):_ `vhsub.u16 Q0, Q0, Q0' 25169 25170 * uint8x16_t vhsubq_u8 (uint8x16_t, uint8x16_t) 25171 _Form of expected instruction(s):_ `vhsub.u8 Q0, Q0, Q0' 25172 25173 * int32x4_t vhsubq_s32 (int32x4_t, int32x4_t) 25174 _Form of expected instruction(s):_ `vhsub.s32 Q0, Q0, Q0' 25175 25176 * int16x8_t vhsubq_s16 (int16x8_t, int16x8_t) 25177 _Form of expected instruction(s):_ `vhsub.s16 Q0, Q0, Q0' 25178 25179 * int8x16_t vhsubq_s8 (int8x16_t, int8x16_t) 25180 _Form of expected instruction(s):_ `vhsub.s8 Q0, Q0, Q0' 25181 25182 * uint32x2_t vqsub_u32 (uint32x2_t, uint32x2_t) 25183 _Form of expected instruction(s):_ `vqsub.u32 D0, D0, D0' 25184 25185 * uint16x4_t vqsub_u16 (uint16x4_t, uint16x4_t) 25186 _Form of expected instruction(s):_ `vqsub.u16 D0, D0, D0' 25187 25188 * uint8x8_t vqsub_u8 (uint8x8_t, uint8x8_t) 25189 _Form of expected instruction(s):_ `vqsub.u8 D0, D0, D0' 25190 25191 * int32x2_t vqsub_s32 (int32x2_t, int32x2_t) 25192 _Form of expected instruction(s):_ `vqsub.s32 D0, D0, D0' 25193 25194 * int16x4_t vqsub_s16 (int16x4_t, int16x4_t) 25195 _Form of expected instruction(s):_ `vqsub.s16 D0, D0, D0' 25196 25197 * int8x8_t vqsub_s8 (int8x8_t, int8x8_t) 25198 _Form of expected instruction(s):_ `vqsub.s8 D0, D0, D0' 25199 25200 * uint64x1_t vqsub_u64 (uint64x1_t, uint64x1_t) 25201 _Form of expected instruction(s):_ `vqsub.u64 D0, D0, D0' 25202 25203 * int64x1_t vqsub_s64 (int64x1_t, int64x1_t) 25204 _Form of expected instruction(s):_ `vqsub.s64 D0, D0, D0' 25205 25206 * uint32x4_t vqsubq_u32 (uint32x4_t, uint32x4_t) 25207 _Form of expected instruction(s):_ `vqsub.u32 Q0, Q0, Q0' 25208 25209 * uint16x8_t vqsubq_u16 (uint16x8_t, uint16x8_t) 25210 _Form of expected instruction(s):_ `vqsub.u16 Q0, Q0, Q0' 25211 25212 * uint8x16_t vqsubq_u8 (uint8x16_t, uint8x16_t) 25213 _Form of expected instruction(s):_ `vqsub.u8 Q0, Q0, Q0' 25214 25215 * int32x4_t vqsubq_s32 (int32x4_t, int32x4_t) 25216 _Form of expected instruction(s):_ `vqsub.s32 Q0, Q0, Q0' 25217 25218 * int16x8_t vqsubq_s16 (int16x8_t, int16x8_t) 25219 _Form of expected instruction(s):_ `vqsub.s16 Q0, Q0, Q0' 25220 25221 * int8x16_t vqsubq_s8 (int8x16_t, int8x16_t) 25222 _Form of expected instruction(s):_ `vqsub.s8 Q0, Q0, Q0' 25223 25224 * uint64x2_t vqsubq_u64 (uint64x2_t, uint64x2_t) 25225 _Form of expected instruction(s):_ `vqsub.u64 Q0, Q0, Q0' 25226 25227 * int64x2_t vqsubq_s64 (int64x2_t, int64x2_t) 25228 _Form of expected instruction(s):_ `vqsub.s64 Q0, Q0, Q0' 25229 25230 * uint32x2_t vsubhn_u64 (uint64x2_t, uint64x2_t) 25231 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 25232 25233 * uint16x4_t vsubhn_u32 (uint32x4_t, uint32x4_t) 25234 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 25235 25236 * uint8x8_t vsubhn_u16 (uint16x8_t, uint16x8_t) 25237 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 25238 25239 * int32x2_t vsubhn_s64 (int64x2_t, int64x2_t) 25240 _Form of expected instruction(s):_ `vsubhn.i64 D0, Q0, Q0' 25241 25242 * int16x4_t vsubhn_s32 (int32x4_t, int32x4_t) 25243 _Form of expected instruction(s):_ `vsubhn.i32 D0, Q0, Q0' 25244 25245 * int8x8_t vsubhn_s16 (int16x8_t, int16x8_t) 25246 _Form of expected instruction(s):_ `vsubhn.i16 D0, Q0, Q0' 25247 25248 * uint32x2_t vrsubhn_u64 (uint64x2_t, uint64x2_t) 25249 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 25250 25251 * uint16x4_t vrsubhn_u32 (uint32x4_t, uint32x4_t) 25252 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 25253 25254 * uint8x8_t vrsubhn_u16 (uint16x8_t, uint16x8_t) 25255 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 25256 25257 * int32x2_t vrsubhn_s64 (int64x2_t, int64x2_t) 25258 _Form of expected instruction(s):_ `vrsubhn.i64 D0, Q0, Q0' 25259 25260 * int16x4_t vrsubhn_s32 (int32x4_t, int32x4_t) 25261 _Form of expected instruction(s):_ `vrsubhn.i32 D0, Q0, Q0' 25262 25263 * int8x8_t vrsubhn_s16 (int16x8_t, int16x8_t) 25264 _Form of expected instruction(s):_ `vrsubhn.i16 D0, Q0, Q0' 25265 25266 5.50.3.6 Comparison (equal-to) 25267 .............................. 25268 25269 * uint32x2_t vceq_u32 (uint32x2_t, uint32x2_t) 25270 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 25271 25272 * uint16x4_t vceq_u16 (uint16x4_t, uint16x4_t) 25273 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 25274 25275 * uint8x8_t vceq_u8 (uint8x8_t, uint8x8_t) 25276 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 25277 25278 * uint32x2_t vceq_s32 (int32x2_t, int32x2_t) 25279 _Form of expected instruction(s):_ `vceq.i32 D0, D0, D0' 25280 25281 * uint16x4_t vceq_s16 (int16x4_t, int16x4_t) 25282 _Form of expected instruction(s):_ `vceq.i16 D0, D0, D0' 25283 25284 * uint8x8_t vceq_s8 (int8x8_t, int8x8_t) 25285 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 25286 25287 * uint32x2_t vceq_f32 (float32x2_t, float32x2_t) 25288 _Form of expected instruction(s):_ `vceq.f32 D0, D0, D0' 25289 25290 * uint8x8_t vceq_p8 (poly8x8_t, poly8x8_t) 25291 _Form of expected instruction(s):_ `vceq.i8 D0, D0, D0' 25292 25293 * uint32x4_t vceqq_u32 (uint32x4_t, uint32x4_t) 25294 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 25295 25296 * uint16x8_t vceqq_u16 (uint16x8_t, uint16x8_t) 25297 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 25298 25299 * uint8x16_t vceqq_u8 (uint8x16_t, uint8x16_t) 25300 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25301 25302 * uint32x4_t vceqq_s32 (int32x4_t, int32x4_t) 25303 _Form of expected instruction(s):_ `vceq.i32 Q0, Q0, Q0' 25304 25305 * uint16x8_t vceqq_s16 (int16x8_t, int16x8_t) 25306 _Form of expected instruction(s):_ `vceq.i16 Q0, Q0, Q0' 25307 25308 * uint8x16_t vceqq_s8 (int8x16_t, int8x16_t) 25309 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25310 25311 * uint32x4_t vceqq_f32 (float32x4_t, float32x4_t) 25312 _Form of expected instruction(s):_ `vceq.f32 Q0, Q0, Q0' 25313 25314 * uint8x16_t vceqq_p8 (poly8x16_t, poly8x16_t) 25315 _Form of expected instruction(s):_ `vceq.i8 Q0, Q0, Q0' 25316 25317 5.50.3.7 Comparison (greater-than-or-equal-to) 25318 .............................................. 25319 25320 * uint32x2_t vcge_u32 (uint32x2_t, uint32x2_t) 25321 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 25322 25323 * uint16x4_t vcge_u16 (uint16x4_t, uint16x4_t) 25324 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 25325 25326 * uint8x8_t vcge_u8 (uint8x8_t, uint8x8_t) 25327 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 25328 25329 * uint32x2_t vcge_s32 (int32x2_t, int32x2_t) 25330 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 25331 25332 * uint16x4_t vcge_s16 (int16x4_t, int16x4_t) 25333 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 25334 25335 * uint8x8_t vcge_s8 (int8x8_t, int8x8_t) 25336 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 25337 25338 * uint32x2_t vcge_f32 (float32x2_t, float32x2_t) 25339 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 25340 25341 * uint32x4_t vcgeq_u32 (uint32x4_t, uint32x4_t) 25342 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 25343 25344 * uint16x8_t vcgeq_u16 (uint16x8_t, uint16x8_t) 25345 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 25346 25347 * uint8x16_t vcgeq_u8 (uint8x16_t, uint8x16_t) 25348 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 25349 25350 * uint32x4_t vcgeq_s32 (int32x4_t, int32x4_t) 25351 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 25352 25353 * uint16x8_t vcgeq_s16 (int16x8_t, int16x8_t) 25354 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 25355 25356 * uint8x16_t vcgeq_s8 (int8x16_t, int8x16_t) 25357 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 25358 25359 * uint32x4_t vcgeq_f32 (float32x4_t, float32x4_t) 25360 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 25361 25362 5.50.3.8 Comparison (less-than-or-equal-to) 25363 ........................................... 25364 25365 * uint32x2_t vcle_u32 (uint32x2_t, uint32x2_t) 25366 _Form of expected instruction(s):_ `vcge.u32 D0, D0, D0' 25367 25368 * uint16x4_t vcle_u16 (uint16x4_t, uint16x4_t) 25369 _Form of expected instruction(s):_ `vcge.u16 D0, D0, D0' 25370 25371 * uint8x8_t vcle_u8 (uint8x8_t, uint8x8_t) 25372 _Form of expected instruction(s):_ `vcge.u8 D0, D0, D0' 25373 25374 * uint32x2_t vcle_s32 (int32x2_t, int32x2_t) 25375 _Form of expected instruction(s):_ `vcge.s32 D0, D0, D0' 25376 25377 * uint16x4_t vcle_s16 (int16x4_t, int16x4_t) 25378 _Form of expected instruction(s):_ `vcge.s16 D0, D0, D0' 25379 25380 * uint8x8_t vcle_s8 (int8x8_t, int8x8_t) 25381 _Form of expected instruction(s):_ `vcge.s8 D0, D0, D0' 25382 25383 * uint32x2_t vcle_f32 (float32x2_t, float32x2_t) 25384 _Form of expected instruction(s):_ `vcge.f32 D0, D0, D0' 25385 25386 * uint32x4_t vcleq_u32 (uint32x4_t, uint32x4_t) 25387 _Form of expected instruction(s):_ `vcge.u32 Q0, Q0, Q0' 25388 25389 * uint16x8_t vcleq_u16 (uint16x8_t, uint16x8_t) 25390 _Form of expected instruction(s):_ `vcge.u16 Q0, Q0, Q0' 25391 25392 * uint8x16_t vcleq_u8 (uint8x16_t, uint8x16_t) 25393 _Form of expected instruction(s):_ `vcge.u8 Q0, Q0, Q0' 25394 25395 * uint32x4_t vcleq_s32 (int32x4_t, int32x4_t) 25396 _Form of expected instruction(s):_ `vcge.s32 Q0, Q0, Q0' 25397 25398 * uint16x8_t vcleq_s16 (int16x8_t, int16x8_t) 25399 _Form of expected instruction(s):_ `vcge.s16 Q0, Q0, Q0' 25400 25401 * uint8x16_t vcleq_s8 (int8x16_t, int8x16_t) 25402 _Form of expected instruction(s):_ `vcge.s8 Q0, Q0, Q0' 25403 25404 * uint32x4_t vcleq_f32 (float32x4_t, float32x4_t) 25405 _Form of expected instruction(s):_ `vcge.f32 Q0, Q0, Q0' 25406 25407 5.50.3.9 Comparison (greater-than) 25408 .................................. 25409 25410 * uint32x2_t vcgt_u32 (uint32x2_t, uint32x2_t) 25411 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 25412 25413 * uint16x4_t vcgt_u16 (uint16x4_t, uint16x4_t) 25414 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 25415 25416 * uint8x8_t vcgt_u8 (uint8x8_t, uint8x8_t) 25417 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 25418 25419 * uint32x2_t vcgt_s32 (int32x2_t, int32x2_t) 25420 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 25421 25422 * uint16x4_t vcgt_s16 (int16x4_t, int16x4_t) 25423 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 25424 25425 * uint8x8_t vcgt_s8 (int8x8_t, int8x8_t) 25426 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 25427 25428 * uint32x2_t vcgt_f32 (float32x2_t, float32x2_t) 25429 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 25430 25431 * uint32x4_t vcgtq_u32 (uint32x4_t, uint32x4_t) 25432 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 25433 25434 * uint16x8_t vcgtq_u16 (uint16x8_t, uint16x8_t) 25435 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 25436 25437 * uint8x16_t vcgtq_u8 (uint8x16_t, uint8x16_t) 25438 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 25439 25440 * uint32x4_t vcgtq_s32 (int32x4_t, int32x4_t) 25441 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 25442 25443 * uint16x8_t vcgtq_s16 (int16x8_t, int16x8_t) 25444 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 25445 25446 * uint8x16_t vcgtq_s8 (int8x16_t, int8x16_t) 25447 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 25448 25449 * uint32x4_t vcgtq_f32 (float32x4_t, float32x4_t) 25450 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 25451 25452 5.50.3.10 Comparison (less-than) 25453 ................................ 25454 25455 * uint32x2_t vclt_u32 (uint32x2_t, uint32x2_t) 25456 _Form of expected instruction(s):_ `vcgt.u32 D0, D0, D0' 25457 25458 * uint16x4_t vclt_u16 (uint16x4_t, uint16x4_t) 25459 _Form of expected instruction(s):_ `vcgt.u16 D0, D0, D0' 25460 25461 * uint8x8_t vclt_u8 (uint8x8_t, uint8x8_t) 25462 _Form of expected instruction(s):_ `vcgt.u8 D0, D0, D0' 25463 25464 * uint32x2_t vclt_s32 (int32x2_t, int32x2_t) 25465 _Form of expected instruction(s):_ `vcgt.s32 D0, D0, D0' 25466 25467 * uint16x4_t vclt_s16 (int16x4_t, int16x4_t) 25468 _Form of expected instruction(s):_ `vcgt.s16 D0, D0, D0' 25469 25470 * uint8x8_t vclt_s8 (int8x8_t, int8x8_t) 25471 _Form of expected instruction(s):_ `vcgt.s8 D0, D0, D0' 25472 25473 * uint32x2_t vclt_f32 (float32x2_t, float32x2_t) 25474 _Form of expected instruction(s):_ `vcgt.f32 D0, D0, D0' 25475 25476 * uint32x4_t vcltq_u32 (uint32x4_t, uint32x4_t) 25477 _Form of expected instruction(s):_ `vcgt.u32 Q0, Q0, Q0' 25478 25479 * uint16x8_t vcltq_u16 (uint16x8_t, uint16x8_t) 25480 _Form of expected instruction(s):_ `vcgt.u16 Q0, Q0, Q0' 25481 25482 * uint8x16_t vcltq_u8 (uint8x16_t, uint8x16_t) 25483 _Form of expected instruction(s):_ `vcgt.u8 Q0, Q0, Q0' 25484 25485 * uint32x4_t vcltq_s32 (int32x4_t, int32x4_t) 25486 _Form of expected instruction(s):_ `vcgt.s32 Q0, Q0, Q0' 25487 25488 * uint16x8_t vcltq_s16 (int16x8_t, int16x8_t) 25489 _Form of expected instruction(s):_ `vcgt.s16 Q0, Q0, Q0' 25490 25491 * uint8x16_t vcltq_s8 (int8x16_t, int8x16_t) 25492 _Form of expected instruction(s):_ `vcgt.s8 Q0, Q0, Q0' 25493 25494 * uint32x4_t vcltq_f32 (float32x4_t, float32x4_t) 25495 _Form of expected instruction(s):_ `vcgt.f32 Q0, Q0, Q0' 25496 25497 5.50.3.11 Comparison (absolute greater-than-or-equal-to) 25498 ........................................................ 25499 25500 * uint32x2_t vcage_f32 (float32x2_t, float32x2_t) 25501 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 25502 25503 * uint32x4_t vcageq_f32 (float32x4_t, float32x4_t) 25504 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 25505 25506 5.50.3.12 Comparison (absolute less-than-or-equal-to) 25507 ..................................................... 25508 25509 * uint32x2_t vcale_f32 (float32x2_t, float32x2_t) 25510 _Form of expected instruction(s):_ `vacge.f32 D0, D0, D0' 25511 25512 * uint32x4_t vcaleq_f32 (float32x4_t, float32x4_t) 25513 _Form of expected instruction(s):_ `vacge.f32 Q0, Q0, Q0' 25514 25515 5.50.3.13 Comparison (absolute greater-than) 25516 ............................................ 25517 25518 * uint32x2_t vcagt_f32 (float32x2_t, float32x2_t) 25519 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 25520 25521 * uint32x4_t vcagtq_f32 (float32x4_t, float32x4_t) 25522 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 25523 25524 5.50.3.14 Comparison (absolute less-than) 25525 ......................................... 25526 25527 * uint32x2_t vcalt_f32 (float32x2_t, float32x2_t) 25528 _Form of expected instruction(s):_ `vacgt.f32 D0, D0, D0' 25529 25530 * uint32x4_t vcaltq_f32 (float32x4_t, float32x4_t) 25531 _Form of expected instruction(s):_ `vacgt.f32 Q0, Q0, Q0' 25532 25533 5.50.3.15 Test bits 25534 ................... 25535 25536 * uint32x2_t vtst_u32 (uint32x2_t, uint32x2_t) 25537 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 25538 25539 * uint16x4_t vtst_u16 (uint16x4_t, uint16x4_t) 25540 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 25541 25542 * uint8x8_t vtst_u8 (uint8x8_t, uint8x8_t) 25543 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25544 25545 * uint32x2_t vtst_s32 (int32x2_t, int32x2_t) 25546 _Form of expected instruction(s):_ `vtst.32 D0, D0, D0' 25547 25548 * uint16x4_t vtst_s16 (int16x4_t, int16x4_t) 25549 _Form of expected instruction(s):_ `vtst.16 D0, D0, D0' 25550 25551 * uint8x8_t vtst_s8 (int8x8_t, int8x8_t) 25552 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25553 25554 * uint8x8_t vtst_p8 (poly8x8_t, poly8x8_t) 25555 _Form of expected instruction(s):_ `vtst.8 D0, D0, D0' 25556 25557 * uint32x4_t vtstq_u32 (uint32x4_t, uint32x4_t) 25558 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 25559 25560 * uint16x8_t vtstq_u16 (uint16x8_t, uint16x8_t) 25561 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 25562 25563 * uint8x16_t vtstq_u8 (uint8x16_t, uint8x16_t) 25564 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25565 25566 * uint32x4_t vtstq_s32 (int32x4_t, int32x4_t) 25567 _Form of expected instruction(s):_ `vtst.32 Q0, Q0, Q0' 25568 25569 * uint16x8_t vtstq_s16 (int16x8_t, int16x8_t) 25570 _Form of expected instruction(s):_ `vtst.16 Q0, Q0, Q0' 25571 25572 * uint8x16_t vtstq_s8 (int8x16_t, int8x16_t) 25573 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25574 25575 * uint8x16_t vtstq_p8 (poly8x16_t, poly8x16_t) 25576 _Form of expected instruction(s):_ `vtst.8 Q0, Q0, Q0' 25577 25578 5.50.3.16 Absolute difference 25579 ............................. 25580 25581 * uint32x2_t vabd_u32 (uint32x2_t, uint32x2_t) 25582 _Form of expected instruction(s):_ `vabd.u32 D0, D0, D0' 25583 25584 * uint16x4_t vabd_u16 (uint16x4_t, uint16x4_t) 25585 _Form of expected instruction(s):_ `vabd.u16 D0, D0, D0' 25586 25587 * uint8x8_t vabd_u8 (uint8x8_t, uint8x8_t) 25588 _Form of expected instruction(s):_ `vabd.u8 D0, D0, D0' 25589 25590 * int32x2_t vabd_s32 (int32x2_t, int32x2_t) 25591 _Form of expected instruction(s):_ `vabd.s32 D0, D0, D0' 25592 25593 * int16x4_t vabd_s16 (int16x4_t, int16x4_t) 25594 _Form of expected instruction(s):_ `vabd.s16 D0, D0, D0' 25595 25596 * int8x8_t vabd_s8 (int8x8_t, int8x8_t) 25597 _Form of expected instruction(s):_ `vabd.s8 D0, D0, D0' 25598 25599 * float32x2_t vabd_f32 (float32x2_t, float32x2_t) 25600 _Form of expected instruction(s):_ `vabd.f32 D0, D0, D0' 25601 25602 * uint32x4_t vabdq_u32 (uint32x4_t, uint32x4_t) 25603 _Form of expected instruction(s):_ `vabd.u32 Q0, Q0, Q0' 25604 25605 * uint16x8_t vabdq_u16 (uint16x8_t, uint16x8_t) 25606 _Form of expected instruction(s):_ `vabd.u16 Q0, Q0, Q0' 25607 25608 * uint8x16_t vabdq_u8 (uint8x16_t, uint8x16_t) 25609 _Form of expected instruction(s):_ `vabd.u8 Q0, Q0, Q0' 25610 25611 * int32x4_t vabdq_s32 (int32x4_t, int32x4_t) 25612 _Form of expected instruction(s):_ `vabd.s32 Q0, Q0, Q0' 25613 25614 * int16x8_t vabdq_s16 (int16x8_t, int16x8_t) 25615 _Form of expected instruction(s):_ `vabd.s16 Q0, Q0, Q0' 25616 25617 * int8x16_t vabdq_s8 (int8x16_t, int8x16_t) 25618 _Form of expected instruction(s):_ `vabd.s8 Q0, Q0, Q0' 25619 25620 * float32x4_t vabdq_f32 (float32x4_t, float32x4_t) 25621 _Form of expected instruction(s):_ `vabd.f32 Q0, Q0, Q0' 25622 25623 * uint64x2_t vabdl_u32 (uint32x2_t, uint32x2_t) 25624 _Form of expected instruction(s):_ `vabdl.u32 Q0, D0, D0' 25625 25626 * uint32x4_t vabdl_u16 (uint16x4_t, uint16x4_t) 25627 _Form of expected instruction(s):_ `vabdl.u16 Q0, D0, D0' 25628 25629 * uint16x8_t vabdl_u8 (uint8x8_t, uint8x8_t) 25630 _Form of expected instruction(s):_ `vabdl.u8 Q0, D0, D0' 25631 25632 * int64x2_t vabdl_s32 (int32x2_t, int32x2_t) 25633 _Form of expected instruction(s):_ `vabdl.s32 Q0, D0, D0' 25634 25635 * int32x4_t vabdl_s16 (int16x4_t, int16x4_t) 25636 _Form of expected instruction(s):_ `vabdl.s16 Q0, D0, D0' 25637 25638 * int16x8_t vabdl_s8 (int8x8_t, int8x8_t) 25639 _Form of expected instruction(s):_ `vabdl.s8 Q0, D0, D0' 25640 25641 5.50.3.17 Absolute difference and accumulate 25642 ............................................ 25643 25644 * uint32x2_t vaba_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 25645 _Form of expected instruction(s):_ `vaba.u32 D0, D0, D0' 25646 25647 * uint16x4_t vaba_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 25648 _Form of expected instruction(s):_ `vaba.u16 D0, D0, D0' 25649 25650 * uint8x8_t vaba_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 25651 _Form of expected instruction(s):_ `vaba.u8 D0, D0, D0' 25652 25653 * int32x2_t vaba_s32 (int32x2_t, int32x2_t, int32x2_t) 25654 _Form of expected instruction(s):_ `vaba.s32 D0, D0, D0' 25655 25656 * int16x4_t vaba_s16 (int16x4_t, int16x4_t, int16x4_t) 25657 _Form of expected instruction(s):_ `vaba.s16 D0, D0, D0' 25658 25659 * int8x8_t vaba_s8 (int8x8_t, int8x8_t, int8x8_t) 25660 _Form of expected instruction(s):_ `vaba.s8 D0, D0, D0' 25661 25662 * uint32x4_t vabaq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 25663 _Form of expected instruction(s):_ `vaba.u32 Q0, Q0, Q0' 25664 25665 * uint16x8_t vabaq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 25666 _Form of expected instruction(s):_ `vaba.u16 Q0, Q0, Q0' 25667 25668 * uint8x16_t vabaq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 25669 _Form of expected instruction(s):_ `vaba.u8 Q0, Q0, Q0' 25670 25671 * int32x4_t vabaq_s32 (int32x4_t, int32x4_t, int32x4_t) 25672 _Form of expected instruction(s):_ `vaba.s32 Q0, Q0, Q0' 25673 25674 * int16x8_t vabaq_s16 (int16x8_t, int16x8_t, int16x8_t) 25675 _Form of expected instruction(s):_ `vaba.s16 Q0, Q0, Q0' 25676 25677 * int8x16_t vabaq_s8 (int8x16_t, int8x16_t, int8x16_t) 25678 _Form of expected instruction(s):_ `vaba.s8 Q0, Q0, Q0' 25679 25680 * uint64x2_t vabal_u32 (uint64x2_t, uint32x2_t, uint32x2_t) 25681 _Form of expected instruction(s):_ `vabal.u32 Q0, D0, D0' 25682 25683 * uint32x4_t vabal_u16 (uint32x4_t, uint16x4_t, uint16x4_t) 25684 _Form of expected instruction(s):_ `vabal.u16 Q0, D0, D0' 25685 25686 * uint16x8_t vabal_u8 (uint16x8_t, uint8x8_t, uint8x8_t) 25687 _Form of expected instruction(s):_ `vabal.u8 Q0, D0, D0' 25688 25689 * int64x2_t vabal_s32 (int64x2_t, int32x2_t, int32x2_t) 25690 _Form of expected instruction(s):_ `vabal.s32 Q0, D0, D0' 25691 25692 * int32x4_t vabal_s16 (int32x4_t, int16x4_t, int16x4_t) 25693 _Form of expected instruction(s):_ `vabal.s16 Q0, D0, D0' 25694 25695 * int16x8_t vabal_s8 (int16x8_t, int8x8_t, int8x8_t) 25696 _Form of expected instruction(s):_ `vabal.s8 Q0, D0, D0' 25697 25698 5.50.3.18 Maximum 25699 ................. 25700 25701 * uint32x2_t vmax_u32 (uint32x2_t, uint32x2_t) 25702 _Form of expected instruction(s):_ `vmax.u32 D0, D0, D0' 25703 25704 * uint16x4_t vmax_u16 (uint16x4_t, uint16x4_t) 25705 _Form of expected instruction(s):_ `vmax.u16 D0, D0, D0' 25706 25707 * uint8x8_t vmax_u8 (uint8x8_t, uint8x8_t) 25708 _Form of expected instruction(s):_ `vmax.u8 D0, D0, D0' 25709 25710 * int32x2_t vmax_s32 (int32x2_t, int32x2_t) 25711 _Form of expected instruction(s):_ `vmax.s32 D0, D0, D0' 25712 25713 * int16x4_t vmax_s16 (int16x4_t, int16x4_t) 25714 _Form of expected instruction(s):_ `vmax.s16 D0, D0, D0' 25715 25716 * int8x8_t vmax_s8 (int8x8_t, int8x8_t) 25717 _Form of expected instruction(s):_ `vmax.s8 D0, D0, D0' 25718 25719 * float32x2_t vmax_f32 (float32x2_t, float32x2_t) 25720 _Form of expected instruction(s):_ `vmax.f32 D0, D0, D0' 25721 25722 * uint32x4_t vmaxq_u32 (uint32x4_t, uint32x4_t) 25723 _Form of expected instruction(s):_ `vmax.u32 Q0, Q0, Q0' 25724 25725 * uint16x8_t vmaxq_u16 (uint16x8_t, uint16x8_t) 25726 _Form of expected instruction(s):_ `vmax.u16 Q0, Q0, Q0' 25727 25728 * uint8x16_t vmaxq_u8 (uint8x16_t, uint8x16_t) 25729 _Form of expected instruction(s):_ `vmax.u8 Q0, Q0, Q0' 25730 25731 * int32x4_t vmaxq_s32 (int32x4_t, int32x4_t) 25732 _Form of expected instruction(s):_ `vmax.s32 Q0, Q0, Q0' 25733 25734 * int16x8_t vmaxq_s16 (int16x8_t, int16x8_t) 25735 _Form of expected instruction(s):_ `vmax.s16 Q0, Q0, Q0' 25736 25737 * int8x16_t vmaxq_s8 (int8x16_t, int8x16_t) 25738 _Form of expected instruction(s):_ `vmax.s8 Q0, Q0, Q0' 25739 25740 * float32x4_t vmaxq_f32 (float32x4_t, float32x4_t) 25741 _Form of expected instruction(s):_ `vmax.f32 Q0, Q0, Q0' 25742 25743 5.50.3.19 Minimum 25744 ................. 25745 25746 * uint32x2_t vmin_u32 (uint32x2_t, uint32x2_t) 25747 _Form of expected instruction(s):_ `vmin.u32 D0, D0, D0' 25748 25749 * uint16x4_t vmin_u16 (uint16x4_t, uint16x4_t) 25750 _Form of expected instruction(s):_ `vmin.u16 D0, D0, D0' 25751 25752 * uint8x8_t vmin_u8 (uint8x8_t, uint8x8_t) 25753 _Form of expected instruction(s):_ `vmin.u8 D0, D0, D0' 25754 25755 * int32x2_t vmin_s32 (int32x2_t, int32x2_t) 25756 _Form of expected instruction(s):_ `vmin.s32 D0, D0, D0' 25757 25758 * int16x4_t vmin_s16 (int16x4_t, int16x4_t) 25759 _Form of expected instruction(s):_ `vmin.s16 D0, D0, D0' 25760 25761 * int8x8_t vmin_s8 (int8x8_t, int8x8_t) 25762 _Form of expected instruction(s):_ `vmin.s8 D0, D0, D0' 25763 25764 * float32x2_t vmin_f32 (float32x2_t, float32x2_t) 25765 _Form of expected instruction(s):_ `vmin.f32 D0, D0, D0' 25766 25767 * uint32x4_t vminq_u32 (uint32x4_t, uint32x4_t) 25768 _Form of expected instruction(s):_ `vmin.u32 Q0, Q0, Q0' 25769 25770 * uint16x8_t vminq_u16 (uint16x8_t, uint16x8_t) 25771 _Form of expected instruction(s):_ `vmin.u16 Q0, Q0, Q0' 25772 25773 * uint8x16_t vminq_u8 (uint8x16_t, uint8x16_t) 25774 _Form of expected instruction(s):_ `vmin.u8 Q0, Q0, Q0' 25775 25776 * int32x4_t vminq_s32 (int32x4_t, int32x4_t) 25777 _Form of expected instruction(s):_ `vmin.s32 Q0, Q0, Q0' 25778 25779 * int16x8_t vminq_s16 (int16x8_t, int16x8_t) 25780 _Form of expected instruction(s):_ `vmin.s16 Q0, Q0, Q0' 25781 25782 * int8x16_t vminq_s8 (int8x16_t, int8x16_t) 25783 _Form of expected instruction(s):_ `vmin.s8 Q0, Q0, Q0' 25784 25785 * float32x4_t vminq_f32 (float32x4_t, float32x4_t) 25786 _Form of expected instruction(s):_ `vmin.f32 Q0, Q0, Q0' 25787 25788 5.50.3.20 Pairwise add 25789 ...................... 25790 25791 * uint32x2_t vpadd_u32 (uint32x2_t, uint32x2_t) 25792 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 25793 25794 * uint16x4_t vpadd_u16 (uint16x4_t, uint16x4_t) 25795 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 25796 25797 * uint8x8_t vpadd_u8 (uint8x8_t, uint8x8_t) 25798 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 25799 25800 * int32x2_t vpadd_s32 (int32x2_t, int32x2_t) 25801 _Form of expected instruction(s):_ `vpadd.i32 D0, D0, D0' 25802 25803 * int16x4_t vpadd_s16 (int16x4_t, int16x4_t) 25804 _Form of expected instruction(s):_ `vpadd.i16 D0, D0, D0' 25805 25806 * int8x8_t vpadd_s8 (int8x8_t, int8x8_t) 25807 _Form of expected instruction(s):_ `vpadd.i8 D0, D0, D0' 25808 25809 * float32x2_t vpadd_f32 (float32x2_t, float32x2_t) 25810 _Form of expected instruction(s):_ `vpadd.f32 D0, D0, D0' 25811 25812 * uint64x1_t vpaddl_u32 (uint32x2_t) 25813 _Form of expected instruction(s):_ `vpaddl.u32 D0, D0' 25814 25815 * uint32x2_t vpaddl_u16 (uint16x4_t) 25816 _Form of expected instruction(s):_ `vpaddl.u16 D0, D0' 25817 25818 * uint16x4_t vpaddl_u8 (uint8x8_t) 25819 _Form of expected instruction(s):_ `vpaddl.u8 D0, D0' 25820 25821 * int64x1_t vpaddl_s32 (int32x2_t) 25822 _Form of expected instruction(s):_ `vpaddl.s32 D0, D0' 25823 25824 * int32x2_t vpaddl_s16 (int16x4_t) 25825 _Form of expected instruction(s):_ `vpaddl.s16 D0, D0' 25826 25827 * int16x4_t vpaddl_s8 (int8x8_t) 25828 _Form of expected instruction(s):_ `vpaddl.s8 D0, D0' 25829 25830 * uint64x2_t vpaddlq_u32 (uint32x4_t) 25831 _Form of expected instruction(s):_ `vpaddl.u32 Q0, Q0' 25832 25833 * uint32x4_t vpaddlq_u16 (uint16x8_t) 25834 _Form of expected instruction(s):_ `vpaddl.u16 Q0, Q0' 25835 25836 * uint16x8_t vpaddlq_u8 (uint8x16_t) 25837 _Form of expected instruction(s):_ `vpaddl.u8 Q0, Q0' 25838 25839 * int64x2_t vpaddlq_s32 (int32x4_t) 25840 _Form of expected instruction(s):_ `vpaddl.s32 Q0, Q0' 25841 25842 * int32x4_t vpaddlq_s16 (int16x8_t) 25843 _Form of expected instruction(s):_ `vpaddl.s16 Q0, Q0' 25844 25845 * int16x8_t vpaddlq_s8 (int8x16_t) 25846 _Form of expected instruction(s):_ `vpaddl.s8 Q0, Q0' 25847 25848 5.50.3.21 Pairwise add, single_opcode widen and accumulate 25849 .......................................................... 25850 25851 * uint64x1_t vpadal_u32 (uint64x1_t, uint32x2_t) 25852 _Form of expected instruction(s):_ `vpadal.u32 D0, D0' 25853 25854 * uint32x2_t vpadal_u16 (uint32x2_t, uint16x4_t) 25855 _Form of expected instruction(s):_ `vpadal.u16 D0, D0' 25856 25857 * uint16x4_t vpadal_u8 (uint16x4_t, uint8x8_t) 25858 _Form of expected instruction(s):_ `vpadal.u8 D0, D0' 25859 25860 * int64x1_t vpadal_s32 (int64x1_t, int32x2_t) 25861 _Form of expected instruction(s):_ `vpadal.s32 D0, D0' 25862 25863 * int32x2_t vpadal_s16 (int32x2_t, int16x4_t) 25864 _Form of expected instruction(s):_ `vpadal.s16 D0, D0' 25865 25866 * int16x4_t vpadal_s8 (int16x4_t, int8x8_t) 25867 _Form of expected instruction(s):_ `vpadal.s8 D0, D0' 25868 25869 * uint64x2_t vpadalq_u32 (uint64x2_t, uint32x4_t) 25870 _Form of expected instruction(s):_ `vpadal.u32 Q0, Q0' 25871 25872 * uint32x4_t vpadalq_u16 (uint32x4_t, uint16x8_t) 25873 _Form of expected instruction(s):_ `vpadal.u16 Q0, Q0' 25874 25875 * uint16x8_t vpadalq_u8 (uint16x8_t, uint8x16_t) 25876 _Form of expected instruction(s):_ `vpadal.u8 Q0, Q0' 25877 25878 * int64x2_t vpadalq_s32 (int64x2_t, int32x4_t) 25879 _Form of expected instruction(s):_ `vpadal.s32 Q0, Q0' 25880 25881 * int32x4_t vpadalq_s16 (int32x4_t, int16x8_t) 25882 _Form of expected instruction(s):_ `vpadal.s16 Q0, Q0' 25883 25884 * int16x8_t vpadalq_s8 (int16x8_t, int8x16_t) 25885 _Form of expected instruction(s):_ `vpadal.s8 Q0, Q0' 25886 25887 5.50.3.22 Folding maximum 25888 ......................... 25889 25890 * uint32x2_t vpmax_u32 (uint32x2_t, uint32x2_t) 25891 _Form of expected instruction(s):_ `vpmax.u32 D0, D0, D0' 25892 25893 * uint16x4_t vpmax_u16 (uint16x4_t, uint16x4_t) 25894 _Form of expected instruction(s):_ `vpmax.u16 D0, D0, D0' 25895 25896 * uint8x8_t vpmax_u8 (uint8x8_t, uint8x8_t) 25897 _Form of expected instruction(s):_ `vpmax.u8 D0, D0, D0' 25898 25899 * int32x2_t vpmax_s32 (int32x2_t, int32x2_t) 25900 _Form of expected instruction(s):_ `vpmax.s32 D0, D0, D0' 25901 25902 * int16x4_t vpmax_s16 (int16x4_t, int16x4_t) 25903 _Form of expected instruction(s):_ `vpmax.s16 D0, D0, D0' 25904 25905 * int8x8_t vpmax_s8 (int8x8_t, int8x8_t) 25906 _Form of expected instruction(s):_ `vpmax.s8 D0, D0, D0' 25907 25908 * float32x2_t vpmax_f32 (float32x2_t, float32x2_t) 25909 _Form of expected instruction(s):_ `vpmax.f32 D0, D0, D0' 25910 25911 5.50.3.23 Folding minimum 25912 ......................... 25913 25914 * uint32x2_t vpmin_u32 (uint32x2_t, uint32x2_t) 25915 _Form of expected instruction(s):_ `vpmin.u32 D0, D0, D0' 25916 25917 * uint16x4_t vpmin_u16 (uint16x4_t, uint16x4_t) 25918 _Form of expected instruction(s):_ `vpmin.u16 D0, D0, D0' 25919 25920 * uint8x8_t vpmin_u8 (uint8x8_t, uint8x8_t) 25921 _Form of expected instruction(s):_ `vpmin.u8 D0, D0, D0' 25922 25923 * int32x2_t vpmin_s32 (int32x2_t, int32x2_t) 25924 _Form of expected instruction(s):_ `vpmin.s32 D0, D0, D0' 25925 25926 * int16x4_t vpmin_s16 (int16x4_t, int16x4_t) 25927 _Form of expected instruction(s):_ `vpmin.s16 D0, D0, D0' 25928 25929 * int8x8_t vpmin_s8 (int8x8_t, int8x8_t) 25930 _Form of expected instruction(s):_ `vpmin.s8 D0, D0, D0' 25931 25932 * float32x2_t vpmin_f32 (float32x2_t, float32x2_t) 25933 _Form of expected instruction(s):_ `vpmin.f32 D0, D0, D0' 25934 25935 5.50.3.24 Reciprocal step 25936 ......................... 25937 25938 * float32x2_t vrecps_f32 (float32x2_t, float32x2_t) 25939 _Form of expected instruction(s):_ `vrecps.f32 D0, D0, D0' 25940 25941 * float32x4_t vrecpsq_f32 (float32x4_t, float32x4_t) 25942 _Form of expected instruction(s):_ `vrecps.f32 Q0, Q0, Q0' 25943 25944 * float32x2_t vrsqrts_f32 (float32x2_t, float32x2_t) 25945 _Form of expected instruction(s):_ `vrsqrts.f32 D0, D0, D0' 25946 25947 * float32x4_t vrsqrtsq_f32 (float32x4_t, float32x4_t) 25948 _Form of expected instruction(s):_ `vrsqrts.f32 Q0, Q0, Q0' 25949 25950 5.50.3.25 Vector shift left 25951 ........................... 25952 25953 * uint32x2_t vshl_u32 (uint32x2_t, int32x2_t) 25954 _Form of expected instruction(s):_ `vshl.u32 D0, D0, D0' 25955 25956 * uint16x4_t vshl_u16 (uint16x4_t, int16x4_t) 25957 _Form of expected instruction(s):_ `vshl.u16 D0, D0, D0' 25958 25959 * uint8x8_t vshl_u8 (uint8x8_t, int8x8_t) 25960 _Form of expected instruction(s):_ `vshl.u8 D0, D0, D0' 25961 25962 * int32x2_t vshl_s32 (int32x2_t, int32x2_t) 25963 _Form of expected instruction(s):_ `vshl.s32 D0, D0, D0' 25964 25965 * int16x4_t vshl_s16 (int16x4_t, int16x4_t) 25966 _Form of expected instruction(s):_ `vshl.s16 D0, D0, D0' 25967 25968 * int8x8_t vshl_s8 (int8x8_t, int8x8_t) 25969 _Form of expected instruction(s):_ `vshl.s8 D0, D0, D0' 25970 25971 * uint64x1_t vshl_u64 (uint64x1_t, int64x1_t) 25972 _Form of expected instruction(s):_ `vshl.u64 D0, D0, D0' 25973 25974 * int64x1_t vshl_s64 (int64x1_t, int64x1_t) 25975 _Form of expected instruction(s):_ `vshl.s64 D0, D0, D0' 25976 25977 * uint32x4_t vshlq_u32 (uint32x4_t, int32x4_t) 25978 _Form of expected instruction(s):_ `vshl.u32 Q0, Q0, Q0' 25979 25980 * uint16x8_t vshlq_u16 (uint16x8_t, int16x8_t) 25981 _Form of expected instruction(s):_ `vshl.u16 Q0, Q0, Q0' 25982 25983 * uint8x16_t vshlq_u8 (uint8x16_t, int8x16_t) 25984 _Form of expected instruction(s):_ `vshl.u8 Q0, Q0, Q0' 25985 25986 * int32x4_t vshlq_s32 (int32x4_t, int32x4_t) 25987 _Form of expected instruction(s):_ `vshl.s32 Q0, Q0, Q0' 25988 25989 * int16x8_t vshlq_s16 (int16x8_t, int16x8_t) 25990 _Form of expected instruction(s):_ `vshl.s16 Q0, Q0, Q0' 25991 25992 * int8x16_t vshlq_s8 (int8x16_t, int8x16_t) 25993 _Form of expected instruction(s):_ `vshl.s8 Q0, Q0, Q0' 25994 25995 * uint64x2_t vshlq_u64 (uint64x2_t, int64x2_t) 25996 _Form of expected instruction(s):_ `vshl.u64 Q0, Q0, Q0' 25997 25998 * int64x2_t vshlq_s64 (int64x2_t, int64x2_t) 25999 _Form of expected instruction(s):_ `vshl.s64 Q0, Q0, Q0' 26000 26001 * uint32x2_t vrshl_u32 (uint32x2_t, int32x2_t) 26002 _Form of expected instruction(s):_ `vrshl.u32 D0, D0, D0' 26003 26004 * uint16x4_t vrshl_u16 (uint16x4_t, int16x4_t) 26005 _Form of expected instruction(s):_ `vrshl.u16 D0, D0, D0' 26006 26007 * uint8x8_t vrshl_u8 (uint8x8_t, int8x8_t) 26008 _Form of expected instruction(s):_ `vrshl.u8 D0, D0, D0' 26009 26010 * int32x2_t vrshl_s32 (int32x2_t, int32x2_t) 26011 _Form of expected instruction(s):_ `vrshl.s32 D0, D0, D0' 26012 26013 * int16x4_t vrshl_s16 (int16x4_t, int16x4_t) 26014 _Form of expected instruction(s):_ `vrshl.s16 D0, D0, D0' 26015 26016 * int8x8_t vrshl_s8 (int8x8_t, int8x8_t) 26017 _Form of expected instruction(s):_ `vrshl.s8 D0, D0, D0' 26018 26019 * uint64x1_t vrshl_u64 (uint64x1_t, int64x1_t) 26020 _Form of expected instruction(s):_ `vrshl.u64 D0, D0, D0' 26021 26022 * int64x1_t vrshl_s64 (int64x1_t, int64x1_t) 26023 _Form of expected instruction(s):_ `vrshl.s64 D0, D0, D0' 26024 26025 * uint32x4_t vrshlq_u32 (uint32x4_t, int32x4_t) 26026 _Form of expected instruction(s):_ `vrshl.u32 Q0, Q0, Q0' 26027 26028 * uint16x8_t vrshlq_u16 (uint16x8_t, int16x8_t) 26029 _Form of expected instruction(s):_ `vrshl.u16 Q0, Q0, Q0' 26030 26031 * uint8x16_t vrshlq_u8 (uint8x16_t, int8x16_t) 26032 _Form of expected instruction(s):_ `vrshl.u8 Q0, Q0, Q0' 26033 26034 * int32x4_t vrshlq_s32 (int32x4_t, int32x4_t) 26035 _Form of expected instruction(s):_ `vrshl.s32 Q0, Q0, Q0' 26036 26037 * int16x8_t vrshlq_s16 (int16x8_t, int16x8_t) 26038 _Form of expected instruction(s):_ `vrshl.s16 Q0, Q0, Q0' 26039 26040 * int8x16_t vrshlq_s8 (int8x16_t, int8x16_t) 26041 _Form of expected instruction(s):_ `vrshl.s8 Q0, Q0, Q0' 26042 26043 * uint64x2_t vrshlq_u64 (uint64x2_t, int64x2_t) 26044 _Form of expected instruction(s):_ `vrshl.u64 Q0, Q0, Q0' 26045 26046 * int64x2_t vrshlq_s64 (int64x2_t, int64x2_t) 26047 _Form of expected instruction(s):_ `vrshl.s64 Q0, Q0, Q0' 26048 26049 * uint32x2_t vqshl_u32 (uint32x2_t, int32x2_t) 26050 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, D0' 26051 26052 * uint16x4_t vqshl_u16 (uint16x4_t, int16x4_t) 26053 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, D0' 26054 26055 * uint8x8_t vqshl_u8 (uint8x8_t, int8x8_t) 26056 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, D0' 26057 26058 * int32x2_t vqshl_s32 (int32x2_t, int32x2_t) 26059 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, D0' 26060 26061 * int16x4_t vqshl_s16 (int16x4_t, int16x4_t) 26062 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, D0' 26063 26064 * int8x8_t vqshl_s8 (int8x8_t, int8x8_t) 26065 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, D0' 26066 26067 * uint64x1_t vqshl_u64 (uint64x1_t, int64x1_t) 26068 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, D0' 26069 26070 * int64x1_t vqshl_s64 (int64x1_t, int64x1_t) 26071 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, D0' 26072 26073 * uint32x4_t vqshlq_u32 (uint32x4_t, int32x4_t) 26074 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, Q0' 26075 26076 * uint16x8_t vqshlq_u16 (uint16x8_t, int16x8_t) 26077 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, Q0' 26078 26079 * uint8x16_t vqshlq_u8 (uint8x16_t, int8x16_t) 26080 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, Q0' 26081 26082 * int32x4_t vqshlq_s32 (int32x4_t, int32x4_t) 26083 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, Q0' 26084 26085 * int16x8_t vqshlq_s16 (int16x8_t, int16x8_t) 26086 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, Q0' 26087 26088 * int8x16_t vqshlq_s8 (int8x16_t, int8x16_t) 26089 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, Q0' 26090 26091 * uint64x2_t vqshlq_u64 (uint64x2_t, int64x2_t) 26092 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, Q0' 26093 26094 * int64x2_t vqshlq_s64 (int64x2_t, int64x2_t) 26095 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, Q0' 26096 26097 * uint32x2_t vqrshl_u32 (uint32x2_t, int32x2_t) 26098 _Form of expected instruction(s):_ `vqrshl.u32 D0, D0, D0' 26099 26100 * uint16x4_t vqrshl_u16 (uint16x4_t, int16x4_t) 26101 _Form of expected instruction(s):_ `vqrshl.u16 D0, D0, D0' 26102 26103 * uint8x8_t vqrshl_u8 (uint8x8_t, int8x8_t) 26104 _Form of expected instruction(s):_ `vqrshl.u8 D0, D0, D0' 26105 26106 * int32x2_t vqrshl_s32 (int32x2_t, int32x2_t) 26107 _Form of expected instruction(s):_ `vqrshl.s32 D0, D0, D0' 26108 26109 * int16x4_t vqrshl_s16 (int16x4_t, int16x4_t) 26110 _Form of expected instruction(s):_ `vqrshl.s16 D0, D0, D0' 26111 26112 * int8x8_t vqrshl_s8 (int8x8_t, int8x8_t) 26113 _Form of expected instruction(s):_ `vqrshl.s8 D0, D0, D0' 26114 26115 * uint64x1_t vqrshl_u64 (uint64x1_t, int64x1_t) 26116 _Form of expected instruction(s):_ `vqrshl.u64 D0, D0, D0' 26117 26118 * int64x1_t vqrshl_s64 (int64x1_t, int64x1_t) 26119 _Form of expected instruction(s):_ `vqrshl.s64 D0, D0, D0' 26120 26121 * uint32x4_t vqrshlq_u32 (uint32x4_t, int32x4_t) 26122 _Form of expected instruction(s):_ `vqrshl.u32 Q0, Q0, Q0' 26123 26124 * uint16x8_t vqrshlq_u16 (uint16x8_t, int16x8_t) 26125 _Form of expected instruction(s):_ `vqrshl.u16 Q0, Q0, Q0' 26126 26127 * uint8x16_t vqrshlq_u8 (uint8x16_t, int8x16_t) 26128 _Form of expected instruction(s):_ `vqrshl.u8 Q0, Q0, Q0' 26129 26130 * int32x4_t vqrshlq_s32 (int32x4_t, int32x4_t) 26131 _Form of expected instruction(s):_ `vqrshl.s32 Q0, Q0, Q0' 26132 26133 * int16x8_t vqrshlq_s16 (int16x8_t, int16x8_t) 26134 _Form of expected instruction(s):_ `vqrshl.s16 Q0, Q0, Q0' 26135 26136 * int8x16_t vqrshlq_s8 (int8x16_t, int8x16_t) 26137 _Form of expected instruction(s):_ `vqrshl.s8 Q0, Q0, Q0' 26138 26139 * uint64x2_t vqrshlq_u64 (uint64x2_t, int64x2_t) 26140 _Form of expected instruction(s):_ `vqrshl.u64 Q0, Q0, Q0' 26141 26142 * int64x2_t vqrshlq_s64 (int64x2_t, int64x2_t) 26143 _Form of expected instruction(s):_ `vqrshl.s64 Q0, Q0, Q0' 26144 26145 5.50.3.26 Vector shift left by constant 26146 ....................................... 26147 26148 * uint32x2_t vshl_n_u32 (uint32x2_t, const int) 26149 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 26150 26151 * uint16x4_t vshl_n_u16 (uint16x4_t, const int) 26152 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 26153 26154 * uint8x8_t vshl_n_u8 (uint8x8_t, const int) 26155 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 26156 26157 * int32x2_t vshl_n_s32 (int32x2_t, const int) 26158 _Form of expected instruction(s):_ `vshl.i32 D0, D0, #0' 26159 26160 * int16x4_t vshl_n_s16 (int16x4_t, const int) 26161 _Form of expected instruction(s):_ `vshl.i16 D0, D0, #0' 26162 26163 * int8x8_t vshl_n_s8 (int8x8_t, const int) 26164 _Form of expected instruction(s):_ `vshl.i8 D0, D0, #0' 26165 26166 * uint64x1_t vshl_n_u64 (uint64x1_t, const int) 26167 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 26168 26169 * int64x1_t vshl_n_s64 (int64x1_t, const int) 26170 _Form of expected instruction(s):_ `vshl.i64 D0, D0, #0' 26171 26172 * uint32x4_t vshlq_n_u32 (uint32x4_t, const int) 26173 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 26174 26175 * uint16x8_t vshlq_n_u16 (uint16x8_t, const int) 26176 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 26177 26178 * uint8x16_t vshlq_n_u8 (uint8x16_t, const int) 26179 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 26180 26181 * int32x4_t vshlq_n_s32 (int32x4_t, const int) 26182 _Form of expected instruction(s):_ `vshl.i32 Q0, Q0, #0' 26183 26184 * int16x8_t vshlq_n_s16 (int16x8_t, const int) 26185 _Form of expected instruction(s):_ `vshl.i16 Q0, Q0, #0' 26186 26187 * int8x16_t vshlq_n_s8 (int8x16_t, const int) 26188 _Form of expected instruction(s):_ `vshl.i8 Q0, Q0, #0' 26189 26190 * uint64x2_t vshlq_n_u64 (uint64x2_t, const int) 26191 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 26192 26193 * int64x2_t vshlq_n_s64 (int64x2_t, const int) 26194 _Form of expected instruction(s):_ `vshl.i64 Q0, Q0, #0' 26195 26196 * uint32x2_t vqshl_n_u32 (uint32x2_t, const int) 26197 _Form of expected instruction(s):_ `vqshl.u32 D0, D0, #0' 26198 26199 * uint16x4_t vqshl_n_u16 (uint16x4_t, const int) 26200 _Form of expected instruction(s):_ `vqshl.u16 D0, D0, #0' 26201 26202 * uint8x8_t vqshl_n_u8 (uint8x8_t, const int) 26203 _Form of expected instruction(s):_ `vqshl.u8 D0, D0, #0' 26204 26205 * int32x2_t vqshl_n_s32 (int32x2_t, const int) 26206 _Form of expected instruction(s):_ `vqshl.s32 D0, D0, #0' 26207 26208 * int16x4_t vqshl_n_s16 (int16x4_t, const int) 26209 _Form of expected instruction(s):_ `vqshl.s16 D0, D0, #0' 26210 26211 * int8x8_t vqshl_n_s8 (int8x8_t, const int) 26212 _Form of expected instruction(s):_ `vqshl.s8 D0, D0, #0' 26213 26214 * uint64x1_t vqshl_n_u64 (uint64x1_t, const int) 26215 _Form of expected instruction(s):_ `vqshl.u64 D0, D0, #0' 26216 26217 * int64x1_t vqshl_n_s64 (int64x1_t, const int) 26218 _Form of expected instruction(s):_ `vqshl.s64 D0, D0, #0' 26219 26220 * uint32x4_t vqshlq_n_u32 (uint32x4_t, const int) 26221 _Form of expected instruction(s):_ `vqshl.u32 Q0, Q0, #0' 26222 26223 * uint16x8_t vqshlq_n_u16 (uint16x8_t, const int) 26224 _Form of expected instruction(s):_ `vqshl.u16 Q0, Q0, #0' 26225 26226 * uint8x16_t vqshlq_n_u8 (uint8x16_t, const int) 26227 _Form of expected instruction(s):_ `vqshl.u8 Q0, Q0, #0' 26228 26229 * int32x4_t vqshlq_n_s32 (int32x4_t, const int) 26230 _Form of expected instruction(s):_ `vqshl.s32 Q0, Q0, #0' 26231 26232 * int16x8_t vqshlq_n_s16 (int16x8_t, const int) 26233 _Form of expected instruction(s):_ `vqshl.s16 Q0, Q0, #0' 26234 26235 * int8x16_t vqshlq_n_s8 (int8x16_t, const int) 26236 _Form of expected instruction(s):_ `vqshl.s8 Q0, Q0, #0' 26237 26238 * uint64x2_t vqshlq_n_u64 (uint64x2_t, const int) 26239 _Form of expected instruction(s):_ `vqshl.u64 Q0, Q0, #0' 26240 26241 * int64x2_t vqshlq_n_s64 (int64x2_t, const int) 26242 _Form of expected instruction(s):_ `vqshl.s64 Q0, Q0, #0' 26243 26244 * uint64x1_t vqshlu_n_s64 (int64x1_t, const int) 26245 _Form of expected instruction(s):_ `vqshlu.s64 D0, D0, #0' 26246 26247 * uint32x2_t vqshlu_n_s32 (int32x2_t, const int) 26248 _Form of expected instruction(s):_ `vqshlu.s32 D0, D0, #0' 26249 26250 * uint16x4_t vqshlu_n_s16 (int16x4_t, const int) 26251 _Form of expected instruction(s):_ `vqshlu.s16 D0, D0, #0' 26252 26253 * uint8x8_t vqshlu_n_s8 (int8x8_t, const int) 26254 _Form of expected instruction(s):_ `vqshlu.s8 D0, D0, #0' 26255 26256 * uint64x2_t vqshluq_n_s64 (int64x2_t, const int) 26257 _Form of expected instruction(s):_ `vqshlu.s64 Q0, Q0, #0' 26258 26259 * uint32x4_t vqshluq_n_s32 (int32x4_t, const int) 26260 _Form of expected instruction(s):_ `vqshlu.s32 Q0, Q0, #0' 26261 26262 * uint16x8_t vqshluq_n_s16 (int16x8_t, const int) 26263 _Form of expected instruction(s):_ `vqshlu.s16 Q0, Q0, #0' 26264 26265 * uint8x16_t vqshluq_n_s8 (int8x16_t, const int) 26266 _Form of expected instruction(s):_ `vqshlu.s8 Q0, Q0, #0' 26267 26268 * uint64x2_t vshll_n_u32 (uint32x2_t, const int) 26269 _Form of expected instruction(s):_ `vshll.u32 Q0, D0, #0' 26270 26271 * uint32x4_t vshll_n_u16 (uint16x4_t, const int) 26272 _Form of expected instruction(s):_ `vshll.u16 Q0, D0, #0' 26273 26274 * uint16x8_t vshll_n_u8 (uint8x8_t, const int) 26275 _Form of expected instruction(s):_ `vshll.u8 Q0, D0, #0' 26276 26277 * int64x2_t vshll_n_s32 (int32x2_t, const int) 26278 _Form of expected instruction(s):_ `vshll.s32 Q0, D0, #0' 26279 26280 * int32x4_t vshll_n_s16 (int16x4_t, const int) 26281 _Form of expected instruction(s):_ `vshll.s16 Q0, D0, #0' 26282 26283 * int16x8_t vshll_n_s8 (int8x8_t, const int) 26284 _Form of expected instruction(s):_ `vshll.s8 Q0, D0, #0' 26285 26286 5.50.3.27 Vector shift right by constant 26287 ........................................ 26288 26289 * uint32x2_t vshr_n_u32 (uint32x2_t, const int) 26290 _Form of expected instruction(s):_ `vshr.u32 D0, D0, #0' 26291 26292 * uint16x4_t vshr_n_u16 (uint16x4_t, const int) 26293 _Form of expected instruction(s):_ `vshr.u16 D0, D0, #0' 26294 26295 * uint8x8_t vshr_n_u8 (uint8x8_t, const int) 26296 _Form of expected instruction(s):_ `vshr.u8 D0, D0, #0' 26297 26298 * int32x2_t vshr_n_s32 (int32x2_t, const int) 26299 _Form of expected instruction(s):_ `vshr.s32 D0, D0, #0' 26300 26301 * int16x4_t vshr_n_s16 (int16x4_t, const int) 26302 _Form of expected instruction(s):_ `vshr.s16 D0, D0, #0' 26303 26304 * int8x8_t vshr_n_s8 (int8x8_t, const int) 26305 _Form of expected instruction(s):_ `vshr.s8 D0, D0, #0' 26306 26307 * uint64x1_t vshr_n_u64 (uint64x1_t, const int) 26308 _Form of expected instruction(s):_ `vshr.u64 D0, D0, #0' 26309 26310 * int64x1_t vshr_n_s64 (int64x1_t, const int) 26311 _Form of expected instruction(s):_ `vshr.s64 D0, D0, #0' 26312 26313 * uint32x4_t vshrq_n_u32 (uint32x4_t, const int) 26314 _Form of expected instruction(s):_ `vshr.u32 Q0, Q0, #0' 26315 26316 * uint16x8_t vshrq_n_u16 (uint16x8_t, const int) 26317 _Form of expected instruction(s):_ `vshr.u16 Q0, Q0, #0' 26318 26319 * uint8x16_t vshrq_n_u8 (uint8x16_t, const int) 26320 _Form of expected instruction(s):_ `vshr.u8 Q0, Q0, #0' 26321 26322 * int32x4_t vshrq_n_s32 (int32x4_t, const int) 26323 _Form of expected instruction(s):_ `vshr.s32 Q0, Q0, #0' 26324 26325 * int16x8_t vshrq_n_s16 (int16x8_t, const int) 26326 _Form of expected instruction(s):_ `vshr.s16 Q0, Q0, #0' 26327 26328 * int8x16_t vshrq_n_s8 (int8x16_t, const int) 26329 _Form of expected instruction(s):_ `vshr.s8 Q0, Q0, #0' 26330 26331 * uint64x2_t vshrq_n_u64 (uint64x2_t, const int) 26332 _Form of expected instruction(s):_ `vshr.u64 Q0, Q0, #0' 26333 26334 * int64x2_t vshrq_n_s64 (int64x2_t, const int) 26335 _Form of expected instruction(s):_ `vshr.s64 Q0, Q0, #0' 26336 26337 * uint32x2_t vrshr_n_u32 (uint32x2_t, const int) 26338 _Form of expected instruction(s):_ `vrshr.u32 D0, D0, #0' 26339 26340 * uint16x4_t vrshr_n_u16 (uint16x4_t, const int) 26341 _Form of expected instruction(s):_ `vrshr.u16 D0, D0, #0' 26342 26343 * uint8x8_t vrshr_n_u8 (uint8x8_t, const int) 26344 _Form of expected instruction(s):_ `vrshr.u8 D0, D0, #0' 26345 26346 * int32x2_t vrshr_n_s32 (int32x2_t, const int) 26347 _Form of expected instruction(s):_ `vrshr.s32 D0, D0, #0' 26348 26349 * int16x4_t vrshr_n_s16 (int16x4_t, const int) 26350 _Form of expected instruction(s):_ `vrshr.s16 D0, D0, #0' 26351 26352 * int8x8_t vrshr_n_s8 (int8x8_t, const int) 26353 _Form of expected instruction(s):_ `vrshr.s8 D0, D0, #0' 26354 26355 * uint64x1_t vrshr_n_u64 (uint64x1_t, const int) 26356 _Form of expected instruction(s):_ `vrshr.u64 D0, D0, #0' 26357 26358 * int64x1_t vrshr_n_s64 (int64x1_t, const int) 26359 _Form of expected instruction(s):_ `vrshr.s64 D0, D0, #0' 26360 26361 * uint32x4_t vrshrq_n_u32 (uint32x4_t, const int) 26362 _Form of expected instruction(s):_ `vrshr.u32 Q0, Q0, #0' 26363 26364 * uint16x8_t vrshrq_n_u16 (uint16x8_t, const int) 26365 _Form of expected instruction(s):_ `vrshr.u16 Q0, Q0, #0' 26366 26367 * uint8x16_t vrshrq_n_u8 (uint8x16_t, const int) 26368 _Form of expected instruction(s):_ `vrshr.u8 Q0, Q0, #0' 26369 26370 * int32x4_t vrshrq_n_s32 (int32x4_t, const int) 26371 _Form of expected instruction(s):_ `vrshr.s32 Q0, Q0, #0' 26372 26373 * int16x8_t vrshrq_n_s16 (int16x8_t, const int) 26374 _Form of expected instruction(s):_ `vrshr.s16 Q0, Q0, #0' 26375 26376 * int8x16_t vrshrq_n_s8 (int8x16_t, const int) 26377 _Form of expected instruction(s):_ `vrshr.s8 Q0, Q0, #0' 26378 26379 * uint64x2_t vrshrq_n_u64 (uint64x2_t, const int) 26380 _Form of expected instruction(s):_ `vrshr.u64 Q0, Q0, #0' 26381 26382 * int64x2_t vrshrq_n_s64 (int64x2_t, const int) 26383 _Form of expected instruction(s):_ `vrshr.s64 Q0, Q0, #0' 26384 26385 * uint32x2_t vshrn_n_u64 (uint64x2_t, const int) 26386 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 26387 26388 * uint16x4_t vshrn_n_u32 (uint32x4_t, const int) 26389 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 26390 26391 * uint8x8_t vshrn_n_u16 (uint16x8_t, const int) 26392 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 26393 26394 * int32x2_t vshrn_n_s64 (int64x2_t, const int) 26395 _Form of expected instruction(s):_ `vshrn.i64 D0, Q0, #0' 26396 26397 * int16x4_t vshrn_n_s32 (int32x4_t, const int) 26398 _Form of expected instruction(s):_ `vshrn.i32 D0, Q0, #0' 26399 26400 * int8x8_t vshrn_n_s16 (int16x8_t, const int) 26401 _Form of expected instruction(s):_ `vshrn.i16 D0, Q0, #0' 26402 26403 * uint32x2_t vrshrn_n_u64 (uint64x2_t, const int) 26404 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 26405 26406 * uint16x4_t vrshrn_n_u32 (uint32x4_t, const int) 26407 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 26408 26409 * uint8x8_t vrshrn_n_u16 (uint16x8_t, const int) 26410 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 26411 26412 * int32x2_t vrshrn_n_s64 (int64x2_t, const int) 26413 _Form of expected instruction(s):_ `vrshrn.i64 D0, Q0, #0' 26414 26415 * int16x4_t vrshrn_n_s32 (int32x4_t, const int) 26416 _Form of expected instruction(s):_ `vrshrn.i32 D0, Q0, #0' 26417 26418 * int8x8_t vrshrn_n_s16 (int16x8_t, const int) 26419 _Form of expected instruction(s):_ `vrshrn.i16 D0, Q0, #0' 26420 26421 * uint32x2_t vqshrn_n_u64 (uint64x2_t, const int) 26422 _Form of expected instruction(s):_ `vqshrn.u64 D0, Q0, #0' 26423 26424 * uint16x4_t vqshrn_n_u32 (uint32x4_t, const int) 26425 _Form of expected instruction(s):_ `vqshrn.u32 D0, Q0, #0' 26426 26427 * uint8x8_t vqshrn_n_u16 (uint16x8_t, const int) 26428 _Form of expected instruction(s):_ `vqshrn.u16 D0, Q0, #0' 26429 26430 * int32x2_t vqshrn_n_s64 (int64x2_t, const int) 26431 _Form of expected instruction(s):_ `vqshrn.s64 D0, Q0, #0' 26432 26433 * int16x4_t vqshrn_n_s32 (int32x4_t, const int) 26434 _Form of expected instruction(s):_ `vqshrn.s32 D0, Q0, #0' 26435 26436 * int8x8_t vqshrn_n_s16 (int16x8_t, const int) 26437 _Form of expected instruction(s):_ `vqshrn.s16 D0, Q0, #0' 26438 26439 * uint32x2_t vqrshrn_n_u64 (uint64x2_t, const int) 26440 _Form of expected instruction(s):_ `vqrshrn.u64 D0, Q0, #0' 26441 26442 * uint16x4_t vqrshrn_n_u32 (uint32x4_t, const int) 26443 _Form of expected instruction(s):_ `vqrshrn.u32 D0, Q0, #0' 26444 26445 * uint8x8_t vqrshrn_n_u16 (uint16x8_t, const int) 26446 _Form of expected instruction(s):_ `vqrshrn.u16 D0, Q0, #0' 26447 26448 * int32x2_t vqrshrn_n_s64 (int64x2_t, const int) 26449 _Form of expected instruction(s):_ `vqrshrn.s64 D0, Q0, #0' 26450 26451 * int16x4_t vqrshrn_n_s32 (int32x4_t, const int) 26452 _Form of expected instruction(s):_ `vqrshrn.s32 D0, Q0, #0' 26453 26454 * int8x8_t vqrshrn_n_s16 (int16x8_t, const int) 26455 _Form of expected instruction(s):_ `vqrshrn.s16 D0, Q0, #0' 26456 26457 * uint32x2_t vqshrun_n_s64 (int64x2_t, const int) 26458 _Form of expected instruction(s):_ `vqshrun.s64 D0, Q0, #0' 26459 26460 * uint16x4_t vqshrun_n_s32 (int32x4_t, const int) 26461 _Form of expected instruction(s):_ `vqshrun.s32 D0, Q0, #0' 26462 26463 * uint8x8_t vqshrun_n_s16 (int16x8_t, const int) 26464 _Form of expected instruction(s):_ `vqshrun.s16 D0, Q0, #0' 26465 26466 * uint32x2_t vqrshrun_n_s64 (int64x2_t, const int) 26467 _Form of expected instruction(s):_ `vqrshrun.s64 D0, Q0, #0' 26468 26469 * uint16x4_t vqrshrun_n_s32 (int32x4_t, const int) 26470 _Form of expected instruction(s):_ `vqrshrun.s32 D0, Q0, #0' 26471 26472 * uint8x8_t vqrshrun_n_s16 (int16x8_t, const int) 26473 _Form of expected instruction(s):_ `vqrshrun.s16 D0, Q0, #0' 26474 26475 5.50.3.28 Vector shift right by constant and accumulate 26476 ....................................................... 26477 26478 * uint32x2_t vsra_n_u32 (uint32x2_t, uint32x2_t, const int) 26479 _Form of expected instruction(s):_ `vsra.u32 D0, D0, #0' 26480 26481 * uint16x4_t vsra_n_u16 (uint16x4_t, uint16x4_t, const int) 26482 _Form of expected instruction(s):_ `vsra.u16 D0, D0, #0' 26483 26484 * uint8x8_t vsra_n_u8 (uint8x8_t, uint8x8_t, const int) 26485 _Form of expected instruction(s):_ `vsra.u8 D0, D0, #0' 26486 26487 * int32x2_t vsra_n_s32 (int32x2_t, int32x2_t, const int) 26488 _Form of expected instruction(s):_ `vsra.s32 D0, D0, #0' 26489 26490 * int16x4_t vsra_n_s16 (int16x4_t, int16x4_t, const int) 26491 _Form of expected instruction(s):_ `vsra.s16 D0, D0, #0' 26492 26493 * int8x8_t vsra_n_s8 (int8x8_t, int8x8_t, const int) 26494 _Form of expected instruction(s):_ `vsra.s8 D0, D0, #0' 26495 26496 * uint64x1_t vsra_n_u64 (uint64x1_t, uint64x1_t, const int) 26497 _Form of expected instruction(s):_ `vsra.u64 D0, D0, #0' 26498 26499 * int64x1_t vsra_n_s64 (int64x1_t, int64x1_t, const int) 26500 _Form of expected instruction(s):_ `vsra.s64 D0, D0, #0' 26501 26502 * uint32x4_t vsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 26503 _Form of expected instruction(s):_ `vsra.u32 Q0, Q0, #0' 26504 26505 * uint16x8_t vsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 26506 _Form of expected instruction(s):_ `vsra.u16 Q0, Q0, #0' 26507 26508 * uint8x16_t vsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 26509 _Form of expected instruction(s):_ `vsra.u8 Q0, Q0, #0' 26510 26511 * int32x4_t vsraq_n_s32 (int32x4_t, int32x4_t, const int) 26512 _Form of expected instruction(s):_ `vsra.s32 Q0, Q0, #0' 26513 26514 * int16x8_t vsraq_n_s16 (int16x8_t, int16x8_t, const int) 26515 _Form of expected instruction(s):_ `vsra.s16 Q0, Q0, #0' 26516 26517 * int8x16_t vsraq_n_s8 (int8x16_t, int8x16_t, const int) 26518 _Form of expected instruction(s):_ `vsra.s8 Q0, Q0, #0' 26519 26520 * uint64x2_t vsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 26521 _Form of expected instruction(s):_ `vsra.u64 Q0, Q0, #0' 26522 26523 * int64x2_t vsraq_n_s64 (int64x2_t, int64x2_t, const int) 26524 _Form of expected instruction(s):_ `vsra.s64 Q0, Q0, #0' 26525 26526 * uint32x2_t vrsra_n_u32 (uint32x2_t, uint32x2_t, const int) 26527 _Form of expected instruction(s):_ `vrsra.u32 D0, D0, #0' 26528 26529 * uint16x4_t vrsra_n_u16 (uint16x4_t, uint16x4_t, const int) 26530 _Form of expected instruction(s):_ `vrsra.u16 D0, D0, #0' 26531 26532 * uint8x8_t vrsra_n_u8 (uint8x8_t, uint8x8_t, const int) 26533 _Form of expected instruction(s):_ `vrsra.u8 D0, D0, #0' 26534 26535 * int32x2_t vrsra_n_s32 (int32x2_t, int32x2_t, const int) 26536 _Form of expected instruction(s):_ `vrsra.s32 D0, D0, #0' 26537 26538 * int16x4_t vrsra_n_s16 (int16x4_t, int16x4_t, const int) 26539 _Form of expected instruction(s):_ `vrsra.s16 D0, D0, #0' 26540 26541 * int8x8_t vrsra_n_s8 (int8x8_t, int8x8_t, const int) 26542 _Form of expected instruction(s):_ `vrsra.s8 D0, D0, #0' 26543 26544 * uint64x1_t vrsra_n_u64 (uint64x1_t, uint64x1_t, const int) 26545 _Form of expected instruction(s):_ `vrsra.u64 D0, D0, #0' 26546 26547 * int64x1_t vrsra_n_s64 (int64x1_t, int64x1_t, const int) 26548 _Form of expected instruction(s):_ `vrsra.s64 D0, D0, #0' 26549 26550 * uint32x4_t vrsraq_n_u32 (uint32x4_t, uint32x4_t, const int) 26551 _Form of expected instruction(s):_ `vrsra.u32 Q0, Q0, #0' 26552 26553 * uint16x8_t vrsraq_n_u16 (uint16x8_t, uint16x8_t, const int) 26554 _Form of expected instruction(s):_ `vrsra.u16 Q0, Q0, #0' 26555 26556 * uint8x16_t vrsraq_n_u8 (uint8x16_t, uint8x16_t, const int) 26557 _Form of expected instruction(s):_ `vrsra.u8 Q0, Q0, #0' 26558 26559 * int32x4_t vrsraq_n_s32 (int32x4_t, int32x4_t, const int) 26560 _Form of expected instruction(s):_ `vrsra.s32 Q0, Q0, #0' 26561 26562 * int16x8_t vrsraq_n_s16 (int16x8_t, int16x8_t, const int) 26563 _Form of expected instruction(s):_ `vrsra.s16 Q0, Q0, #0' 26564 26565 * int8x16_t vrsraq_n_s8 (int8x16_t, int8x16_t, const int) 26566 _Form of expected instruction(s):_ `vrsra.s8 Q0, Q0, #0' 26567 26568 * uint64x2_t vrsraq_n_u64 (uint64x2_t, uint64x2_t, const int) 26569 _Form of expected instruction(s):_ `vrsra.u64 Q0, Q0, #0' 26570 26571 * int64x2_t vrsraq_n_s64 (int64x2_t, int64x2_t, const int) 26572 _Form of expected instruction(s):_ `vrsra.s64 Q0, Q0, #0' 26573 26574 5.50.3.29 Vector shift right and insert 26575 ....................................... 26576 26577 * uint32x2_t vsri_n_u32 (uint32x2_t, uint32x2_t, const int) 26578 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 26579 26580 * uint16x4_t vsri_n_u16 (uint16x4_t, uint16x4_t, const int) 26581 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26582 26583 * uint8x8_t vsri_n_u8 (uint8x8_t, uint8x8_t, const int) 26584 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26585 26586 * int32x2_t vsri_n_s32 (int32x2_t, int32x2_t, const int) 26587 _Form of expected instruction(s):_ `vsri.32 D0, D0, #0' 26588 26589 * int16x4_t vsri_n_s16 (int16x4_t, int16x4_t, const int) 26590 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26591 26592 * int8x8_t vsri_n_s8 (int8x8_t, int8x8_t, const int) 26593 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26594 26595 * uint64x1_t vsri_n_u64 (uint64x1_t, uint64x1_t, const int) 26596 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 26597 26598 * int64x1_t vsri_n_s64 (int64x1_t, int64x1_t, const int) 26599 _Form of expected instruction(s):_ `vsri.64 D0, D0, #0' 26600 26601 * poly16x4_t vsri_n_p16 (poly16x4_t, poly16x4_t, const int) 26602 _Form of expected instruction(s):_ `vsri.16 D0, D0, #0' 26603 26604 * poly8x8_t vsri_n_p8 (poly8x8_t, poly8x8_t, const int) 26605 _Form of expected instruction(s):_ `vsri.8 D0, D0, #0' 26606 26607 * uint32x4_t vsriq_n_u32 (uint32x4_t, uint32x4_t, const int) 26608 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 26609 26610 * uint16x8_t vsriq_n_u16 (uint16x8_t, uint16x8_t, const int) 26611 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26612 26613 * uint8x16_t vsriq_n_u8 (uint8x16_t, uint8x16_t, const int) 26614 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26615 26616 * int32x4_t vsriq_n_s32 (int32x4_t, int32x4_t, const int) 26617 _Form of expected instruction(s):_ `vsri.32 Q0, Q0, #0' 26618 26619 * int16x8_t vsriq_n_s16 (int16x8_t, int16x8_t, const int) 26620 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26621 26622 * int8x16_t vsriq_n_s8 (int8x16_t, int8x16_t, const int) 26623 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26624 26625 * uint64x2_t vsriq_n_u64 (uint64x2_t, uint64x2_t, const int) 26626 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 26627 26628 * int64x2_t vsriq_n_s64 (int64x2_t, int64x2_t, const int) 26629 _Form of expected instruction(s):_ `vsri.64 Q0, Q0, #0' 26630 26631 * poly16x8_t vsriq_n_p16 (poly16x8_t, poly16x8_t, const int) 26632 _Form of expected instruction(s):_ `vsri.16 Q0, Q0, #0' 26633 26634 * poly8x16_t vsriq_n_p8 (poly8x16_t, poly8x16_t, const int) 26635 _Form of expected instruction(s):_ `vsri.8 Q0, Q0, #0' 26636 26637 5.50.3.30 Vector shift left and insert 26638 ...................................... 26639 26640 * uint32x2_t vsli_n_u32 (uint32x2_t, uint32x2_t, const int) 26641 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 26642 26643 * uint16x4_t vsli_n_u16 (uint16x4_t, uint16x4_t, const int) 26644 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26645 26646 * uint8x8_t vsli_n_u8 (uint8x8_t, uint8x8_t, const int) 26647 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26648 26649 * int32x2_t vsli_n_s32 (int32x2_t, int32x2_t, const int) 26650 _Form of expected instruction(s):_ `vsli.32 D0, D0, #0' 26651 26652 * int16x4_t vsli_n_s16 (int16x4_t, int16x4_t, const int) 26653 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26654 26655 * int8x8_t vsli_n_s8 (int8x8_t, int8x8_t, const int) 26656 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26657 26658 * uint64x1_t vsli_n_u64 (uint64x1_t, uint64x1_t, const int) 26659 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 26660 26661 * int64x1_t vsli_n_s64 (int64x1_t, int64x1_t, const int) 26662 _Form of expected instruction(s):_ `vsli.64 D0, D0, #0' 26663 26664 * poly16x4_t vsli_n_p16 (poly16x4_t, poly16x4_t, const int) 26665 _Form of expected instruction(s):_ `vsli.16 D0, D0, #0' 26666 26667 * poly8x8_t vsli_n_p8 (poly8x8_t, poly8x8_t, const int) 26668 _Form of expected instruction(s):_ `vsli.8 D0, D0, #0' 26669 26670 * uint32x4_t vsliq_n_u32 (uint32x4_t, uint32x4_t, const int) 26671 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 26672 26673 * uint16x8_t vsliq_n_u16 (uint16x8_t, uint16x8_t, const int) 26674 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26675 26676 * uint8x16_t vsliq_n_u8 (uint8x16_t, uint8x16_t, const int) 26677 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26678 26679 * int32x4_t vsliq_n_s32 (int32x4_t, int32x4_t, const int) 26680 _Form of expected instruction(s):_ `vsli.32 Q0, Q0, #0' 26681 26682 * int16x8_t vsliq_n_s16 (int16x8_t, int16x8_t, const int) 26683 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26684 26685 * int8x16_t vsliq_n_s8 (int8x16_t, int8x16_t, const int) 26686 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26687 26688 * uint64x2_t vsliq_n_u64 (uint64x2_t, uint64x2_t, const int) 26689 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 26690 26691 * int64x2_t vsliq_n_s64 (int64x2_t, int64x2_t, const int) 26692 _Form of expected instruction(s):_ `vsli.64 Q0, Q0, #0' 26693 26694 * poly16x8_t vsliq_n_p16 (poly16x8_t, poly16x8_t, const int) 26695 _Form of expected instruction(s):_ `vsli.16 Q0, Q0, #0' 26696 26697 * poly8x16_t vsliq_n_p8 (poly8x16_t, poly8x16_t, const int) 26698 _Form of expected instruction(s):_ `vsli.8 Q0, Q0, #0' 26699 26700 5.50.3.31 Absolute value 26701 ........................ 26702 26703 * float32x2_t vabs_f32 (float32x2_t) 26704 _Form of expected instruction(s):_ `vabs.f32 D0, D0' 26705 26706 * int32x2_t vabs_s32 (int32x2_t) 26707 _Form of expected instruction(s):_ `vabs.s32 D0, D0' 26708 26709 * int16x4_t vabs_s16 (int16x4_t) 26710 _Form of expected instruction(s):_ `vabs.s16 D0, D0' 26711 26712 * int8x8_t vabs_s8 (int8x8_t) 26713 _Form of expected instruction(s):_ `vabs.s8 D0, D0' 26714 26715 * float32x4_t vabsq_f32 (float32x4_t) 26716 _Form of expected instruction(s):_ `vabs.f32 Q0, Q0' 26717 26718 * int32x4_t vabsq_s32 (int32x4_t) 26719 _Form of expected instruction(s):_ `vabs.s32 Q0, Q0' 26720 26721 * int16x8_t vabsq_s16 (int16x8_t) 26722 _Form of expected instruction(s):_ `vabs.s16 Q0, Q0' 26723 26724 * int8x16_t vabsq_s8 (int8x16_t) 26725 _Form of expected instruction(s):_ `vabs.s8 Q0, Q0' 26726 26727 * int32x2_t vqabs_s32 (int32x2_t) 26728 _Form of expected instruction(s):_ `vqabs.s32 D0, D0' 26729 26730 * int16x4_t vqabs_s16 (int16x4_t) 26731 _Form of expected instruction(s):_ `vqabs.s16 D0, D0' 26732 26733 * int8x8_t vqabs_s8 (int8x8_t) 26734 _Form of expected instruction(s):_ `vqabs.s8 D0, D0' 26735 26736 * int32x4_t vqabsq_s32 (int32x4_t) 26737 _Form of expected instruction(s):_ `vqabs.s32 Q0, Q0' 26738 26739 * int16x8_t vqabsq_s16 (int16x8_t) 26740 _Form of expected instruction(s):_ `vqabs.s16 Q0, Q0' 26741 26742 * int8x16_t vqabsq_s8 (int8x16_t) 26743 _Form of expected instruction(s):_ `vqabs.s8 Q0, Q0' 26744 26745 5.50.3.32 Negation 26746 .................. 26747 26748 * float32x2_t vneg_f32 (float32x2_t) 26749 _Form of expected instruction(s):_ `vneg.f32 D0, D0' 26750 26751 * int32x2_t vneg_s32 (int32x2_t) 26752 _Form of expected instruction(s):_ `vneg.s32 D0, D0' 26753 26754 * int16x4_t vneg_s16 (int16x4_t) 26755 _Form of expected instruction(s):_ `vneg.s16 D0, D0' 26756 26757 * int8x8_t vneg_s8 (int8x8_t) 26758 _Form of expected instruction(s):_ `vneg.s8 D0, D0' 26759 26760 * float32x4_t vnegq_f32 (float32x4_t) 26761 _Form of expected instruction(s):_ `vneg.f32 Q0, Q0' 26762 26763 * int32x4_t vnegq_s32 (int32x4_t) 26764 _Form of expected instruction(s):_ `vneg.s32 Q0, Q0' 26765 26766 * int16x8_t vnegq_s16 (int16x8_t) 26767 _Form of expected instruction(s):_ `vneg.s16 Q0, Q0' 26768 26769 * int8x16_t vnegq_s8 (int8x16_t) 26770 _Form of expected instruction(s):_ `vneg.s8 Q0, Q0' 26771 26772 * int32x2_t vqneg_s32 (int32x2_t) 26773 _Form of expected instruction(s):_ `vqneg.s32 D0, D0' 26774 26775 * int16x4_t vqneg_s16 (int16x4_t) 26776 _Form of expected instruction(s):_ `vqneg.s16 D0, D0' 26777 26778 * int8x8_t vqneg_s8 (int8x8_t) 26779 _Form of expected instruction(s):_ `vqneg.s8 D0, D0' 26780 26781 * int32x4_t vqnegq_s32 (int32x4_t) 26782 _Form of expected instruction(s):_ `vqneg.s32 Q0, Q0' 26783 26784 * int16x8_t vqnegq_s16 (int16x8_t) 26785 _Form of expected instruction(s):_ `vqneg.s16 Q0, Q0' 26786 26787 * int8x16_t vqnegq_s8 (int8x16_t) 26788 _Form of expected instruction(s):_ `vqneg.s8 Q0, Q0' 26789 26790 5.50.3.33 Bitwise not 26791 ..................... 26792 26793 * uint32x2_t vmvn_u32 (uint32x2_t) 26794 _Form of expected instruction(s):_ `vmvn D0, D0' 26795 26796 * uint16x4_t vmvn_u16 (uint16x4_t) 26797 _Form of expected instruction(s):_ `vmvn D0, D0' 26798 26799 * uint8x8_t vmvn_u8 (uint8x8_t) 26800 _Form of expected instruction(s):_ `vmvn D0, D0' 26801 26802 * int32x2_t vmvn_s32 (int32x2_t) 26803 _Form of expected instruction(s):_ `vmvn D0, D0' 26804 26805 * int16x4_t vmvn_s16 (int16x4_t) 26806 _Form of expected instruction(s):_ `vmvn D0, D0' 26807 26808 * int8x8_t vmvn_s8 (int8x8_t) 26809 _Form of expected instruction(s):_ `vmvn D0, D0' 26810 26811 * poly8x8_t vmvn_p8 (poly8x8_t) 26812 _Form of expected instruction(s):_ `vmvn D0, D0' 26813 26814 * uint32x4_t vmvnq_u32 (uint32x4_t) 26815 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26816 26817 * uint16x8_t vmvnq_u16 (uint16x8_t) 26818 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26819 26820 * uint8x16_t vmvnq_u8 (uint8x16_t) 26821 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26822 26823 * int32x4_t vmvnq_s32 (int32x4_t) 26824 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26825 26826 * int16x8_t vmvnq_s16 (int16x8_t) 26827 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26828 26829 * int8x16_t vmvnq_s8 (int8x16_t) 26830 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26831 26832 * poly8x16_t vmvnq_p8 (poly8x16_t) 26833 _Form of expected instruction(s):_ `vmvn Q0, Q0' 26834 26835 5.50.3.34 Count leading sign bits 26836 ................................. 26837 26838 * int32x2_t vcls_s32 (int32x2_t) 26839 _Form of expected instruction(s):_ `vcls.s32 D0, D0' 26840 26841 * int16x4_t vcls_s16 (int16x4_t) 26842 _Form of expected instruction(s):_ `vcls.s16 D0, D0' 26843 26844 * int8x8_t vcls_s8 (int8x8_t) 26845 _Form of expected instruction(s):_ `vcls.s8 D0, D0' 26846 26847 * int32x4_t vclsq_s32 (int32x4_t) 26848 _Form of expected instruction(s):_ `vcls.s32 Q0, Q0' 26849 26850 * int16x8_t vclsq_s16 (int16x8_t) 26851 _Form of expected instruction(s):_ `vcls.s16 Q0, Q0' 26852 26853 * int8x16_t vclsq_s8 (int8x16_t) 26854 _Form of expected instruction(s):_ `vcls.s8 Q0, Q0' 26855 26856 5.50.3.35 Count leading zeros 26857 ............................. 26858 26859 * uint32x2_t vclz_u32 (uint32x2_t) 26860 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 26861 26862 * uint16x4_t vclz_u16 (uint16x4_t) 26863 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 26864 26865 * uint8x8_t vclz_u8 (uint8x8_t) 26866 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 26867 26868 * int32x2_t vclz_s32 (int32x2_t) 26869 _Form of expected instruction(s):_ `vclz.i32 D0, D0' 26870 26871 * int16x4_t vclz_s16 (int16x4_t) 26872 _Form of expected instruction(s):_ `vclz.i16 D0, D0' 26873 26874 * int8x8_t vclz_s8 (int8x8_t) 26875 _Form of expected instruction(s):_ `vclz.i8 D0, D0' 26876 26877 * uint32x4_t vclzq_u32 (uint32x4_t) 26878 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 26879 26880 * uint16x8_t vclzq_u16 (uint16x8_t) 26881 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 26882 26883 * uint8x16_t vclzq_u8 (uint8x16_t) 26884 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 26885 26886 * int32x4_t vclzq_s32 (int32x4_t) 26887 _Form of expected instruction(s):_ `vclz.i32 Q0, Q0' 26888 26889 * int16x8_t vclzq_s16 (int16x8_t) 26890 _Form of expected instruction(s):_ `vclz.i16 Q0, Q0' 26891 26892 * int8x16_t vclzq_s8 (int8x16_t) 26893 _Form of expected instruction(s):_ `vclz.i8 Q0, Q0' 26894 26895 5.50.3.36 Count number of set bits 26896 .................................. 26897 26898 * uint8x8_t vcnt_u8 (uint8x8_t) 26899 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26900 26901 * int8x8_t vcnt_s8 (int8x8_t) 26902 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26903 26904 * poly8x8_t vcnt_p8 (poly8x8_t) 26905 _Form of expected instruction(s):_ `vcnt.8 D0, D0' 26906 26907 * uint8x16_t vcntq_u8 (uint8x16_t) 26908 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26909 26910 * int8x16_t vcntq_s8 (int8x16_t) 26911 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26912 26913 * poly8x16_t vcntq_p8 (poly8x16_t) 26914 _Form of expected instruction(s):_ `vcnt.8 Q0, Q0' 26915 26916 5.50.3.37 Reciprocal estimate 26917 ............................. 26918 26919 * float32x2_t vrecpe_f32 (float32x2_t) 26920 _Form of expected instruction(s):_ `vrecpe.f32 D0, D0' 26921 26922 * uint32x2_t vrecpe_u32 (uint32x2_t) 26923 _Form of expected instruction(s):_ `vrecpe.u32 D0, D0' 26924 26925 * float32x4_t vrecpeq_f32 (float32x4_t) 26926 _Form of expected instruction(s):_ `vrecpe.f32 Q0, Q0' 26927 26928 * uint32x4_t vrecpeq_u32 (uint32x4_t) 26929 _Form of expected instruction(s):_ `vrecpe.u32 Q0, Q0' 26930 26931 5.50.3.38 Reciprocal square-root estimate 26932 ......................................... 26933 26934 * float32x2_t vrsqrte_f32 (float32x2_t) 26935 _Form of expected instruction(s):_ `vrsqrte.f32 D0, D0' 26936 26937 * uint32x2_t vrsqrte_u32 (uint32x2_t) 26938 _Form of expected instruction(s):_ `vrsqrte.u32 D0, D0' 26939 26940 * float32x4_t vrsqrteq_f32 (float32x4_t) 26941 _Form of expected instruction(s):_ `vrsqrte.f32 Q0, Q0' 26942 26943 * uint32x4_t vrsqrteq_u32 (uint32x4_t) 26944 _Form of expected instruction(s):_ `vrsqrte.u32 Q0, Q0' 26945 26946 5.50.3.39 Get lanes from a vector 26947 ................................. 26948 26949 * uint32_t vget_lane_u32 (uint32x2_t, const int) 26950 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 26951 26952 * uint16_t vget_lane_u16 (uint16x4_t, const int) 26953 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26954 26955 * uint8_t vget_lane_u8 (uint8x8_t, const int) 26956 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26957 26958 * int32_t vget_lane_s32 (int32x2_t, const int) 26959 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 26960 26961 * int16_t vget_lane_s16 (int16x4_t, const int) 26962 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 26963 26964 * int8_t vget_lane_s8 (int8x8_t, const int) 26965 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 26966 26967 * float32_t vget_lane_f32 (float32x2_t, const int) 26968 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 26969 26970 * poly16_t vget_lane_p16 (poly16x4_t, const int) 26971 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26972 26973 * poly8_t vget_lane_p8 (poly8x8_t, const int) 26974 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26975 26976 * uint64_t vget_lane_u64 (uint64x1_t, const int) 26977 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26978 26979 * int64_t vget_lane_s64 (int64x1_t, const int) 26980 _Form of expected instruction(s):_ `vmov R0, R0, D0' 26981 26982 * uint32_t vgetq_lane_u32 (uint32x4_t, const int) 26983 _Form of expected instruction(s):_ `vmov.u32 R0, D0[0]' 26984 26985 * uint16_t vgetq_lane_u16 (uint16x8_t, const int) 26986 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 26987 26988 * uint8_t vgetq_lane_u8 (uint8x16_t, const int) 26989 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 26990 26991 * int32_t vgetq_lane_s32 (int32x4_t, const int) 26992 _Form of expected instruction(s):_ `vmov.s32 R0, D0[0]' 26993 26994 * int16_t vgetq_lane_s16 (int16x8_t, const int) 26995 _Form of expected instruction(s):_ `vmov.s16 R0, D0[0]' 26996 26997 * int8_t vgetq_lane_s8 (int8x16_t, const int) 26998 _Form of expected instruction(s):_ `vmov.s8 R0, D0[0]' 26999 27000 * float32_t vgetq_lane_f32 (float32x4_t, const int) 27001 _Form of expected instruction(s):_ `vmov.f32 R0, D0[0]' 27002 27003 * poly16_t vgetq_lane_p16 (poly16x8_t, const int) 27004 _Form of expected instruction(s):_ `vmov.u16 R0, D0[0]' 27005 27006 * poly8_t vgetq_lane_p8 (poly8x16_t, const int) 27007 _Form of expected instruction(s):_ `vmov.u8 R0, D0[0]' 27008 27009 * uint64_t vgetq_lane_u64 (uint64x2_t, const int) 27010 _Form of expected instruction(s):_ `vmov R0, R0, D0' 27011 27012 * int64_t vgetq_lane_s64 (int64x2_t, const int) 27013 _Form of expected instruction(s):_ `vmov R0, R0, D0' 27014 27015 5.50.3.40 Set lanes in a vector 27016 ............................... 27017 27018 * uint32x2_t vset_lane_u32 (uint32_t, uint32x2_t, const int) 27019 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27020 27021 * uint16x4_t vset_lane_u16 (uint16_t, uint16x4_t, const int) 27022 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27023 27024 * uint8x8_t vset_lane_u8 (uint8_t, uint8x8_t, const int) 27025 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27026 27027 * int32x2_t vset_lane_s32 (int32_t, int32x2_t, const int) 27028 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27029 27030 * int16x4_t vset_lane_s16 (int16_t, int16x4_t, const int) 27031 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27032 27033 * int8x8_t vset_lane_s8 (int8_t, int8x8_t, const int) 27034 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27035 27036 * float32x2_t vset_lane_f32 (float32_t, float32x2_t, const int) 27037 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27038 27039 * poly16x4_t vset_lane_p16 (poly16_t, poly16x4_t, const int) 27040 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27041 27042 * poly8x8_t vset_lane_p8 (poly8_t, poly8x8_t, const int) 27043 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27044 27045 * uint64x1_t vset_lane_u64 (uint64_t, uint64x1_t, const int) 27046 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27047 27048 * int64x1_t vset_lane_s64 (int64_t, int64x1_t, const int) 27049 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27050 27051 * uint32x4_t vsetq_lane_u32 (uint32_t, uint32x4_t, const int) 27052 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27053 27054 * uint16x8_t vsetq_lane_u16 (uint16_t, uint16x8_t, const int) 27055 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27056 27057 * uint8x16_t vsetq_lane_u8 (uint8_t, uint8x16_t, const int) 27058 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27059 27060 * int32x4_t vsetq_lane_s32 (int32_t, int32x4_t, const int) 27061 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27062 27063 * int16x8_t vsetq_lane_s16 (int16_t, int16x8_t, const int) 27064 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27065 27066 * int8x16_t vsetq_lane_s8 (int8_t, int8x16_t, const int) 27067 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27068 27069 * float32x4_t vsetq_lane_f32 (float32_t, float32x4_t, const int) 27070 _Form of expected instruction(s):_ `vmov.32 D0[0], R0' 27071 27072 * poly16x8_t vsetq_lane_p16 (poly16_t, poly16x8_t, const int) 27073 _Form of expected instruction(s):_ `vmov.16 D0[0], R0' 27074 27075 * poly8x16_t vsetq_lane_p8 (poly8_t, poly8x16_t, const int) 27076 _Form of expected instruction(s):_ `vmov.8 D0[0], R0' 27077 27078 * uint64x2_t vsetq_lane_u64 (uint64_t, uint64x2_t, const int) 27079 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27080 27081 * int64x2_t vsetq_lane_s64 (int64_t, int64x2_t, const int) 27082 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27083 27084 5.50.3.41 Create vector from literal bit pattern 27085 ................................................ 27086 27087 * uint32x2_t vcreate_u32 (uint64_t) 27088 27089 * uint16x4_t vcreate_u16 (uint64_t) 27090 27091 * uint8x8_t vcreate_u8 (uint64_t) 27092 27093 * int32x2_t vcreate_s32 (uint64_t) 27094 27095 * int16x4_t vcreate_s16 (uint64_t) 27096 27097 * int8x8_t vcreate_s8 (uint64_t) 27098 27099 * uint64x1_t vcreate_u64 (uint64_t) 27100 27101 * int64x1_t vcreate_s64 (uint64_t) 27102 27103 * float32x2_t vcreate_f32 (uint64_t) 27104 27105 * poly16x4_t vcreate_p16 (uint64_t) 27106 27107 * poly8x8_t vcreate_p8 (uint64_t) 27108 27109 5.50.3.42 Set all lanes to the same value 27110 ......................................... 27111 27112 * uint32x2_t vdup_n_u32 (uint32_t) 27113 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27114 27115 * uint16x4_t vdup_n_u16 (uint16_t) 27116 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27117 27118 * uint8x8_t vdup_n_u8 (uint8_t) 27119 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27120 27121 * int32x2_t vdup_n_s32 (int32_t) 27122 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27123 27124 * int16x4_t vdup_n_s16 (int16_t) 27125 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27126 27127 * int8x8_t vdup_n_s8 (int8_t) 27128 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27129 27130 * float32x2_t vdup_n_f32 (float32_t) 27131 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27132 27133 * poly16x4_t vdup_n_p16 (poly16_t) 27134 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27135 27136 * poly8x8_t vdup_n_p8 (poly8_t) 27137 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27138 27139 * uint64x1_t vdup_n_u64 (uint64_t) 27140 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27141 27142 * int64x1_t vdup_n_s64 (int64_t) 27143 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27144 27145 * uint32x4_t vdupq_n_u32 (uint32_t) 27146 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27147 27148 * uint16x8_t vdupq_n_u16 (uint16_t) 27149 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27150 27151 * uint8x16_t vdupq_n_u8 (uint8_t) 27152 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27153 27154 * int32x4_t vdupq_n_s32 (int32_t) 27155 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27156 27157 * int16x8_t vdupq_n_s16 (int16_t) 27158 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27159 27160 * int8x16_t vdupq_n_s8 (int8_t) 27161 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27162 27163 * float32x4_t vdupq_n_f32 (float32_t) 27164 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27165 27166 * poly16x8_t vdupq_n_p16 (poly16_t) 27167 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27168 27169 * poly8x16_t vdupq_n_p8 (poly8_t) 27170 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27171 27172 * uint64x2_t vdupq_n_u64 (uint64_t) 27173 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27174 27175 * int64x2_t vdupq_n_s64 (int64_t) 27176 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27177 27178 * uint32x2_t vmov_n_u32 (uint32_t) 27179 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27180 27181 * uint16x4_t vmov_n_u16 (uint16_t) 27182 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27183 27184 * uint8x8_t vmov_n_u8 (uint8_t) 27185 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27186 27187 * int32x2_t vmov_n_s32 (int32_t) 27188 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27189 27190 * int16x4_t vmov_n_s16 (int16_t) 27191 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27192 27193 * int8x8_t vmov_n_s8 (int8_t) 27194 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27195 27196 * float32x2_t vmov_n_f32 (float32_t) 27197 _Form of expected instruction(s):_ `vdup.32 D0, R0' 27198 27199 * poly16x4_t vmov_n_p16 (poly16_t) 27200 _Form of expected instruction(s):_ `vdup.16 D0, R0' 27201 27202 * poly8x8_t vmov_n_p8 (poly8_t) 27203 _Form of expected instruction(s):_ `vdup.8 D0, R0' 27204 27205 * uint64x1_t vmov_n_u64 (uint64_t) 27206 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27207 27208 * int64x1_t vmov_n_s64 (int64_t) 27209 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27210 27211 * uint32x4_t vmovq_n_u32 (uint32_t) 27212 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27213 27214 * uint16x8_t vmovq_n_u16 (uint16_t) 27215 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27216 27217 * uint8x16_t vmovq_n_u8 (uint8_t) 27218 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27219 27220 * int32x4_t vmovq_n_s32 (int32_t) 27221 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27222 27223 * int16x8_t vmovq_n_s16 (int16_t) 27224 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27225 27226 * int8x16_t vmovq_n_s8 (int8_t) 27227 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27228 27229 * float32x4_t vmovq_n_f32 (float32_t) 27230 _Form of expected instruction(s):_ `vdup.32 Q0, R0' 27231 27232 * poly16x8_t vmovq_n_p16 (poly16_t) 27233 _Form of expected instruction(s):_ `vdup.16 Q0, R0' 27234 27235 * poly8x16_t vmovq_n_p8 (poly8_t) 27236 _Form of expected instruction(s):_ `vdup.8 Q0, R0' 27237 27238 * uint64x2_t vmovq_n_u64 (uint64_t) 27239 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27240 27241 * int64x2_t vmovq_n_s64 (int64_t) 27242 _Form of expected instruction(s):_ `vmov D0, R0, R0' 27243 27244 * uint32x2_t vdup_lane_u32 (uint32x2_t, const int) 27245 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 27246 27247 * uint16x4_t vdup_lane_u16 (uint16x4_t, const int) 27248 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 27249 27250 * uint8x8_t vdup_lane_u8 (uint8x8_t, const int) 27251 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 27252 27253 * int32x2_t vdup_lane_s32 (int32x2_t, const int) 27254 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 27255 27256 * int16x4_t vdup_lane_s16 (int16x4_t, const int) 27257 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 27258 27259 * int8x8_t vdup_lane_s8 (int8x8_t, const int) 27260 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 27261 27262 * float32x2_t vdup_lane_f32 (float32x2_t, const int) 27263 _Form of expected instruction(s):_ `vdup.32 D0, D0[0]' 27264 27265 * poly16x4_t vdup_lane_p16 (poly16x4_t, const int) 27266 _Form of expected instruction(s):_ `vdup.16 D0, D0[0]' 27267 27268 * poly8x8_t vdup_lane_p8 (poly8x8_t, const int) 27269 _Form of expected instruction(s):_ `vdup.8 D0, D0[0]' 27270 27271 * uint64x1_t vdup_lane_u64 (uint64x1_t, const int) 27272 27273 * int64x1_t vdup_lane_s64 (int64x1_t, const int) 27274 27275 * uint32x4_t vdupq_lane_u32 (uint32x2_t, const int) 27276 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 27277 27278 * uint16x8_t vdupq_lane_u16 (uint16x4_t, const int) 27279 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 27280 27281 * uint8x16_t vdupq_lane_u8 (uint8x8_t, const int) 27282 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 27283 27284 * int32x4_t vdupq_lane_s32 (int32x2_t, const int) 27285 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 27286 27287 * int16x8_t vdupq_lane_s16 (int16x4_t, const int) 27288 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 27289 27290 * int8x16_t vdupq_lane_s8 (int8x8_t, const int) 27291 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 27292 27293 * float32x4_t vdupq_lane_f32 (float32x2_t, const int) 27294 _Form of expected instruction(s):_ `vdup.32 Q0, D0[0]' 27295 27296 * poly16x8_t vdupq_lane_p16 (poly16x4_t, const int) 27297 _Form of expected instruction(s):_ `vdup.16 Q0, D0[0]' 27298 27299 * poly8x16_t vdupq_lane_p8 (poly8x8_t, const int) 27300 _Form of expected instruction(s):_ `vdup.8 Q0, D0[0]' 27301 27302 * uint64x2_t vdupq_lane_u64 (uint64x1_t, const int) 27303 27304 * int64x2_t vdupq_lane_s64 (int64x1_t, const int) 27305 27306 5.50.3.43 Combining vectors 27307 ........................... 27308 27309 * uint32x4_t vcombine_u32 (uint32x2_t, uint32x2_t) 27310 27311 * uint16x8_t vcombine_u16 (uint16x4_t, uint16x4_t) 27312 27313 * uint8x16_t vcombine_u8 (uint8x8_t, uint8x8_t) 27314 27315 * int32x4_t vcombine_s32 (int32x2_t, int32x2_t) 27316 27317 * int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 27318 27319 * int8x16_t vcombine_s8 (int8x8_t, int8x8_t) 27320 27321 * uint64x2_t vcombine_u64 (uint64x1_t, uint64x1_t) 27322 27323 * int64x2_t vcombine_s64 (int64x1_t, int64x1_t) 27324 27325 * float32x4_t vcombine_f32 (float32x2_t, float32x2_t) 27326 27327 * poly16x8_t vcombine_p16 (poly16x4_t, poly16x4_t) 27328 27329 * poly8x16_t vcombine_p8 (poly8x8_t, poly8x8_t) 27330 27331 5.50.3.44 Splitting vectors 27332 ........................... 27333 27334 * uint32x2_t vget_high_u32 (uint32x4_t) 27335 27336 * uint16x4_t vget_high_u16 (uint16x8_t) 27337 27338 * uint8x8_t vget_high_u8 (uint8x16_t) 27339 27340 * int32x2_t vget_high_s32 (int32x4_t) 27341 27342 * int16x4_t vget_high_s16 (int16x8_t) 27343 27344 * int8x8_t vget_high_s8 (int8x16_t) 27345 27346 * uint64x1_t vget_high_u64 (uint64x2_t) 27347 27348 * int64x1_t vget_high_s64 (int64x2_t) 27349 27350 * float32x2_t vget_high_f32 (float32x4_t) 27351 27352 * poly16x4_t vget_high_p16 (poly16x8_t) 27353 27354 * poly8x8_t vget_high_p8 (poly8x16_t) 27355 27356 * uint32x2_t vget_low_u32 (uint32x4_t) 27357 _Form of expected instruction(s):_ `vmov D0, D0' 27358 27359 * uint16x4_t vget_low_u16 (uint16x8_t) 27360 _Form of expected instruction(s):_ `vmov D0, D0' 27361 27362 * uint8x8_t vget_low_u8 (uint8x16_t) 27363 _Form of expected instruction(s):_ `vmov D0, D0' 27364 27365 * int32x2_t vget_low_s32 (int32x4_t) 27366 _Form of expected instruction(s):_ `vmov D0, D0' 27367 27368 * int16x4_t vget_low_s16 (int16x8_t) 27369 _Form of expected instruction(s):_ `vmov D0, D0' 27370 27371 * int8x8_t vget_low_s8 (int8x16_t) 27372 _Form of expected instruction(s):_ `vmov D0, D0' 27373 27374 * uint64x1_t vget_low_u64 (uint64x2_t) 27375 _Form of expected instruction(s):_ `vmov D0, D0' 27376 27377 * int64x1_t vget_low_s64 (int64x2_t) 27378 _Form of expected instruction(s):_ `vmov D0, D0' 27379 27380 * float32x2_t vget_low_f32 (float32x4_t) 27381 _Form of expected instruction(s):_ `vmov D0, D0' 27382 27383 * poly16x4_t vget_low_p16 (poly16x8_t) 27384 _Form of expected instruction(s):_ `vmov D0, D0' 27385 27386 * poly8x8_t vget_low_p8 (poly8x16_t) 27387 _Form of expected instruction(s):_ `vmov D0, D0' 27388 27389 5.50.3.45 Conversions 27390 ..................... 27391 27392 * float32x2_t vcvt_f32_u32 (uint32x2_t) 27393 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0' 27394 27395 * float32x2_t vcvt_f32_s32 (int32x2_t) 27396 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0' 27397 27398 * uint32x2_t vcvt_u32_f32 (float32x2_t) 27399 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0' 27400 27401 * int32x2_t vcvt_s32_f32 (float32x2_t) 27402 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0' 27403 27404 * float32x4_t vcvtq_f32_u32 (uint32x4_t) 27405 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0' 27406 27407 * float32x4_t vcvtq_f32_s32 (int32x4_t) 27408 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0' 27409 27410 * uint32x4_t vcvtq_u32_f32 (float32x4_t) 27411 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0' 27412 27413 * int32x4_t vcvtq_s32_f32 (float32x4_t) 27414 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0' 27415 27416 * float32x2_t vcvt_n_f32_u32 (uint32x2_t, const int) 27417 _Form of expected instruction(s):_ `vcvt.f32.u32 D0, D0, #0' 27418 27419 * float32x2_t vcvt_n_f32_s32 (int32x2_t, const int) 27420 _Form of expected instruction(s):_ `vcvt.f32.s32 D0, D0, #0' 27421 27422 * uint32x2_t vcvt_n_u32_f32 (float32x2_t, const int) 27423 _Form of expected instruction(s):_ `vcvt.u32.f32 D0, D0, #0' 27424 27425 * int32x2_t vcvt_n_s32_f32 (float32x2_t, const int) 27426 _Form of expected instruction(s):_ `vcvt.s32.f32 D0, D0, #0' 27427 27428 * float32x4_t vcvtq_n_f32_u32 (uint32x4_t, const int) 27429 _Form of expected instruction(s):_ `vcvt.f32.u32 Q0, Q0, #0' 27430 27431 * float32x4_t vcvtq_n_f32_s32 (int32x4_t, const int) 27432 _Form of expected instruction(s):_ `vcvt.f32.s32 Q0, Q0, #0' 27433 27434 * uint32x4_t vcvtq_n_u32_f32 (float32x4_t, const int) 27435 _Form of expected instruction(s):_ `vcvt.u32.f32 Q0, Q0, #0' 27436 27437 * int32x4_t vcvtq_n_s32_f32 (float32x4_t, const int) 27438 _Form of expected instruction(s):_ `vcvt.s32.f32 Q0, Q0, #0' 27439 27440 5.50.3.46 Move, single_opcode narrowing 27441 ....................................... 27442 27443 * uint32x2_t vmovn_u64 (uint64x2_t) 27444 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 27445 27446 * uint16x4_t vmovn_u32 (uint32x4_t) 27447 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 27448 27449 * uint8x8_t vmovn_u16 (uint16x8_t) 27450 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 27451 27452 * int32x2_t vmovn_s64 (int64x2_t) 27453 _Form of expected instruction(s):_ `vmovn.i64 D0, Q0' 27454 27455 * int16x4_t vmovn_s32 (int32x4_t) 27456 _Form of expected instruction(s):_ `vmovn.i32 D0, Q0' 27457 27458 * int8x8_t vmovn_s16 (int16x8_t) 27459 _Form of expected instruction(s):_ `vmovn.i16 D0, Q0' 27460 27461 * uint32x2_t vqmovn_u64 (uint64x2_t) 27462 _Form of expected instruction(s):_ `vqmovn.u64 D0, Q0' 27463 27464 * uint16x4_t vqmovn_u32 (uint32x4_t) 27465 _Form of expected instruction(s):_ `vqmovn.u32 D0, Q0' 27466 27467 * uint8x8_t vqmovn_u16 (uint16x8_t) 27468 _Form of expected instruction(s):_ `vqmovn.u16 D0, Q0' 27469 27470 * int32x2_t vqmovn_s64 (int64x2_t) 27471 _Form of expected instruction(s):_ `vqmovn.s64 D0, Q0' 27472 27473 * int16x4_t vqmovn_s32 (int32x4_t) 27474 _Form of expected instruction(s):_ `vqmovn.s32 D0, Q0' 27475 27476 * int8x8_t vqmovn_s16 (int16x8_t) 27477 _Form of expected instruction(s):_ `vqmovn.s16 D0, Q0' 27478 27479 * uint32x2_t vqmovun_s64 (int64x2_t) 27480 _Form of expected instruction(s):_ `vqmovun.s64 D0, Q0' 27481 27482 * uint16x4_t vqmovun_s32 (int32x4_t) 27483 _Form of expected instruction(s):_ `vqmovun.s32 D0, Q0' 27484 27485 * uint8x8_t vqmovun_s16 (int16x8_t) 27486 _Form of expected instruction(s):_ `vqmovun.s16 D0, Q0' 27487 27488 5.50.3.47 Move, single_opcode long 27489 .................................. 27490 27491 * uint64x2_t vmovl_u32 (uint32x2_t) 27492 _Form of expected instruction(s):_ `vmovl.u32 Q0, D0' 27493 27494 * uint32x4_t vmovl_u16 (uint16x4_t) 27495 _Form of expected instruction(s):_ `vmovl.u16 Q0, D0' 27496 27497 * uint16x8_t vmovl_u8 (uint8x8_t) 27498 _Form of expected instruction(s):_ `vmovl.u8 Q0, D0' 27499 27500 * int64x2_t vmovl_s32 (int32x2_t) 27501 _Form of expected instruction(s):_ `vmovl.s32 Q0, D0' 27502 27503 * int32x4_t vmovl_s16 (int16x4_t) 27504 _Form of expected instruction(s):_ `vmovl.s16 Q0, D0' 27505 27506 * int16x8_t vmovl_s8 (int8x8_t) 27507 _Form of expected instruction(s):_ `vmovl.s8 Q0, D0' 27508 27509 5.50.3.48 Table lookup 27510 ...................... 27511 27512 * poly8x8_t vtbl1_p8 (poly8x8_t, uint8x8_t) 27513 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27514 27515 * int8x8_t vtbl1_s8 (int8x8_t, int8x8_t) 27516 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27517 27518 * uint8x8_t vtbl1_u8 (uint8x8_t, uint8x8_t) 27519 _Form of expected instruction(s):_ `vtbl.8 D0, {D0}, D0' 27520 27521 * poly8x8_t vtbl2_p8 (poly8x8x2_t, uint8x8_t) 27522 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27523 27524 * int8x8_t vtbl2_s8 (int8x8x2_t, int8x8_t) 27525 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27526 27527 * uint8x8_t vtbl2_u8 (uint8x8x2_t, uint8x8_t) 27528 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1}, D0' 27529 27530 * poly8x8_t vtbl3_p8 (poly8x8x3_t, uint8x8_t) 27531 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27532 27533 * int8x8_t vtbl3_s8 (int8x8x3_t, int8x8_t) 27534 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27535 27536 * uint8x8_t vtbl3_u8 (uint8x8x3_t, uint8x8_t) 27537 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2}, D0' 27538 27539 * poly8x8_t vtbl4_p8 (poly8x8x4_t, uint8x8_t) 27540 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27541 D0' 27542 27543 * int8x8_t vtbl4_s8 (int8x8x4_t, int8x8_t) 27544 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27545 D0' 27546 27547 * uint8x8_t vtbl4_u8 (uint8x8x4_t, uint8x8_t) 27548 _Form of expected instruction(s):_ `vtbl.8 D0, {D0, D1, D2, D3}, 27549 D0' 27550 27551 5.50.3.49 Extended table lookup 27552 ............................... 27553 27554 * poly8x8_t vtbx1_p8 (poly8x8_t, poly8x8_t, uint8x8_t) 27555 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27556 27557 * int8x8_t vtbx1_s8 (int8x8_t, int8x8_t, int8x8_t) 27558 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27559 27560 * uint8x8_t vtbx1_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 27561 _Form of expected instruction(s):_ `vtbx.8 D0, {D0}, D0' 27562 27563 * poly8x8_t vtbx2_p8 (poly8x8_t, poly8x8x2_t, uint8x8_t) 27564 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27565 27566 * int8x8_t vtbx2_s8 (int8x8_t, int8x8x2_t, int8x8_t) 27567 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27568 27569 * uint8x8_t vtbx2_u8 (uint8x8_t, uint8x8x2_t, uint8x8_t) 27570 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1}, D0' 27571 27572 * poly8x8_t vtbx3_p8 (poly8x8_t, poly8x8x3_t, uint8x8_t) 27573 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27574 27575 * int8x8_t vtbx3_s8 (int8x8_t, int8x8x3_t, int8x8_t) 27576 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27577 27578 * uint8x8_t vtbx3_u8 (uint8x8_t, uint8x8x3_t, uint8x8_t) 27579 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2}, D0' 27580 27581 * poly8x8_t vtbx4_p8 (poly8x8_t, poly8x8x4_t, uint8x8_t) 27582 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27583 D0' 27584 27585 * int8x8_t vtbx4_s8 (int8x8_t, int8x8x4_t, int8x8_t) 27586 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27587 D0' 27588 27589 * uint8x8_t vtbx4_u8 (uint8x8_t, uint8x8x4_t, uint8x8_t) 27590 _Form of expected instruction(s):_ `vtbx.8 D0, {D0, D1, D2, D3}, 27591 D0' 27592 27593 5.50.3.50 Multiply, lane 27594 ........................ 27595 27596 * float32x2_t vmul_lane_f32 (float32x2_t, float32x2_t, const int) 27597 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 27598 27599 * uint32x2_t vmul_lane_u32 (uint32x2_t, uint32x2_t, const int) 27600 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27601 27602 * uint16x4_t vmul_lane_u16 (uint16x4_t, uint16x4_t, const int) 27603 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27604 27605 * int32x2_t vmul_lane_s32 (int32x2_t, int32x2_t, const int) 27606 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27607 27608 * int16x4_t vmul_lane_s16 (int16x4_t, int16x4_t, const int) 27609 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27610 27611 * float32x4_t vmulq_lane_f32 (float32x4_t, float32x2_t, const int) 27612 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 27613 27614 * uint32x4_t vmulq_lane_u32 (uint32x4_t, uint32x2_t, const int) 27615 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27616 27617 * uint16x8_t vmulq_lane_u16 (uint16x8_t, uint16x4_t, const int) 27618 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27619 27620 * int32x4_t vmulq_lane_s32 (int32x4_t, int32x2_t, const int) 27621 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27622 27623 * int16x8_t vmulq_lane_s16 (int16x8_t, int16x4_t, const int) 27624 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27625 27626 5.50.3.51 Long multiply, lane 27627 ............................. 27628 27629 * uint64x2_t vmull_lane_u32 (uint32x2_t, uint32x2_t, const int) 27630 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 27631 27632 * uint32x4_t vmull_lane_u16 (uint16x4_t, uint16x4_t, const int) 27633 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 27634 27635 * int64x2_t vmull_lane_s32 (int32x2_t, int32x2_t, const int) 27636 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 27637 27638 * int32x4_t vmull_lane_s16 (int16x4_t, int16x4_t, const int) 27639 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 27640 27641 5.50.3.52 Saturating doubling long multiply, lane 27642 ................................................. 27643 27644 * int64x2_t vqdmull_lane_s32 (int32x2_t, int32x2_t, const int) 27645 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 27646 27647 * int32x4_t vqdmull_lane_s16 (int16x4_t, int16x4_t, const int) 27648 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 27649 27650 5.50.3.53 Saturating doubling multiply high, lane 27651 ................................................. 27652 27653 * int32x4_t vqdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 27654 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 27655 27656 * int16x8_t vqdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 27657 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 27658 27659 * int32x2_t vqdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 27660 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 27661 27662 * int16x4_t vqdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 27663 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 27664 27665 * int32x4_t vqrdmulhq_lane_s32 (int32x4_t, int32x2_t, const int) 27666 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 27667 27668 * int16x8_t vqrdmulhq_lane_s16 (int16x8_t, int16x4_t, const int) 27669 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 27670 27671 * int32x2_t vqrdmulh_lane_s32 (int32x2_t, int32x2_t, const int) 27672 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 27673 27674 * int16x4_t vqrdmulh_lane_s16 (int16x4_t, int16x4_t, const int) 27675 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 27676 27677 5.50.3.54 Multiply-accumulate, lane 27678 ................................... 27679 27680 * float32x2_t vmla_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 27681 const int) 27682 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 27683 27684 * uint32x2_t vmla_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 27685 const int) 27686 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27687 27688 * uint16x4_t vmla_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 27689 const int) 27690 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27691 27692 * int32x2_t vmla_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 27693 int) 27694 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27695 27696 * int16x4_t vmla_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 27697 int) 27698 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27699 27700 * float32x4_t vmlaq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 27701 const int) 27702 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 27703 27704 * uint32x4_t vmlaq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 27705 const int) 27706 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27707 27708 * uint16x8_t vmlaq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 27709 const int) 27710 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27711 27712 * int32x4_t vmlaq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 27713 int) 27714 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27715 27716 * int16x8_t vmlaq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 27717 int) 27718 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27719 27720 * uint64x2_t vmlal_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 27721 const int) 27722 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 27723 27724 * uint32x4_t vmlal_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 27725 const int) 27726 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 27727 27728 * int64x2_t vmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27729 int) 27730 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 27731 27732 * int32x4_t vmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27733 int) 27734 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 27735 27736 * int64x2_t vqdmlal_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27737 int) 27738 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 27739 27740 * int32x4_t vqdmlal_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27741 int) 27742 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 27743 27744 5.50.3.55 Multiply-subtract, lane 27745 ................................. 27746 27747 * float32x2_t vmls_lane_f32 (float32x2_t, float32x2_t, float32x2_t, 27748 const int) 27749 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 27750 27751 * uint32x2_t vmls_lane_u32 (uint32x2_t, uint32x2_t, uint32x2_t, 27752 const int) 27753 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27754 27755 * uint16x4_t vmls_lane_u16 (uint16x4_t, uint16x4_t, uint16x4_t, 27756 const int) 27757 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27758 27759 * int32x2_t vmls_lane_s32 (int32x2_t, int32x2_t, int32x2_t, const 27760 int) 27761 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27762 27763 * int16x4_t vmls_lane_s16 (int16x4_t, int16x4_t, int16x4_t, const 27764 int) 27765 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27766 27767 * float32x4_t vmlsq_lane_f32 (float32x4_t, float32x4_t, float32x2_t, 27768 const int) 27769 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 27770 27771 * uint32x4_t vmlsq_lane_u32 (uint32x4_t, uint32x4_t, uint32x2_t, 27772 const int) 27773 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27774 27775 * uint16x8_t vmlsq_lane_u16 (uint16x8_t, uint16x8_t, uint16x4_t, 27776 const int) 27777 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27778 27779 * int32x4_t vmlsq_lane_s32 (int32x4_t, int32x4_t, int32x2_t, const 27780 int) 27781 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27782 27783 * int16x8_t vmlsq_lane_s16 (int16x8_t, int16x8_t, int16x4_t, const 27784 int) 27785 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27786 27787 * uint64x2_t vmlsl_lane_u32 (uint64x2_t, uint32x2_t, uint32x2_t, 27788 const int) 27789 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 27790 27791 * uint32x4_t vmlsl_lane_u16 (uint32x4_t, uint16x4_t, uint16x4_t, 27792 const int) 27793 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 27794 27795 * int64x2_t vmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27796 int) 27797 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 27798 27799 * int32x4_t vmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27800 int) 27801 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 27802 27803 * int64x2_t vqdmlsl_lane_s32 (int64x2_t, int32x2_t, int32x2_t, const 27804 int) 27805 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 27806 27807 * int32x4_t vqdmlsl_lane_s16 (int32x4_t, int16x4_t, int16x4_t, const 27808 int) 27809 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 27810 27811 5.50.3.56 Vector multiply by scalar 27812 ................................... 27813 27814 * float32x2_t vmul_n_f32 (float32x2_t, float32_t) 27815 _Form of expected instruction(s):_ `vmul.f32 D0, D0, D0[0]' 27816 27817 * uint32x2_t vmul_n_u32 (uint32x2_t, uint32_t) 27818 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27819 27820 * uint16x4_t vmul_n_u16 (uint16x4_t, uint16_t) 27821 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27822 27823 * int32x2_t vmul_n_s32 (int32x2_t, int32_t) 27824 _Form of expected instruction(s):_ `vmul.i32 D0, D0, D0[0]' 27825 27826 * int16x4_t vmul_n_s16 (int16x4_t, int16_t) 27827 _Form of expected instruction(s):_ `vmul.i16 D0, D0, D0[0]' 27828 27829 * float32x4_t vmulq_n_f32 (float32x4_t, float32_t) 27830 _Form of expected instruction(s):_ `vmul.f32 Q0, Q0, D0[0]' 27831 27832 * uint32x4_t vmulq_n_u32 (uint32x4_t, uint32_t) 27833 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27834 27835 * uint16x8_t vmulq_n_u16 (uint16x8_t, uint16_t) 27836 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27837 27838 * int32x4_t vmulq_n_s32 (int32x4_t, int32_t) 27839 _Form of expected instruction(s):_ `vmul.i32 Q0, Q0, D0[0]' 27840 27841 * int16x8_t vmulq_n_s16 (int16x8_t, int16_t) 27842 _Form of expected instruction(s):_ `vmul.i16 Q0, Q0, D0[0]' 27843 27844 5.50.3.57 Vector long multiply by scalar 27845 ........................................ 27846 27847 * uint64x2_t vmull_n_u32 (uint32x2_t, uint32_t) 27848 _Form of expected instruction(s):_ `vmull.u32 Q0, D0, D0[0]' 27849 27850 * uint32x4_t vmull_n_u16 (uint16x4_t, uint16_t) 27851 _Form of expected instruction(s):_ `vmull.u16 Q0, D0, D0[0]' 27852 27853 * int64x2_t vmull_n_s32 (int32x2_t, int32_t) 27854 _Form of expected instruction(s):_ `vmull.s32 Q0, D0, D0[0]' 27855 27856 * int32x4_t vmull_n_s16 (int16x4_t, int16_t) 27857 _Form of expected instruction(s):_ `vmull.s16 Q0, D0, D0[0]' 27858 27859 5.50.3.58 Vector saturating doubling long multiply by scalar 27860 ............................................................ 27861 27862 * int64x2_t vqdmull_n_s32 (int32x2_t, int32_t) 27863 _Form of expected instruction(s):_ `vqdmull.s32 Q0, D0, D0[0]' 27864 27865 * int32x4_t vqdmull_n_s16 (int16x4_t, int16_t) 27866 _Form of expected instruction(s):_ `vqdmull.s16 Q0, D0, D0[0]' 27867 27868 5.50.3.59 Vector saturating doubling multiply high by scalar 27869 ............................................................ 27870 27871 * int32x4_t vqdmulhq_n_s32 (int32x4_t, int32_t) 27872 _Form of expected instruction(s):_ `vqdmulh.s32 Q0, Q0, D0[0]' 27873 27874 * int16x8_t vqdmulhq_n_s16 (int16x8_t, int16_t) 27875 _Form of expected instruction(s):_ `vqdmulh.s16 Q0, Q0, D0[0]' 27876 27877 * int32x2_t vqdmulh_n_s32 (int32x2_t, int32_t) 27878 _Form of expected instruction(s):_ `vqdmulh.s32 D0, D0, D0[0]' 27879 27880 * int16x4_t vqdmulh_n_s16 (int16x4_t, int16_t) 27881 _Form of expected instruction(s):_ `vqdmulh.s16 D0, D0, D0[0]' 27882 27883 * int32x4_t vqrdmulhq_n_s32 (int32x4_t, int32_t) 27884 _Form of expected instruction(s):_ `vqrdmulh.s32 Q0, Q0, D0[0]' 27885 27886 * int16x8_t vqrdmulhq_n_s16 (int16x8_t, int16_t) 27887 _Form of expected instruction(s):_ `vqrdmulh.s16 Q0, Q0, D0[0]' 27888 27889 * int32x2_t vqrdmulh_n_s32 (int32x2_t, int32_t) 27890 _Form of expected instruction(s):_ `vqrdmulh.s32 D0, D0, D0[0]' 27891 27892 * int16x4_t vqrdmulh_n_s16 (int16x4_t, int16_t) 27893 _Form of expected instruction(s):_ `vqrdmulh.s16 D0, D0, D0[0]' 27894 27895 5.50.3.60 Vector multiply-accumulate by scalar 27896 .............................................. 27897 27898 * float32x2_t vmla_n_f32 (float32x2_t, float32x2_t, float32_t) 27899 _Form of expected instruction(s):_ `vmla.f32 D0, D0, D0[0]' 27900 27901 * uint32x2_t vmla_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 27902 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27903 27904 * uint16x4_t vmla_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 27905 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27906 27907 * int32x2_t vmla_n_s32 (int32x2_t, int32x2_t, int32_t) 27908 _Form of expected instruction(s):_ `vmla.i32 D0, D0, D0[0]' 27909 27910 * int16x4_t vmla_n_s16 (int16x4_t, int16x4_t, int16_t) 27911 _Form of expected instruction(s):_ `vmla.i16 D0, D0, D0[0]' 27912 27913 * float32x4_t vmlaq_n_f32 (float32x4_t, float32x4_t, float32_t) 27914 _Form of expected instruction(s):_ `vmla.f32 Q0, Q0, D0[0]' 27915 27916 * uint32x4_t vmlaq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 27917 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27918 27919 * uint16x8_t vmlaq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 27920 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27921 27922 * int32x4_t vmlaq_n_s32 (int32x4_t, int32x4_t, int32_t) 27923 _Form of expected instruction(s):_ `vmla.i32 Q0, Q0, D0[0]' 27924 27925 * int16x8_t vmlaq_n_s16 (int16x8_t, int16x8_t, int16_t) 27926 _Form of expected instruction(s):_ `vmla.i16 Q0, Q0, D0[0]' 27927 27928 * uint64x2_t vmlal_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 27929 _Form of expected instruction(s):_ `vmlal.u32 Q0, D0, D0[0]' 27930 27931 * uint32x4_t vmlal_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 27932 _Form of expected instruction(s):_ `vmlal.u16 Q0, D0, D0[0]' 27933 27934 * int64x2_t vmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 27935 _Form of expected instruction(s):_ `vmlal.s32 Q0, D0, D0[0]' 27936 27937 * int32x4_t vmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 27938 _Form of expected instruction(s):_ `vmlal.s16 Q0, D0, D0[0]' 27939 27940 * int64x2_t vqdmlal_n_s32 (int64x2_t, int32x2_t, int32_t) 27941 _Form of expected instruction(s):_ `vqdmlal.s32 Q0, D0, D0[0]' 27942 27943 * int32x4_t vqdmlal_n_s16 (int32x4_t, int16x4_t, int16_t) 27944 _Form of expected instruction(s):_ `vqdmlal.s16 Q0, D0, D0[0]' 27945 27946 5.50.3.61 Vector multiply-subtract by scalar 27947 ............................................ 27948 27949 * float32x2_t vmls_n_f32 (float32x2_t, float32x2_t, float32_t) 27950 _Form of expected instruction(s):_ `vmls.f32 D0, D0, D0[0]' 27951 27952 * uint32x2_t vmls_n_u32 (uint32x2_t, uint32x2_t, uint32_t) 27953 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27954 27955 * uint16x4_t vmls_n_u16 (uint16x4_t, uint16x4_t, uint16_t) 27956 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27957 27958 * int32x2_t vmls_n_s32 (int32x2_t, int32x2_t, int32_t) 27959 _Form of expected instruction(s):_ `vmls.i32 D0, D0, D0[0]' 27960 27961 * int16x4_t vmls_n_s16 (int16x4_t, int16x4_t, int16_t) 27962 _Form of expected instruction(s):_ `vmls.i16 D0, D0, D0[0]' 27963 27964 * float32x4_t vmlsq_n_f32 (float32x4_t, float32x4_t, float32_t) 27965 _Form of expected instruction(s):_ `vmls.f32 Q0, Q0, D0[0]' 27966 27967 * uint32x4_t vmlsq_n_u32 (uint32x4_t, uint32x4_t, uint32_t) 27968 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27969 27970 * uint16x8_t vmlsq_n_u16 (uint16x8_t, uint16x8_t, uint16_t) 27971 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27972 27973 * int32x4_t vmlsq_n_s32 (int32x4_t, int32x4_t, int32_t) 27974 _Form of expected instruction(s):_ `vmls.i32 Q0, Q0, D0[0]' 27975 27976 * int16x8_t vmlsq_n_s16 (int16x8_t, int16x8_t, int16_t) 27977 _Form of expected instruction(s):_ `vmls.i16 Q0, Q0, D0[0]' 27978 27979 * uint64x2_t vmlsl_n_u32 (uint64x2_t, uint32x2_t, uint32_t) 27980 _Form of expected instruction(s):_ `vmlsl.u32 Q0, D0, D0[0]' 27981 27982 * uint32x4_t vmlsl_n_u16 (uint32x4_t, uint16x4_t, uint16_t) 27983 _Form of expected instruction(s):_ `vmlsl.u16 Q0, D0, D0[0]' 27984 27985 * int64x2_t vmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 27986 _Form of expected instruction(s):_ `vmlsl.s32 Q0, D0, D0[0]' 27987 27988 * int32x4_t vmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 27989 _Form of expected instruction(s):_ `vmlsl.s16 Q0, D0, D0[0]' 27990 27991 * int64x2_t vqdmlsl_n_s32 (int64x2_t, int32x2_t, int32_t) 27992 _Form of expected instruction(s):_ `vqdmlsl.s32 Q0, D0, D0[0]' 27993 27994 * int32x4_t vqdmlsl_n_s16 (int32x4_t, int16x4_t, int16_t) 27995 _Form of expected instruction(s):_ `vqdmlsl.s16 Q0, D0, D0[0]' 27996 27997 5.50.3.62 Vector extract 27998 ........................ 27999 28000 * uint32x2_t vext_u32 (uint32x2_t, uint32x2_t, const int) 28001 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 28002 28003 * uint16x4_t vext_u16 (uint16x4_t, uint16x4_t, const int) 28004 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 28005 28006 * uint8x8_t vext_u8 (uint8x8_t, uint8x8_t, const int) 28007 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 28008 28009 * int32x2_t vext_s32 (int32x2_t, int32x2_t, const int) 28010 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 28011 28012 * int16x4_t vext_s16 (int16x4_t, int16x4_t, const int) 28013 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 28014 28015 * int8x8_t vext_s8 (int8x8_t, int8x8_t, const int) 28016 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 28017 28018 * uint64x1_t vext_u64 (uint64x1_t, uint64x1_t, const int) 28019 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 28020 28021 * int64x1_t vext_s64 (int64x1_t, int64x1_t, const int) 28022 _Form of expected instruction(s):_ `vext.64 D0, D0, D0, #0' 28023 28024 * float32x2_t vext_f32 (float32x2_t, float32x2_t, const int) 28025 _Form of expected instruction(s):_ `vext.32 D0, D0, D0, #0' 28026 28027 * poly16x4_t vext_p16 (poly16x4_t, poly16x4_t, const int) 28028 _Form of expected instruction(s):_ `vext.16 D0, D0, D0, #0' 28029 28030 * poly8x8_t vext_p8 (poly8x8_t, poly8x8_t, const int) 28031 _Form of expected instruction(s):_ `vext.8 D0, D0, D0, #0' 28032 28033 * uint32x4_t vextq_u32 (uint32x4_t, uint32x4_t, const int) 28034 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 28035 28036 * uint16x8_t vextq_u16 (uint16x8_t, uint16x8_t, const int) 28037 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 28038 28039 * uint8x16_t vextq_u8 (uint8x16_t, uint8x16_t, const int) 28040 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 28041 28042 * int32x4_t vextq_s32 (int32x4_t, int32x4_t, const int) 28043 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 28044 28045 * int16x8_t vextq_s16 (int16x8_t, int16x8_t, const int) 28046 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 28047 28048 * int8x16_t vextq_s8 (int8x16_t, int8x16_t, const int) 28049 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 28050 28051 * uint64x2_t vextq_u64 (uint64x2_t, uint64x2_t, const int) 28052 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 28053 28054 * int64x2_t vextq_s64 (int64x2_t, int64x2_t, const int) 28055 _Form of expected instruction(s):_ `vext.64 Q0, Q0, Q0, #0' 28056 28057 * float32x4_t vextq_f32 (float32x4_t, float32x4_t, const int) 28058 _Form of expected instruction(s):_ `vext.32 Q0, Q0, Q0, #0' 28059 28060 * poly16x8_t vextq_p16 (poly16x8_t, poly16x8_t, const int) 28061 _Form of expected instruction(s):_ `vext.16 Q0, Q0, Q0, #0' 28062 28063 * poly8x16_t vextq_p8 (poly8x16_t, poly8x16_t, const int) 28064 _Form of expected instruction(s):_ `vext.8 Q0, Q0, Q0, #0' 28065 28066 5.50.3.63 Reverse elements 28067 .......................... 28068 28069 * uint32x2_t vrev64_u32 (uint32x2_t) 28070 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 28071 28072 * uint16x4_t vrev64_u16 (uint16x4_t) 28073 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 28074 28075 * uint8x8_t vrev64_u8 (uint8x8_t) 28076 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 28077 28078 * int32x2_t vrev64_s32 (int32x2_t) 28079 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 28080 28081 * int16x4_t vrev64_s16 (int16x4_t) 28082 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 28083 28084 * int8x8_t vrev64_s8 (int8x8_t) 28085 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 28086 28087 * float32x2_t vrev64_f32 (float32x2_t) 28088 _Form of expected instruction(s):_ `vrev64.32 D0, D0' 28089 28090 * poly16x4_t vrev64_p16 (poly16x4_t) 28091 _Form of expected instruction(s):_ `vrev64.16 D0, D0' 28092 28093 * poly8x8_t vrev64_p8 (poly8x8_t) 28094 _Form of expected instruction(s):_ `vrev64.8 D0, D0' 28095 28096 * uint32x4_t vrev64q_u32 (uint32x4_t) 28097 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 28098 28099 * uint16x8_t vrev64q_u16 (uint16x8_t) 28100 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 28101 28102 * uint8x16_t vrev64q_u8 (uint8x16_t) 28103 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 28104 28105 * int32x4_t vrev64q_s32 (int32x4_t) 28106 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 28107 28108 * int16x8_t vrev64q_s16 (int16x8_t) 28109 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 28110 28111 * int8x16_t vrev64q_s8 (int8x16_t) 28112 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 28113 28114 * float32x4_t vrev64q_f32 (float32x4_t) 28115 _Form of expected instruction(s):_ `vrev64.32 Q0, Q0' 28116 28117 * poly16x8_t vrev64q_p16 (poly16x8_t) 28118 _Form of expected instruction(s):_ `vrev64.16 Q0, Q0' 28119 28120 * poly8x16_t vrev64q_p8 (poly8x16_t) 28121 _Form of expected instruction(s):_ `vrev64.8 Q0, Q0' 28122 28123 * uint16x4_t vrev32_u16 (uint16x4_t) 28124 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 28125 28126 * int16x4_t vrev32_s16 (int16x4_t) 28127 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 28128 28129 * uint8x8_t vrev32_u8 (uint8x8_t) 28130 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 28131 28132 * int8x8_t vrev32_s8 (int8x8_t) 28133 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 28134 28135 * poly16x4_t vrev32_p16 (poly16x4_t) 28136 _Form of expected instruction(s):_ `vrev32.16 D0, D0' 28137 28138 * poly8x8_t vrev32_p8 (poly8x8_t) 28139 _Form of expected instruction(s):_ `vrev32.8 D0, D0' 28140 28141 * uint16x8_t vrev32q_u16 (uint16x8_t) 28142 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 28143 28144 * int16x8_t vrev32q_s16 (int16x8_t) 28145 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 28146 28147 * uint8x16_t vrev32q_u8 (uint8x16_t) 28148 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 28149 28150 * int8x16_t vrev32q_s8 (int8x16_t) 28151 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 28152 28153 * poly16x8_t vrev32q_p16 (poly16x8_t) 28154 _Form of expected instruction(s):_ `vrev32.16 Q0, Q0' 28155 28156 * poly8x16_t vrev32q_p8 (poly8x16_t) 28157 _Form of expected instruction(s):_ `vrev32.8 Q0, Q0' 28158 28159 * uint8x8_t vrev16_u8 (uint8x8_t) 28160 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 28161 28162 * int8x8_t vrev16_s8 (int8x8_t) 28163 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 28164 28165 * poly8x8_t vrev16_p8 (poly8x8_t) 28166 _Form of expected instruction(s):_ `vrev16.8 D0, D0' 28167 28168 * uint8x16_t vrev16q_u8 (uint8x16_t) 28169 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 28170 28171 * int8x16_t vrev16q_s8 (int8x16_t) 28172 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 28173 28174 * poly8x16_t vrev16q_p8 (poly8x16_t) 28175 _Form of expected instruction(s):_ `vrev16.8 Q0, Q0' 28176 28177 5.50.3.64 Bit selection 28178 ....................... 28179 28180 * uint32x2_t vbsl_u32 (uint32x2_t, uint32x2_t, uint32x2_t) 28181 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28182 D0, D0, D0' _or_ `vbif D0, D0, D0' 28183 28184 * uint16x4_t vbsl_u16 (uint16x4_t, uint16x4_t, uint16x4_t) 28185 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28186 D0, D0, D0' _or_ `vbif D0, D0, D0' 28187 28188 * uint8x8_t vbsl_u8 (uint8x8_t, uint8x8_t, uint8x8_t) 28189 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28190 D0, D0, D0' _or_ `vbif D0, D0, D0' 28191 28192 * int32x2_t vbsl_s32 (uint32x2_t, int32x2_t, int32x2_t) 28193 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28194 D0, D0, D0' _or_ `vbif D0, D0, D0' 28195 28196 * int16x4_t vbsl_s16 (uint16x4_t, int16x4_t, int16x4_t) 28197 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28198 D0, D0, D0' _or_ `vbif D0, D0, D0' 28199 28200 * int8x8_t vbsl_s8 (uint8x8_t, int8x8_t, int8x8_t) 28201 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28202 D0, D0, D0' _or_ `vbif D0, D0, D0' 28203 28204 * uint64x1_t vbsl_u64 (uint64x1_t, uint64x1_t, uint64x1_t) 28205 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28206 D0, D0, D0' _or_ `vbif D0, D0, D0' 28207 28208 * int64x1_t vbsl_s64 (uint64x1_t, int64x1_t, int64x1_t) 28209 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28210 D0, D0, D0' _or_ `vbif D0, D0, D0' 28211 28212 * float32x2_t vbsl_f32 (uint32x2_t, float32x2_t, float32x2_t) 28213 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28214 D0, D0, D0' _or_ `vbif D0, D0, D0' 28215 28216 * poly16x4_t vbsl_p16 (uint16x4_t, poly16x4_t, poly16x4_t) 28217 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28218 D0, D0, D0' _or_ `vbif D0, D0, D0' 28219 28220 * poly8x8_t vbsl_p8 (uint8x8_t, poly8x8_t, poly8x8_t) 28221 _Form of expected instruction(s):_ `vbsl D0, D0, D0' _or_ `vbit 28222 D0, D0, D0' _or_ `vbif D0, D0, D0' 28223 28224 * uint32x4_t vbslq_u32 (uint32x4_t, uint32x4_t, uint32x4_t) 28225 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28226 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28227 28228 * uint16x8_t vbslq_u16 (uint16x8_t, uint16x8_t, uint16x8_t) 28229 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28230 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28231 28232 * uint8x16_t vbslq_u8 (uint8x16_t, uint8x16_t, uint8x16_t) 28233 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28234 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28235 28236 * int32x4_t vbslq_s32 (uint32x4_t, int32x4_t, int32x4_t) 28237 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28238 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28239 28240 * int16x8_t vbslq_s16 (uint16x8_t, int16x8_t, int16x8_t) 28241 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28242 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28243 28244 * int8x16_t vbslq_s8 (uint8x16_t, int8x16_t, int8x16_t) 28245 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28246 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28247 28248 * uint64x2_t vbslq_u64 (uint64x2_t, uint64x2_t, uint64x2_t) 28249 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28250 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28251 28252 * int64x2_t vbslq_s64 (uint64x2_t, int64x2_t, int64x2_t) 28253 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28254 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28255 28256 * float32x4_t vbslq_f32 (uint32x4_t, float32x4_t, float32x4_t) 28257 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28258 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28259 28260 * poly16x8_t vbslq_p16 (uint16x8_t, poly16x8_t, poly16x8_t) 28261 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28262 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28263 28264 * poly8x16_t vbslq_p8 (uint8x16_t, poly8x16_t, poly8x16_t) 28265 _Form of expected instruction(s):_ `vbsl Q0, Q0, Q0' _or_ `vbit 28266 Q0, Q0, Q0' _or_ `vbif Q0, Q0, Q0' 28267 28268 5.50.3.65 Transpose elements 28269 ............................ 28270 28271 * uint32x2x2_t vtrn_u32 (uint32x2_t, uint32x2_t) 28272 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 28273 28274 * uint16x4x2_t vtrn_u16 (uint16x4_t, uint16x4_t) 28275 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 28276 28277 * uint8x8x2_t vtrn_u8 (uint8x8_t, uint8x8_t) 28278 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 28279 28280 * int32x2x2_t vtrn_s32 (int32x2_t, int32x2_t) 28281 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 28282 28283 * int16x4x2_t vtrn_s16 (int16x4_t, int16x4_t) 28284 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 28285 28286 * int8x8x2_t vtrn_s8 (int8x8_t, int8x8_t) 28287 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 28288 28289 * float32x2x2_t vtrn_f32 (float32x2_t, float32x2_t) 28290 _Form of expected instruction(s):_ `vtrn.32 D0, D1' 28291 28292 * poly16x4x2_t vtrn_p16 (poly16x4_t, poly16x4_t) 28293 _Form of expected instruction(s):_ `vtrn.16 D0, D1' 28294 28295 * poly8x8x2_t vtrn_p8 (poly8x8_t, poly8x8_t) 28296 _Form of expected instruction(s):_ `vtrn.8 D0, D1' 28297 28298 * uint32x4x2_t vtrnq_u32 (uint32x4_t, uint32x4_t) 28299 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28300 28301 * uint16x8x2_t vtrnq_u16 (uint16x8_t, uint16x8_t) 28302 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28303 28304 * uint8x16x2_t vtrnq_u8 (uint8x16_t, uint8x16_t) 28305 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28306 28307 * int32x4x2_t vtrnq_s32 (int32x4_t, int32x4_t) 28308 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28309 28310 * int16x8x2_t vtrnq_s16 (int16x8_t, int16x8_t) 28311 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28312 28313 * int8x16x2_t vtrnq_s8 (int8x16_t, int8x16_t) 28314 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28315 28316 * float32x4x2_t vtrnq_f32 (float32x4_t, float32x4_t) 28317 _Form of expected instruction(s):_ `vtrn.32 Q0, Q1' 28318 28319 * poly16x8x2_t vtrnq_p16 (poly16x8_t, poly16x8_t) 28320 _Form of expected instruction(s):_ `vtrn.16 Q0, Q1' 28321 28322 * poly8x16x2_t vtrnq_p8 (poly8x16_t, poly8x16_t) 28323 _Form of expected instruction(s):_ `vtrn.8 Q0, Q1' 28324 28325 5.50.3.66 Zip elements 28326 ...................... 28327 28328 * uint32x2x2_t vzip_u32 (uint32x2_t, uint32x2_t) 28329 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28330 28331 * uint16x4x2_t vzip_u16 (uint16x4_t, uint16x4_t) 28332 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28333 28334 * uint8x8x2_t vzip_u8 (uint8x8_t, uint8x8_t) 28335 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28336 28337 * int32x2x2_t vzip_s32 (int32x2_t, int32x2_t) 28338 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28339 28340 * int16x4x2_t vzip_s16 (int16x4_t, int16x4_t) 28341 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28342 28343 * int8x8x2_t vzip_s8 (int8x8_t, int8x8_t) 28344 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28345 28346 * float32x2x2_t vzip_f32 (float32x2_t, float32x2_t) 28347 _Form of expected instruction(s):_ `vzip.32 D0, D1' 28348 28349 * poly16x4x2_t vzip_p16 (poly16x4_t, poly16x4_t) 28350 _Form of expected instruction(s):_ `vzip.16 D0, D1' 28351 28352 * poly8x8x2_t vzip_p8 (poly8x8_t, poly8x8_t) 28353 _Form of expected instruction(s):_ `vzip.8 D0, D1' 28354 28355 * uint32x4x2_t vzipq_u32 (uint32x4_t, uint32x4_t) 28356 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28357 28358 * uint16x8x2_t vzipq_u16 (uint16x8_t, uint16x8_t) 28359 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28360 28361 * uint8x16x2_t vzipq_u8 (uint8x16_t, uint8x16_t) 28362 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28363 28364 * int32x4x2_t vzipq_s32 (int32x4_t, int32x4_t) 28365 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28366 28367 * int16x8x2_t vzipq_s16 (int16x8_t, int16x8_t) 28368 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28369 28370 * int8x16x2_t vzipq_s8 (int8x16_t, int8x16_t) 28371 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28372 28373 * float32x4x2_t vzipq_f32 (float32x4_t, float32x4_t) 28374 _Form of expected instruction(s):_ `vzip.32 Q0, Q1' 28375 28376 * poly16x8x2_t vzipq_p16 (poly16x8_t, poly16x8_t) 28377 _Form of expected instruction(s):_ `vzip.16 Q0, Q1' 28378 28379 * poly8x16x2_t vzipq_p8 (poly8x16_t, poly8x16_t) 28380 _Form of expected instruction(s):_ `vzip.8 Q0, Q1' 28381 28382 5.50.3.67 Unzip elements 28383 ........................ 28384 28385 * uint32x2x2_t vuzp_u32 (uint32x2_t, uint32x2_t) 28386 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28387 28388 * uint16x4x2_t vuzp_u16 (uint16x4_t, uint16x4_t) 28389 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28390 28391 * uint8x8x2_t vuzp_u8 (uint8x8_t, uint8x8_t) 28392 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28393 28394 * int32x2x2_t vuzp_s32 (int32x2_t, int32x2_t) 28395 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28396 28397 * int16x4x2_t vuzp_s16 (int16x4_t, int16x4_t) 28398 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28399 28400 * int8x8x2_t vuzp_s8 (int8x8_t, int8x8_t) 28401 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28402 28403 * float32x2x2_t vuzp_f32 (float32x2_t, float32x2_t) 28404 _Form of expected instruction(s):_ `vuzp.32 D0, D1' 28405 28406 * poly16x4x2_t vuzp_p16 (poly16x4_t, poly16x4_t) 28407 _Form of expected instruction(s):_ `vuzp.16 D0, D1' 28408 28409 * poly8x8x2_t vuzp_p8 (poly8x8_t, poly8x8_t) 28410 _Form of expected instruction(s):_ `vuzp.8 D0, D1' 28411 28412 * uint32x4x2_t vuzpq_u32 (uint32x4_t, uint32x4_t) 28413 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28414 28415 * uint16x8x2_t vuzpq_u16 (uint16x8_t, uint16x8_t) 28416 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28417 28418 * uint8x16x2_t vuzpq_u8 (uint8x16_t, uint8x16_t) 28419 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28420 28421 * int32x4x2_t vuzpq_s32 (int32x4_t, int32x4_t) 28422 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28423 28424 * int16x8x2_t vuzpq_s16 (int16x8_t, int16x8_t) 28425 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28426 28427 * int8x16x2_t vuzpq_s8 (int8x16_t, int8x16_t) 28428 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28429 28430 * float32x4x2_t vuzpq_f32 (float32x4_t, float32x4_t) 28431 _Form of expected instruction(s):_ `vuzp.32 Q0, Q1' 28432 28433 * poly16x8x2_t vuzpq_p16 (poly16x8_t, poly16x8_t) 28434 _Form of expected instruction(s):_ `vuzp.16 Q0, Q1' 28435 28436 * poly8x16x2_t vuzpq_p8 (poly8x16_t, poly8x16_t) 28437 _Form of expected instruction(s):_ `vuzp.8 Q0, Q1' 28438 28439 5.50.3.68 Element/structure loads, VLD1 variants 28440 ................................................ 28441 28442 * uint32x2_t vld1_u32 (const uint32_t *) 28443 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28444 28445 * uint16x4_t vld1_u16 (const uint16_t *) 28446 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28447 28448 * uint8x8_t vld1_u8 (const uint8_t *) 28449 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28450 28451 * int32x2_t vld1_s32 (const int32_t *) 28452 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28453 28454 * int16x4_t vld1_s16 (const int16_t *) 28455 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28456 28457 * int8x8_t vld1_s8 (const int8_t *) 28458 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28459 28460 * uint64x1_t vld1_u64 (const uint64_t *) 28461 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28462 28463 * int64x1_t vld1_s64 (const int64_t *) 28464 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28465 28466 * float32x2_t vld1_f32 (const float32_t *) 28467 _Form of expected instruction(s):_ `vld1.32 {D0}, [R0]' 28468 28469 * poly16x4_t vld1_p16 (const poly16_t *) 28470 _Form of expected instruction(s):_ `vld1.16 {D0}, [R0]' 28471 28472 * poly8x8_t vld1_p8 (const poly8_t *) 28473 _Form of expected instruction(s):_ `vld1.8 {D0}, [R0]' 28474 28475 * uint32x4_t vld1q_u32 (const uint32_t *) 28476 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28477 28478 * uint16x8_t vld1q_u16 (const uint16_t *) 28479 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28480 28481 * uint8x16_t vld1q_u8 (const uint8_t *) 28482 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28483 28484 * int32x4_t vld1q_s32 (const int32_t *) 28485 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28486 28487 * int16x8_t vld1q_s16 (const int16_t *) 28488 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28489 28490 * int8x16_t vld1q_s8 (const int8_t *) 28491 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28492 28493 * uint64x2_t vld1q_u64 (const uint64_t *) 28494 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28495 28496 * int64x2_t vld1q_s64 (const int64_t *) 28497 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28498 28499 * float32x4_t vld1q_f32 (const float32_t *) 28500 _Form of expected instruction(s):_ `vld1.32 {D0, D1}, [R0]' 28501 28502 * poly16x8_t vld1q_p16 (const poly16_t *) 28503 _Form of expected instruction(s):_ `vld1.16 {D0, D1}, [R0]' 28504 28505 * poly8x16_t vld1q_p8 (const poly8_t *) 28506 _Form of expected instruction(s):_ `vld1.8 {D0, D1}, [R0]' 28507 28508 * uint32x2_t vld1_lane_u32 (const uint32_t *, uint32x2_t, const int) 28509 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28510 28511 * uint16x4_t vld1_lane_u16 (const uint16_t *, uint16x4_t, const int) 28512 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28513 28514 * uint8x8_t vld1_lane_u8 (const uint8_t *, uint8x8_t, const int) 28515 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28516 28517 * int32x2_t vld1_lane_s32 (const int32_t *, int32x2_t, const int) 28518 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28519 28520 * int16x4_t vld1_lane_s16 (const int16_t *, int16x4_t, const int) 28521 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28522 28523 * int8x8_t vld1_lane_s8 (const int8_t *, int8x8_t, const int) 28524 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28525 28526 * float32x2_t vld1_lane_f32 (const float32_t *, float32x2_t, const 28527 int) 28528 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28529 28530 * poly16x4_t vld1_lane_p16 (const poly16_t *, poly16x4_t, const int) 28531 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28532 28533 * poly8x8_t vld1_lane_p8 (const poly8_t *, poly8x8_t, const int) 28534 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28535 28536 * uint64x1_t vld1_lane_u64 (const uint64_t *, uint64x1_t, const int) 28537 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28538 28539 * int64x1_t vld1_lane_s64 (const int64_t *, int64x1_t, const int) 28540 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28541 28542 * uint32x4_t vld1q_lane_u32 (const uint32_t *, uint32x4_t, const int) 28543 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28544 28545 * uint16x8_t vld1q_lane_u16 (const uint16_t *, uint16x8_t, const int) 28546 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28547 28548 * uint8x16_t vld1q_lane_u8 (const uint8_t *, uint8x16_t, const int) 28549 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28550 28551 * int32x4_t vld1q_lane_s32 (const int32_t *, int32x4_t, const int) 28552 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28553 28554 * int16x8_t vld1q_lane_s16 (const int16_t *, int16x8_t, const int) 28555 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28556 28557 * int8x16_t vld1q_lane_s8 (const int8_t *, int8x16_t, const int) 28558 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28559 28560 * float32x4_t vld1q_lane_f32 (const float32_t *, float32x4_t, const 28561 int) 28562 _Form of expected instruction(s):_ `vld1.32 {D0[0]}, [R0]' 28563 28564 * poly16x8_t vld1q_lane_p16 (const poly16_t *, poly16x8_t, const int) 28565 _Form of expected instruction(s):_ `vld1.16 {D0[0]}, [R0]' 28566 28567 * poly8x16_t vld1q_lane_p8 (const poly8_t *, poly8x16_t, const int) 28568 _Form of expected instruction(s):_ `vld1.8 {D0[0]}, [R0]' 28569 28570 * uint64x2_t vld1q_lane_u64 (const uint64_t *, uint64x2_t, const int) 28571 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28572 28573 * int64x2_t vld1q_lane_s64 (const int64_t *, int64x2_t, const int) 28574 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28575 28576 * uint32x2_t vld1_dup_u32 (const uint32_t *) 28577 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28578 28579 * uint16x4_t vld1_dup_u16 (const uint16_t *) 28580 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28581 28582 * uint8x8_t vld1_dup_u8 (const uint8_t *) 28583 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28584 28585 * int32x2_t vld1_dup_s32 (const int32_t *) 28586 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28587 28588 * int16x4_t vld1_dup_s16 (const int16_t *) 28589 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28590 28591 * int8x8_t vld1_dup_s8 (const int8_t *) 28592 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28593 28594 * float32x2_t vld1_dup_f32 (const float32_t *) 28595 _Form of expected instruction(s):_ `vld1.32 {D0[]}, [R0]' 28596 28597 * poly16x4_t vld1_dup_p16 (const poly16_t *) 28598 _Form of expected instruction(s):_ `vld1.16 {D0[]}, [R0]' 28599 28600 * poly8x8_t vld1_dup_p8 (const poly8_t *) 28601 _Form of expected instruction(s):_ `vld1.8 {D0[]}, [R0]' 28602 28603 * uint64x1_t vld1_dup_u64 (const uint64_t *) 28604 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28605 28606 * int64x1_t vld1_dup_s64 (const int64_t *) 28607 _Form of expected instruction(s):_ `vld1.64 {D0}, [R0]' 28608 28609 * uint32x4_t vld1q_dup_u32 (const uint32_t *) 28610 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28611 28612 * uint16x8_t vld1q_dup_u16 (const uint16_t *) 28613 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28614 28615 * uint8x16_t vld1q_dup_u8 (const uint8_t *) 28616 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28617 28618 * int32x4_t vld1q_dup_s32 (const int32_t *) 28619 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28620 28621 * int16x8_t vld1q_dup_s16 (const int16_t *) 28622 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28623 28624 * int8x16_t vld1q_dup_s8 (const int8_t *) 28625 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28626 28627 * float32x4_t vld1q_dup_f32 (const float32_t *) 28628 _Form of expected instruction(s):_ `vld1.32 {D0[], D1[]}, [R0]' 28629 28630 * poly16x8_t vld1q_dup_p16 (const poly16_t *) 28631 _Form of expected instruction(s):_ `vld1.16 {D0[], D1[]}, [R0]' 28632 28633 * poly8x16_t vld1q_dup_p8 (const poly8_t *) 28634 _Form of expected instruction(s):_ `vld1.8 {D0[], D1[]}, [R0]' 28635 28636 * uint64x2_t vld1q_dup_u64 (const uint64_t *) 28637 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28638 28639 * int64x2_t vld1q_dup_s64 (const int64_t *) 28640 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28641 28642 5.50.3.69 Element/structure stores, VST1 variants 28643 ................................................. 28644 28645 * void vst1_u32 (uint32_t *, uint32x2_t) 28646 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28647 28648 * void vst1_u16 (uint16_t *, uint16x4_t) 28649 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28650 28651 * void vst1_u8 (uint8_t *, uint8x8_t) 28652 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28653 28654 * void vst1_s32 (int32_t *, int32x2_t) 28655 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28656 28657 * void vst1_s16 (int16_t *, int16x4_t) 28658 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28659 28660 * void vst1_s8 (int8_t *, int8x8_t) 28661 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28662 28663 * void vst1_u64 (uint64_t *, uint64x1_t) 28664 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28665 28666 * void vst1_s64 (int64_t *, int64x1_t) 28667 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28668 28669 * void vst1_f32 (float32_t *, float32x2_t) 28670 _Form of expected instruction(s):_ `vst1.32 {D0}, [R0]' 28671 28672 * void vst1_p16 (poly16_t *, poly16x4_t) 28673 _Form of expected instruction(s):_ `vst1.16 {D0}, [R0]' 28674 28675 * void vst1_p8 (poly8_t *, poly8x8_t) 28676 _Form of expected instruction(s):_ `vst1.8 {D0}, [R0]' 28677 28678 * void vst1q_u32 (uint32_t *, uint32x4_t) 28679 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28680 28681 * void vst1q_u16 (uint16_t *, uint16x8_t) 28682 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28683 28684 * void vst1q_u8 (uint8_t *, uint8x16_t) 28685 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28686 28687 * void vst1q_s32 (int32_t *, int32x4_t) 28688 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28689 28690 * void vst1q_s16 (int16_t *, int16x8_t) 28691 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28692 28693 * void vst1q_s8 (int8_t *, int8x16_t) 28694 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28695 28696 * void vst1q_u64 (uint64_t *, uint64x2_t) 28697 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28698 28699 * void vst1q_s64 (int64_t *, int64x2_t) 28700 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28701 28702 * void vst1q_f32 (float32_t *, float32x4_t) 28703 _Form of expected instruction(s):_ `vst1.32 {D0, D1}, [R0]' 28704 28705 * void vst1q_p16 (poly16_t *, poly16x8_t) 28706 _Form of expected instruction(s):_ `vst1.16 {D0, D1}, [R0]' 28707 28708 * void vst1q_p8 (poly8_t *, poly8x16_t) 28709 _Form of expected instruction(s):_ `vst1.8 {D0, D1}, [R0]' 28710 28711 * void vst1_lane_u32 (uint32_t *, uint32x2_t, const int) 28712 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28713 28714 * void vst1_lane_u16 (uint16_t *, uint16x4_t, const int) 28715 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28716 28717 * void vst1_lane_u8 (uint8_t *, uint8x8_t, const int) 28718 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28719 28720 * void vst1_lane_s32 (int32_t *, int32x2_t, const int) 28721 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28722 28723 * void vst1_lane_s16 (int16_t *, int16x4_t, const int) 28724 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28725 28726 * void vst1_lane_s8 (int8_t *, int8x8_t, const int) 28727 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28728 28729 * void vst1_lane_f32 (float32_t *, float32x2_t, const int) 28730 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28731 28732 * void vst1_lane_p16 (poly16_t *, poly16x4_t, const int) 28733 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28734 28735 * void vst1_lane_p8 (poly8_t *, poly8x8_t, const int) 28736 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28737 28738 * void vst1_lane_s64 (int64_t *, int64x1_t, const int) 28739 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28740 28741 * void vst1_lane_u64 (uint64_t *, uint64x1_t, const int) 28742 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28743 28744 * void vst1q_lane_u32 (uint32_t *, uint32x4_t, const int) 28745 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28746 28747 * void vst1q_lane_u16 (uint16_t *, uint16x8_t, const int) 28748 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28749 28750 * void vst1q_lane_u8 (uint8_t *, uint8x16_t, const int) 28751 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28752 28753 * void vst1q_lane_s32 (int32_t *, int32x4_t, const int) 28754 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28755 28756 * void vst1q_lane_s16 (int16_t *, int16x8_t, const int) 28757 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28758 28759 * void vst1q_lane_s8 (int8_t *, int8x16_t, const int) 28760 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28761 28762 * void vst1q_lane_f32 (float32_t *, float32x4_t, const int) 28763 _Form of expected instruction(s):_ `vst1.32 {D0[0]}, [R0]' 28764 28765 * void vst1q_lane_p16 (poly16_t *, poly16x8_t, const int) 28766 _Form of expected instruction(s):_ `vst1.16 {D0[0]}, [R0]' 28767 28768 * void vst1q_lane_p8 (poly8_t *, poly8x16_t, const int) 28769 _Form of expected instruction(s):_ `vst1.8 {D0[0]}, [R0]' 28770 28771 * void vst1q_lane_s64 (int64_t *, int64x2_t, const int) 28772 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28773 28774 * void vst1q_lane_u64 (uint64_t *, uint64x2_t, const int) 28775 _Form of expected instruction(s):_ `vst1.64 {D0}, [R0]' 28776 28777 5.50.3.70 Element/structure loads, VLD2 variants 28778 ................................................ 28779 28780 * uint32x2x2_t vld2_u32 (const uint32_t *) 28781 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28782 28783 * uint16x4x2_t vld2_u16 (const uint16_t *) 28784 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28785 28786 * uint8x8x2_t vld2_u8 (const uint8_t *) 28787 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28788 28789 * int32x2x2_t vld2_s32 (const int32_t *) 28790 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28791 28792 * int16x4x2_t vld2_s16 (const int16_t *) 28793 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28794 28795 * int8x8x2_t vld2_s8 (const int8_t *) 28796 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28797 28798 * float32x2x2_t vld2_f32 (const float32_t *) 28799 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28800 28801 * poly16x4x2_t vld2_p16 (const poly16_t *) 28802 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28803 28804 * poly8x8x2_t vld2_p8 (const poly8_t *) 28805 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28806 28807 * uint64x1x2_t vld2_u64 (const uint64_t *) 28808 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28809 28810 * int64x1x2_t vld2_s64 (const int64_t *) 28811 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28812 28813 * uint32x4x2_t vld2q_u32 (const uint32_t *) 28814 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28815 28816 * uint16x8x2_t vld2q_u16 (const uint16_t *) 28817 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28818 28819 * uint8x16x2_t vld2q_u8 (const uint8_t *) 28820 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28821 28822 * int32x4x2_t vld2q_s32 (const int32_t *) 28823 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28824 28825 * int16x8x2_t vld2q_s16 (const int16_t *) 28826 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28827 28828 * int8x16x2_t vld2q_s8 (const int8_t *) 28829 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28830 28831 * float32x4x2_t vld2q_f32 (const float32_t *) 28832 _Form of expected instruction(s):_ `vld2.32 {D0, D1}, [R0]' 28833 28834 * poly16x8x2_t vld2q_p16 (const poly16_t *) 28835 _Form of expected instruction(s):_ `vld2.16 {D0, D1}, [R0]' 28836 28837 * poly8x16x2_t vld2q_p8 (const poly8_t *) 28838 _Form of expected instruction(s):_ `vld2.8 {D0, D1}, [R0]' 28839 28840 * uint32x2x2_t vld2_lane_u32 (const uint32_t *, uint32x2x2_t, const 28841 int) 28842 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28843 28844 * uint16x4x2_t vld2_lane_u16 (const uint16_t *, uint16x4x2_t, const 28845 int) 28846 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28847 28848 * uint8x8x2_t vld2_lane_u8 (const uint8_t *, uint8x8x2_t, const int) 28849 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28850 28851 * int32x2x2_t vld2_lane_s32 (const int32_t *, int32x2x2_t, const int) 28852 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28853 28854 * int16x4x2_t vld2_lane_s16 (const int16_t *, int16x4x2_t, const int) 28855 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28856 28857 * int8x8x2_t vld2_lane_s8 (const int8_t *, int8x8x2_t, const int) 28858 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28859 28860 * float32x2x2_t vld2_lane_f32 (const float32_t *, float32x2x2_t, 28861 const int) 28862 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28863 28864 * poly16x4x2_t vld2_lane_p16 (const poly16_t *, poly16x4x2_t, const 28865 int) 28866 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28867 28868 * poly8x8x2_t vld2_lane_p8 (const poly8_t *, poly8x8x2_t, const int) 28869 _Form of expected instruction(s):_ `vld2.8 {D0[0], D1[0]}, [R0]' 28870 28871 * int32x4x2_t vld2q_lane_s32 (const int32_t *, int32x4x2_t, const 28872 int) 28873 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28874 28875 * int16x8x2_t vld2q_lane_s16 (const int16_t *, int16x8x2_t, const 28876 int) 28877 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28878 28879 * uint32x4x2_t vld2q_lane_u32 (const uint32_t *, uint32x4x2_t, const 28880 int) 28881 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28882 28883 * uint16x8x2_t vld2q_lane_u16 (const uint16_t *, uint16x8x2_t, const 28884 int) 28885 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28886 28887 * float32x4x2_t vld2q_lane_f32 (const float32_t *, float32x4x2_t, 28888 const int) 28889 _Form of expected instruction(s):_ `vld2.32 {D0[0], D1[0]}, [R0]' 28890 28891 * poly16x8x2_t vld2q_lane_p16 (const poly16_t *, poly16x8x2_t, const 28892 int) 28893 _Form of expected instruction(s):_ `vld2.16 {D0[0], D1[0]}, [R0]' 28894 28895 * uint32x2x2_t vld2_dup_u32 (const uint32_t *) 28896 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28897 28898 * uint16x4x2_t vld2_dup_u16 (const uint16_t *) 28899 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28900 28901 * uint8x8x2_t vld2_dup_u8 (const uint8_t *) 28902 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28903 28904 * int32x2x2_t vld2_dup_s32 (const int32_t *) 28905 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28906 28907 * int16x4x2_t vld2_dup_s16 (const int16_t *) 28908 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28909 28910 * int8x8x2_t vld2_dup_s8 (const int8_t *) 28911 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28912 28913 * float32x2x2_t vld2_dup_f32 (const float32_t *) 28914 _Form of expected instruction(s):_ `vld2.32 {D0[], D1[]}, [R0]' 28915 28916 * poly16x4x2_t vld2_dup_p16 (const poly16_t *) 28917 _Form of expected instruction(s):_ `vld2.16 {D0[], D1[]}, [R0]' 28918 28919 * poly8x8x2_t vld2_dup_p8 (const poly8_t *) 28920 _Form of expected instruction(s):_ `vld2.8 {D0[], D1[]}, [R0]' 28921 28922 * uint64x1x2_t vld2_dup_u64 (const uint64_t *) 28923 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28924 28925 * int64x1x2_t vld2_dup_s64 (const int64_t *) 28926 _Form of expected instruction(s):_ `vld1.64 {D0, D1}, [R0]' 28927 28928 5.50.3.71 Element/structure stores, VST2 variants 28929 ................................................. 28930 28931 * void vst2_u32 (uint32_t *, uint32x2x2_t) 28932 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28933 28934 * void vst2_u16 (uint16_t *, uint16x4x2_t) 28935 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28936 28937 * void vst2_u8 (uint8_t *, uint8x8x2_t) 28938 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28939 28940 * void vst2_s32 (int32_t *, int32x2x2_t) 28941 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28942 28943 * void vst2_s16 (int16_t *, int16x4x2_t) 28944 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28945 28946 * void vst2_s8 (int8_t *, int8x8x2_t) 28947 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28948 28949 * void vst2_f32 (float32_t *, float32x2x2_t) 28950 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28951 28952 * void vst2_p16 (poly16_t *, poly16x4x2_t) 28953 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28954 28955 * void vst2_p8 (poly8_t *, poly8x8x2_t) 28956 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28957 28958 * void vst2_u64 (uint64_t *, uint64x1x2_t) 28959 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28960 28961 * void vst2_s64 (int64_t *, int64x1x2_t) 28962 _Form of expected instruction(s):_ `vst1.64 {D0, D1}, [R0]' 28963 28964 * void vst2q_u32 (uint32_t *, uint32x4x2_t) 28965 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28966 28967 * void vst2q_u16 (uint16_t *, uint16x8x2_t) 28968 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28969 28970 * void vst2q_u8 (uint8_t *, uint8x16x2_t) 28971 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28972 28973 * void vst2q_s32 (int32_t *, int32x4x2_t) 28974 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28975 28976 * void vst2q_s16 (int16_t *, int16x8x2_t) 28977 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28978 28979 * void vst2q_s8 (int8_t *, int8x16x2_t) 28980 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28981 28982 * void vst2q_f32 (float32_t *, float32x4x2_t) 28983 _Form of expected instruction(s):_ `vst2.32 {D0, D1}, [R0]' 28984 28985 * void vst2q_p16 (poly16_t *, poly16x8x2_t) 28986 _Form of expected instruction(s):_ `vst2.16 {D0, D1}, [R0]' 28987 28988 * void vst2q_p8 (poly8_t *, poly8x16x2_t) 28989 _Form of expected instruction(s):_ `vst2.8 {D0, D1}, [R0]' 28990 28991 * void vst2_lane_u32 (uint32_t *, uint32x2x2_t, const int) 28992 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 28993 28994 * void vst2_lane_u16 (uint16_t *, uint16x4x2_t, const int) 28995 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 28996 28997 * void vst2_lane_u8 (uint8_t *, uint8x8x2_t, const int) 28998 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 28999 29000 * void vst2_lane_s32 (int32_t *, int32x2x2_t, const int) 29001 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 29002 29003 * void vst2_lane_s16 (int16_t *, int16x4x2_t, const int) 29004 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 29005 29006 * void vst2_lane_s8 (int8_t *, int8x8x2_t, const int) 29007 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 29008 29009 * void vst2_lane_f32 (float32_t *, float32x2x2_t, const int) 29010 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 29011 29012 * void vst2_lane_p16 (poly16_t *, poly16x4x2_t, const int) 29013 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 29014 29015 * void vst2_lane_p8 (poly8_t *, poly8x8x2_t, const int) 29016 _Form of expected instruction(s):_ `vst2.8 {D0[0], D1[0]}, [R0]' 29017 29018 * void vst2q_lane_s32 (int32_t *, int32x4x2_t, const int) 29019 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 29020 29021 * void vst2q_lane_s16 (int16_t *, int16x8x2_t, const int) 29022 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 29023 29024 * void vst2q_lane_u32 (uint32_t *, uint32x4x2_t, const int) 29025 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 29026 29027 * void vst2q_lane_u16 (uint16_t *, uint16x8x2_t, const int) 29028 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 29029 29030 * void vst2q_lane_f32 (float32_t *, float32x4x2_t, const int) 29031 _Form of expected instruction(s):_ `vst2.32 {D0[0], D1[0]}, [R0]' 29032 29033 * void vst2q_lane_p16 (poly16_t *, poly16x8x2_t, const int) 29034 _Form of expected instruction(s):_ `vst2.16 {D0[0], D1[0]}, [R0]' 29035 29036 5.50.3.72 Element/structure loads, VLD3 variants 29037 ................................................ 29038 29039 * uint32x2x3_t vld3_u32 (const uint32_t *) 29040 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29041 29042 * uint16x4x3_t vld3_u16 (const uint16_t *) 29043 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29044 29045 * uint8x8x3_t vld3_u8 (const uint8_t *) 29046 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29047 29048 * int32x2x3_t vld3_s32 (const int32_t *) 29049 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29050 29051 * int16x4x3_t vld3_s16 (const int16_t *) 29052 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29053 29054 * int8x8x3_t vld3_s8 (const int8_t *) 29055 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29056 29057 * float32x2x3_t vld3_f32 (const float32_t *) 29058 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29059 29060 * poly16x4x3_t vld3_p16 (const poly16_t *) 29061 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29062 29063 * poly8x8x3_t vld3_p8 (const poly8_t *) 29064 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29065 29066 * uint64x1x3_t vld3_u64 (const uint64_t *) 29067 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 29068 29069 * int64x1x3_t vld3_s64 (const int64_t *) 29070 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 29071 29072 * uint32x4x3_t vld3q_u32 (const uint32_t *) 29073 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29074 29075 * uint16x8x3_t vld3q_u16 (const uint16_t *) 29076 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29077 29078 * uint8x16x3_t vld3q_u8 (const uint8_t *) 29079 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29080 29081 * int32x4x3_t vld3q_s32 (const int32_t *) 29082 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29083 29084 * int16x8x3_t vld3q_s16 (const int16_t *) 29085 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29086 29087 * int8x16x3_t vld3q_s8 (const int8_t *) 29088 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29089 29090 * float32x4x3_t vld3q_f32 (const float32_t *) 29091 _Form of expected instruction(s):_ `vld3.32 {D0, D1, D2}, [R0]' 29092 29093 * poly16x8x3_t vld3q_p16 (const poly16_t *) 29094 _Form of expected instruction(s):_ `vld3.16 {D0, D1, D2}, [R0]' 29095 29096 * poly8x16x3_t vld3q_p8 (const poly8_t *) 29097 _Form of expected instruction(s):_ `vld3.8 {D0, D1, D2}, [R0]' 29098 29099 * uint32x2x3_t vld3_lane_u32 (const uint32_t *, uint32x2x3_t, const 29100 int) 29101 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29102 [R0]' 29103 29104 * uint16x4x3_t vld3_lane_u16 (const uint16_t *, uint16x4x3_t, const 29105 int) 29106 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29107 [R0]' 29108 29109 * uint8x8x3_t vld3_lane_u8 (const uint8_t *, uint8x8x3_t, const int) 29110 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 29111 [R0]' 29112 29113 * int32x2x3_t vld3_lane_s32 (const int32_t *, int32x2x3_t, const int) 29114 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29115 [R0]' 29116 29117 * int16x4x3_t vld3_lane_s16 (const int16_t *, int16x4x3_t, const int) 29118 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29119 [R0]' 29120 29121 * int8x8x3_t vld3_lane_s8 (const int8_t *, int8x8x3_t, const int) 29122 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 29123 [R0]' 29124 29125 * float32x2x3_t vld3_lane_f32 (const float32_t *, float32x2x3_t, 29126 const int) 29127 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29128 [R0]' 29129 29130 * poly16x4x3_t vld3_lane_p16 (const poly16_t *, poly16x4x3_t, const 29131 int) 29132 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29133 [R0]' 29134 29135 * poly8x8x3_t vld3_lane_p8 (const poly8_t *, poly8x8x3_t, const int) 29136 _Form of expected instruction(s):_ `vld3.8 {D0[0], D1[0], D2[0]}, 29137 [R0]' 29138 29139 * int32x4x3_t vld3q_lane_s32 (const int32_t *, int32x4x3_t, const 29140 int) 29141 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29142 [R0]' 29143 29144 * int16x8x3_t vld3q_lane_s16 (const int16_t *, int16x8x3_t, const 29145 int) 29146 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29147 [R0]' 29148 29149 * uint32x4x3_t vld3q_lane_u32 (const uint32_t *, uint32x4x3_t, const 29150 int) 29151 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29152 [R0]' 29153 29154 * uint16x8x3_t vld3q_lane_u16 (const uint16_t *, uint16x8x3_t, const 29155 int) 29156 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29157 [R0]' 29158 29159 * float32x4x3_t vld3q_lane_f32 (const float32_t *, float32x4x3_t, 29160 const int) 29161 _Form of expected instruction(s):_ `vld3.32 {D0[0], D1[0], D2[0]}, 29162 [R0]' 29163 29164 * poly16x8x3_t vld3q_lane_p16 (const poly16_t *, poly16x8x3_t, const 29165 int) 29166 _Form of expected instruction(s):_ `vld3.16 {D0[0], D1[0], D2[0]}, 29167 [R0]' 29168 29169 * uint32x2x3_t vld3_dup_u32 (const uint32_t *) 29170 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 29171 [R0]' 29172 29173 * uint16x4x3_t vld3_dup_u16 (const uint16_t *) 29174 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 29175 [R0]' 29176 29177 * uint8x8x3_t vld3_dup_u8 (const uint8_t *) 29178 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 29179 [R0]' 29180 29181 * int32x2x3_t vld3_dup_s32 (const int32_t *) 29182 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 29183 [R0]' 29184 29185 * int16x4x3_t vld3_dup_s16 (const int16_t *) 29186 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 29187 [R0]' 29188 29189 * int8x8x3_t vld3_dup_s8 (const int8_t *) 29190 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 29191 [R0]' 29192 29193 * float32x2x3_t vld3_dup_f32 (const float32_t *) 29194 _Form of expected instruction(s):_ `vld3.32 {D0[], D1[], D2[]}, 29195 [R0]' 29196 29197 * poly16x4x3_t vld3_dup_p16 (const poly16_t *) 29198 _Form of expected instruction(s):_ `vld3.16 {D0[], D1[], D2[]}, 29199 [R0]' 29200 29201 * poly8x8x3_t vld3_dup_p8 (const poly8_t *) 29202 _Form of expected instruction(s):_ `vld3.8 {D0[], D1[], D2[]}, 29203 [R0]' 29204 29205 * uint64x1x3_t vld3_dup_u64 (const uint64_t *) 29206 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 29207 29208 * int64x1x3_t vld3_dup_s64 (const int64_t *) 29209 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2}, [R0]' 29210 29211 5.50.3.73 Element/structure stores, VST3 variants 29212 ................................................. 29213 29214 * void vst3_u32 (uint32_t *, uint32x2x3_t) 29215 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 29216 29217 * void vst3_u16 (uint16_t *, uint16x4x3_t) 29218 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 29219 29220 * void vst3_u8 (uint8_t *, uint8x8x3_t) 29221 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 29222 29223 * void vst3_s32 (int32_t *, int32x2x3_t) 29224 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 29225 29226 * void vst3_s16 (int16_t *, int16x4x3_t) 29227 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 29228 29229 * void vst3_s8 (int8_t *, int8x8x3_t) 29230 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 29231 29232 * void vst3_f32 (float32_t *, float32x2x3_t) 29233 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2, D3}, [R0]' 29234 29235 * void vst3_p16 (poly16_t *, poly16x4x3_t) 29236 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2, D3}, [R0]' 29237 29238 * void vst3_p8 (poly8_t *, poly8x8x3_t) 29239 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2, D3}, [R0]' 29240 29241 * void vst3_u64 (uint64_t *, uint64x1x3_t) 29242 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29243 29244 * void vst3_s64 (int64_t *, int64x1x3_t) 29245 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29246 29247 * void vst3q_u32 (uint32_t *, uint32x4x3_t) 29248 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 29249 29250 * void vst3q_u16 (uint16_t *, uint16x8x3_t) 29251 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 29252 29253 * void vst3q_u8 (uint8_t *, uint8x16x3_t) 29254 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 29255 29256 * void vst3q_s32 (int32_t *, int32x4x3_t) 29257 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 29258 29259 * void vst3q_s16 (int16_t *, int16x8x3_t) 29260 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 29261 29262 * void vst3q_s8 (int8_t *, int8x16x3_t) 29263 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 29264 29265 * void vst3q_f32 (float32_t *, float32x4x3_t) 29266 _Form of expected instruction(s):_ `vst3.32 {D0, D1, D2}, [R0]' 29267 29268 * void vst3q_p16 (poly16_t *, poly16x8x3_t) 29269 _Form of expected instruction(s):_ `vst3.16 {D0, D1, D2}, [R0]' 29270 29271 * void vst3q_p8 (poly8_t *, poly8x16x3_t) 29272 _Form of expected instruction(s):_ `vst3.8 {D0, D1, D2}, [R0]' 29273 29274 * void vst3_lane_u32 (uint32_t *, uint32x2x3_t, const int) 29275 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29276 [R0]' 29277 29278 * void vst3_lane_u16 (uint16_t *, uint16x4x3_t, const int) 29279 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29280 [R0]' 29281 29282 * void vst3_lane_u8 (uint8_t *, uint8x8x3_t, const int) 29283 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 29284 [R0]' 29285 29286 * void vst3_lane_s32 (int32_t *, int32x2x3_t, const int) 29287 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29288 [R0]' 29289 29290 * void vst3_lane_s16 (int16_t *, int16x4x3_t, const int) 29291 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29292 [R0]' 29293 29294 * void vst3_lane_s8 (int8_t *, int8x8x3_t, const int) 29295 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 29296 [R0]' 29297 29298 * void vst3_lane_f32 (float32_t *, float32x2x3_t, const int) 29299 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29300 [R0]' 29301 29302 * void vst3_lane_p16 (poly16_t *, poly16x4x3_t, const int) 29303 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29304 [R0]' 29305 29306 * void vst3_lane_p8 (poly8_t *, poly8x8x3_t, const int) 29307 _Form of expected instruction(s):_ `vst3.8 {D0[0], D1[0], D2[0]}, 29308 [R0]' 29309 29310 * void vst3q_lane_s32 (int32_t *, int32x4x3_t, const int) 29311 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29312 [R0]' 29313 29314 * void vst3q_lane_s16 (int16_t *, int16x8x3_t, const int) 29315 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29316 [R0]' 29317 29318 * void vst3q_lane_u32 (uint32_t *, uint32x4x3_t, const int) 29319 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29320 [R0]' 29321 29322 * void vst3q_lane_u16 (uint16_t *, uint16x8x3_t, const int) 29323 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29324 [R0]' 29325 29326 * void vst3q_lane_f32 (float32_t *, float32x4x3_t, const int) 29327 _Form of expected instruction(s):_ `vst3.32 {D0[0], D1[0], D2[0]}, 29328 [R0]' 29329 29330 * void vst3q_lane_p16 (poly16_t *, poly16x8x3_t, const int) 29331 _Form of expected instruction(s):_ `vst3.16 {D0[0], D1[0], D2[0]}, 29332 [R0]' 29333 29334 5.50.3.74 Element/structure loads, VLD4 variants 29335 ................................................ 29336 29337 * uint32x2x4_t vld4_u32 (const uint32_t *) 29338 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29339 29340 * uint16x4x4_t vld4_u16 (const uint16_t *) 29341 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29342 29343 * uint8x8x4_t vld4_u8 (const uint8_t *) 29344 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29345 29346 * int32x2x4_t vld4_s32 (const int32_t *) 29347 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29348 29349 * int16x4x4_t vld4_s16 (const int16_t *) 29350 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29351 29352 * int8x8x4_t vld4_s8 (const int8_t *) 29353 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29354 29355 * float32x2x4_t vld4_f32 (const float32_t *) 29356 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29357 29358 * poly16x4x4_t vld4_p16 (const poly16_t *) 29359 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29360 29361 * poly8x8x4_t vld4_p8 (const poly8_t *) 29362 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29363 29364 * uint64x1x4_t vld4_u64 (const uint64_t *) 29365 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29366 29367 * int64x1x4_t vld4_s64 (const int64_t *) 29368 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29369 29370 * uint32x4x4_t vld4q_u32 (const uint32_t *) 29371 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29372 29373 * uint16x8x4_t vld4q_u16 (const uint16_t *) 29374 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29375 29376 * uint8x16x4_t vld4q_u8 (const uint8_t *) 29377 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29378 29379 * int32x4x4_t vld4q_s32 (const int32_t *) 29380 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29381 29382 * int16x8x4_t vld4q_s16 (const int16_t *) 29383 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29384 29385 * int8x16x4_t vld4q_s8 (const int8_t *) 29386 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29387 29388 * float32x4x4_t vld4q_f32 (const float32_t *) 29389 _Form of expected instruction(s):_ `vld4.32 {D0, D1, D2, D3}, [R0]' 29390 29391 * poly16x8x4_t vld4q_p16 (const poly16_t *) 29392 _Form of expected instruction(s):_ `vld4.16 {D0, D1, D2, D3}, [R0]' 29393 29394 * poly8x16x4_t vld4q_p8 (const poly8_t *) 29395 _Form of expected instruction(s):_ `vld4.8 {D0, D1, D2, D3}, [R0]' 29396 29397 * uint32x2x4_t vld4_lane_u32 (const uint32_t *, uint32x2x4_t, const 29398 int) 29399 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29400 D3[0]}, [R0]' 29401 29402 * uint16x4x4_t vld4_lane_u16 (const uint16_t *, uint16x4x4_t, const 29403 int) 29404 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29405 D3[0]}, [R0]' 29406 29407 * uint8x8x4_t vld4_lane_u8 (const uint8_t *, uint8x8x4_t, const int) 29408 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29409 D3[0]}, [R0]' 29410 29411 * int32x2x4_t vld4_lane_s32 (const int32_t *, int32x2x4_t, const int) 29412 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29413 D3[0]}, [R0]' 29414 29415 * int16x4x4_t vld4_lane_s16 (const int16_t *, int16x4x4_t, const int) 29416 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29417 D3[0]}, [R0]' 29418 29419 * int8x8x4_t vld4_lane_s8 (const int8_t *, int8x8x4_t, const int) 29420 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29421 D3[0]}, [R0]' 29422 29423 * float32x2x4_t vld4_lane_f32 (const float32_t *, float32x2x4_t, 29424 const int) 29425 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29426 D3[0]}, [R0]' 29427 29428 * poly16x4x4_t vld4_lane_p16 (const poly16_t *, poly16x4x4_t, const 29429 int) 29430 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29431 D3[0]}, [R0]' 29432 29433 * poly8x8x4_t vld4_lane_p8 (const poly8_t *, poly8x8x4_t, const int) 29434 _Form of expected instruction(s):_ `vld4.8 {D0[0], D1[0], D2[0], 29435 D3[0]}, [R0]' 29436 29437 * int32x4x4_t vld4q_lane_s32 (const int32_t *, int32x4x4_t, const 29438 int) 29439 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29440 D3[0]}, [R0]' 29441 29442 * int16x8x4_t vld4q_lane_s16 (const int16_t *, int16x8x4_t, const 29443 int) 29444 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29445 D3[0]}, [R0]' 29446 29447 * uint32x4x4_t vld4q_lane_u32 (const uint32_t *, uint32x4x4_t, const 29448 int) 29449 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29450 D3[0]}, [R0]' 29451 29452 * uint16x8x4_t vld4q_lane_u16 (const uint16_t *, uint16x8x4_t, const 29453 int) 29454 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29455 D3[0]}, [R0]' 29456 29457 * float32x4x4_t vld4q_lane_f32 (const float32_t *, float32x4x4_t, 29458 const int) 29459 _Form of expected instruction(s):_ `vld4.32 {D0[0], D1[0], D2[0], 29460 D3[0]}, [R0]' 29461 29462 * poly16x8x4_t vld4q_lane_p16 (const poly16_t *, poly16x8x4_t, const 29463 int) 29464 _Form of expected instruction(s):_ `vld4.16 {D0[0], D1[0], D2[0], 29465 D3[0]}, [R0]' 29466 29467 * uint32x2x4_t vld4_dup_u32 (const uint32_t *) 29468 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29469 D3[]}, [R0]' 29470 29471 * uint16x4x4_t vld4_dup_u16 (const uint16_t *) 29472 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29473 D3[]}, [R0]' 29474 29475 * uint8x8x4_t vld4_dup_u8 (const uint8_t *) 29476 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29477 D3[]}, [R0]' 29478 29479 * int32x2x4_t vld4_dup_s32 (const int32_t *) 29480 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29481 D3[]}, [R0]' 29482 29483 * int16x4x4_t vld4_dup_s16 (const int16_t *) 29484 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29485 D3[]}, [R0]' 29486 29487 * int8x8x4_t vld4_dup_s8 (const int8_t *) 29488 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29489 D3[]}, [R0]' 29490 29491 * float32x2x4_t vld4_dup_f32 (const float32_t *) 29492 _Form of expected instruction(s):_ `vld4.32 {D0[], D1[], D2[], 29493 D3[]}, [R0]' 29494 29495 * poly16x4x4_t vld4_dup_p16 (const poly16_t *) 29496 _Form of expected instruction(s):_ `vld4.16 {D0[], D1[], D2[], 29497 D3[]}, [R0]' 29498 29499 * poly8x8x4_t vld4_dup_p8 (const poly8_t *) 29500 _Form of expected instruction(s):_ `vld4.8 {D0[], D1[], D2[], 29501 D3[]}, [R0]' 29502 29503 * uint64x1x4_t vld4_dup_u64 (const uint64_t *) 29504 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29505 29506 * int64x1x4_t vld4_dup_s64 (const int64_t *) 29507 _Form of expected instruction(s):_ `vld1.64 {D0, D1, D2, D3}, [R0]' 29508 29509 5.50.3.75 Element/structure stores, VST4 variants 29510 ................................................. 29511 29512 * void vst4_u32 (uint32_t *, uint32x2x4_t) 29513 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29514 29515 * void vst4_u16 (uint16_t *, uint16x4x4_t) 29516 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29517 29518 * void vst4_u8 (uint8_t *, uint8x8x4_t) 29519 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29520 29521 * void vst4_s32 (int32_t *, int32x2x4_t) 29522 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29523 29524 * void vst4_s16 (int16_t *, int16x4x4_t) 29525 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29526 29527 * void vst4_s8 (int8_t *, int8x8x4_t) 29528 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29529 29530 * void vst4_f32 (float32_t *, float32x2x4_t) 29531 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29532 29533 * void vst4_p16 (poly16_t *, poly16x4x4_t) 29534 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29535 29536 * void vst4_p8 (poly8_t *, poly8x8x4_t) 29537 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29538 29539 * void vst4_u64 (uint64_t *, uint64x1x4_t) 29540 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29541 29542 * void vst4_s64 (int64_t *, int64x1x4_t) 29543 _Form of expected instruction(s):_ `vst1.64 {D0, D1, D2, D3}, [R0]' 29544 29545 * void vst4q_u32 (uint32_t *, uint32x4x4_t) 29546 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29547 29548 * void vst4q_u16 (uint16_t *, uint16x8x4_t) 29549 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29550 29551 * void vst4q_u8 (uint8_t *, uint8x16x4_t) 29552 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29553 29554 * void vst4q_s32 (int32_t *, int32x4x4_t) 29555 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29556 29557 * void vst4q_s16 (int16_t *, int16x8x4_t) 29558 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29559 29560 * void vst4q_s8 (int8_t *, int8x16x4_t) 29561 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29562 29563 * void vst4q_f32 (float32_t *, float32x4x4_t) 29564 _Form of expected instruction(s):_ `vst4.32 {D0, D1, D2, D3}, [R0]' 29565 29566 * void vst4q_p16 (poly16_t *, poly16x8x4_t) 29567 _Form of expected instruction(s):_ `vst4.16 {D0, D1, D2, D3}, [R0]' 29568 29569 * void vst4q_p8 (poly8_t *, poly8x16x4_t) 29570 _Form of expected instruction(s):_ `vst4.8 {D0, D1, D2, D3}, [R0]' 29571 29572 * void vst4_lane_u32 (uint32_t *, uint32x2x4_t, const int) 29573 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29574 D3[0]}, [R0]' 29575 29576 * void vst4_lane_u16 (uint16_t *, uint16x4x4_t, const int) 29577 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29578 D3[0]}, [R0]' 29579 29580 * void vst4_lane_u8 (uint8_t *, uint8x8x4_t, const int) 29581 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29582 D3[0]}, [R0]' 29583 29584 * void vst4_lane_s32 (int32_t *, int32x2x4_t, const int) 29585 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29586 D3[0]}, [R0]' 29587 29588 * void vst4_lane_s16 (int16_t *, int16x4x4_t, const int) 29589 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29590 D3[0]}, [R0]' 29591 29592 * void vst4_lane_s8 (int8_t *, int8x8x4_t, const int) 29593 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29594 D3[0]}, [R0]' 29595 29596 * void vst4_lane_f32 (float32_t *, float32x2x4_t, const int) 29597 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29598 D3[0]}, [R0]' 29599 29600 * void vst4_lane_p16 (poly16_t *, poly16x4x4_t, const int) 29601 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29602 D3[0]}, [R0]' 29603 29604 * void vst4_lane_p8 (poly8_t *, poly8x8x4_t, const int) 29605 _Form of expected instruction(s):_ `vst4.8 {D0[0], D1[0], D2[0], 29606 D3[0]}, [R0]' 29607 29608 * void vst4q_lane_s32 (int32_t *, int32x4x4_t, const int) 29609 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29610 D3[0]}, [R0]' 29611 29612 * void vst4q_lane_s16 (int16_t *, int16x8x4_t, const int) 29613 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29614 D3[0]}, [R0]' 29615 29616 * void vst4q_lane_u32 (uint32_t *, uint32x4x4_t, const int) 29617 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29618 D3[0]}, [R0]' 29619 29620 * void vst4q_lane_u16 (uint16_t *, uint16x8x4_t, const int) 29621 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29622 D3[0]}, [R0]' 29623 29624 * void vst4q_lane_f32 (float32_t *, float32x4x4_t, const int) 29625 _Form of expected instruction(s):_ `vst4.32 {D0[0], D1[0], D2[0], 29626 D3[0]}, [R0]' 29627 29628 * void vst4q_lane_p16 (poly16_t *, poly16x8x4_t, const int) 29629 _Form of expected instruction(s):_ `vst4.16 {D0[0], D1[0], D2[0], 29630 D3[0]}, [R0]' 29631 29632 5.50.3.76 Logical operations (AND) 29633 .................................. 29634 29635 * uint32x2_t vand_u32 (uint32x2_t, uint32x2_t) 29636 _Form of expected instruction(s):_ `vand D0, D0, D0' 29637 29638 * uint16x4_t vand_u16 (uint16x4_t, uint16x4_t) 29639 _Form of expected instruction(s):_ `vand D0, D0, D0' 29640 29641 * uint8x8_t vand_u8 (uint8x8_t, uint8x8_t) 29642 _Form of expected instruction(s):_ `vand D0, D0, D0' 29643 29644 * int32x2_t vand_s32 (int32x2_t, int32x2_t) 29645 _Form of expected instruction(s):_ `vand D0, D0, D0' 29646 29647 * int16x4_t vand_s16 (int16x4_t, int16x4_t) 29648 _Form of expected instruction(s):_ `vand D0, D0, D0' 29649 29650 * int8x8_t vand_s8 (int8x8_t, int8x8_t) 29651 _Form of expected instruction(s):_ `vand D0, D0, D0' 29652 29653 * uint64x1_t vand_u64 (uint64x1_t, uint64x1_t) 29654 _Form of expected instruction(s):_ `vand D0, D0, D0' 29655 29656 * int64x1_t vand_s64 (int64x1_t, int64x1_t) 29657 _Form of expected instruction(s):_ `vand D0, D0, D0' 29658 29659 * uint32x4_t vandq_u32 (uint32x4_t, uint32x4_t) 29660 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29661 29662 * uint16x8_t vandq_u16 (uint16x8_t, uint16x8_t) 29663 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29664 29665 * uint8x16_t vandq_u8 (uint8x16_t, uint8x16_t) 29666 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29667 29668 * int32x4_t vandq_s32 (int32x4_t, int32x4_t) 29669 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29670 29671 * int16x8_t vandq_s16 (int16x8_t, int16x8_t) 29672 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29673 29674 * int8x16_t vandq_s8 (int8x16_t, int8x16_t) 29675 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29676 29677 * uint64x2_t vandq_u64 (uint64x2_t, uint64x2_t) 29678 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29679 29680 * int64x2_t vandq_s64 (int64x2_t, int64x2_t) 29681 _Form of expected instruction(s):_ `vand Q0, Q0, Q0' 29682 29683 5.50.3.77 Logical operations (OR) 29684 ................................. 29685 29686 * uint32x2_t vorr_u32 (uint32x2_t, uint32x2_t) 29687 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29688 29689 * uint16x4_t vorr_u16 (uint16x4_t, uint16x4_t) 29690 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29691 29692 * uint8x8_t vorr_u8 (uint8x8_t, uint8x8_t) 29693 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29694 29695 * int32x2_t vorr_s32 (int32x2_t, int32x2_t) 29696 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29697 29698 * int16x4_t vorr_s16 (int16x4_t, int16x4_t) 29699 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29700 29701 * int8x8_t vorr_s8 (int8x8_t, int8x8_t) 29702 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29703 29704 * uint64x1_t vorr_u64 (uint64x1_t, uint64x1_t) 29705 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29706 29707 * int64x1_t vorr_s64 (int64x1_t, int64x1_t) 29708 _Form of expected instruction(s):_ `vorr D0, D0, D0' 29709 29710 * uint32x4_t vorrq_u32 (uint32x4_t, uint32x4_t) 29711 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29712 29713 * uint16x8_t vorrq_u16 (uint16x8_t, uint16x8_t) 29714 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29715 29716 * uint8x16_t vorrq_u8 (uint8x16_t, uint8x16_t) 29717 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29718 29719 * int32x4_t vorrq_s32 (int32x4_t, int32x4_t) 29720 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29721 29722 * int16x8_t vorrq_s16 (int16x8_t, int16x8_t) 29723 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29724 29725 * int8x16_t vorrq_s8 (int8x16_t, int8x16_t) 29726 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29727 29728 * uint64x2_t vorrq_u64 (uint64x2_t, uint64x2_t) 29729 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29730 29731 * int64x2_t vorrq_s64 (int64x2_t, int64x2_t) 29732 _Form of expected instruction(s):_ `vorr Q0, Q0, Q0' 29733 29734 5.50.3.78 Logical operations (exclusive OR) 29735 ........................................... 29736 29737 * uint32x2_t veor_u32 (uint32x2_t, uint32x2_t) 29738 _Form of expected instruction(s):_ `veor D0, D0, D0' 29739 29740 * uint16x4_t veor_u16 (uint16x4_t, uint16x4_t) 29741 _Form of expected instruction(s):_ `veor D0, D0, D0' 29742 29743 * uint8x8_t veor_u8 (uint8x8_t, uint8x8_t) 29744 _Form of expected instruction(s):_ `veor D0, D0, D0' 29745 29746 * int32x2_t veor_s32 (int32x2_t, int32x2_t) 29747 _Form of expected instruction(s):_ `veor D0, D0, D0' 29748 29749 * int16x4_t veor_s16 (int16x4_t, int16x4_t) 29750 _Form of expected instruction(s):_ `veor D0, D0, D0' 29751 29752 * int8x8_t veor_s8 (int8x8_t, int8x8_t) 29753 _Form of expected instruction(s):_ `veor D0, D0, D0' 29754 29755 * uint64x1_t veor_u64 (uint64x1_t, uint64x1_t) 29756 _Form of expected instruction(s):_ `veor D0, D0, D0' 29757 29758 * int64x1_t veor_s64 (int64x1_t, int64x1_t) 29759 _Form of expected instruction(s):_ `veor D0, D0, D0' 29760 29761 * uint32x4_t veorq_u32 (uint32x4_t, uint32x4_t) 29762 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29763 29764 * uint16x8_t veorq_u16 (uint16x8_t, uint16x8_t) 29765 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29766 29767 * uint8x16_t veorq_u8 (uint8x16_t, uint8x16_t) 29768 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29769 29770 * int32x4_t veorq_s32 (int32x4_t, int32x4_t) 29771 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29772 29773 * int16x8_t veorq_s16 (int16x8_t, int16x8_t) 29774 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29775 29776 * int8x16_t veorq_s8 (int8x16_t, int8x16_t) 29777 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29778 29779 * uint64x2_t veorq_u64 (uint64x2_t, uint64x2_t) 29780 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29781 29782 * int64x2_t veorq_s64 (int64x2_t, int64x2_t) 29783 _Form of expected instruction(s):_ `veor Q0, Q0, Q0' 29784 29785 5.50.3.79 Logical operations (AND-NOT) 29786 ...................................... 29787 29788 * uint32x2_t vbic_u32 (uint32x2_t, uint32x2_t) 29789 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29790 29791 * uint16x4_t vbic_u16 (uint16x4_t, uint16x4_t) 29792 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29793 29794 * uint8x8_t vbic_u8 (uint8x8_t, uint8x8_t) 29795 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29796 29797 * int32x2_t vbic_s32 (int32x2_t, int32x2_t) 29798 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29799 29800 * int16x4_t vbic_s16 (int16x4_t, int16x4_t) 29801 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29802 29803 * int8x8_t vbic_s8 (int8x8_t, int8x8_t) 29804 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29805 29806 * uint64x1_t vbic_u64 (uint64x1_t, uint64x1_t) 29807 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29808 29809 * int64x1_t vbic_s64 (int64x1_t, int64x1_t) 29810 _Form of expected instruction(s):_ `vbic D0, D0, D0' 29811 29812 * uint32x4_t vbicq_u32 (uint32x4_t, uint32x4_t) 29813 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29814 29815 * uint16x8_t vbicq_u16 (uint16x8_t, uint16x8_t) 29816 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29817 29818 * uint8x16_t vbicq_u8 (uint8x16_t, uint8x16_t) 29819 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29820 29821 * int32x4_t vbicq_s32 (int32x4_t, int32x4_t) 29822 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29823 29824 * int16x8_t vbicq_s16 (int16x8_t, int16x8_t) 29825 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29826 29827 * int8x16_t vbicq_s8 (int8x16_t, int8x16_t) 29828 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29829 29830 * uint64x2_t vbicq_u64 (uint64x2_t, uint64x2_t) 29831 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29832 29833 * int64x2_t vbicq_s64 (int64x2_t, int64x2_t) 29834 _Form of expected instruction(s):_ `vbic Q0, Q0, Q0' 29835 29836 5.50.3.80 Logical operations (OR-NOT) 29837 ..................................... 29838 29839 * uint32x2_t vorn_u32 (uint32x2_t, uint32x2_t) 29840 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29841 29842 * uint16x4_t vorn_u16 (uint16x4_t, uint16x4_t) 29843 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29844 29845 * uint8x8_t vorn_u8 (uint8x8_t, uint8x8_t) 29846 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29847 29848 * int32x2_t vorn_s32 (int32x2_t, int32x2_t) 29849 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29850 29851 * int16x4_t vorn_s16 (int16x4_t, int16x4_t) 29852 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29853 29854 * int8x8_t vorn_s8 (int8x8_t, int8x8_t) 29855 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29856 29857 * uint64x1_t vorn_u64 (uint64x1_t, uint64x1_t) 29858 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29859 29860 * int64x1_t vorn_s64 (int64x1_t, int64x1_t) 29861 _Form of expected instruction(s):_ `vorn D0, D0, D0' 29862 29863 * uint32x4_t vornq_u32 (uint32x4_t, uint32x4_t) 29864 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29865 29866 * uint16x8_t vornq_u16 (uint16x8_t, uint16x8_t) 29867 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29868 29869 * uint8x16_t vornq_u8 (uint8x16_t, uint8x16_t) 29870 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29871 29872 * int32x4_t vornq_s32 (int32x4_t, int32x4_t) 29873 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29874 29875 * int16x8_t vornq_s16 (int16x8_t, int16x8_t) 29876 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29877 29878 * int8x16_t vornq_s8 (int8x16_t, int8x16_t) 29879 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29880 29881 * uint64x2_t vornq_u64 (uint64x2_t, uint64x2_t) 29882 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29883 29884 * int64x2_t vornq_s64 (int64x2_t, int64x2_t) 29885 _Form of expected instruction(s):_ `vorn Q0, Q0, Q0' 29886 29887 5.50.3.81 Reinterpret casts 29888 ........................... 29889 29890 * poly8x8_t vreinterpret_p8_u32 (uint32x2_t) 29891 29892 * poly8x8_t vreinterpret_p8_u16 (uint16x4_t) 29893 29894 * poly8x8_t vreinterpret_p8_u8 (uint8x8_t) 29895 29896 * poly8x8_t vreinterpret_p8_s32 (int32x2_t) 29897 29898 * poly8x8_t vreinterpret_p8_s16 (int16x4_t) 29899 29900 * poly8x8_t vreinterpret_p8_s8 (int8x8_t) 29901 29902 * poly8x8_t vreinterpret_p8_u64 (uint64x1_t) 29903 29904 * poly8x8_t vreinterpret_p8_s64 (int64x1_t) 29905 29906 * poly8x8_t vreinterpret_p8_f32 (float32x2_t) 29907 29908 * poly8x8_t vreinterpret_p8_p16 (poly16x4_t) 29909 29910 * poly8x16_t vreinterpretq_p8_u32 (uint32x4_t) 29911 29912 * poly8x16_t vreinterpretq_p8_u16 (uint16x8_t) 29913 29914 * poly8x16_t vreinterpretq_p8_u8 (uint8x16_t) 29915 29916 * poly8x16_t vreinterpretq_p8_s32 (int32x4_t) 29917 29918 * poly8x16_t vreinterpretq_p8_s16 (int16x8_t) 29919 29920 * poly8x16_t vreinterpretq_p8_s8 (int8x16_t) 29921 29922 * poly8x16_t vreinterpretq_p8_u64 (uint64x2_t) 29923 29924 * poly8x16_t vreinterpretq_p8_s64 (int64x2_t) 29925 29926 * poly8x16_t vreinterpretq_p8_f32 (float32x4_t) 29927 29928 * poly8x16_t vreinterpretq_p8_p16 (poly16x8_t) 29929 29930 * poly16x4_t vreinterpret_p16_u32 (uint32x2_t) 29931 29932 * poly16x4_t vreinterpret_p16_u16 (uint16x4_t) 29933 29934 * poly16x4_t vreinterpret_p16_u8 (uint8x8_t) 29935 29936 * poly16x4_t vreinterpret_p16_s32 (int32x2_t) 29937 29938 * poly16x4_t vreinterpret_p16_s16 (int16x4_t) 29939 29940 * poly16x4_t vreinterpret_p16_s8 (int8x8_t) 29941 29942 * poly16x4_t vreinterpret_p16_u64 (uint64x1_t) 29943 29944 * poly16x4_t vreinterpret_p16_s64 (int64x1_t) 29945 29946 * poly16x4_t vreinterpret_p16_f32 (float32x2_t) 29947 29948 * poly16x4_t vreinterpret_p16_p8 (poly8x8_t) 29949 29950 * poly16x8_t vreinterpretq_p16_u32 (uint32x4_t) 29951 29952 * poly16x8_t vreinterpretq_p16_u16 (uint16x8_t) 29953 29954 * poly16x8_t vreinterpretq_p16_u8 (uint8x16_t) 29955 29956 * poly16x8_t vreinterpretq_p16_s32 (int32x4_t) 29957 29958 * poly16x8_t vreinterpretq_p16_s16 (int16x8_t) 29959 29960 * poly16x8_t vreinterpretq_p16_s8 (int8x16_t) 29961 29962 * poly16x8_t vreinterpretq_p16_u64 (uint64x2_t) 29963 29964 * poly16x8_t vreinterpretq_p16_s64 (int64x2_t) 29965 29966 * poly16x8_t vreinterpretq_p16_f32 (float32x4_t) 29967 29968 * poly16x8_t vreinterpretq_p16_p8 (poly8x16_t) 29969 29970 * float32x2_t vreinterpret_f32_u32 (uint32x2_t) 29971 29972 * float32x2_t vreinterpret_f32_u16 (uint16x4_t) 29973 29974 * float32x2_t vreinterpret_f32_u8 (uint8x8_t) 29975 29976 * float32x2_t vreinterpret_f32_s32 (int32x2_t) 29977 29978 * float32x2_t vreinterpret_f32_s16 (int16x4_t) 29979 29980 * float32x2_t vreinterpret_f32_s8 (int8x8_t) 29981 29982 * float32x2_t vreinterpret_f32_u64 (uint64x1_t) 29983 29984 * float32x2_t vreinterpret_f32_s64 (int64x1_t) 29985 29986 * float32x2_t vreinterpret_f32_p16 (poly16x4_t) 29987 29988 * float32x2_t vreinterpret_f32_p8 (poly8x8_t) 29989 29990 * float32x4_t vreinterpretq_f32_u32 (uint32x4_t) 29991 29992 * float32x4_t vreinterpretq_f32_u16 (uint16x8_t) 29993 29994 * float32x4_t vreinterpretq_f32_u8 (uint8x16_t) 29995 29996 * float32x4_t vreinterpretq_f32_s32 (int32x4_t) 29997 29998 * float32x4_t vreinterpretq_f32_s16 (int16x8_t) 29999 30000 * float32x4_t vreinterpretq_f32_s8 (int8x16_t) 30001 30002 * float32x4_t vreinterpretq_f32_u64 (uint64x2_t) 30003 30004 * float32x4_t vreinterpretq_f32_s64 (int64x2_t) 30005 30006 * float32x4_t vreinterpretq_f32_p16 (poly16x8_t) 30007 30008 * float32x4_t vreinterpretq_f32_p8 (poly8x16_t) 30009 30010 * int64x1_t vreinterpret_s64_u32 (uint32x2_t) 30011 30012 * int64x1_t vreinterpret_s64_u16 (uint16x4_t) 30013 30014 * int64x1_t vreinterpret_s64_u8 (uint8x8_t) 30015 30016 * int64x1_t vreinterpret_s64_s32 (int32x2_t) 30017 30018 * int64x1_t vreinterpret_s64_s16 (int16x4_t) 30019 30020 * int64x1_t vreinterpret_s64_s8 (int8x8_t) 30021 30022 * int64x1_t vreinterpret_s64_u64 (uint64x1_t) 30023 30024 * int64x1_t vreinterpret_s64_f32 (float32x2_t) 30025 30026 * int64x1_t vreinterpret_s64_p16 (poly16x4_t) 30027 30028 * int64x1_t vreinterpret_s64_p8 (poly8x8_t) 30029 30030 * int64x2_t vreinterpretq_s64_u32 (uint32x4_t) 30031 30032 * int64x2_t vreinterpretq_s64_u16 (uint16x8_t) 30033 30034 * int64x2_t vreinterpretq_s64_u8 (uint8x16_t) 30035 30036 * int64x2_t vreinterpretq_s64_s32 (int32x4_t) 30037 30038 * int64x2_t vreinterpretq_s64_s16 (int16x8_t) 30039 30040 * int64x2_t vreinterpretq_s64_s8 (int8x16_t) 30041 30042 * int64x2_t vreinterpretq_s64_u64 (uint64x2_t) 30043 30044 * int64x2_t vreinterpretq_s64_f32 (float32x4_t) 30045 30046 * int64x2_t vreinterpretq_s64_p16 (poly16x8_t) 30047 30048 * int64x2_t vreinterpretq_s64_p8 (poly8x16_t) 30049 30050 * uint64x1_t vreinterpret_u64_u32 (uint32x2_t) 30051 30052 * uint64x1_t vreinterpret_u64_u16 (uint16x4_t) 30053 30054 * uint64x1_t vreinterpret_u64_u8 (uint8x8_t) 30055 30056 * uint64x1_t vreinterpret_u64_s32 (int32x2_t) 30057 30058 * uint64x1_t vreinterpret_u64_s16 (int16x4_t) 30059 30060 * uint64x1_t vreinterpret_u64_s8 (int8x8_t) 30061 30062 * uint64x1_t vreinterpret_u64_s64 (int64x1_t) 30063 30064 * uint64x1_t vreinterpret_u64_f32 (float32x2_t) 30065 30066 * uint64x1_t vreinterpret_u64_p16 (poly16x4_t) 30067 30068 * uint64x1_t vreinterpret_u64_p8 (poly8x8_t) 30069 30070 * uint64x2_t vreinterpretq_u64_u32 (uint32x4_t) 30071 30072 * uint64x2_t vreinterpretq_u64_u16 (uint16x8_t) 30073 30074 * uint64x2_t vreinterpretq_u64_u8 (uint8x16_t) 30075 30076 * uint64x2_t vreinterpretq_u64_s32 (int32x4_t) 30077 30078 * uint64x2_t vreinterpretq_u64_s16 (int16x8_t) 30079 30080 * uint64x2_t vreinterpretq_u64_s8 (int8x16_t) 30081 30082 * uint64x2_t vreinterpretq_u64_s64 (int64x2_t) 30083 30084 * uint64x2_t vreinterpretq_u64_f32 (float32x4_t) 30085 30086 * uint64x2_t vreinterpretq_u64_p16 (poly16x8_t) 30087 30088 * uint64x2_t vreinterpretq_u64_p8 (poly8x16_t) 30089 30090 * int8x8_t vreinterpret_s8_u32 (uint32x2_t) 30091 30092 * int8x8_t vreinterpret_s8_u16 (uint16x4_t) 30093 30094 * int8x8_t vreinterpret_s8_u8 (uint8x8_t) 30095 30096 * int8x8_t vreinterpret_s8_s32 (int32x2_t) 30097 30098 * int8x8_t vreinterpret_s8_s16 (int16x4_t) 30099 30100 * int8x8_t vreinterpret_s8_u64 (uint64x1_t) 30101 30102 * int8x8_t vreinterpret_s8_s64 (int64x1_t) 30103 30104 * int8x8_t vreinterpret_s8_f32 (float32x2_t) 30105 30106 * int8x8_t vreinterpret_s8_p16 (poly16x4_t) 30107 30108 * int8x8_t vreinterpret_s8_p8 (poly8x8_t) 30109 30110 * int8x16_t vreinterpretq_s8_u32 (uint32x4_t) 30111 30112 * int8x16_t vreinterpretq_s8_u16 (uint16x8_t) 30113 30114 * int8x16_t vreinterpretq_s8_u8 (uint8x16_t) 30115 30116 * int8x16_t vreinterpretq_s8_s32 (int32x4_t) 30117 30118 * int8x16_t vreinterpretq_s8_s16 (int16x8_t) 30119 30120 * int8x16_t vreinterpretq_s8_u64 (uint64x2_t) 30121 30122 * int8x16_t vreinterpretq_s8_s64 (int64x2_t) 30123 30124 * int8x16_t vreinterpretq_s8_f32 (float32x4_t) 30125 30126 * int8x16_t vreinterpretq_s8_p16 (poly16x8_t) 30127 30128 * int8x16_t vreinterpretq_s8_p8 (poly8x16_t) 30129 30130 * int16x4_t vreinterpret_s16_u32 (uint32x2_t) 30131 30132 * int16x4_t vreinterpret_s16_u16 (uint16x4_t) 30133 30134 * int16x4_t vreinterpret_s16_u8 (uint8x8_t) 30135 30136 * int16x4_t vreinterpret_s16_s32 (int32x2_t) 30137 30138 * int16x4_t vreinterpret_s16_s8 (int8x8_t) 30139 30140 * int16x4_t vreinterpret_s16_u64 (uint64x1_t) 30141 30142 * int16x4_t vreinterpret_s16_s64 (int64x1_t) 30143 30144 * int16x4_t vreinterpret_s16_f32 (float32x2_t) 30145 30146 * int16x4_t vreinterpret_s16_p16 (poly16x4_t) 30147 30148 * int16x4_t vreinterpret_s16_p8 (poly8x8_t) 30149 30150 * int16x8_t vreinterpretq_s16_u32 (uint32x4_t) 30151 30152 * int16x8_t vreinterpretq_s16_u16 (uint16x8_t) 30153 30154 * int16x8_t vreinterpretq_s16_u8 (uint8x16_t) 30155 30156 * int16x8_t vreinterpretq_s16_s32 (int32x4_t) 30157 30158 * int16x8_t vreinterpretq_s16_s8 (int8x16_t) 30159 30160 * int16x8_t vreinterpretq_s16_u64 (uint64x2_t) 30161 30162 * int16x8_t vreinterpretq_s16_s64 (int64x2_t) 30163 30164 * int16x8_t vreinterpretq_s16_f32 (float32x4_t) 30165 30166 * int16x8_t vreinterpretq_s16_p16 (poly16x8_t) 30167 30168 * int16x8_t vreinterpretq_s16_p8 (poly8x16_t) 30169 30170 * int32x2_t vreinterpret_s32_u32 (uint32x2_t) 30171 30172 * int32x2_t vreinterpret_s32_u16 (uint16x4_t) 30173 30174 * int32x2_t vreinterpret_s32_u8 (uint8x8_t) 30175 30176 * int32x2_t vreinterpret_s32_s16 (int16x4_t) 30177 30178 * int32x2_t vreinterpret_s32_s8 (int8x8_t) 30179 30180 * int32x2_t vreinterpret_s32_u64 (uint64x1_t) 30181 30182 * int32x2_t vreinterpret_s32_s64 (int64x1_t) 30183 30184 * int32x2_t vreinterpret_s32_f32 (float32x2_t) 30185 30186 * int32x2_t vreinterpret_s32_p16 (poly16x4_t) 30187 30188 * int32x2_t vreinterpret_s32_p8 (poly8x8_t) 30189 30190 * int32x4_t vreinterpretq_s32_u32 (uint32x4_t) 30191 30192 * int32x4_t vreinterpretq_s32_u16 (uint16x8_t) 30193 30194 * int32x4_t vreinterpretq_s32_u8 (uint8x16_t) 30195 30196 * int32x4_t vreinterpretq_s32_s16 (int16x8_t) 30197 30198 * int32x4_t vreinterpretq_s32_s8 (int8x16_t) 30199 30200 * int32x4_t vreinterpretq_s32_u64 (uint64x2_t) 30201 30202 * int32x4_t vreinterpretq_s32_s64 (int64x2_t) 30203 30204 * int32x4_t vreinterpretq_s32_f32 (float32x4_t) 30205 30206 * int32x4_t vreinterpretq_s32_p16 (poly16x8_t) 30207 30208 * int32x4_t vreinterpretq_s32_p8 (poly8x16_t) 30209 30210 * uint8x8_t vreinterpret_u8_u32 (uint32x2_t) 30211 30212 * uint8x8_t vreinterpret_u8_u16 (uint16x4_t) 30213 30214 * uint8x8_t vreinterpret_u8_s32 (int32x2_t) 30215 30216 * uint8x8_t vreinterpret_u8_s16 (int16x4_t) 30217 30218 * uint8x8_t vreinterpret_u8_s8 (int8x8_t) 30219 30220 * uint8x8_t vreinterpret_u8_u64 (uint64x1_t) 30221 30222 * uint8x8_t vreinterpret_u8_s64 (int64x1_t) 30223 30224 * uint8x8_t vreinterpret_u8_f32 (float32x2_t) 30225 30226 * uint8x8_t vreinterpret_u8_p16 (poly16x4_t) 30227 30228 * uint8x8_t vreinterpret_u8_p8 (poly8x8_t) 30229 30230 * uint8x16_t vreinterpretq_u8_u32 (uint32x4_t) 30231 30232 * uint8x16_t vreinterpretq_u8_u16 (uint16x8_t) 30233 30234 * uint8x16_t vreinterpretq_u8_s32 (int32x4_t) 30235 30236 * uint8x16_t vreinterpretq_u8_s16 (int16x8_t) 30237 30238 * uint8x16_t vreinterpretq_u8_s8 (int8x16_t) 30239 30240 * uint8x16_t vreinterpretq_u8_u64 (uint64x2_t) 30241 30242 * uint8x16_t vreinterpretq_u8_s64 (int64x2_t) 30243 30244 * uint8x16_t vreinterpretq_u8_f32 (float32x4_t) 30245 30246 * uint8x16_t vreinterpretq_u8_p16 (poly16x8_t) 30247 30248 * uint8x16_t vreinterpretq_u8_p8 (poly8x16_t) 30249 30250 * uint16x4_t vreinterpret_u16_u32 (uint32x2_t) 30251 30252 * uint16x4_t vreinterpret_u16_u8 (uint8x8_t) 30253 30254 * uint16x4_t vreinterpret_u16_s32 (int32x2_t) 30255 30256 * uint16x4_t vreinterpret_u16_s16 (int16x4_t) 30257 30258 * uint16x4_t vreinterpret_u16_s8 (int8x8_t) 30259 30260 * uint16x4_t vreinterpret_u16_u64 (uint64x1_t) 30261 30262 * uint16x4_t vreinterpret_u16_s64 (int64x1_t) 30263 30264 * uint16x4_t vreinterpret_u16_f32 (float32x2_t) 30265 30266 * uint16x4_t vreinterpret_u16_p16 (poly16x4_t) 30267 30268 * uint16x4_t vreinterpret_u16_p8 (poly8x8_t) 30269 30270 * uint16x8_t vreinterpretq_u16_u32 (uint32x4_t) 30271 30272 * uint16x8_t vreinterpretq_u16_u8 (uint8x16_t) 30273 30274 * uint16x8_t vreinterpretq_u16_s32 (int32x4_t) 30275 30276 * uint16x8_t vreinterpretq_u16_s16 (int16x8_t) 30277 30278 * uint16x8_t vreinterpretq_u16_s8 (int8x16_t) 30279 30280 * uint16x8_t vreinterpretq_u16_u64 (uint64x2_t) 30281 30282 * uint16x8_t vreinterpretq_u16_s64 (int64x2_t) 30283 30284 * uint16x8_t vreinterpretq_u16_f32 (float32x4_t) 30285 30286 * uint16x8_t vreinterpretq_u16_p16 (poly16x8_t) 30287 30288 * uint16x8_t vreinterpretq_u16_p8 (poly8x16_t) 30289 30290 * uint32x2_t vreinterpret_u32_u16 (uint16x4_t) 30291 30292 * uint32x2_t vreinterpret_u32_u8 (uint8x8_t) 30293 30294 * uint32x2_t vreinterpret_u32_s32 (int32x2_t) 30295 30296 * uint32x2_t vreinterpret_u32_s16 (int16x4_t) 30297 30298 * uint32x2_t vreinterpret_u32_s8 (int8x8_t) 30299 30300 * uint32x2_t vreinterpret_u32_u64 (uint64x1_t) 30301 30302 * uint32x2_t vreinterpret_u32_s64 (int64x1_t) 30303 30304 * uint32x2_t vreinterpret_u32_f32 (float32x2_t) 30305 30306 * uint32x2_t vreinterpret_u32_p16 (poly16x4_t) 30307 30308 * uint32x2_t vreinterpret_u32_p8 (poly8x8_t) 30309 30310 * uint32x4_t vreinterpretq_u32_u16 (uint16x8_t) 30311 30312 * uint32x4_t vreinterpretq_u32_u8 (uint8x16_t) 30313 30314 * uint32x4_t vreinterpretq_u32_s32 (int32x4_t) 30315 30316 * uint32x4_t vreinterpretq_u32_s16 (int16x8_t) 30317 30318 * uint32x4_t vreinterpretq_u32_s8 (int8x16_t) 30319 30320 * uint32x4_t vreinterpretq_u32_u64 (uint64x2_t) 30321 30322 * uint32x4_t vreinterpretq_u32_s64 (int64x2_t) 30323 30324 * uint32x4_t vreinterpretq_u32_f32 (float32x4_t) 30325 30326 * uint32x4_t vreinterpretq_u32_p16 (poly16x8_t) 30327 30328 * uint32x4_t vreinterpretq_u32_p8 (poly8x16_t) 30329 30330 30331 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM NEON Intrinsics, Up: Target Builtins 30332 30333 5.50.4 Blackfin Built-in Functions 30334 ---------------------------------- 30335 30336 Currently, there are two Blackfin-specific built-in functions. These 30337 are used for generating `CSYNC' and `SSYNC' machine insns without using 30338 inline assembly; by using these built-in functions the compiler can 30339 automatically add workarounds for hardware errata involving these 30340 instructions. These functions are named as follows: 30341 30342 void __builtin_bfin_csync (void) 30343 void __builtin_bfin_ssync (void) 30344 30345 30346 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins 30347 30348 5.50.5 FR-V Built-in Functions 30349 ------------------------------ 30350 30351 GCC provides many FR-V-specific built-in functions. In general, these 30352 functions are intended to be compatible with those described by `FR-V 30353 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'. 30354 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of 30355 which pass 128-bit values by pointer rather than by value. 30356 30357 Most of the functions are named after specific FR-V instructions. 30358 Such functions are said to be "directly mapped" and are summarized here 30359 in tabular form. 30360 30361 * Menu: 30362 30363 * Argument Types:: 30364 * Directly-mapped Integer Functions:: 30365 * Directly-mapped Media Functions:: 30366 * Raw read/write Functions:: 30367 * Other Built-in Functions:: 30368 30369 30370 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 30371 30372 5.50.5.1 Argument Types 30373 ....................... 30374 30375 The arguments to the built-in functions can be divided into three 30376 groups: register numbers, compile-time constants and run-time values. 30377 In order to make this classification clear at a glance, the arguments 30378 and return values are given the following pseudo types: 30379 30380 Pseudo type Real C type Constant? Description 30381 `uh' `unsigned short' No an unsigned halfword 30382 `uw1' `unsigned int' No an unsigned word 30383 `sw1' `int' No a signed word 30384 `uw2' `unsigned long long' No an unsigned doubleword 30385 `sw2' `long long' No a signed doubleword 30386 `const' `int' Yes an integer constant 30387 `acc' `int' Yes an ACC register number 30388 `iacc' `int' Yes an IACC register number 30389 30390 These pseudo types are not defined by GCC, they are simply a notational 30391 convenience used in this manual. 30392 30393 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at 30394 run time. They correspond to register operands in the underlying FR-V 30395 instructions. 30396 30397 `const' arguments represent immediate operands in the underlying FR-V 30398 instructions. They must be compile-time constants. 30399 30400 `acc' arguments are evaluated at compile time and specify the number 30401 of an accumulator register. For example, an `acc' argument of 2 will 30402 select the ACC2 register. 30403 30404 `iacc' arguments are similar to `acc' arguments but specify the number 30405 of an IACC register. See *note Other Built-in Functions:: for more 30406 details. 30407 30408 30409 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions 30410 30411 5.50.5.2 Directly-mapped Integer Functions 30412 .......................................... 30413 30414 The functions listed below map directly to FR-V I-type instructions. 30415 30416 Function prototype Example usage Assembly output 30417 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C' 30418 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C' 30419 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B' 30420 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C' 30421 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B' 30422 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B' 30423 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B' 30424 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C' 30425 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C' 30426 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C' 30427 30428 30429 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions 30430 30431 5.50.5.3 Directly-mapped Media Functions 30432 ........................................ 30433 30434 The functions listed below map directly to FR-V M-type instructions. 30435 30436 Function prototype Example usage Assembly output 30437 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B' 30438 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B' 30439 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C' 30440 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C' 30441 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C' 30442 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B' 30443 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C' 30444 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B' 30445 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B' 30446 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A' 30447 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA' 30448 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C' 30449 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C' 30450 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C' 30451 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C' 30452 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C' 30453 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C' 30454 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C' 30455 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C' 30456 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C' 30457 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C' 30458 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B' 30459 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B' 30460 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C' 30461 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C' 30462 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C' 30463 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B' 30464 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B' 30465 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C' 30466 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C' 30467 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C' 30468 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B' 30469 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B' 30470 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B' 30471 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B' 30472 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B' 30473 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B' 30474 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C' 30475 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C' 30476 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C' 30477 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C' 30478 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C' 30479 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C' 30480 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C' 30481 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C' 30482 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B' 30483 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C' 30484 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C' 30485 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C' 30486 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C' 30487 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C' 30488 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C' 30489 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C' 30490 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C' 30491 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C' 30492 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C' 30493 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C' 30494 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C' 30495 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C' 30496 sw2)' 30497 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C' 30498 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C' 30499 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C' 30500 sw2)' 30501 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C' 30502 uw2)' 30503 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C' 30504 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C' 30505 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C' 30506 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C' 30507 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C' 30508 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C' 30509 sw2)' 30510 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C' 30511 sw2)' 30512 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B' 30513 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B' 30514 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C' 30515 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C' 30516 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C' 30517 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C' 30518 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C' 30519 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C' 30520 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C' 30521 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B' 30522 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C' 30523 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C' 30524 `void __MTRAP (void)' `__MTRAP ()' `MTRAP' 30525 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B' 30526 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C' 30527 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B' 30528 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B' 30529 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C' 30530 30531 30532 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions 30533 30534 5.50.5.4 Raw read/write Functions 30535 ................................. 30536 30537 This sections describes built-in functions related to read and write 30538 instructions to access memory. These functions generate `membar' 30539 instructions to flush the I/O load and stores where appropriate, as 30540 described in Fujitsu's manual described above. 30541 30542 `unsigned char __builtin_read8 (void *DATA)' 30543 30544 `unsigned short __builtin_read16 (void *DATA)' 30545 30546 `unsigned long __builtin_read32 (void *DATA)' 30547 30548 `unsigned long long __builtin_read64 (void *DATA)' 30549 30550 `void __builtin_write8 (void *DATA, unsigned char DATUM)' 30551 30552 `void __builtin_write16 (void *DATA, unsigned short DATUM)' 30553 30554 `void __builtin_write32 (void *DATA, unsigned long DATUM)' 30555 30556 `void __builtin_write64 (void *DATA, unsigned long long DATUM)' 30557 30558 30559 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions 30560 30561 5.50.5.5 Other Built-in Functions 30562 ................................. 30563 30564 This section describes built-in functions that are not named after a 30565 specific FR-V instruction. 30566 30567 `sw2 __IACCreadll (iacc REG)' 30568 Return the full 64-bit value of IACC0. The REG argument is 30569 reserved for future expansion and must be 0. 30570 30571 `sw1 __IACCreadl (iacc REG)' 30572 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1. 30573 Other values of REG are rejected as invalid. 30574 30575 `void __IACCsetll (iacc REG, sw2 X)' 30576 Set the full 64-bit value of IACC0 to X. The REG argument is 30577 reserved for future expansion and must be 0. 30578 30579 `void __IACCsetl (iacc REG, sw1 X)' 30580 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other 30581 values of REG are rejected as invalid. 30582 30583 `void __data_prefetch0 (const void *X)' 30584 Use the `dcpl' instruction to load the contents of address X into 30585 the data cache. 30586 30587 `void __data_prefetch (const void *X)' 30588 Use the `nldub' instruction to load the contents of address X into 30589 the data cache. The instruction will be issued in slot I1. 30590 30591 30592 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins 30593 30594 5.50.6 X86 Built-in Functions 30595 ----------------------------- 30596 30597 These built-in functions are available for the i386 and x86-64 family 30598 of computers, depending on the command-line switches used. 30599 30600 Note that, if you specify command-line switches such as `-msse', the 30601 compiler could use the extended instruction sets even if the built-ins 30602 are not used explicitly in the program. For this reason, applications 30603 which perform runtime CPU detection must compile separate files for each 30604 supported architecture, using the appropriate flags. In particular, 30605 the file containing the CPU detection code should be compiled without 30606 these options. 30607 30608 The following machine modes are available for use with MMX built-in 30609 functions (*note Vector Extensions::): `V2SI' for a vector of two 30610 32-bit integers, `V4HI' for a vector of four 16-bit integers, and 30611 `V8QI' for a vector of eight 8-bit integers. Some of the built-in 30612 functions operate on MMX registers as a whole 64-bit entity, these use 30613 `V1DI' as their mode. 30614 30615 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector 30616 of two 32-bit floating point values. 30617 30618 If SSE extensions are enabled, `V4SF' is used for a vector of four 30619 32-bit floating point values. Some instructions use a vector of four 30620 32-bit integers, these use `V4SI'. Finally, some instructions operate 30621 on an entire vector register, interpreting it as a 128-bit integer, 30622 these use mode `TI'. 30623 30624 In 64-bit mode, the x86-64 family of processors uses additional 30625 built-in functions for efficient use of `TF' (`__float128') 128-bit 30626 floating point and `TC' 128-bit complex floating point values. 30627 30628 The following floating point built-in functions are available in 64-bit 30629 mode. All of them implement the function that is part of the name. 30630 30631 __float128 __builtin_fabsq (__float128) 30632 __float128 __builtin_copysignq (__float128, __float128) 30633 30634 The following floating point built-in functions are made available in 30635 the 64-bit mode. 30636 30637 `__float128 __builtin_infq (void)' 30638 Similar to `__builtin_inf', except the return type is `__float128'. 30639 30640 The following built-in functions are made available by `-mmmx'. All 30641 of them generate the machine instruction that is part of the name. 30642 30643 v8qi __builtin_ia32_paddb (v8qi, v8qi) 30644 v4hi __builtin_ia32_paddw (v4hi, v4hi) 30645 v2si __builtin_ia32_paddd (v2si, v2si) 30646 v8qi __builtin_ia32_psubb (v8qi, v8qi) 30647 v4hi __builtin_ia32_psubw (v4hi, v4hi) 30648 v2si __builtin_ia32_psubd (v2si, v2si) 30649 v8qi __builtin_ia32_paddsb (v8qi, v8qi) 30650 v4hi __builtin_ia32_paddsw (v4hi, v4hi) 30651 v8qi __builtin_ia32_psubsb (v8qi, v8qi) 30652 v4hi __builtin_ia32_psubsw (v4hi, v4hi) 30653 v8qi __builtin_ia32_paddusb (v8qi, v8qi) 30654 v4hi __builtin_ia32_paddusw (v4hi, v4hi) 30655 v8qi __builtin_ia32_psubusb (v8qi, v8qi) 30656 v4hi __builtin_ia32_psubusw (v4hi, v4hi) 30657 v4hi __builtin_ia32_pmullw (v4hi, v4hi) 30658 v4hi __builtin_ia32_pmulhw (v4hi, v4hi) 30659 di __builtin_ia32_pand (di, di) 30660 di __builtin_ia32_pandn (di,di) 30661 di __builtin_ia32_por (di, di) 30662 di __builtin_ia32_pxor (di, di) 30663 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi) 30664 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi) 30665 v2si __builtin_ia32_pcmpeqd (v2si, v2si) 30666 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi) 30667 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi) 30668 v2si __builtin_ia32_pcmpgtd (v2si, v2si) 30669 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi) 30670 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi) 30671 v2si __builtin_ia32_punpckhdq (v2si, v2si) 30672 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi) 30673 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi) 30674 v2si __builtin_ia32_punpckldq (v2si, v2si) 30675 v8qi __builtin_ia32_packsswb (v4hi, v4hi) 30676 v4hi __builtin_ia32_packssdw (v2si, v2si) 30677 v8qi __builtin_ia32_packuswb (v4hi, v4hi) 30678 30679 v4hi __builtin_ia32_psllw (v4hi, v4hi) 30680 v2si __builtin_ia32_pslld (v2si, v2si) 30681 v1di __builtin_ia32_psllq (v1di, v1di) 30682 v4hi __builtin_ia32_psrlw (v4hi, v4hi) 30683 v2si __builtin_ia32_psrld (v2si, v2si) 30684 v1di __builtin_ia32_psrlq (v1di, v1di) 30685 v4hi __builtin_ia32_psraw (v4hi, v4hi) 30686 v2si __builtin_ia32_psrad (v2si, v2si) 30687 v4hi __builtin_ia32_psllwi (v4hi, int) 30688 v2si __builtin_ia32_pslldi (v2si, int) 30689 v1di __builtin_ia32_psllqi (v1di, int) 30690 v4hi __builtin_ia32_psrlwi (v4hi, int) 30691 v2si __builtin_ia32_psrldi (v2si, int) 30692 v1di __builtin_ia32_psrlqi (v1di, int) 30693 v4hi __builtin_ia32_psrawi (v4hi, int) 30694 v2si __builtin_ia32_psradi (v2si, int) 30695 30696 The following built-in functions are made available either with 30697 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All 30698 of them generate the machine instruction that is part of the name. 30699 30700 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi) 30701 v8qi __builtin_ia32_pavgb (v8qi, v8qi) 30702 v4hi __builtin_ia32_pavgw (v4hi, v4hi) 30703 v1di __builtin_ia32_psadbw (v8qi, v8qi) 30704 v8qi __builtin_ia32_pmaxub (v8qi, v8qi) 30705 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi) 30706 v8qi __builtin_ia32_pminub (v8qi, v8qi) 30707 v4hi __builtin_ia32_pminsw (v4hi, v4hi) 30708 int __builtin_ia32_pextrw (v4hi, int) 30709 v4hi __builtin_ia32_pinsrw (v4hi, int, int) 30710 int __builtin_ia32_pmovmskb (v8qi) 30711 void __builtin_ia32_maskmovq (v8qi, v8qi, char *) 30712 void __builtin_ia32_movntq (di *, di) 30713 void __builtin_ia32_sfence (void) 30714 30715 The following built-in functions are available when `-msse' is used. 30716 All of them generate the machine instruction that is part of the name. 30717 30718 int __builtin_ia32_comieq (v4sf, v4sf) 30719 int __builtin_ia32_comineq (v4sf, v4sf) 30720 int __builtin_ia32_comilt (v4sf, v4sf) 30721 int __builtin_ia32_comile (v4sf, v4sf) 30722 int __builtin_ia32_comigt (v4sf, v4sf) 30723 int __builtin_ia32_comige (v4sf, v4sf) 30724 int __builtin_ia32_ucomieq (v4sf, v4sf) 30725 int __builtin_ia32_ucomineq (v4sf, v4sf) 30726 int __builtin_ia32_ucomilt (v4sf, v4sf) 30727 int __builtin_ia32_ucomile (v4sf, v4sf) 30728 int __builtin_ia32_ucomigt (v4sf, v4sf) 30729 int __builtin_ia32_ucomige (v4sf, v4sf) 30730 v4sf __builtin_ia32_addps (v4sf, v4sf) 30731 v4sf __builtin_ia32_subps (v4sf, v4sf) 30732 v4sf __builtin_ia32_mulps (v4sf, v4sf) 30733 v4sf __builtin_ia32_divps (v4sf, v4sf) 30734 v4sf __builtin_ia32_addss (v4sf, v4sf) 30735 v4sf __builtin_ia32_subss (v4sf, v4sf) 30736 v4sf __builtin_ia32_mulss (v4sf, v4sf) 30737 v4sf __builtin_ia32_divss (v4sf, v4sf) 30738 v4si __builtin_ia32_cmpeqps (v4sf, v4sf) 30739 v4si __builtin_ia32_cmpltps (v4sf, v4sf) 30740 v4si __builtin_ia32_cmpleps (v4sf, v4sf) 30741 v4si __builtin_ia32_cmpgtps (v4sf, v4sf) 30742 v4si __builtin_ia32_cmpgeps (v4sf, v4sf) 30743 v4si __builtin_ia32_cmpunordps (v4sf, v4sf) 30744 v4si __builtin_ia32_cmpneqps (v4sf, v4sf) 30745 v4si __builtin_ia32_cmpnltps (v4sf, v4sf) 30746 v4si __builtin_ia32_cmpnleps (v4sf, v4sf) 30747 v4si __builtin_ia32_cmpngtps (v4sf, v4sf) 30748 v4si __builtin_ia32_cmpngeps (v4sf, v4sf) 30749 v4si __builtin_ia32_cmpordps (v4sf, v4sf) 30750 v4si __builtin_ia32_cmpeqss (v4sf, v4sf) 30751 v4si __builtin_ia32_cmpltss (v4sf, v4sf) 30752 v4si __builtin_ia32_cmpless (v4sf, v4sf) 30753 v4si __builtin_ia32_cmpunordss (v4sf, v4sf) 30754 v4si __builtin_ia32_cmpneqss (v4sf, v4sf) 30755 v4si __builtin_ia32_cmpnlts (v4sf, v4sf) 30756 v4si __builtin_ia32_cmpnless (v4sf, v4sf) 30757 v4si __builtin_ia32_cmpordss (v4sf, v4sf) 30758 v4sf __builtin_ia32_maxps (v4sf, v4sf) 30759 v4sf __builtin_ia32_maxss (v4sf, v4sf) 30760 v4sf __builtin_ia32_minps (v4sf, v4sf) 30761 v4sf __builtin_ia32_minss (v4sf, v4sf) 30762 v4sf __builtin_ia32_andps (v4sf, v4sf) 30763 v4sf __builtin_ia32_andnps (v4sf, v4sf) 30764 v4sf __builtin_ia32_orps (v4sf, v4sf) 30765 v4sf __builtin_ia32_xorps (v4sf, v4sf) 30766 v4sf __builtin_ia32_movss (v4sf, v4sf) 30767 v4sf __builtin_ia32_movhlps (v4sf, v4sf) 30768 v4sf __builtin_ia32_movlhps (v4sf, v4sf) 30769 v4sf __builtin_ia32_unpckhps (v4sf, v4sf) 30770 v4sf __builtin_ia32_unpcklps (v4sf, v4sf) 30771 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si) 30772 v4sf __builtin_ia32_cvtsi2ss (v4sf, int) 30773 v2si __builtin_ia32_cvtps2pi (v4sf) 30774 int __builtin_ia32_cvtss2si (v4sf) 30775 v2si __builtin_ia32_cvttps2pi (v4sf) 30776 int __builtin_ia32_cvttss2si (v4sf) 30777 v4sf __builtin_ia32_rcpps (v4sf) 30778 v4sf __builtin_ia32_rsqrtps (v4sf) 30779 v4sf __builtin_ia32_sqrtps (v4sf) 30780 v4sf __builtin_ia32_rcpss (v4sf) 30781 v4sf __builtin_ia32_rsqrtss (v4sf) 30782 v4sf __builtin_ia32_sqrtss (v4sf) 30783 v4sf __builtin_ia32_shufps (v4sf, v4sf, int) 30784 void __builtin_ia32_movntps (float *, v4sf) 30785 int __builtin_ia32_movmskps (v4sf) 30786 30787 The following built-in functions are available when `-msse' is used. 30788 30789 `v4sf __builtin_ia32_loadaps (float *)' 30790 Generates the `movaps' machine instruction as a load from memory. 30791 30792 `void __builtin_ia32_storeaps (float *, v4sf)' 30793 Generates the `movaps' machine instruction as a store to memory. 30794 30795 `v4sf __builtin_ia32_loadups (float *)' 30796 Generates the `movups' machine instruction as a load from memory. 30797 30798 `void __builtin_ia32_storeups (float *, v4sf)' 30799 Generates the `movups' machine instruction as a store to memory. 30800 30801 `v4sf __builtin_ia32_loadsss (float *)' 30802 Generates the `movss' machine instruction as a load from memory. 30803 30804 `void __builtin_ia32_storess (float *, v4sf)' 30805 Generates the `movss' machine instruction as a store to memory. 30806 30807 `v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)' 30808 Generates the `movhps' machine instruction as a load from memory. 30809 30810 `v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)' 30811 Generates the `movlps' machine instruction as a load from memory 30812 30813 `void __builtin_ia32_storehps (v2sf *, v4sf)' 30814 Generates the `movhps' machine instruction as a store to memory. 30815 30816 `void __builtin_ia32_storelps (v2sf *, v4sf)' 30817 Generates the `movlps' machine instruction as a store to memory. 30818 30819 The following built-in functions are available when `-msse2' is used. 30820 All of them generate the machine instruction that is part of the name. 30821 30822 int __builtin_ia32_comisdeq (v2df, v2df) 30823 int __builtin_ia32_comisdlt (v2df, v2df) 30824 int __builtin_ia32_comisdle (v2df, v2df) 30825 int __builtin_ia32_comisdgt (v2df, v2df) 30826 int __builtin_ia32_comisdge (v2df, v2df) 30827 int __builtin_ia32_comisdneq (v2df, v2df) 30828 int __builtin_ia32_ucomisdeq (v2df, v2df) 30829 int __builtin_ia32_ucomisdlt (v2df, v2df) 30830 int __builtin_ia32_ucomisdle (v2df, v2df) 30831 int __builtin_ia32_ucomisdgt (v2df, v2df) 30832 int __builtin_ia32_ucomisdge (v2df, v2df) 30833 int __builtin_ia32_ucomisdneq (v2df, v2df) 30834 v2df __builtin_ia32_cmpeqpd (v2df, v2df) 30835 v2df __builtin_ia32_cmpltpd (v2df, v2df) 30836 v2df __builtin_ia32_cmplepd (v2df, v2df) 30837 v2df __builtin_ia32_cmpgtpd (v2df, v2df) 30838 v2df __builtin_ia32_cmpgepd (v2df, v2df) 30839 v2df __builtin_ia32_cmpunordpd (v2df, v2df) 30840 v2df __builtin_ia32_cmpneqpd (v2df, v2df) 30841 v2df __builtin_ia32_cmpnltpd (v2df, v2df) 30842 v2df __builtin_ia32_cmpnlepd (v2df, v2df) 30843 v2df __builtin_ia32_cmpngtpd (v2df, v2df) 30844 v2df __builtin_ia32_cmpngepd (v2df, v2df) 30845 v2df __builtin_ia32_cmpordpd (v2df, v2df) 30846 v2df __builtin_ia32_cmpeqsd (v2df, v2df) 30847 v2df __builtin_ia32_cmpltsd (v2df, v2df) 30848 v2df __builtin_ia32_cmplesd (v2df, v2df) 30849 v2df __builtin_ia32_cmpunordsd (v2df, v2df) 30850 v2df __builtin_ia32_cmpneqsd (v2df, v2df) 30851 v2df __builtin_ia32_cmpnltsd (v2df, v2df) 30852 v2df __builtin_ia32_cmpnlesd (v2df, v2df) 30853 v2df __builtin_ia32_cmpordsd (v2df, v2df) 30854 v2di __builtin_ia32_paddq (v2di, v2di) 30855 v2di __builtin_ia32_psubq (v2di, v2di) 30856 v2df __builtin_ia32_addpd (v2df, v2df) 30857 v2df __builtin_ia32_subpd (v2df, v2df) 30858 v2df __builtin_ia32_mulpd (v2df, v2df) 30859 v2df __builtin_ia32_divpd (v2df, v2df) 30860 v2df __builtin_ia32_addsd (v2df, v2df) 30861 v2df __builtin_ia32_subsd (v2df, v2df) 30862 v2df __builtin_ia32_mulsd (v2df, v2df) 30863 v2df __builtin_ia32_divsd (v2df, v2df) 30864 v2df __builtin_ia32_minpd (v2df, v2df) 30865 v2df __builtin_ia32_maxpd (v2df, v2df) 30866 v2df __builtin_ia32_minsd (v2df, v2df) 30867 v2df __builtin_ia32_maxsd (v2df, v2df) 30868 v2df __builtin_ia32_andpd (v2df, v2df) 30869 v2df __builtin_ia32_andnpd (v2df, v2df) 30870 v2df __builtin_ia32_orpd (v2df, v2df) 30871 v2df __builtin_ia32_xorpd (v2df, v2df) 30872 v2df __builtin_ia32_movsd (v2df, v2df) 30873 v2df __builtin_ia32_unpckhpd (v2df, v2df) 30874 v2df __builtin_ia32_unpcklpd (v2df, v2df) 30875 v16qi __builtin_ia32_paddb128 (v16qi, v16qi) 30876 v8hi __builtin_ia32_paddw128 (v8hi, v8hi) 30877 v4si __builtin_ia32_paddd128 (v4si, v4si) 30878 v2di __builtin_ia32_paddq128 (v2di, v2di) 30879 v16qi __builtin_ia32_psubb128 (v16qi, v16qi) 30880 v8hi __builtin_ia32_psubw128 (v8hi, v8hi) 30881 v4si __builtin_ia32_psubd128 (v4si, v4si) 30882 v2di __builtin_ia32_psubq128 (v2di, v2di) 30883 v8hi __builtin_ia32_pmullw128 (v8hi, v8hi) 30884 v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi) 30885 v2di __builtin_ia32_pand128 (v2di, v2di) 30886 v2di __builtin_ia32_pandn128 (v2di, v2di) 30887 v2di __builtin_ia32_por128 (v2di, v2di) 30888 v2di __builtin_ia32_pxor128 (v2di, v2di) 30889 v16qi __builtin_ia32_pavgb128 (v16qi, v16qi) 30890 v8hi __builtin_ia32_pavgw128 (v8hi, v8hi) 30891 v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi) 30892 v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi) 30893 v4si __builtin_ia32_pcmpeqd128 (v4si, v4si) 30894 v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi) 30895 v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi) 30896 v4si __builtin_ia32_pcmpgtd128 (v4si, v4si) 30897 v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi) 30898 v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi) 30899 v16qi __builtin_ia32_pminub128 (v16qi, v16qi) 30900 v8hi __builtin_ia32_pminsw128 (v8hi, v8hi) 30901 v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi) 30902 v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi) 30903 v4si __builtin_ia32_punpckhdq128 (v4si, v4si) 30904 v2di __builtin_ia32_punpckhqdq128 (v2di, v2di) 30905 v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi) 30906 v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi) 30907 v4si __builtin_ia32_punpckldq128 (v4si, v4si) 30908 v2di __builtin_ia32_punpcklqdq128 (v2di, v2di) 30909 v16qi __builtin_ia32_packsswb128 (v8hi, v8hi) 30910 v8hi __builtin_ia32_packssdw128 (v4si, v4si) 30911 v16qi __builtin_ia32_packuswb128 (v8hi, v8hi) 30912 v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi) 30913 void __builtin_ia32_maskmovdqu (v16qi, v16qi) 30914 v2df __builtin_ia32_loadupd (double *) 30915 void __builtin_ia32_storeupd (double *, v2df) 30916 v2df __builtin_ia32_loadhpd (v2df, double const *) 30917 v2df __builtin_ia32_loadlpd (v2df, double const *) 30918 int __builtin_ia32_movmskpd (v2df) 30919 int __builtin_ia32_pmovmskb128 (v16qi) 30920 void __builtin_ia32_movnti (int *, int) 30921 void __builtin_ia32_movntpd (double *, v2df) 30922 void __builtin_ia32_movntdq (v2df *, v2df) 30923 v4si __builtin_ia32_pshufd (v4si, int) 30924 v8hi __builtin_ia32_pshuflw (v8hi, int) 30925 v8hi __builtin_ia32_pshufhw (v8hi, int) 30926 v2di __builtin_ia32_psadbw128 (v16qi, v16qi) 30927 v2df __builtin_ia32_sqrtpd (v2df) 30928 v2df __builtin_ia32_sqrtsd (v2df) 30929 v2df __builtin_ia32_shufpd (v2df, v2df, int) 30930 v2df __builtin_ia32_cvtdq2pd (v4si) 30931 v4sf __builtin_ia32_cvtdq2ps (v4si) 30932 v4si __builtin_ia32_cvtpd2dq (v2df) 30933 v2si __builtin_ia32_cvtpd2pi (v2df) 30934 v4sf __builtin_ia32_cvtpd2ps (v2df) 30935 v4si __builtin_ia32_cvttpd2dq (v2df) 30936 v2si __builtin_ia32_cvttpd2pi (v2df) 30937 v2df __builtin_ia32_cvtpi2pd (v2si) 30938 int __builtin_ia32_cvtsd2si (v2df) 30939 int __builtin_ia32_cvttsd2si (v2df) 30940 long long __builtin_ia32_cvtsd2si64 (v2df) 30941 long long __builtin_ia32_cvttsd2si64 (v2df) 30942 v4si __builtin_ia32_cvtps2dq (v4sf) 30943 v2df __builtin_ia32_cvtps2pd (v4sf) 30944 v4si __builtin_ia32_cvttps2dq (v4sf) 30945 v2df __builtin_ia32_cvtsi2sd (v2df, int) 30946 v2df __builtin_ia32_cvtsi642sd (v2df, long long) 30947 v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df) 30948 v2df __builtin_ia32_cvtss2sd (v2df, v4sf) 30949 void __builtin_ia32_clflush (const void *) 30950 void __builtin_ia32_lfence (void) 30951 void __builtin_ia32_mfence (void) 30952 v16qi __builtin_ia32_loaddqu (const char *) 30953 void __builtin_ia32_storedqu (char *, v16qi) 30954 v1di __builtin_ia32_pmuludq (v2si, v2si) 30955 v2di __builtin_ia32_pmuludq128 (v4si, v4si) 30956 v8hi __builtin_ia32_psllw128 (v8hi, v8hi) 30957 v4si __builtin_ia32_pslld128 (v4si, v4si) 30958 v2di __builtin_ia32_psllq128 (v2di, v2di) 30959 v8hi __builtin_ia32_psrlw128 (v8hi, v8hi) 30960 v4si __builtin_ia32_psrld128 (v4si, v4si) 30961 v2di __builtin_ia32_psrlq128 (v2di, v2di) 30962 v8hi __builtin_ia32_psraw128 (v8hi, v8hi) 30963 v4si __builtin_ia32_psrad128 (v4si, v4si) 30964 v2di __builtin_ia32_pslldqi128 (v2di, int) 30965 v8hi __builtin_ia32_psllwi128 (v8hi, int) 30966 v4si __builtin_ia32_pslldi128 (v4si, int) 30967 v2di __builtin_ia32_psllqi128 (v2di, int) 30968 v2di __builtin_ia32_psrldqi128 (v2di, int) 30969 v8hi __builtin_ia32_psrlwi128 (v8hi, int) 30970 v4si __builtin_ia32_psrldi128 (v4si, int) 30971 v2di __builtin_ia32_psrlqi128 (v2di, int) 30972 v8hi __builtin_ia32_psrawi128 (v8hi, int) 30973 v4si __builtin_ia32_psradi128 (v4si, int) 30974 v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi) 30975 v2di __builtin_ia32_movq128 (v2di) 30976 30977 The following built-in functions are available when `-msse3' is used. 30978 All of them generate the machine instruction that is part of the name. 30979 30980 v2df __builtin_ia32_addsubpd (v2df, v2df) 30981 v4sf __builtin_ia32_addsubps (v4sf, v4sf) 30982 v2df __builtin_ia32_haddpd (v2df, v2df) 30983 v4sf __builtin_ia32_haddps (v4sf, v4sf) 30984 v2df __builtin_ia32_hsubpd (v2df, v2df) 30985 v4sf __builtin_ia32_hsubps (v4sf, v4sf) 30986 v16qi __builtin_ia32_lddqu (char const *) 30987 void __builtin_ia32_monitor (void *, unsigned int, unsigned int) 30988 v2df __builtin_ia32_movddup (v2df) 30989 v4sf __builtin_ia32_movshdup (v4sf) 30990 v4sf __builtin_ia32_movsldup (v4sf) 30991 void __builtin_ia32_mwait (unsigned int, unsigned int) 30992 30993 The following built-in functions are available when `-msse3' is used. 30994 30995 `v2df __builtin_ia32_loadddup (double const *)' 30996 Generates the `movddup' machine instruction as a load from memory. 30997 30998 The following built-in functions are available when `-mssse3' is used. 30999 All of them generate the machine instruction that is part of the name 31000 with MMX registers. 31001 31002 v2si __builtin_ia32_phaddd (v2si, v2si) 31003 v4hi __builtin_ia32_phaddw (v4hi, v4hi) 31004 v4hi __builtin_ia32_phaddsw (v4hi, v4hi) 31005 v2si __builtin_ia32_phsubd (v2si, v2si) 31006 v4hi __builtin_ia32_phsubw (v4hi, v4hi) 31007 v4hi __builtin_ia32_phsubsw (v4hi, v4hi) 31008 v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi) 31009 v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi) 31010 v8qi __builtin_ia32_pshufb (v8qi, v8qi) 31011 v8qi __builtin_ia32_psignb (v8qi, v8qi) 31012 v2si __builtin_ia32_psignd (v2si, v2si) 31013 v4hi __builtin_ia32_psignw (v4hi, v4hi) 31014 v1di __builtin_ia32_palignr (v1di, v1di, int) 31015 v8qi __builtin_ia32_pabsb (v8qi) 31016 v2si __builtin_ia32_pabsd (v2si) 31017 v4hi __builtin_ia32_pabsw (v4hi) 31018 31019 The following built-in functions are available when `-mssse3' is used. 31020 All of them generate the machine instruction that is part of the name 31021 with SSE registers. 31022 31023 v4si __builtin_ia32_phaddd128 (v4si, v4si) 31024 v8hi __builtin_ia32_phaddw128 (v8hi, v8hi) 31025 v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi) 31026 v4si __builtin_ia32_phsubd128 (v4si, v4si) 31027 v8hi __builtin_ia32_phsubw128 (v8hi, v8hi) 31028 v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi) 31029 v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi) 31030 v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi) 31031 v16qi __builtin_ia32_pshufb128 (v16qi, v16qi) 31032 v16qi __builtin_ia32_psignb128 (v16qi, v16qi) 31033 v4si __builtin_ia32_psignd128 (v4si, v4si) 31034 v8hi __builtin_ia32_psignw128 (v8hi, v8hi) 31035 v2di __builtin_ia32_palignr128 (v2di, v2di, int) 31036 v16qi __builtin_ia32_pabsb128 (v16qi) 31037 v4si __builtin_ia32_pabsd128 (v4si) 31038 v8hi __builtin_ia32_pabsw128 (v8hi) 31039 31040 The following built-in functions are available when `-msse4.1' is 31041 used. All of them generate the machine instruction that is part of the 31042 name. 31043 31044 v2df __builtin_ia32_blendpd (v2df, v2df, const int) 31045 v4sf __builtin_ia32_blendps (v4sf, v4sf, const int) 31046 v2df __builtin_ia32_blendvpd (v2df, v2df, v2df) 31047 v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf) 31048 v2df __builtin_ia32_dppd (v2df, v2df, const int) 31049 v4sf __builtin_ia32_dpps (v4sf, v4sf, const int) 31050 v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int) 31051 v2di __builtin_ia32_movntdqa (v2di *); 31052 v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int) 31053 v8hi __builtin_ia32_packusdw128 (v4si, v4si) 31054 v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi) 31055 v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int) 31056 v2di __builtin_ia32_pcmpeqq (v2di, v2di) 31057 v8hi __builtin_ia32_phminposuw128 (v8hi) 31058 v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi) 31059 v4si __builtin_ia32_pmaxsd128 (v4si, v4si) 31060 v4si __builtin_ia32_pmaxud128 (v4si, v4si) 31061 v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi) 31062 v16qi __builtin_ia32_pminsb128 (v16qi, v16qi) 31063 v4si __builtin_ia32_pminsd128 (v4si, v4si) 31064 v4si __builtin_ia32_pminud128 (v4si, v4si) 31065 v8hi __builtin_ia32_pminuw128 (v8hi, v8hi) 31066 v4si __builtin_ia32_pmovsxbd128 (v16qi) 31067 v2di __builtin_ia32_pmovsxbq128 (v16qi) 31068 v8hi __builtin_ia32_pmovsxbw128 (v16qi) 31069 v2di __builtin_ia32_pmovsxdq128 (v4si) 31070 v4si __builtin_ia32_pmovsxwd128 (v8hi) 31071 v2di __builtin_ia32_pmovsxwq128 (v8hi) 31072 v4si __builtin_ia32_pmovzxbd128 (v16qi) 31073 v2di __builtin_ia32_pmovzxbq128 (v16qi) 31074 v8hi __builtin_ia32_pmovzxbw128 (v16qi) 31075 v2di __builtin_ia32_pmovzxdq128 (v4si) 31076 v4si __builtin_ia32_pmovzxwd128 (v8hi) 31077 v2di __builtin_ia32_pmovzxwq128 (v8hi) 31078 v2di __builtin_ia32_pmuldq128 (v4si, v4si) 31079 v4si __builtin_ia32_pmulld128 (v4si, v4si) 31080 int __builtin_ia32_ptestc128 (v2di, v2di) 31081 int __builtin_ia32_ptestnzc128 (v2di, v2di) 31082 int __builtin_ia32_ptestz128 (v2di, v2di) 31083 v2df __builtin_ia32_roundpd (v2df, const int) 31084 v4sf __builtin_ia32_roundps (v4sf, const int) 31085 v2df __builtin_ia32_roundsd (v2df, v2df, const int) 31086 v4sf __builtin_ia32_roundss (v4sf, v4sf, const int) 31087 31088 The following built-in functions are available when `-msse4.1' is used. 31089 31090 `v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)' 31091 Generates the `insertps' machine instruction. 31092 31093 `int __builtin_ia32_vec_ext_v16qi (v16qi, const int)' 31094 Generates the `pextrb' machine instruction. 31095 31096 `v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)' 31097 Generates the `pinsrb' machine instruction. 31098 31099 `v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)' 31100 Generates the `pinsrd' machine instruction. 31101 31102 `v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)' 31103 Generates the `pinsrq' machine instruction in 64bit mode. 31104 31105 The following built-in functions are changed to generate new SSE4.1 31106 instructions when `-msse4.1' is used. 31107 31108 `float __builtin_ia32_vec_ext_v4sf (v4sf, const int)' 31109 Generates the `extractps' machine instruction. 31110 31111 `int __builtin_ia32_vec_ext_v4si (v4si, const int)' 31112 Generates the `pextrd' machine instruction. 31113 31114 `long long __builtin_ia32_vec_ext_v2di (v2di, const int)' 31115 Generates the `pextrq' machine instruction in 64bit mode. 31116 31117 The following built-in functions are available when `-msse4.2' is 31118 used. All of them generate the machine instruction that is part of the 31119 name. 31120 31121 v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int) 31122 int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int) 31123 int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int) 31124 int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int) 31125 int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int) 31126 int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int) 31127 int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int) 31128 v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int) 31129 int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int) 31130 int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int) 31131 int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int) 31132 int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int) 31133 int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int) 31134 int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int) 31135 v2di __builtin_ia32_pcmpgtq (v2di, v2di) 31136 31137 The following built-in functions are available when `-msse4.2' is used. 31138 31139 `unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)' 31140 Generates the `crc32b' machine instruction. 31141 31142 `unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)' 31143 Generates the `crc32w' machine instruction. 31144 31145 `unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)' 31146 Generates the `crc32l' machine instruction. 31147 31148 `unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)' 31149 Generates the `crc32q' machine instruction. 31150 31151 The following built-in functions are changed to generate new SSE4.2 31152 instructions when `-msse4.2' is used. 31153 31154 `int __builtin_popcount (unsigned int)' 31155 Generates the `popcntl' machine instruction. 31156 31157 `int __builtin_popcountl (unsigned long)' 31158 Generates the `popcntl' or `popcntq' machine instruction, 31159 depending on the size of `unsigned long'. 31160 31161 `int __builtin_popcountll (unsigned long long)' 31162 Generates the `popcntq' machine instruction. 31163 31164 The following built-in functions are available when `-mavx' is used. 31165 All of them generate the machine instruction that is part of the name. 31166 31167 v4df __builtin_ia32_addpd256 (v4df,v4df) 31168 v8sf __builtin_ia32_addps256 (v8sf,v8sf) 31169 v4df __builtin_ia32_addsubpd256 (v4df,v4df) 31170 v8sf __builtin_ia32_addsubps256 (v8sf,v8sf) 31171 v4df __builtin_ia32_andnpd256 (v4df,v4df) 31172 v8sf __builtin_ia32_andnps256 (v8sf,v8sf) 31173 v4df __builtin_ia32_andpd256 (v4df,v4df) 31174 v8sf __builtin_ia32_andps256 (v8sf,v8sf) 31175 v4df __builtin_ia32_blendpd256 (v4df,v4df,int) 31176 v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int) 31177 v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df) 31178 v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf) 31179 v2df __builtin_ia32_cmppd (v2df,v2df,int) 31180 v4df __builtin_ia32_cmppd256 (v4df,v4df,int) 31181 v4sf __builtin_ia32_cmpps (v4sf,v4sf,int) 31182 v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int) 31183 v2df __builtin_ia32_cmpsd (v2df,v2df,int) 31184 v4sf __builtin_ia32_cmpss (v4sf,v4sf,int) 31185 v4df __builtin_ia32_cvtdq2pd256 (v4si) 31186 v8sf __builtin_ia32_cvtdq2ps256 (v8si) 31187 v4si __builtin_ia32_cvtpd2dq256 (v4df) 31188 v4sf __builtin_ia32_cvtpd2ps256 (v4df) 31189 v8si __builtin_ia32_cvtps2dq256 (v8sf) 31190 v4df __builtin_ia32_cvtps2pd256 (v4sf) 31191 v4si __builtin_ia32_cvttpd2dq256 (v4df) 31192 v8si __builtin_ia32_cvttps2dq256 (v8sf) 31193 v4df __builtin_ia32_divpd256 (v4df,v4df) 31194 v8sf __builtin_ia32_divps256 (v8sf,v8sf) 31195 v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int) 31196 v4df __builtin_ia32_haddpd256 (v4df,v4df) 31197 v8sf __builtin_ia32_haddps256 (v8sf,v8sf) 31198 v4df __builtin_ia32_hsubpd256 (v4df,v4df) 31199 v8sf __builtin_ia32_hsubps256 (v8sf,v8sf) 31200 v32qi __builtin_ia32_lddqu256 (pcchar) 31201 v32qi __builtin_ia32_loaddqu256 (pcchar) 31202 v4df __builtin_ia32_loadupd256 (pcdouble) 31203 v8sf __builtin_ia32_loadups256 (pcfloat) 31204 v2df __builtin_ia32_maskloadpd (pcv2df,v2df) 31205 v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df) 31206 v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf) 31207 v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf) 31208 void __builtin_ia32_maskstorepd (pv2df,v2df,v2df) 31209 void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df) 31210 void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf) 31211 void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf) 31212 v4df __builtin_ia32_maxpd256 (v4df,v4df) 31213 v8sf __builtin_ia32_maxps256 (v8sf,v8sf) 31214 v4df __builtin_ia32_minpd256 (v4df,v4df) 31215 v8sf __builtin_ia32_minps256 (v8sf,v8sf) 31216 v4df __builtin_ia32_movddup256 (v4df) 31217 int __builtin_ia32_movmskpd256 (v4df) 31218 int __builtin_ia32_movmskps256 (v8sf) 31219 v8sf __builtin_ia32_movshdup256 (v8sf) 31220 v8sf __builtin_ia32_movsldup256 (v8sf) 31221 v4df __builtin_ia32_mulpd256 (v4df,v4df) 31222 v8sf __builtin_ia32_mulps256 (v8sf,v8sf) 31223 v4df __builtin_ia32_orpd256 (v4df,v4df) 31224 v8sf __builtin_ia32_orps256 (v8sf,v8sf) 31225 v2df __builtin_ia32_pd_pd256 (v4df) 31226 v4df __builtin_ia32_pd256_pd (v2df) 31227 v4sf __builtin_ia32_ps_ps256 (v8sf) 31228 v8sf __builtin_ia32_ps256_ps (v4sf) 31229 int __builtin_ia32_ptestc256 (v4di,v4di,ptest) 31230 int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest) 31231 int __builtin_ia32_ptestz256 (v4di,v4di,ptest) 31232 v8sf __builtin_ia32_rcpps256 (v8sf) 31233 v4df __builtin_ia32_roundpd256 (v4df,int) 31234 v8sf __builtin_ia32_roundps256 (v8sf,int) 31235 v8sf __builtin_ia32_rsqrtps_nr256 (v8sf) 31236 v8sf __builtin_ia32_rsqrtps256 (v8sf) 31237 v4df __builtin_ia32_shufpd256 (v4df,v4df,int) 31238 v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int) 31239 v4si __builtin_ia32_si_si256 (v8si) 31240 v8si __builtin_ia32_si256_si (v4si) 31241 v4df __builtin_ia32_sqrtpd256 (v4df) 31242 v8sf __builtin_ia32_sqrtps_nr256 (v8sf) 31243 v8sf __builtin_ia32_sqrtps256 (v8sf) 31244 void __builtin_ia32_storedqu256 (pchar,v32qi) 31245 void __builtin_ia32_storeupd256 (pdouble,v4df) 31246 void __builtin_ia32_storeups256 (pfloat,v8sf) 31247 v4df __builtin_ia32_subpd256 (v4df,v4df) 31248 v8sf __builtin_ia32_subps256 (v8sf,v8sf) 31249 v4df __builtin_ia32_unpckhpd256 (v4df,v4df) 31250 v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf) 31251 v4df __builtin_ia32_unpcklpd256 (v4df,v4df) 31252 v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf) 31253 v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df) 31254 v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf) 31255 v4df __builtin_ia32_vbroadcastsd256 (pcdouble) 31256 v4sf __builtin_ia32_vbroadcastss (pcfloat) 31257 v8sf __builtin_ia32_vbroadcastss256 (pcfloat) 31258 v2df __builtin_ia32_vextractf128_pd256 (v4df,int) 31259 v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int) 31260 v4si __builtin_ia32_vextractf128_si256 (v8si,int) 31261 v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int) 31262 v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int) 31263 v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int) 31264 v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int) 31265 v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int) 31266 v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int) 31267 v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int) 31268 v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int) 31269 v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int) 31270 v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int) 31271 v2df __builtin_ia32_vpermilpd (v2df,int) 31272 v4df __builtin_ia32_vpermilpd256 (v4df,int) 31273 v4sf __builtin_ia32_vpermilps (v4sf,int) 31274 v8sf __builtin_ia32_vpermilps256 (v8sf,int) 31275 v2df __builtin_ia32_vpermilvarpd (v2df,v2di) 31276 v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di) 31277 v4sf __builtin_ia32_vpermilvarps (v4sf,v4si) 31278 v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si) 31279 int __builtin_ia32_vtestcpd (v2df,v2df,ptest) 31280 int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest) 31281 int __builtin_ia32_vtestcps (v4sf,v4sf,ptest) 31282 int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest) 31283 int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest) 31284 int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest) 31285 int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest) 31286 int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest) 31287 int __builtin_ia32_vtestzpd (v2df,v2df,ptest) 31288 int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest) 31289 int __builtin_ia32_vtestzps (v4sf,v4sf,ptest) 31290 int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest) 31291 void __builtin_ia32_vzeroall (void) 31292 void __builtin_ia32_vzeroupper (void) 31293 v4df __builtin_ia32_xorpd256 (v4df,v4df) 31294 v8sf __builtin_ia32_xorps256 (v8sf,v8sf) 31295 31296 The following built-in functions are available when `-maes' is used. 31297 All of them generate the machine instruction that is part of the name. 31298 31299 v2di __builtin_ia32_aesenc128 (v2di, v2di) 31300 v2di __builtin_ia32_aesenclast128 (v2di, v2di) 31301 v2di __builtin_ia32_aesdec128 (v2di, v2di) 31302 v2di __builtin_ia32_aesdeclast128 (v2di, v2di) 31303 v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) 31304 v2di __builtin_ia32_aesimc128 (v2di) 31305 31306 The following built-in function is available when `-mpclmul' is used. 31307 31308 `v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)' 31309 Generates the `pclmulqdq' machine instruction. 31310 31311 The following built-in functions are available when `-msse4a' is used. 31312 All of them generate the machine instruction that is part of the name. 31313 31314 void __builtin_ia32_movntsd (double *, v2df) 31315 void __builtin_ia32_movntss (float *, v4sf) 31316 v2di __builtin_ia32_extrq (v2di, v16qi) 31317 v2di __builtin_ia32_extrqi (v2di, const unsigned int, const unsigned int) 31318 v2di __builtin_ia32_insertq (v2di, v2di) 31319 v2di __builtin_ia32_insertqi (v2di, v2di, const unsigned int, const unsigned int) 31320 31321 The following built-in functions are available when `-msse5' is used. 31322 All of them generate the machine instruction that is part of the name 31323 with MMX registers. 31324 31325 v2df __builtin_ia32_comeqpd (v2df, v2df) 31326 v2df __builtin_ia32_comeqps (v2df, v2df) 31327 v4sf __builtin_ia32_comeqsd (v4sf, v4sf) 31328 v4sf __builtin_ia32_comeqss (v4sf, v4sf) 31329 v2df __builtin_ia32_comfalsepd (v2df, v2df) 31330 v2df __builtin_ia32_comfalseps (v2df, v2df) 31331 v4sf __builtin_ia32_comfalsesd (v4sf, v4sf) 31332 v4sf __builtin_ia32_comfalsess (v4sf, v4sf) 31333 v2df __builtin_ia32_comgepd (v2df, v2df) 31334 v2df __builtin_ia32_comgeps (v2df, v2df) 31335 v4sf __builtin_ia32_comgesd (v4sf, v4sf) 31336 v4sf __builtin_ia32_comgess (v4sf, v4sf) 31337 v2df __builtin_ia32_comgtpd (v2df, v2df) 31338 v2df __builtin_ia32_comgtps (v2df, v2df) 31339 v4sf __builtin_ia32_comgtsd (v4sf, v4sf) 31340 v4sf __builtin_ia32_comgtss (v4sf, v4sf) 31341 v2df __builtin_ia32_comlepd (v2df, v2df) 31342 v2df __builtin_ia32_comleps (v2df, v2df) 31343 v4sf __builtin_ia32_comlesd (v4sf, v4sf) 31344 v4sf __builtin_ia32_comless (v4sf, v4sf) 31345 v2df __builtin_ia32_comltpd (v2df, v2df) 31346 v2df __builtin_ia32_comltps (v2df, v2df) 31347 v4sf __builtin_ia32_comltsd (v4sf, v4sf) 31348 v4sf __builtin_ia32_comltss (v4sf, v4sf) 31349 v2df __builtin_ia32_comnepd (v2df, v2df) 31350 v2df __builtin_ia32_comneps (v2df, v2df) 31351 v4sf __builtin_ia32_comnesd (v4sf, v4sf) 31352 v4sf __builtin_ia32_comness (v4sf, v4sf) 31353 v2df __builtin_ia32_comordpd (v2df, v2df) 31354 v2df __builtin_ia32_comordps (v2df, v2df) 31355 v4sf __builtin_ia32_comordsd (v4sf, v4sf) 31356 v4sf __builtin_ia32_comordss (v4sf, v4sf) 31357 v2df __builtin_ia32_comtruepd (v2df, v2df) 31358 v2df __builtin_ia32_comtrueps (v2df, v2df) 31359 v4sf __builtin_ia32_comtruesd (v4sf, v4sf) 31360 v4sf __builtin_ia32_comtruess (v4sf, v4sf) 31361 v2df __builtin_ia32_comueqpd (v2df, v2df) 31362 v2df __builtin_ia32_comueqps (v2df, v2df) 31363 v4sf __builtin_ia32_comueqsd (v4sf, v4sf) 31364 v4sf __builtin_ia32_comueqss (v4sf, v4sf) 31365 v2df __builtin_ia32_comugepd (v2df, v2df) 31366 v2df __builtin_ia32_comugeps (v2df, v2df) 31367 v4sf __builtin_ia32_comugesd (v4sf, v4sf) 31368 v4sf __builtin_ia32_comugess (v4sf, v4sf) 31369 v2df __builtin_ia32_comugtpd (v2df, v2df) 31370 v2df __builtin_ia32_comugtps (v2df, v2df) 31371 v4sf __builtin_ia32_comugtsd (v4sf, v4sf) 31372 v4sf __builtin_ia32_comugtss (v4sf, v4sf) 31373 v2df __builtin_ia32_comulepd (v2df, v2df) 31374 v2df __builtin_ia32_comuleps (v2df, v2df) 31375 v4sf __builtin_ia32_comulesd (v4sf, v4sf) 31376 v4sf __builtin_ia32_comuless (v4sf, v4sf) 31377 v2df __builtin_ia32_comultpd (v2df, v2df) 31378 v2df __builtin_ia32_comultps (v2df, v2df) 31379 v4sf __builtin_ia32_comultsd (v4sf, v4sf) 31380 v4sf __builtin_ia32_comultss (v4sf, v4sf) 31381 v2df __builtin_ia32_comunepd (v2df, v2df) 31382 v2df __builtin_ia32_comuneps (v2df, v2df) 31383 v4sf __builtin_ia32_comunesd (v4sf, v4sf) 31384 v4sf __builtin_ia32_comuness (v4sf, v4sf) 31385 v2df __builtin_ia32_comunordpd (v2df, v2df) 31386 v2df __builtin_ia32_comunordps (v2df, v2df) 31387 v4sf __builtin_ia32_comunordsd (v4sf, v4sf) 31388 v4sf __builtin_ia32_comunordss (v4sf, v4sf) 31389 v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df) 31390 v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf) 31391 v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df) 31392 v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf) 31393 v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df) 31394 v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf) 31395 v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df) 31396 v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf) 31397 v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df) 31398 v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf) 31399 v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df) 31400 v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf) 31401 v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df) 31402 v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf) 31403 v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df) 31404 v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf) 31405 v2df __builtin_ia32_frczpd (v2df) 31406 v4sf __builtin_ia32_frczps (v4sf) 31407 v2df __builtin_ia32_frczsd (v2df, v2df) 31408 v4sf __builtin_ia32_frczss (v4sf, v4sf) 31409 v2di __builtin_ia32_pcmov (v2di, v2di, v2di) 31410 v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di) 31411 v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si) 31412 v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi) 31413 v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi) 31414 v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df) 31415 v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf) 31416 v16qi __builtin_ia32_pcomeqb (v16qi, v16qi) 31417 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 31418 v4si __builtin_ia32_pcomeqd (v4si, v4si) 31419 v2di __builtin_ia32_pcomeqq (v2di, v2di) 31420 v16qi __builtin_ia32_pcomequb (v16qi, v16qi) 31421 v4si __builtin_ia32_pcomequd (v4si, v4si) 31422 v2di __builtin_ia32_pcomequq (v2di, v2di) 31423 v8hi __builtin_ia32_pcomequw (v8hi, v8hi) 31424 v8hi __builtin_ia32_pcomeqw (v8hi, v8hi) 31425 v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi) 31426 v4si __builtin_ia32_pcomfalsed (v4si, v4si) 31427 v2di __builtin_ia32_pcomfalseq (v2di, v2di) 31428 v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi) 31429 v4si __builtin_ia32_pcomfalseud (v4si, v4si) 31430 v2di __builtin_ia32_pcomfalseuq (v2di, v2di) 31431 v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi) 31432 v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi) 31433 v16qi __builtin_ia32_pcomgeb (v16qi, v16qi) 31434 v4si __builtin_ia32_pcomged (v4si, v4si) 31435 v2di __builtin_ia32_pcomgeq (v2di, v2di) 31436 v16qi __builtin_ia32_pcomgeub (v16qi, v16qi) 31437 v4si __builtin_ia32_pcomgeud (v4si, v4si) 31438 v2di __builtin_ia32_pcomgeuq (v2di, v2di) 31439 v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi) 31440 v8hi __builtin_ia32_pcomgew (v8hi, v8hi) 31441 v16qi __builtin_ia32_pcomgtb (v16qi, v16qi) 31442 v4si __builtin_ia32_pcomgtd (v4si, v4si) 31443 v2di __builtin_ia32_pcomgtq (v2di, v2di) 31444 v16qi __builtin_ia32_pcomgtub (v16qi, v16qi) 31445 v4si __builtin_ia32_pcomgtud (v4si, v4si) 31446 v2di __builtin_ia32_pcomgtuq (v2di, v2di) 31447 v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi) 31448 v8hi __builtin_ia32_pcomgtw (v8hi, v8hi) 31449 v16qi __builtin_ia32_pcomleb (v16qi, v16qi) 31450 v4si __builtin_ia32_pcomled (v4si, v4si) 31451 v2di __builtin_ia32_pcomleq (v2di, v2di) 31452 v16qi __builtin_ia32_pcomleub (v16qi, v16qi) 31453 v4si __builtin_ia32_pcomleud (v4si, v4si) 31454 v2di __builtin_ia32_pcomleuq (v2di, v2di) 31455 v8hi __builtin_ia32_pcomleuw (v8hi, v8hi) 31456 v8hi __builtin_ia32_pcomlew (v8hi, v8hi) 31457 v16qi __builtin_ia32_pcomltb (v16qi, v16qi) 31458 v4si __builtin_ia32_pcomltd (v4si, v4si) 31459 v2di __builtin_ia32_pcomltq (v2di, v2di) 31460 v16qi __builtin_ia32_pcomltub (v16qi, v16qi) 31461 v4si __builtin_ia32_pcomltud (v4si, v4si) 31462 v2di __builtin_ia32_pcomltuq (v2di, v2di) 31463 v8hi __builtin_ia32_pcomltuw (v8hi, v8hi) 31464 v8hi __builtin_ia32_pcomltw (v8hi, v8hi) 31465 v16qi __builtin_ia32_pcomneb (v16qi, v16qi) 31466 v4si __builtin_ia32_pcomned (v4si, v4si) 31467 v2di __builtin_ia32_pcomneq (v2di, v2di) 31468 v16qi __builtin_ia32_pcomneub (v16qi, v16qi) 31469 v4si __builtin_ia32_pcomneud (v4si, v4si) 31470 v2di __builtin_ia32_pcomneuq (v2di, v2di) 31471 v8hi __builtin_ia32_pcomneuw (v8hi, v8hi) 31472 v8hi __builtin_ia32_pcomnew (v8hi, v8hi) 31473 v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi) 31474 v4si __builtin_ia32_pcomtrued (v4si, v4si) 31475 v2di __builtin_ia32_pcomtrueq (v2di, v2di) 31476 v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi) 31477 v4si __builtin_ia32_pcomtrueud (v4si, v4si) 31478 v2di __builtin_ia32_pcomtrueuq (v2di, v2di) 31479 v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi) 31480 v8hi __builtin_ia32_pcomtruew (v8hi, v8hi) 31481 v4df __builtin_ia32_permpd (v2df, v2df, v16qi) 31482 v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi) 31483 v4si __builtin_ia32_phaddbd (v16qi) 31484 v2di __builtin_ia32_phaddbq (v16qi) 31485 v8hi __builtin_ia32_phaddbw (v16qi) 31486 v2di __builtin_ia32_phadddq (v4si) 31487 v4si __builtin_ia32_phaddubd (v16qi) 31488 v2di __builtin_ia32_phaddubq (v16qi) 31489 v8hi __builtin_ia32_phaddubw (v16qi) 31490 v2di __builtin_ia32_phaddudq (v4si) 31491 v4si __builtin_ia32_phadduwd (v8hi) 31492 v2di __builtin_ia32_phadduwq (v8hi) 31493 v4si __builtin_ia32_phaddwd (v8hi) 31494 v2di __builtin_ia32_phaddwq (v8hi) 31495 v8hi __builtin_ia32_phsubbw (v16qi) 31496 v2di __builtin_ia32_phsubdq (v4si) 31497 v4si __builtin_ia32_phsubwd (v8hi) 31498 v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si) 31499 v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di) 31500 v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di) 31501 v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si) 31502 v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di) 31503 v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di) 31504 v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si) 31505 v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi) 31506 v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si) 31507 v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi) 31508 v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si) 31509 v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si) 31510 v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi) 31511 v16qi __builtin_ia32_protb (v16qi, v16qi) 31512 v4si __builtin_ia32_protd (v4si, v4si) 31513 v2di __builtin_ia32_protq (v2di, v2di) 31514 v8hi __builtin_ia32_protw (v8hi, v8hi) 31515 v16qi __builtin_ia32_pshab (v16qi, v16qi) 31516 v4si __builtin_ia32_pshad (v4si, v4si) 31517 v2di __builtin_ia32_pshaq (v2di, v2di) 31518 v8hi __builtin_ia32_pshaw (v8hi, v8hi) 31519 v16qi __builtin_ia32_pshlb (v16qi, v16qi) 31520 v4si __builtin_ia32_pshld (v4si, v4si) 31521 v2di __builtin_ia32_pshlq (v2di, v2di) 31522 v8hi __builtin_ia32_pshlw (v8hi, v8hi) 31523 31524 The following builtin-in functions are available when `-msse5' is 31525 used. The second argument must be an integer constant and generate the 31526 machine instruction that is part of the name with the `_imm' suffix 31527 removed. 31528 31529 v16qi __builtin_ia32_protb_imm (v16qi, int) 31530 v4si __builtin_ia32_protd_imm (v4si, int) 31531 v2di __builtin_ia32_protq_imm (v2di, int) 31532 v8hi __builtin_ia32_protw_imm (v8hi, int) 31533 31534 The following built-in functions are available when `-mlwp' is used. 31535 31536 void __builtin_ia32_llwpcb16 (void *); 31537 void __builtin_ia32_llwpcb32 (void *); 31538 void __builtin_ia32_llwpcb64 (void *); 31539 void * __builtin_ia32_llwpcb16 (void); 31540 void * __builtin_ia32_llwpcb32 (void); 31541 void * __builtin_ia32_llwpcb64 (void); 31542 void __builtin_ia32_lwpval16 (unsigned short, unsigned int, unsigned short) 31543 void __builtin_ia32_lwpval32 (unsigned int, unsigned int, unsigned int) 31544 void __builtin_ia32_lwpval64 (unsigned __int64, unsigned int, unsigned int) 31545 unsigned char __builtin_ia32_lwpins16 (unsigned short, unsigned int, unsigned short) 31546 unsigned char __builtin_ia32_lwpins32 (unsigned int, unsigned int, unsigned int) 31547 unsigned char __builtin_ia32_lwpins64 (unsigned __int64, unsigned int, unsigned int) 31548 31549 The following built-in functions are available when `-m3dnow' is used. 31550 All of them generate the machine instruction that is part of the name. 31551 31552 void __builtin_ia32_femms (void) 31553 v8qi __builtin_ia32_pavgusb (v8qi, v8qi) 31554 v2si __builtin_ia32_pf2id (v2sf) 31555 v2sf __builtin_ia32_pfacc (v2sf, v2sf) 31556 v2sf __builtin_ia32_pfadd (v2sf, v2sf) 31557 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf) 31558 v2si __builtin_ia32_pfcmpge (v2sf, v2sf) 31559 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf) 31560 v2sf __builtin_ia32_pfmax (v2sf, v2sf) 31561 v2sf __builtin_ia32_pfmin (v2sf, v2sf) 31562 v2sf __builtin_ia32_pfmul (v2sf, v2sf) 31563 v2sf __builtin_ia32_pfrcp (v2sf) 31564 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf) 31565 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf) 31566 v2sf __builtin_ia32_pfrsqrt (v2sf) 31567 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf) 31568 v2sf __builtin_ia32_pfsub (v2sf, v2sf) 31569 v2sf __builtin_ia32_pfsubr (v2sf, v2sf) 31570 v2sf __builtin_ia32_pi2fd (v2si) 31571 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi) 31572 31573 The following built-in functions are available when both `-m3dnow' and 31574 `-march=athlon' are used. All of them generate the machine instruction 31575 that is part of the name. 31576 31577 v2si __builtin_ia32_pf2iw (v2sf) 31578 v2sf __builtin_ia32_pfnacc (v2sf, v2sf) 31579 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf) 31580 v2sf __builtin_ia32_pi2fw (v2si) 31581 v2sf __builtin_ia32_pswapdsf (v2sf) 31582 v2si __builtin_ia32_pswapdsi (v2si) 31583 31584 31585 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins 31586 31587 5.50.7 MIPS DSP Built-in Functions 31588 ---------------------------------- 31589 31590 The MIPS DSP Application-Specific Extension (ASE) includes new 31591 instructions that are designed to improve the performance of DSP and 31592 media applications. It provides instructions that operate on packed 31593 8-bit/16-bit integer data, Q7, Q15 and Q31 fractional data. 31594 31595 GCC supports MIPS DSP operations using both the generic vector 31596 extensions (*note Vector Extensions::) and a collection of 31597 MIPS-specific built-in functions. Both kinds of support are enabled by 31598 the `-mdsp' command-line option. 31599 31600 Revision 2 of the ASE was introduced in the second half of 2006. This 31601 revision adds extra instructions to the original ASE, but is otherwise 31602 backwards-compatible with it. You can select revision 2 using the 31603 command-line option `-mdspr2'; this option implies `-mdsp'. 31604 31605 The SCOUNT and POS bits of the DSP control register are global. The 31606 WRDSP, EXTPDP, EXTPDPV and MTHLIP instructions modify the SCOUNT and 31607 POS bits. During optimization, the compiler will not delete these 31608 instructions and it will not delete calls to functions containing these 31609 instructions. 31610 31611 At present, GCC only provides support for operations on 32-bit 31612 vectors. The vector type associated with 8-bit integer data is usually 31613 called `v4i8', the vector type associated with Q7 is usually called 31614 `v4q7', the vector type associated with 16-bit integer data is usually 31615 called `v2i16', and the vector type associated with Q15 is usually 31616 called `v2q15'. They can be defined in C as follows: 31617 31618 typedef signed char v4i8 __attribute__ ((vector_size(4))); 31619 typedef signed char v4q7 __attribute__ ((vector_size(4))); 31620 typedef short v2i16 __attribute__ ((vector_size(4))); 31621 typedef short v2q15 __attribute__ ((vector_size(4))); 31622 31623 `v4i8', `v4q7', `v2i16' and `v2q15' values are initialized in the same 31624 way as aggregates. For example: 31625 31626 v4i8 a = {1, 2, 3, 4}; 31627 v4i8 b; 31628 b = (v4i8) {5, 6, 7, 8}; 31629 31630 v2q15 c = {0x0fcb, 0x3a75}; 31631 v2q15 d; 31632 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15}; 31633 31634 _Note:_ The CPU's endianness determines the order in which values are 31635 packed. On little-endian targets, the first value is the least 31636 significant and the last value is the most significant. The opposite 31637 order applies to big-endian targets. For example, the code above will 31638 set the lowest byte of `a' to `1' on little-endian targets and `4' on 31639 big-endian targets. 31640 31641 _Note:_ Q7, Q15 and Q31 values must be initialized with their integer 31642 representation. As shown in this example, the integer representation 31643 of a Q7 value can be obtained by multiplying the fractional value by 31644 `0x1.0p7'. The equivalent for Q15 values is to multiply by `0x1.0p15'. 31645 The equivalent for Q31 values is to multiply by `0x1.0p31'. 31646 31647 The table below lists the `v4i8' and `v2q15' operations for which 31648 hardware support exists. `a' and `b' are `v4i8' values, and `c' and 31649 `d' are `v2q15' values. 31650 31651 C code MIPS instruction 31652 `a + b' `addu.qb' 31653 `c + d' `addq.ph' 31654 `a - b' `subu.qb' 31655 `c - d' `subq.ph' 31656 31657 The table below lists the `v2i16' operation for which hardware support 31658 exists for the DSP ASE REV 2. `e' and `f' are `v2i16' values. 31659 31660 C code MIPS instruction 31661 `e * f' `mul.ph' 31662 31663 It is easier to describe the DSP built-in functions if we first define 31664 the following types: 31665 31666 typedef int q31; 31667 typedef int i32; 31668 typedef unsigned int ui32; 31669 typedef long long a64; 31670 31671 `q31' and `i32' are actually the same as `int', but we use `q31' to 31672 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer 31673 value. Similarly, `a64' is the same as `long long', but we use `a64' 31674 to indicate values that will be placed in one of the four DSP 31675 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3'). 31676 31677 Also, some built-in functions prefer or require immediate numbers as 31678 parameters, because the corresponding DSP instructions accept both 31679 immediate numbers and register operands, or accept immediate numbers 31680 only. The immediate parameters are listed as follows. 31681 31682 imm0_3: 0 to 3. 31683 imm0_7: 0 to 7. 31684 imm0_15: 0 to 15. 31685 imm0_31: 0 to 31. 31686 imm0_63: 0 to 63. 31687 imm0_255: 0 to 255. 31688 imm_n32_31: -32 to 31. 31689 imm_n512_511: -512 to 511. 31690 31691 The following built-in functions map directly to a particular MIPS DSP 31692 instruction. Please refer to the architecture specification for 31693 details on what each instruction does. 31694 31695 v2q15 __builtin_mips_addq_ph (v2q15, v2q15) 31696 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15) 31697 q31 __builtin_mips_addq_s_w (q31, q31) 31698 v4i8 __builtin_mips_addu_qb (v4i8, v4i8) 31699 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8) 31700 v2q15 __builtin_mips_subq_ph (v2q15, v2q15) 31701 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15) 31702 q31 __builtin_mips_subq_s_w (q31, q31) 31703 v4i8 __builtin_mips_subu_qb (v4i8, v4i8) 31704 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8) 31705 i32 __builtin_mips_addsc (i32, i32) 31706 i32 __builtin_mips_addwc (i32, i32) 31707 i32 __builtin_mips_modsub (i32, i32) 31708 i32 __builtin_mips_raddu_w_qb (v4i8) 31709 v2q15 __builtin_mips_absq_s_ph (v2q15) 31710 q31 __builtin_mips_absq_s_w (q31) 31711 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15) 31712 v2q15 __builtin_mips_precrq_ph_w (q31, q31) 31713 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31) 31714 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15) 31715 q31 __builtin_mips_preceq_w_phl (v2q15) 31716 q31 __builtin_mips_preceq_w_phr (v2q15) 31717 v2q15 __builtin_mips_precequ_ph_qbl (v4i8) 31718 v2q15 __builtin_mips_precequ_ph_qbr (v4i8) 31719 v2q15 __builtin_mips_precequ_ph_qbla (v4i8) 31720 v2q15 __builtin_mips_precequ_ph_qbra (v4i8) 31721 v2q15 __builtin_mips_preceu_ph_qbl (v4i8) 31722 v2q15 __builtin_mips_preceu_ph_qbr (v4i8) 31723 v2q15 __builtin_mips_preceu_ph_qbla (v4i8) 31724 v2q15 __builtin_mips_preceu_ph_qbra (v4i8) 31725 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7) 31726 v4i8 __builtin_mips_shll_qb (v4i8, i32) 31727 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15) 31728 v2q15 __builtin_mips_shll_ph (v2q15, i32) 31729 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15) 31730 v2q15 __builtin_mips_shll_s_ph (v2q15, i32) 31731 q31 __builtin_mips_shll_s_w (q31, imm0_31) 31732 q31 __builtin_mips_shll_s_w (q31, i32) 31733 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7) 31734 v4i8 __builtin_mips_shrl_qb (v4i8, i32) 31735 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15) 31736 v2q15 __builtin_mips_shra_ph (v2q15, i32) 31737 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15) 31738 v2q15 __builtin_mips_shra_r_ph (v2q15, i32) 31739 q31 __builtin_mips_shra_r_w (q31, imm0_31) 31740 q31 __builtin_mips_shra_r_w (q31, i32) 31741 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15) 31742 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15) 31743 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15) 31744 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15) 31745 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15) 31746 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8) 31747 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8) 31748 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8) 31749 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8) 31750 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15) 31751 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31) 31752 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15) 31753 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31) 31754 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15) 31755 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15) 31756 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15) 31757 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15) 31758 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15) 31759 i32 __builtin_mips_bitrev (i32) 31760 i32 __builtin_mips_insv (i32, i32) 31761 v4i8 __builtin_mips_repl_qb (imm0_255) 31762 v4i8 __builtin_mips_repl_qb (i32) 31763 v2q15 __builtin_mips_repl_ph (imm_n512_511) 31764 v2q15 __builtin_mips_repl_ph (i32) 31765 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8) 31766 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8) 31767 void __builtin_mips_cmpu_le_qb (v4i8, v4i8) 31768 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8) 31769 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8) 31770 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8) 31771 void __builtin_mips_cmp_eq_ph (v2q15, v2q15) 31772 void __builtin_mips_cmp_lt_ph (v2q15, v2q15) 31773 void __builtin_mips_cmp_le_ph (v2q15, v2q15) 31774 v4i8 __builtin_mips_pick_qb (v4i8, v4i8) 31775 v2q15 __builtin_mips_pick_ph (v2q15, v2q15) 31776 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15) 31777 i32 __builtin_mips_extr_w (a64, imm0_31) 31778 i32 __builtin_mips_extr_w (a64, i32) 31779 i32 __builtin_mips_extr_r_w (a64, imm0_31) 31780 i32 __builtin_mips_extr_s_h (a64, i32) 31781 i32 __builtin_mips_extr_rs_w (a64, imm0_31) 31782 i32 __builtin_mips_extr_rs_w (a64, i32) 31783 i32 __builtin_mips_extr_s_h (a64, imm0_31) 31784 i32 __builtin_mips_extr_r_w (a64, i32) 31785 i32 __builtin_mips_extp (a64, imm0_31) 31786 i32 __builtin_mips_extp (a64, i32) 31787 i32 __builtin_mips_extpdp (a64, imm0_31) 31788 i32 __builtin_mips_extpdp (a64, i32) 31789 a64 __builtin_mips_shilo (a64, imm_n32_31) 31790 a64 __builtin_mips_shilo (a64, i32) 31791 a64 __builtin_mips_mthlip (a64, i32) 31792 void __builtin_mips_wrdsp (i32, imm0_63) 31793 i32 __builtin_mips_rddsp (imm0_63) 31794 i32 __builtin_mips_lbux (void *, i32) 31795 i32 __builtin_mips_lhx (void *, i32) 31796 i32 __builtin_mips_lwx (void *, i32) 31797 i32 __builtin_mips_bposge32 (void) 31798 31799 The following built-in functions map directly to a particular MIPS DSP 31800 REV 2 instruction. Please refer to the architecture specification for 31801 details on what each instruction does. 31802 31803 v4q7 __builtin_mips_absq_s_qb (v4q7); 31804 v2i16 __builtin_mips_addu_ph (v2i16, v2i16); 31805 v2i16 __builtin_mips_addu_s_ph (v2i16, v2i16); 31806 v4i8 __builtin_mips_adduh_qb (v4i8, v4i8); 31807 v4i8 __builtin_mips_adduh_r_qb (v4i8, v4i8); 31808 i32 __builtin_mips_append (i32, i32, imm0_31); 31809 i32 __builtin_mips_balign (i32, i32, imm0_3); 31810 i32 __builtin_mips_cmpgdu_eq_qb (v4i8, v4i8); 31811 i32 __builtin_mips_cmpgdu_lt_qb (v4i8, v4i8); 31812 i32 __builtin_mips_cmpgdu_le_qb (v4i8, v4i8); 31813 a64 __builtin_mips_dpa_w_ph (a64, v2i16, v2i16); 31814 a64 __builtin_mips_dps_w_ph (a64, v2i16, v2i16); 31815 a64 __builtin_mips_madd (a64, i32, i32); 31816 a64 __builtin_mips_maddu (a64, ui32, ui32); 31817 a64 __builtin_mips_msub (a64, i32, i32); 31818 a64 __builtin_mips_msubu (a64, ui32, ui32); 31819 v2i16 __builtin_mips_mul_ph (v2i16, v2i16); 31820 v2i16 __builtin_mips_mul_s_ph (v2i16, v2i16); 31821 q31 __builtin_mips_mulq_rs_w (q31, q31); 31822 v2q15 __builtin_mips_mulq_s_ph (v2q15, v2q15); 31823 q31 __builtin_mips_mulq_s_w (q31, q31); 31824 a64 __builtin_mips_mulsa_w_ph (a64, v2i16, v2i16); 31825 a64 __builtin_mips_mult (i32, i32); 31826 a64 __builtin_mips_multu (ui32, ui32); 31827 v4i8 __builtin_mips_precr_qb_ph (v2i16, v2i16); 31828 v2i16 __builtin_mips_precr_sra_ph_w (i32, i32, imm0_31); 31829 v2i16 __builtin_mips_precr_sra_r_ph_w (i32, i32, imm0_31); 31830 i32 __builtin_mips_prepend (i32, i32, imm0_31); 31831 v4i8 __builtin_mips_shra_qb (v4i8, imm0_7); 31832 v4i8 __builtin_mips_shra_r_qb (v4i8, imm0_7); 31833 v4i8 __builtin_mips_shra_qb (v4i8, i32); 31834 v4i8 __builtin_mips_shra_r_qb (v4i8, i32); 31835 v2i16 __builtin_mips_shrl_ph (v2i16, imm0_15); 31836 v2i16 __builtin_mips_shrl_ph (v2i16, i32); 31837 v2i16 __builtin_mips_subu_ph (v2i16, v2i16); 31838 v2i16 __builtin_mips_subu_s_ph (v2i16, v2i16); 31839 v4i8 __builtin_mips_subuh_qb (v4i8, v4i8); 31840 v4i8 __builtin_mips_subuh_r_qb (v4i8, v4i8); 31841 v2q15 __builtin_mips_addqh_ph (v2q15, v2q15); 31842 v2q15 __builtin_mips_addqh_r_ph (v2q15, v2q15); 31843 q31 __builtin_mips_addqh_w (q31, q31); 31844 q31 __builtin_mips_addqh_r_w (q31, q31); 31845 v2q15 __builtin_mips_subqh_ph (v2q15, v2q15); 31846 v2q15 __builtin_mips_subqh_r_ph (v2q15, v2q15); 31847 q31 __builtin_mips_subqh_w (q31, q31); 31848 q31 __builtin_mips_subqh_r_w (q31, q31); 31849 a64 __builtin_mips_dpax_w_ph (a64, v2i16, v2i16); 31850 a64 __builtin_mips_dpsx_w_ph (a64, v2i16, v2i16); 31851 a64 __builtin_mips_dpaqx_s_w_ph (a64, v2q15, v2q15); 31852 a64 __builtin_mips_dpaqx_sa_w_ph (a64, v2q15, v2q15); 31853 a64 __builtin_mips_dpsqx_s_w_ph (a64, v2q15, v2q15); 31854 a64 __builtin_mips_dpsqx_sa_w_ph (a64, v2q15, v2q15); 31855 31856 31857 File: gcc.info, Node: MIPS Paired-Single Support, Next: MIPS Loongson Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins 31858 31859 5.50.8 MIPS Paired-Single Support 31860 --------------------------------- 31861 31862 The MIPS64 architecture includes a number of instructions that operate 31863 on pairs of single-precision floating-point values. Each pair is 31864 packed into a 64-bit floating-point register, with one element being 31865 designated the "upper half" and the other being designated the "lower 31866 half". 31867 31868 GCC supports paired-single operations using both the generic vector 31869 extensions (*note Vector Extensions::) and a collection of 31870 MIPS-specific built-in functions. Both kinds of support are enabled by 31871 the `-mpaired-single' command-line option. 31872 31873 The vector type associated with paired-single values is usually called 31874 `v2sf'. It can be defined in C as follows: 31875 31876 typedef float v2sf __attribute__ ((vector_size (8))); 31877 31878 `v2sf' values are initialized in the same way as aggregates. For 31879 example: 31880 31881 v2sf a = {1.5, 9.1}; 31882 v2sf b; 31883 float e, f; 31884 b = (v2sf) {e, f}; 31885 31886 _Note:_ The CPU's endianness determines which value is stored in the 31887 upper half of a register and which value is stored in the lower half. 31888 On little-endian targets, the first value is the lower one and the 31889 second value is the upper one. The opposite order applies to 31890 big-endian targets. For example, the code above will set the lower 31891 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian 31892 targets. 31893 31894 31895 File: gcc.info, Node: MIPS Loongson Built-in Functions, Next: Other MIPS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins 31896 31897 5.50.9 MIPS Loongson Built-in Functions 31898 --------------------------------------- 31899 31900 GCC provides intrinsics to access the SIMD instructions provided by the 31901 ST Microelectronics Loongson-2E and -2F processors. These intrinsics, 31902 available after inclusion of the `loongson.h' header file, operate on 31903 the following 64-bit vector types: 31904 31905 * `uint8x8_t', a vector of eight unsigned 8-bit integers; 31906 31907 * `uint16x4_t', a vector of four unsigned 16-bit integers; 31908 31909 * `uint32x2_t', a vector of two unsigned 32-bit integers; 31910 31911 * `int8x8_t', a vector of eight signed 8-bit integers; 31912 31913 * `int16x4_t', a vector of four signed 16-bit integers; 31914 31915 * `int32x2_t', a vector of two signed 32-bit integers. 31916 31917 The intrinsics provided are listed below; each is named after the 31918 machine instruction to which it corresponds, with suffixes added as 31919 appropriate to distinguish intrinsics that expand to the same machine 31920 instruction yet have different argument types. Refer to the 31921 architecture documentation for a description of the functionality of 31922 each instruction. 31923 31924 int16x4_t packsswh (int32x2_t s, int32x2_t t); 31925 int8x8_t packsshb (int16x4_t s, int16x4_t t); 31926 uint8x8_t packushb (uint16x4_t s, uint16x4_t t); 31927 uint32x2_t paddw_u (uint32x2_t s, uint32x2_t t); 31928 uint16x4_t paddh_u (uint16x4_t s, uint16x4_t t); 31929 uint8x8_t paddb_u (uint8x8_t s, uint8x8_t t); 31930 int32x2_t paddw_s (int32x2_t s, int32x2_t t); 31931 int16x4_t paddh_s (int16x4_t s, int16x4_t t); 31932 int8x8_t paddb_s (int8x8_t s, int8x8_t t); 31933 uint64_t paddd_u (uint64_t s, uint64_t t); 31934 int64_t paddd_s (int64_t s, int64_t t); 31935 int16x4_t paddsh (int16x4_t s, int16x4_t t); 31936 int8x8_t paddsb (int8x8_t s, int8x8_t t); 31937 uint16x4_t paddush (uint16x4_t s, uint16x4_t t); 31938 uint8x8_t paddusb (uint8x8_t s, uint8x8_t t); 31939 uint64_t pandn_ud (uint64_t s, uint64_t t); 31940 uint32x2_t pandn_uw (uint32x2_t s, uint32x2_t t); 31941 uint16x4_t pandn_uh (uint16x4_t s, uint16x4_t t); 31942 uint8x8_t pandn_ub (uint8x8_t s, uint8x8_t t); 31943 int64_t pandn_sd (int64_t s, int64_t t); 31944 int32x2_t pandn_sw (int32x2_t s, int32x2_t t); 31945 int16x4_t pandn_sh (int16x4_t s, int16x4_t t); 31946 int8x8_t pandn_sb (int8x8_t s, int8x8_t t); 31947 uint16x4_t pavgh (uint16x4_t s, uint16x4_t t); 31948 uint8x8_t pavgb (uint8x8_t s, uint8x8_t t); 31949 uint32x2_t pcmpeqw_u (uint32x2_t s, uint32x2_t t); 31950 uint16x4_t pcmpeqh_u (uint16x4_t s, uint16x4_t t); 31951 uint8x8_t pcmpeqb_u (uint8x8_t s, uint8x8_t t); 31952 int32x2_t pcmpeqw_s (int32x2_t s, int32x2_t t); 31953 int16x4_t pcmpeqh_s (int16x4_t s, int16x4_t t); 31954 int8x8_t pcmpeqb_s (int8x8_t s, int8x8_t t); 31955 uint32x2_t pcmpgtw_u (uint32x2_t s, uint32x2_t t); 31956 uint16x4_t pcmpgth_u (uint16x4_t s, uint16x4_t t); 31957 uint8x8_t pcmpgtb_u (uint8x8_t s, uint8x8_t t); 31958 int32x2_t pcmpgtw_s (int32x2_t s, int32x2_t t); 31959 int16x4_t pcmpgth_s (int16x4_t s, int16x4_t t); 31960 int8x8_t pcmpgtb_s (int8x8_t s, int8x8_t t); 31961 uint16x4_t pextrh_u (uint16x4_t s, int field); 31962 int16x4_t pextrh_s (int16x4_t s, int field); 31963 uint16x4_t pinsrh_0_u (uint16x4_t s, uint16x4_t t); 31964 uint16x4_t pinsrh_1_u (uint16x4_t s, uint16x4_t t); 31965 uint16x4_t pinsrh_2_u (uint16x4_t s, uint16x4_t t); 31966 uint16x4_t pinsrh_3_u (uint16x4_t s, uint16x4_t t); 31967 int16x4_t pinsrh_0_s (int16x4_t s, int16x4_t t); 31968 int16x4_t pinsrh_1_s (int16x4_t s, int16x4_t t); 31969 int16x4_t pinsrh_2_s (int16x4_t s, int16x4_t t); 31970 int16x4_t pinsrh_3_s (int16x4_t s, int16x4_t t); 31971 int32x2_t pmaddhw (int16x4_t s, int16x4_t t); 31972 int16x4_t pmaxsh (int16x4_t s, int16x4_t t); 31973 uint8x8_t pmaxub (uint8x8_t s, uint8x8_t t); 31974 int16x4_t pminsh (int16x4_t s, int16x4_t t); 31975 uint8x8_t pminub (uint8x8_t s, uint8x8_t t); 31976 uint8x8_t pmovmskb_u (uint8x8_t s); 31977 int8x8_t pmovmskb_s (int8x8_t s); 31978 uint16x4_t pmulhuh (uint16x4_t s, uint16x4_t t); 31979 int16x4_t pmulhh (int16x4_t s, int16x4_t t); 31980 int16x4_t pmullh (int16x4_t s, int16x4_t t); 31981 int64_t pmuluw (uint32x2_t s, uint32x2_t t); 31982 uint8x8_t pasubub (uint8x8_t s, uint8x8_t t); 31983 uint16x4_t biadd (uint8x8_t s); 31984 uint16x4_t psadbh (uint8x8_t s, uint8x8_t t); 31985 uint16x4_t pshufh_u (uint16x4_t dest, uint16x4_t s, uint8_t order); 31986 int16x4_t pshufh_s (int16x4_t dest, int16x4_t s, uint8_t order); 31987 uint16x4_t psllh_u (uint16x4_t s, uint8_t amount); 31988 int16x4_t psllh_s (int16x4_t s, uint8_t amount); 31989 uint32x2_t psllw_u (uint32x2_t s, uint8_t amount); 31990 int32x2_t psllw_s (int32x2_t s, uint8_t amount); 31991 uint16x4_t psrlh_u (uint16x4_t s, uint8_t amount); 31992 int16x4_t psrlh_s (int16x4_t s, uint8_t amount); 31993 uint32x2_t psrlw_u (uint32x2_t s, uint8_t amount); 31994 int32x2_t psrlw_s (int32x2_t s, uint8_t amount); 31995 uint16x4_t psrah_u (uint16x4_t s, uint8_t amount); 31996 int16x4_t psrah_s (int16x4_t s, uint8_t amount); 31997 uint32x2_t psraw_u (uint32x2_t s, uint8_t amount); 31998 int32x2_t psraw_s (int32x2_t s, uint8_t amount); 31999 uint32x2_t psubw_u (uint32x2_t s, uint32x2_t t); 32000 uint16x4_t psubh_u (uint16x4_t s, uint16x4_t t); 32001 uint8x8_t psubb_u (uint8x8_t s, uint8x8_t t); 32002 int32x2_t psubw_s (int32x2_t s, int32x2_t t); 32003 int16x4_t psubh_s (int16x4_t s, int16x4_t t); 32004 int8x8_t psubb_s (int8x8_t s, int8x8_t t); 32005 uint64_t psubd_u (uint64_t s, uint64_t t); 32006 int64_t psubd_s (int64_t s, int64_t t); 32007 int16x4_t psubsh (int16x4_t s, int16x4_t t); 32008 int8x8_t psubsb (int8x8_t s, int8x8_t t); 32009 uint16x4_t psubush (uint16x4_t s, uint16x4_t t); 32010 uint8x8_t psubusb (uint8x8_t s, uint8x8_t t); 32011 uint32x2_t punpckhwd_u (uint32x2_t s, uint32x2_t t); 32012 uint16x4_t punpckhhw_u (uint16x4_t s, uint16x4_t t); 32013 uint8x8_t punpckhbh_u (uint8x8_t s, uint8x8_t t); 32014 int32x2_t punpckhwd_s (int32x2_t s, int32x2_t t); 32015 int16x4_t punpckhhw_s (int16x4_t s, int16x4_t t); 32016 int8x8_t punpckhbh_s (int8x8_t s, int8x8_t t); 32017 uint32x2_t punpcklwd_u (uint32x2_t s, uint32x2_t t); 32018 uint16x4_t punpcklhw_u (uint16x4_t s, uint16x4_t t); 32019 uint8x8_t punpcklbh_u (uint8x8_t s, uint8x8_t t); 32020 int32x2_t punpcklwd_s (int32x2_t s, int32x2_t t); 32021 int16x4_t punpcklhw_s (int16x4_t s, int16x4_t t); 32022 int8x8_t punpcklbh_s (int8x8_t s, int8x8_t t); 32023 32024 * Menu: 32025 32026 * Paired-Single Arithmetic:: 32027 * Paired-Single Built-in Functions:: 32028 * MIPS-3D Built-in Functions:: 32029 32030 32031 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 32032 32033 5.50.9.1 Paired-Single Arithmetic 32034 ................................. 32035 32036 The table below lists the `v2sf' operations for which hardware support 32037 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral 32038 value. 32039 32040 C code MIPS instruction 32041 `a + b' `add.ps' 32042 `a - b' `sub.ps' 32043 `-a' `neg.ps' 32044 `a * b' `mul.ps' 32045 `a * b + c' `madd.ps' 32046 `a * b - c' `msub.ps' 32047 `-(a * b + c)' `nmadd.ps' 32048 `-(a * b - c)' `nmsub.ps' 32049 `x ? a : b' `movn.ps'/`movz.ps' 32050 32051 Note that the multiply-accumulate instructions can be disabled using 32052 the command-line option `-mno-fused-madd'. 32053 32054 32055 File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Loongson Built-in Functions 32056 32057 5.50.9.2 Paired-Single Built-in Functions 32058 ......................................... 32059 32060 The following paired-single functions map directly to a particular MIPS 32061 instruction. Please refer to the architecture specification for 32062 details on what each instruction does. 32063 32064 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)' 32065 Pair lower lower (`pll.ps'). 32066 32067 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)' 32068 Pair upper lower (`pul.ps'). 32069 32070 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)' 32071 Pair lower upper (`plu.ps'). 32072 32073 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)' 32074 Pair upper upper (`puu.ps'). 32075 32076 `v2sf __builtin_mips_cvt_ps_s (float, float)' 32077 Convert pair to paired single (`cvt.ps.s'). 32078 32079 `float __builtin_mips_cvt_s_pl (v2sf)' 32080 Convert pair lower to single (`cvt.s.pl'). 32081 32082 `float __builtin_mips_cvt_s_pu (v2sf)' 32083 Convert pair upper to single (`cvt.s.pu'). 32084 32085 `v2sf __builtin_mips_abs_ps (v2sf)' 32086 Absolute value (`abs.ps'). 32087 32088 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)' 32089 Align variable (`alnv.ps'). 32090 32091 _Note:_ The value of the third parameter must be 0 or 4 modulo 8, 32092 otherwise the result will be unpredictable. Please read the 32093 instruction description for details. 32094 32095 The following multi-instruction functions are also available. In each 32096 case, COND can be any of the 16 floating-point conditions: `f', `un', 32097 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 32098 `lt', `nge', `le' or `ngt'. 32099 32100 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 32101 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 32102 Conditional move based on floating point comparison (`c.COND.ps', 32103 `movt.ps'/`movf.ps'). 32104 32105 The `movt' functions return the value X computed by: 32106 32107 c.COND.ps CC,A,B 32108 mov.ps X,C 32109 movt.ps X,D,CC 32110 32111 The `movf' functions are similar but use `movf.ps' instead of 32112 `movt.ps'. 32113 32114 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)' 32115 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)' 32116 Comparison of two paired-single values (`c.COND.ps', 32117 `bc1t'/`bc1f'). 32118 32119 These functions compare A and B using `c.COND.ps' and return 32120 either the upper or lower half of the result. For example: 32121 32122 v2sf a, b; 32123 if (__builtin_mips_upper_c_eq_ps (a, b)) 32124 upper_halves_are_equal (); 32125 else 32126 upper_halves_are_unequal (); 32127 32128 if (__builtin_mips_lower_c_eq_ps (a, b)) 32129 lower_halves_are_equal (); 32130 else 32131 lower_halves_are_unequal (); 32132 32133 32134 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Loongson Built-in Functions 32135 32136 5.50.9.3 MIPS-3D Built-in Functions 32137 ................................... 32138 32139 The MIPS-3D Application-Specific Extension (ASE) includes additional 32140 paired-single instructions that are designed to improve the performance 32141 of 3D graphics operations. Support for these instructions is controlled 32142 by the `-mips3d' command-line option. 32143 32144 The functions listed below map directly to a particular MIPS-3D 32145 instruction. Please refer to the architecture specification for more 32146 details on what each instruction does. 32147 32148 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)' 32149 Reduction add (`addr.ps'). 32150 32151 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)' 32152 Reduction multiply (`mulr.ps'). 32153 32154 `v2sf __builtin_mips_cvt_pw_ps (v2sf)' 32155 Convert paired single to paired word (`cvt.pw.ps'). 32156 32157 `v2sf __builtin_mips_cvt_ps_pw (v2sf)' 32158 Convert paired word to paired single (`cvt.ps.pw'). 32159 32160 `float __builtin_mips_recip1_s (float)' 32161 `double __builtin_mips_recip1_d (double)' 32162 `v2sf __builtin_mips_recip1_ps (v2sf)' 32163 Reduced precision reciprocal (sequence step 1) (`recip1.FMT'). 32164 32165 `float __builtin_mips_recip2_s (float, float)' 32166 `double __builtin_mips_recip2_d (double, double)' 32167 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)' 32168 Reduced precision reciprocal (sequence step 2) (`recip2.FMT'). 32169 32170 `float __builtin_mips_rsqrt1_s (float)' 32171 `double __builtin_mips_rsqrt1_d (double)' 32172 `v2sf __builtin_mips_rsqrt1_ps (v2sf)' 32173 Reduced precision reciprocal square root (sequence step 1) 32174 (`rsqrt1.FMT'). 32175 32176 `float __builtin_mips_rsqrt2_s (float, float)' 32177 `double __builtin_mips_rsqrt2_d (double, double)' 32178 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)' 32179 Reduced precision reciprocal square root (sequence step 2) 32180 (`rsqrt2.FMT'). 32181 32182 The following multi-instruction functions are also available. In each 32183 case, COND can be any of the 16 floating-point conditions: `f', `un', 32184 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl', 32185 `lt', `nge', `le' or `ngt'. 32186 32187 `int __builtin_mips_cabs_COND_s (float A, float B)' 32188 `int __builtin_mips_cabs_COND_d (double A, double B)' 32189 Absolute comparison of two scalar values (`cabs.COND.FMT', 32190 `bc1t'/`bc1f'). 32191 32192 These functions compare A and B using `cabs.COND.s' or 32193 `cabs.COND.d' and return the result as a boolean value. For 32194 example: 32195 32196 float a, b; 32197 if (__builtin_mips_cabs_eq_s (a, b)) 32198 true (); 32199 else 32200 false (); 32201 32202 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)' 32203 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)' 32204 Absolute comparison of two paired-single values (`cabs.COND.ps', 32205 `bc1t'/`bc1f'). 32206 32207 These functions compare A and B using `cabs.COND.ps' and return 32208 either the upper or lower half of the result. For example: 32209 32210 v2sf a, b; 32211 if (__builtin_mips_upper_cabs_eq_ps (a, b)) 32212 upper_halves_are_equal (); 32213 else 32214 upper_halves_are_unequal (); 32215 32216 if (__builtin_mips_lower_cabs_eq_ps (a, b)) 32217 lower_halves_are_equal (); 32218 else 32219 lower_halves_are_unequal (); 32220 32221 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 32222 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)' 32223 Conditional move based on absolute comparison (`cabs.COND.ps', 32224 `movt.ps'/`movf.ps'). 32225 32226 The `movt' functions return the value X computed by: 32227 32228 cabs.COND.ps CC,A,B 32229 mov.ps X,C 32230 movt.ps X,D,CC 32231 32232 The `movf' functions are similar but use `movf.ps' instead of 32233 `movt.ps'. 32234 32235 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)' 32236 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)' 32237 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)' 32238 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)' 32239 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps', 32240 `bc1any2t'/`bc1any2f'). 32241 32242 These functions compare A and B using `c.COND.ps' or 32243 `cabs.COND.ps'. The `any' forms return true if either result is 32244 true and the `all' forms return true if both results are true. 32245 For example: 32246 32247 v2sf a, b; 32248 if (__builtin_mips_any_c_eq_ps (a, b)) 32249 one_is_true (); 32250 else 32251 both_are_false (); 32252 32253 if (__builtin_mips_all_c_eq_ps (a, b)) 32254 both_are_true (); 32255 else 32256 one_is_false (); 32257 32258 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 32259 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 32260 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 32261 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)' 32262 Comparison of four paired-single values 32263 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f'). 32264 32265 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A 32266 with B and to compare C with D. The `any' forms return true if 32267 any of the four results are true and the `all' forms return true 32268 if all four results are true. For example: 32269 32270 v2sf a, b, c, d; 32271 if (__builtin_mips_any_c_eq_4s (a, b, c, d)) 32272 some_are_true (); 32273 else 32274 all_are_false (); 32275 32276 if (__builtin_mips_all_c_eq_4s (a, b, c, d)) 32277 all_are_true (); 32278 else 32279 some_are_false (); 32280 32281 32282 File: gcc.info, Node: picoChip Built-in Functions, Next: PowerPC AltiVec Built-in Functions, Prev: Other MIPS Built-in Functions, Up: Target Builtins 32283 32284 5.50.10 picoChip Built-in Functions 32285 ----------------------------------- 32286 32287 GCC provides an interface to selected machine instructions from the 32288 picoChip instruction set. 32289 32290 `int __builtin_sbc (int VALUE)' 32291 Sign bit count. Return the number of consecutive bits in VALUE 32292 which have the same value as the sign-bit. The result is the 32293 number of leading sign bits minus one, giving the number of 32294 redundant sign bits in VALUE. 32295 32296 `int __builtin_byteswap (int VALUE)' 32297 Byte swap. Return the result of swapping the upper and lower 32298 bytes of VALUE. 32299 32300 `int __builtin_brev (int VALUE)' 32301 Bit reversal. Return the result of reversing the bits in VALUE. 32302 Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1, and so 32303 on. 32304 32305 `int __builtin_adds (int X, int Y)' 32306 Saturating addition. Return the result of adding X and Y, storing 32307 the value 32767 if the result overflows. 32308 32309 `int __builtin_subs (int X, int Y)' 32310 Saturating subtraction. Return the result of subtracting Y from 32311 X, storing the value -32768 if the result overflows. 32312 32313 `void __builtin_halt (void)' 32314 Halt. The processor will stop execution. This built-in is useful 32315 for implementing assertions. 32316 32317 32318 32319 File: gcc.info, Node: Other MIPS Built-in Functions, Next: picoChip Built-in Functions, Prev: MIPS Loongson Built-in Functions, Up: Target Builtins 32320 32321 5.50.11 Other MIPS Built-in Functions 32322 ------------------------------------- 32323 32324 GCC provides other MIPS-specific built-in functions: 32325 32326 `void __builtin_mips_cache (int OP, const volatile void *ADDR)' 32327 Insert a `cache' instruction with operands OP and ADDR. GCC 32328 defines the preprocessor macro `___GCC_HAVE_BUILTIN_MIPS_CACHE' 32329 when this function is available. 32330 32331 32332 File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: picoChip Built-in Functions, Up: Target Builtins 32333 32334 5.50.12 PowerPC AltiVec Built-in Functions 32335 ------------------------------------------ 32336 32337 GCC provides an interface for the PowerPC family of processors to access 32338 the AltiVec operations described in Motorola's AltiVec Programming 32339 Interface Manual. The interface is made available by including 32340 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface 32341 supports the following vector types. 32342 32343 vector unsigned char 32344 vector signed char 32345 vector bool char 32346 32347 vector unsigned short 32348 vector signed short 32349 vector bool short 32350 vector pixel 32351 32352 vector unsigned int 32353 vector signed int 32354 vector bool int 32355 vector float 32356 32357 GCC's implementation of the high-level language interface available 32358 from C and C++ code differs from Motorola's documentation in several 32359 ways. 32360 32361 * A vector constant is a list of constant expressions within curly 32362 braces. 32363 32364 * A vector initializer requires no cast if the vector constant is of 32365 the same type as the variable it is initializing. 32366 32367 * If `signed' or `unsigned' is omitted, the signedness of the vector 32368 type is the default signedness of the base type. The default 32369 varies depending on the operating system, so a portable program 32370 should always specify the signedness. 32371 32372 * Compiling with `-maltivec' adds keywords `__vector', `vector', 32373 `__pixel', `pixel', `__bool' and `bool'. When compiling ISO C, 32374 the context-sensitive substitution of the keywords `vector', 32375 `pixel' and `bool' is disabled. To use them, you must include 32376 `<altivec.h>' instead. 32377 32378 * GCC allows using a `typedef' name as the type specifier for a 32379 vector type. 32380 32381 * For C, overloaded functions are implemented with macros so the 32382 following does not work: 32383 32384 vec_add ((vector signed int){1, 2, 3, 4}, foo); 32385 32386 Since `vec_add' is a macro, the vector constant in the example is 32387 treated as four separate arguments. Wrap the entire argument in 32388 parentheses for this to work. 32389 32390 _Note:_ Only the `<altivec.h>' interface is supported. Internally, 32391 GCC uses built-in functions to achieve the functionality in the 32392 aforementioned header file, but they are not supported and are subject 32393 to change without notice. 32394 32395 The following interfaces are supported for the generic and specific 32396 AltiVec operations and the AltiVec predicates. In cases where there is 32397 a direct mapping between generic and specific operations, only the 32398 generic names are shown here, although the specific operations can also 32399 be used. 32400 32401 Arguments that are documented as `const int' require literal integral 32402 values within the range required for that operation. 32403 32404 vector signed char vec_abs (vector signed char); 32405 vector signed short vec_abs (vector signed short); 32406 vector signed int vec_abs (vector signed int); 32407 vector float vec_abs (vector float); 32408 32409 vector signed char vec_abss (vector signed char); 32410 vector signed short vec_abss (vector signed short); 32411 vector signed int vec_abss (vector signed int); 32412 32413 vector signed char vec_add (vector bool char, vector signed char); 32414 vector signed char vec_add (vector signed char, vector bool char); 32415 vector signed char vec_add (vector signed char, vector signed char); 32416 vector unsigned char vec_add (vector bool char, vector unsigned char); 32417 vector unsigned char vec_add (vector unsigned char, vector bool char); 32418 vector unsigned char vec_add (vector unsigned char, 32419 vector unsigned char); 32420 vector signed short vec_add (vector bool short, vector signed short); 32421 vector signed short vec_add (vector signed short, vector bool short); 32422 vector signed short vec_add (vector signed short, vector signed short); 32423 vector unsigned short vec_add (vector bool short, 32424 vector unsigned short); 32425 vector unsigned short vec_add (vector unsigned short, 32426 vector bool short); 32427 vector unsigned short vec_add (vector unsigned short, 32428 vector unsigned short); 32429 vector signed int vec_add (vector bool int, vector signed int); 32430 vector signed int vec_add (vector signed int, vector bool int); 32431 vector signed int vec_add (vector signed int, vector signed int); 32432 vector unsigned int vec_add (vector bool int, vector unsigned int); 32433 vector unsigned int vec_add (vector unsigned int, vector bool int); 32434 vector unsigned int vec_add (vector unsigned int, vector unsigned int); 32435 vector float vec_add (vector float, vector float); 32436 32437 vector float vec_vaddfp (vector float, vector float); 32438 32439 vector signed int vec_vadduwm (vector bool int, vector signed int); 32440 vector signed int vec_vadduwm (vector signed int, vector bool int); 32441 vector signed int vec_vadduwm (vector signed int, vector signed int); 32442 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int); 32443 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int); 32444 vector unsigned int vec_vadduwm (vector unsigned int, 32445 vector unsigned int); 32446 32447 vector signed short vec_vadduhm (vector bool short, 32448 vector signed short); 32449 vector signed short vec_vadduhm (vector signed short, 32450 vector bool short); 32451 vector signed short vec_vadduhm (vector signed short, 32452 vector signed short); 32453 vector unsigned short vec_vadduhm (vector bool short, 32454 vector unsigned short); 32455 vector unsigned short vec_vadduhm (vector unsigned short, 32456 vector bool short); 32457 vector unsigned short vec_vadduhm (vector unsigned short, 32458 vector unsigned short); 32459 32460 vector signed char vec_vaddubm (vector bool char, vector signed char); 32461 vector signed char vec_vaddubm (vector signed char, vector bool char); 32462 vector signed char vec_vaddubm (vector signed char, vector signed char); 32463 vector unsigned char vec_vaddubm (vector bool char, 32464 vector unsigned char); 32465 vector unsigned char vec_vaddubm (vector unsigned char, 32466 vector bool char); 32467 vector unsigned char vec_vaddubm (vector unsigned char, 32468 vector unsigned char); 32469 32470 vector unsigned int vec_addc (vector unsigned int, vector unsigned int); 32471 32472 vector unsigned char vec_adds (vector bool char, vector unsigned char); 32473 vector unsigned char vec_adds (vector unsigned char, vector bool char); 32474 vector unsigned char vec_adds (vector unsigned char, 32475 vector unsigned char); 32476 vector signed char vec_adds (vector bool char, vector signed char); 32477 vector signed char vec_adds (vector signed char, vector bool char); 32478 vector signed char vec_adds (vector signed char, vector signed char); 32479 vector unsigned short vec_adds (vector bool short, 32480 vector unsigned short); 32481 vector unsigned short vec_adds (vector unsigned short, 32482 vector bool short); 32483 vector unsigned short vec_adds (vector unsigned short, 32484 vector unsigned short); 32485 vector signed short vec_adds (vector bool short, vector signed short); 32486 vector signed short vec_adds (vector signed short, vector bool short); 32487 vector signed short vec_adds (vector signed short, vector signed short); 32488 vector unsigned int vec_adds (vector bool int, vector unsigned int); 32489 vector unsigned int vec_adds (vector unsigned int, vector bool int); 32490 vector unsigned int vec_adds (vector unsigned int, vector unsigned int); 32491 vector signed int vec_adds (vector bool int, vector signed int); 32492 vector signed int vec_adds (vector signed int, vector bool int); 32493 vector signed int vec_adds (vector signed int, vector signed int); 32494 32495 vector signed int vec_vaddsws (vector bool int, vector signed int); 32496 vector signed int vec_vaddsws (vector signed int, vector bool int); 32497 vector signed int vec_vaddsws (vector signed int, vector signed int); 32498 32499 vector unsigned int vec_vadduws (vector bool int, vector unsigned int); 32500 vector unsigned int vec_vadduws (vector unsigned int, vector bool int); 32501 vector unsigned int vec_vadduws (vector unsigned int, 32502 vector unsigned int); 32503 32504 vector signed short vec_vaddshs (vector bool short, 32505 vector signed short); 32506 vector signed short vec_vaddshs (vector signed short, 32507 vector bool short); 32508 vector signed short vec_vaddshs (vector signed short, 32509 vector signed short); 32510 32511 vector unsigned short vec_vadduhs (vector bool short, 32512 vector unsigned short); 32513 vector unsigned short vec_vadduhs (vector unsigned short, 32514 vector bool short); 32515 vector unsigned short vec_vadduhs (vector unsigned short, 32516 vector unsigned short); 32517 32518 vector signed char vec_vaddsbs (vector bool char, vector signed char); 32519 vector signed char vec_vaddsbs (vector signed char, vector bool char); 32520 vector signed char vec_vaddsbs (vector signed char, vector signed char); 32521 32522 vector unsigned char vec_vaddubs (vector bool char, 32523 vector unsigned char); 32524 vector unsigned char vec_vaddubs (vector unsigned char, 32525 vector bool char); 32526 vector unsigned char vec_vaddubs (vector unsigned char, 32527 vector unsigned char); 32528 32529 vector float vec_and (vector float, vector float); 32530 vector float vec_and (vector float, vector bool int); 32531 vector float vec_and (vector bool int, vector float); 32532 vector bool int vec_and (vector bool int, vector bool int); 32533 vector signed int vec_and (vector bool int, vector signed int); 32534 vector signed int vec_and (vector signed int, vector bool int); 32535 vector signed int vec_and (vector signed int, vector signed int); 32536 vector unsigned int vec_and (vector bool int, vector unsigned int); 32537 vector unsigned int vec_and (vector unsigned int, vector bool int); 32538 vector unsigned int vec_and (vector unsigned int, vector unsigned int); 32539 vector bool short vec_and (vector bool short, vector bool short); 32540 vector signed short vec_and (vector bool short, vector signed short); 32541 vector signed short vec_and (vector signed short, vector bool short); 32542 vector signed short vec_and (vector signed short, vector signed short); 32543 vector unsigned short vec_and (vector bool short, 32544 vector unsigned short); 32545 vector unsigned short vec_and (vector unsigned short, 32546 vector bool short); 32547 vector unsigned short vec_and (vector unsigned short, 32548 vector unsigned short); 32549 vector signed char vec_and (vector bool char, vector signed char); 32550 vector bool char vec_and (vector bool char, vector bool char); 32551 vector signed char vec_and (vector signed char, vector bool char); 32552 vector signed char vec_and (vector signed char, vector signed char); 32553 vector unsigned char vec_and (vector bool char, vector unsigned char); 32554 vector unsigned char vec_and (vector unsigned char, vector bool char); 32555 vector unsigned char vec_and (vector unsigned char, 32556 vector unsigned char); 32557 32558 vector float vec_andc (vector float, vector float); 32559 vector float vec_andc (vector float, vector bool int); 32560 vector float vec_andc (vector bool int, vector float); 32561 vector bool int vec_andc (vector bool int, vector bool int); 32562 vector signed int vec_andc (vector bool int, vector signed int); 32563 vector signed int vec_andc (vector signed int, vector bool int); 32564 vector signed int vec_andc (vector signed int, vector signed int); 32565 vector unsigned int vec_andc (vector bool int, vector unsigned int); 32566 vector unsigned int vec_andc (vector unsigned int, vector bool int); 32567 vector unsigned int vec_andc (vector unsigned int, vector unsigned int); 32568 vector bool short vec_andc (vector bool short, vector bool short); 32569 vector signed short vec_andc (vector bool short, vector signed short); 32570 vector signed short vec_andc (vector signed short, vector bool short); 32571 vector signed short vec_andc (vector signed short, vector signed short); 32572 vector unsigned short vec_andc (vector bool short, 32573 vector unsigned short); 32574 vector unsigned short vec_andc (vector unsigned short, 32575 vector bool short); 32576 vector unsigned short vec_andc (vector unsigned short, 32577 vector unsigned short); 32578 vector signed char vec_andc (vector bool char, vector signed char); 32579 vector bool char vec_andc (vector bool char, vector bool char); 32580 vector signed char vec_andc (vector signed char, vector bool char); 32581 vector signed char vec_andc (vector signed char, vector signed char); 32582 vector unsigned char vec_andc (vector bool char, vector unsigned char); 32583 vector unsigned char vec_andc (vector unsigned char, vector bool char); 32584 vector unsigned char vec_andc (vector unsigned char, 32585 vector unsigned char); 32586 32587 vector unsigned char vec_avg (vector unsigned char, 32588 vector unsigned char); 32589 vector signed char vec_avg (vector signed char, vector signed char); 32590 vector unsigned short vec_avg (vector unsigned short, 32591 vector unsigned short); 32592 vector signed short vec_avg (vector signed short, vector signed short); 32593 vector unsigned int vec_avg (vector unsigned int, vector unsigned int); 32594 vector signed int vec_avg (vector signed int, vector signed int); 32595 32596 vector signed int vec_vavgsw (vector signed int, vector signed int); 32597 32598 vector unsigned int vec_vavguw (vector unsigned int, 32599 vector unsigned int); 32600 32601 vector signed short vec_vavgsh (vector signed short, 32602 vector signed short); 32603 32604 vector unsigned short vec_vavguh (vector unsigned short, 32605 vector unsigned short); 32606 32607 vector signed char vec_vavgsb (vector signed char, vector signed char); 32608 32609 vector unsigned char vec_vavgub (vector unsigned char, 32610 vector unsigned char); 32611 32612 vector float vec_ceil (vector float); 32613 32614 vector signed int vec_cmpb (vector float, vector float); 32615 32616 vector bool char vec_cmpeq (vector signed char, vector signed char); 32617 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char); 32618 vector bool short vec_cmpeq (vector signed short, vector signed short); 32619 vector bool short vec_cmpeq (vector unsigned short, 32620 vector unsigned short); 32621 vector bool int vec_cmpeq (vector signed int, vector signed int); 32622 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int); 32623 vector bool int vec_cmpeq (vector float, vector float); 32624 32625 vector bool int vec_vcmpeqfp (vector float, vector float); 32626 32627 vector bool int vec_vcmpequw (vector signed int, vector signed int); 32628 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int); 32629 32630 vector bool short vec_vcmpequh (vector signed short, 32631 vector signed short); 32632 vector bool short vec_vcmpequh (vector unsigned short, 32633 vector unsigned short); 32634 32635 vector bool char vec_vcmpequb (vector signed char, vector signed char); 32636 vector bool char vec_vcmpequb (vector unsigned char, 32637 vector unsigned char); 32638 32639 vector bool int vec_cmpge (vector float, vector float); 32640 32641 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char); 32642 vector bool char vec_cmpgt (vector signed char, vector signed char); 32643 vector bool short vec_cmpgt (vector unsigned short, 32644 vector unsigned short); 32645 vector bool short vec_cmpgt (vector signed short, vector signed short); 32646 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int); 32647 vector bool int vec_cmpgt (vector signed int, vector signed int); 32648 vector bool int vec_cmpgt (vector float, vector float); 32649 32650 vector bool int vec_vcmpgtfp (vector float, vector float); 32651 32652 vector bool int vec_vcmpgtsw (vector signed int, vector signed int); 32653 32654 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int); 32655 32656 vector bool short vec_vcmpgtsh (vector signed short, 32657 vector signed short); 32658 32659 vector bool short vec_vcmpgtuh (vector unsigned short, 32660 vector unsigned short); 32661 32662 vector bool char vec_vcmpgtsb (vector signed char, vector signed char); 32663 32664 vector bool char vec_vcmpgtub (vector unsigned char, 32665 vector unsigned char); 32666 32667 vector bool int vec_cmple (vector float, vector float); 32668 32669 vector bool char vec_cmplt (vector unsigned char, vector unsigned char); 32670 vector bool char vec_cmplt (vector signed char, vector signed char); 32671 vector bool short vec_cmplt (vector unsigned short, 32672 vector unsigned short); 32673 vector bool short vec_cmplt (vector signed short, vector signed short); 32674 vector bool int vec_cmplt (vector unsigned int, vector unsigned int); 32675 vector bool int vec_cmplt (vector signed int, vector signed int); 32676 vector bool int vec_cmplt (vector float, vector float); 32677 32678 vector float vec_ctf (vector unsigned int, const int); 32679 vector float vec_ctf (vector signed int, const int); 32680 32681 vector float vec_vcfsx (vector signed int, const int); 32682 32683 vector float vec_vcfux (vector unsigned int, const int); 32684 32685 vector signed int vec_cts (vector float, const int); 32686 32687 vector unsigned int vec_ctu (vector float, const int); 32688 32689 void vec_dss (const int); 32690 32691 void vec_dssall (void); 32692 32693 void vec_dst (const vector unsigned char *, int, const int); 32694 void vec_dst (const vector signed char *, int, const int); 32695 void vec_dst (const vector bool char *, int, const int); 32696 void vec_dst (const vector unsigned short *, int, const int); 32697 void vec_dst (const vector signed short *, int, const int); 32698 void vec_dst (const vector bool short *, int, const int); 32699 void vec_dst (const vector pixel *, int, const int); 32700 void vec_dst (const vector unsigned int *, int, const int); 32701 void vec_dst (const vector signed int *, int, const int); 32702 void vec_dst (const vector bool int *, int, const int); 32703 void vec_dst (const vector float *, int, const int); 32704 void vec_dst (const unsigned char *, int, const int); 32705 void vec_dst (const signed char *, int, const int); 32706 void vec_dst (const unsigned short *, int, const int); 32707 void vec_dst (const short *, int, const int); 32708 void vec_dst (const unsigned int *, int, const int); 32709 void vec_dst (const int *, int, const int); 32710 void vec_dst (const unsigned long *, int, const int); 32711 void vec_dst (const long *, int, const int); 32712 void vec_dst (const float *, int, const int); 32713 32714 void vec_dstst (const vector unsigned char *, int, const int); 32715 void vec_dstst (const vector signed char *, int, const int); 32716 void vec_dstst (const vector bool char *, int, const int); 32717 void vec_dstst (const vector unsigned short *, int, const int); 32718 void vec_dstst (const vector signed short *, int, const int); 32719 void vec_dstst (const vector bool short *, int, const int); 32720 void vec_dstst (const vector pixel *, int, const int); 32721 void vec_dstst (const vector unsigned int *, int, const int); 32722 void vec_dstst (const vector signed int *, int, const int); 32723 void vec_dstst (const vector bool int *, int, const int); 32724 void vec_dstst (const vector float *, int, const int); 32725 void vec_dstst (const unsigned char *, int, const int); 32726 void vec_dstst (const signed char *, int, const int); 32727 void vec_dstst (const unsigned short *, int, const int); 32728 void vec_dstst (const short *, int, const int); 32729 void vec_dstst (const unsigned int *, int, const int); 32730 void vec_dstst (const int *, int, const int); 32731 void vec_dstst (const unsigned long *, int, const int); 32732 void vec_dstst (const long *, int, const int); 32733 void vec_dstst (const float *, int, const int); 32734 32735 void vec_dststt (const vector unsigned char *, int, const int); 32736 void vec_dststt (const vector signed char *, int, const int); 32737 void vec_dststt (const vector bool char *, int, const int); 32738 void vec_dststt (const vector unsigned short *, int, const int); 32739 void vec_dststt (const vector signed short *, int, const int); 32740 void vec_dststt (const vector bool short *, int, const int); 32741 void vec_dststt (const vector pixel *, int, const int); 32742 void vec_dststt (const vector unsigned int *, int, const int); 32743 void vec_dststt (const vector signed int *, int, const int); 32744 void vec_dststt (const vector bool int *, int, const int); 32745 void vec_dststt (const vector float *, int, const int); 32746 void vec_dststt (const unsigned char *, int, const int); 32747 void vec_dststt (const signed char *, int, const int); 32748 void vec_dststt (const unsigned short *, int, const int); 32749 void vec_dststt (const short *, int, const int); 32750 void vec_dststt (const unsigned int *, int, const int); 32751 void vec_dststt (const int *, int, const int); 32752 void vec_dststt (const unsigned long *, int, const int); 32753 void vec_dststt (const long *, int, const int); 32754 void vec_dststt (const float *, int, const int); 32755 32756 void vec_dstt (const vector unsigned char *, int, const int); 32757 void vec_dstt (const vector signed char *, int, const int); 32758 void vec_dstt (const vector bool char *, int, const int); 32759 void vec_dstt (const vector unsigned short *, int, const int); 32760 void vec_dstt (const vector signed short *, int, const int); 32761 void vec_dstt (const vector bool short *, int, const int); 32762 void vec_dstt (const vector pixel *, int, const int); 32763 void vec_dstt (const vector unsigned int *, int, const int); 32764 void vec_dstt (const vector signed int *, int, const int); 32765 void vec_dstt (const vector bool int *, int, const int); 32766 void vec_dstt (const vector float *, int, const int); 32767 void vec_dstt (const unsigned char *, int, const int); 32768 void vec_dstt (const signed char *, int, const int); 32769 void vec_dstt (const unsigned short *, int, const int); 32770 void vec_dstt (const short *, int, const int); 32771 void vec_dstt (const unsigned int *, int, const int); 32772 void vec_dstt (const int *, int, const int); 32773 void vec_dstt (const unsigned long *, int, const int); 32774 void vec_dstt (const long *, int, const int); 32775 void vec_dstt (const float *, int, const int); 32776 32777 vector float vec_expte (vector float); 32778 32779 vector float vec_floor (vector float); 32780 32781 vector float vec_ld (int, const vector float *); 32782 vector float vec_ld (int, const float *); 32783 vector bool int vec_ld (int, const vector bool int *); 32784 vector signed int vec_ld (int, const vector signed int *); 32785 vector signed int vec_ld (int, const int *); 32786 vector signed int vec_ld (int, const long *); 32787 vector unsigned int vec_ld (int, const vector unsigned int *); 32788 vector unsigned int vec_ld (int, const unsigned int *); 32789 vector unsigned int vec_ld (int, const unsigned long *); 32790 vector bool short vec_ld (int, const vector bool short *); 32791 vector pixel vec_ld (int, const vector pixel *); 32792 vector signed short vec_ld (int, const vector signed short *); 32793 vector signed short vec_ld (int, const short *); 32794 vector unsigned short vec_ld (int, const vector unsigned short *); 32795 vector unsigned short vec_ld (int, const unsigned short *); 32796 vector bool char vec_ld (int, const vector bool char *); 32797 vector signed char vec_ld (int, const vector signed char *); 32798 vector signed char vec_ld (int, const signed char *); 32799 vector unsigned char vec_ld (int, const vector unsigned char *); 32800 vector unsigned char vec_ld (int, const unsigned char *); 32801 32802 vector signed char vec_lde (int, const signed char *); 32803 vector unsigned char vec_lde (int, const unsigned char *); 32804 vector signed short vec_lde (int, const short *); 32805 vector unsigned short vec_lde (int, const unsigned short *); 32806 vector float vec_lde (int, const float *); 32807 vector signed int vec_lde (int, const int *); 32808 vector unsigned int vec_lde (int, const unsigned int *); 32809 vector signed int vec_lde (int, const long *); 32810 vector unsigned int vec_lde (int, const unsigned long *); 32811 32812 vector float vec_lvewx (int, float *); 32813 vector signed int vec_lvewx (int, int *); 32814 vector unsigned int vec_lvewx (int, unsigned int *); 32815 vector signed int vec_lvewx (int, long *); 32816 vector unsigned int vec_lvewx (int, unsigned long *); 32817 32818 vector signed short vec_lvehx (int, short *); 32819 vector unsigned short vec_lvehx (int, unsigned short *); 32820 32821 vector signed char vec_lvebx (int, char *); 32822 vector unsigned char vec_lvebx (int, unsigned char *); 32823 32824 vector float vec_ldl (int, const vector float *); 32825 vector float vec_ldl (int, const float *); 32826 vector bool int vec_ldl (int, const vector bool int *); 32827 vector signed int vec_ldl (int, const vector signed int *); 32828 vector signed int vec_ldl (int, const int *); 32829 vector signed int vec_ldl (int, const long *); 32830 vector unsigned int vec_ldl (int, const vector unsigned int *); 32831 vector unsigned int vec_ldl (int, const unsigned int *); 32832 vector unsigned int vec_ldl (int, const unsigned long *); 32833 vector bool short vec_ldl (int, const vector bool short *); 32834 vector pixel vec_ldl (int, const vector pixel *); 32835 vector signed short vec_ldl (int, const vector signed short *); 32836 vector signed short vec_ldl (int, const short *); 32837 vector unsigned short vec_ldl (int, const vector unsigned short *); 32838 vector unsigned short vec_ldl (int, const unsigned short *); 32839 vector bool char vec_ldl (int, const vector bool char *); 32840 vector signed char vec_ldl (int, const vector signed char *); 32841 vector signed char vec_ldl (int, const signed char *); 32842 vector unsigned char vec_ldl (int, const vector unsigned char *); 32843 vector unsigned char vec_ldl (int, const unsigned char *); 32844 32845 vector float vec_loge (vector float); 32846 32847 vector unsigned char vec_lvsl (int, const volatile unsigned char *); 32848 vector unsigned char vec_lvsl (int, const volatile signed char *); 32849 vector unsigned char vec_lvsl (int, const volatile unsigned short *); 32850 vector unsigned char vec_lvsl (int, const volatile short *); 32851 vector unsigned char vec_lvsl (int, const volatile unsigned int *); 32852 vector unsigned char vec_lvsl (int, const volatile int *); 32853 vector unsigned char vec_lvsl (int, const volatile unsigned long *); 32854 vector unsigned char vec_lvsl (int, const volatile long *); 32855 vector unsigned char vec_lvsl (int, const volatile float *); 32856 32857 vector unsigned char vec_lvsr (int, const volatile unsigned char *); 32858 vector unsigned char vec_lvsr (int, const volatile signed char *); 32859 vector unsigned char vec_lvsr (int, const volatile unsigned short *); 32860 vector unsigned char vec_lvsr (int, const volatile short *); 32861 vector unsigned char vec_lvsr (int, const volatile unsigned int *); 32862 vector unsigned char vec_lvsr (int, const volatile int *); 32863 vector unsigned char vec_lvsr (int, const volatile unsigned long *); 32864 vector unsigned char vec_lvsr (int, const volatile long *); 32865 vector unsigned char vec_lvsr (int, const volatile float *); 32866 32867 vector float vec_madd (vector float, vector float, vector float); 32868 32869 vector signed short vec_madds (vector signed short, 32870 vector signed short, 32871 vector signed short); 32872 32873 vector unsigned char vec_max (vector bool char, vector unsigned char); 32874 vector unsigned char vec_max (vector unsigned char, vector bool char); 32875 vector unsigned char vec_max (vector unsigned char, 32876 vector unsigned char); 32877 vector signed char vec_max (vector bool char, vector signed char); 32878 vector signed char vec_max (vector signed char, vector bool char); 32879 vector signed char vec_max (vector signed char, vector signed char); 32880 vector unsigned short vec_max (vector bool short, 32881 vector unsigned short); 32882 vector unsigned short vec_max (vector unsigned short, 32883 vector bool short); 32884 vector unsigned short vec_max (vector unsigned short, 32885 vector unsigned short); 32886 vector signed short vec_max (vector bool short, vector signed short); 32887 vector signed short vec_max (vector signed short, vector bool short); 32888 vector signed short vec_max (vector signed short, vector signed short); 32889 vector unsigned int vec_max (vector bool int, vector unsigned int); 32890 vector unsigned int vec_max (vector unsigned int, vector bool int); 32891 vector unsigned int vec_max (vector unsigned int, vector unsigned int); 32892 vector signed int vec_max (vector bool int, vector signed int); 32893 vector signed int vec_max (vector signed int, vector bool int); 32894 vector signed int vec_max (vector signed int, vector signed int); 32895 vector float vec_max (vector float, vector float); 32896 32897 vector float vec_vmaxfp (vector float, vector float); 32898 32899 vector signed int vec_vmaxsw (vector bool int, vector signed int); 32900 vector signed int vec_vmaxsw (vector signed int, vector bool int); 32901 vector signed int vec_vmaxsw (vector signed int, vector signed int); 32902 32903 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int); 32904 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int); 32905 vector unsigned int vec_vmaxuw (vector unsigned int, 32906 vector unsigned int); 32907 32908 vector signed short vec_vmaxsh (vector bool short, vector signed short); 32909 vector signed short vec_vmaxsh (vector signed short, vector bool short); 32910 vector signed short vec_vmaxsh (vector signed short, 32911 vector signed short); 32912 32913 vector unsigned short vec_vmaxuh (vector bool short, 32914 vector unsigned short); 32915 vector unsigned short vec_vmaxuh (vector unsigned short, 32916 vector bool short); 32917 vector unsigned short vec_vmaxuh (vector unsigned short, 32918 vector unsigned short); 32919 32920 vector signed char vec_vmaxsb (vector bool char, vector signed char); 32921 vector signed char vec_vmaxsb (vector signed char, vector bool char); 32922 vector signed char vec_vmaxsb (vector signed char, vector signed char); 32923 32924 vector unsigned char vec_vmaxub (vector bool char, 32925 vector unsigned char); 32926 vector unsigned char vec_vmaxub (vector unsigned char, 32927 vector bool char); 32928 vector unsigned char vec_vmaxub (vector unsigned char, 32929 vector unsigned char); 32930 32931 vector bool char vec_mergeh (vector bool char, vector bool char); 32932 vector signed char vec_mergeh (vector signed char, vector signed char); 32933 vector unsigned char vec_mergeh (vector unsigned char, 32934 vector unsigned char); 32935 vector bool short vec_mergeh (vector bool short, vector bool short); 32936 vector pixel vec_mergeh (vector pixel, vector pixel); 32937 vector signed short vec_mergeh (vector signed short, 32938 vector signed short); 32939 vector unsigned short vec_mergeh (vector unsigned short, 32940 vector unsigned short); 32941 vector float vec_mergeh (vector float, vector float); 32942 vector bool int vec_mergeh (vector bool int, vector bool int); 32943 vector signed int vec_mergeh (vector signed int, vector signed int); 32944 vector unsigned int vec_mergeh (vector unsigned int, 32945 vector unsigned int); 32946 32947 vector float vec_vmrghw (vector float, vector float); 32948 vector bool int vec_vmrghw (vector bool int, vector bool int); 32949 vector signed int vec_vmrghw (vector signed int, vector signed int); 32950 vector unsigned int vec_vmrghw (vector unsigned int, 32951 vector unsigned int); 32952 32953 vector bool short vec_vmrghh (vector bool short, vector bool short); 32954 vector signed short vec_vmrghh (vector signed short, 32955 vector signed short); 32956 vector unsigned short vec_vmrghh (vector unsigned short, 32957 vector unsigned short); 32958 vector pixel vec_vmrghh (vector pixel, vector pixel); 32959 32960 vector bool char vec_vmrghb (vector bool char, vector bool char); 32961 vector signed char vec_vmrghb (vector signed char, vector signed char); 32962 vector unsigned char vec_vmrghb (vector unsigned char, 32963 vector unsigned char); 32964 32965 vector bool char vec_mergel (vector bool char, vector bool char); 32966 vector signed char vec_mergel (vector signed char, vector signed char); 32967 vector unsigned char vec_mergel (vector unsigned char, 32968 vector unsigned char); 32969 vector bool short vec_mergel (vector bool short, vector bool short); 32970 vector pixel vec_mergel (vector pixel, vector pixel); 32971 vector signed short vec_mergel (vector signed short, 32972 vector signed short); 32973 vector unsigned short vec_mergel (vector unsigned short, 32974 vector unsigned short); 32975 vector float vec_mergel (vector float, vector float); 32976 vector bool int vec_mergel (vector bool int, vector bool int); 32977 vector signed int vec_mergel (vector signed int, vector signed int); 32978 vector unsigned int vec_mergel (vector unsigned int, 32979 vector unsigned int); 32980 32981 vector float vec_vmrglw (vector float, vector float); 32982 vector signed int vec_vmrglw (vector signed int, vector signed int); 32983 vector unsigned int vec_vmrglw (vector unsigned int, 32984 vector unsigned int); 32985 vector bool int vec_vmrglw (vector bool int, vector bool int); 32986 32987 vector bool short vec_vmrglh (vector bool short, vector bool short); 32988 vector signed short vec_vmrglh (vector signed short, 32989 vector signed short); 32990 vector unsigned short vec_vmrglh (vector unsigned short, 32991 vector unsigned short); 32992 vector pixel vec_vmrglh (vector pixel, vector pixel); 32993 32994 vector bool char vec_vmrglb (vector bool char, vector bool char); 32995 vector signed char vec_vmrglb (vector signed char, vector signed char); 32996 vector unsigned char vec_vmrglb (vector unsigned char, 32997 vector unsigned char); 32998 32999 vector unsigned short vec_mfvscr (void); 33000 33001 vector unsigned char vec_min (vector bool char, vector unsigned char); 33002 vector unsigned char vec_min (vector unsigned char, vector bool char); 33003 vector unsigned char vec_min (vector unsigned char, 33004 vector unsigned char); 33005 vector signed char vec_min (vector bool char, vector signed char); 33006 vector signed char vec_min (vector signed char, vector bool char); 33007 vector signed char vec_min (vector signed char, vector signed char); 33008 vector unsigned short vec_min (vector bool short, 33009 vector unsigned short); 33010 vector unsigned short vec_min (vector unsigned short, 33011 vector bool short); 33012 vector unsigned short vec_min (vector unsigned short, 33013 vector unsigned short); 33014 vector signed short vec_min (vector bool short, vector signed short); 33015 vector signed short vec_min (vector signed short, vector bool short); 33016 vector signed short vec_min (vector signed short, vector signed short); 33017 vector unsigned int vec_min (vector bool int, vector unsigned int); 33018 vector unsigned int vec_min (vector unsigned int, vector bool int); 33019 vector unsigned int vec_min (vector unsigned int, vector unsigned int); 33020 vector signed int vec_min (vector bool int, vector signed int); 33021 vector signed int vec_min (vector signed int, vector bool int); 33022 vector signed int vec_min (vector signed int, vector signed int); 33023 vector float vec_min (vector float, vector float); 33024 33025 vector float vec_vminfp (vector float, vector float); 33026 33027 vector signed int vec_vminsw (vector bool int, vector signed int); 33028 vector signed int vec_vminsw (vector signed int, vector bool int); 33029 vector signed int vec_vminsw (vector signed int, vector signed int); 33030 33031 vector unsigned int vec_vminuw (vector bool int, vector unsigned int); 33032 vector unsigned int vec_vminuw (vector unsigned int, vector bool int); 33033 vector unsigned int vec_vminuw (vector unsigned int, 33034 vector unsigned int); 33035 33036 vector signed short vec_vminsh (vector bool short, vector signed short); 33037 vector signed short vec_vminsh (vector signed short, vector bool short); 33038 vector signed short vec_vminsh (vector signed short, 33039 vector signed short); 33040 33041 vector unsigned short vec_vminuh (vector bool short, 33042 vector unsigned short); 33043 vector unsigned short vec_vminuh (vector unsigned short, 33044 vector bool short); 33045 vector unsigned short vec_vminuh (vector unsigned short, 33046 vector unsigned short); 33047 33048 vector signed char vec_vminsb (vector bool char, vector signed char); 33049 vector signed char vec_vminsb (vector signed char, vector bool char); 33050 vector signed char vec_vminsb (vector signed char, vector signed char); 33051 33052 vector unsigned char vec_vminub (vector bool char, 33053 vector unsigned char); 33054 vector unsigned char vec_vminub (vector unsigned char, 33055 vector bool char); 33056 vector unsigned char vec_vminub (vector unsigned char, 33057 vector unsigned char); 33058 33059 vector signed short vec_mladd (vector signed short, 33060 vector signed short, 33061 vector signed short); 33062 vector signed short vec_mladd (vector signed short, 33063 vector unsigned short, 33064 vector unsigned short); 33065 vector signed short vec_mladd (vector unsigned short, 33066 vector signed short, 33067 vector signed short); 33068 vector unsigned short vec_mladd (vector unsigned short, 33069 vector unsigned short, 33070 vector unsigned short); 33071 33072 vector signed short vec_mradds (vector signed short, 33073 vector signed short, 33074 vector signed short); 33075 33076 vector unsigned int vec_msum (vector unsigned char, 33077 vector unsigned char, 33078 vector unsigned int); 33079 vector signed int vec_msum (vector signed char, 33080 vector unsigned char, 33081 vector signed int); 33082 vector unsigned int vec_msum (vector unsigned short, 33083 vector unsigned short, 33084 vector unsigned int); 33085 vector signed int vec_msum (vector signed short, 33086 vector signed short, 33087 vector signed int); 33088 33089 vector signed int vec_vmsumshm (vector signed short, 33090 vector signed short, 33091 vector signed int); 33092 33093 vector unsigned int vec_vmsumuhm (vector unsigned short, 33094 vector unsigned short, 33095 vector unsigned int); 33096 33097 vector signed int vec_vmsummbm (vector signed char, 33098 vector unsigned char, 33099 vector signed int); 33100 33101 vector unsigned int vec_vmsumubm (vector unsigned char, 33102 vector unsigned char, 33103 vector unsigned int); 33104 33105 vector unsigned int vec_msums (vector unsigned short, 33106 vector unsigned short, 33107 vector unsigned int); 33108 vector signed int vec_msums (vector signed short, 33109 vector signed short, 33110 vector signed int); 33111 33112 vector signed int vec_vmsumshs (vector signed short, 33113 vector signed short, 33114 vector signed int); 33115 33116 vector unsigned int vec_vmsumuhs (vector unsigned short, 33117 vector unsigned short, 33118 vector unsigned int); 33119 33120 void vec_mtvscr (vector signed int); 33121 void vec_mtvscr (vector unsigned int); 33122 void vec_mtvscr (vector bool int); 33123 void vec_mtvscr (vector signed short); 33124 void vec_mtvscr (vector unsigned short); 33125 void vec_mtvscr (vector bool short); 33126 void vec_mtvscr (vector pixel); 33127 void vec_mtvscr (vector signed char); 33128 void vec_mtvscr (vector unsigned char); 33129 void vec_mtvscr (vector bool char); 33130 33131 vector unsigned short vec_mule (vector unsigned char, 33132 vector unsigned char); 33133 vector signed short vec_mule (vector signed char, 33134 vector signed char); 33135 vector unsigned int vec_mule (vector unsigned short, 33136 vector unsigned short); 33137 vector signed int vec_mule (vector signed short, vector signed short); 33138 33139 vector signed int vec_vmulesh (vector signed short, 33140 vector signed short); 33141 33142 vector unsigned int vec_vmuleuh (vector unsigned short, 33143 vector unsigned short); 33144 33145 vector signed short vec_vmulesb (vector signed char, 33146 vector signed char); 33147 33148 vector unsigned short vec_vmuleub (vector unsigned char, 33149 vector unsigned char); 33150 33151 vector unsigned short vec_mulo (vector unsigned char, 33152 vector unsigned char); 33153 vector signed short vec_mulo (vector signed char, vector signed char); 33154 vector unsigned int vec_mulo (vector unsigned short, 33155 vector unsigned short); 33156 vector signed int vec_mulo (vector signed short, vector signed short); 33157 33158 vector signed int vec_vmulosh (vector signed short, 33159 vector signed short); 33160 33161 vector unsigned int vec_vmulouh (vector unsigned short, 33162 vector unsigned short); 33163 33164 vector signed short vec_vmulosb (vector signed char, 33165 vector signed char); 33166 33167 vector unsigned short vec_vmuloub (vector unsigned char, 33168 vector unsigned char); 33169 33170 vector float vec_nmsub (vector float, vector float, vector float); 33171 33172 vector float vec_nor (vector float, vector float); 33173 vector signed int vec_nor (vector signed int, vector signed int); 33174 vector unsigned int vec_nor (vector unsigned int, vector unsigned int); 33175 vector bool int vec_nor (vector bool int, vector bool int); 33176 vector signed short vec_nor (vector signed short, vector signed short); 33177 vector unsigned short vec_nor (vector unsigned short, 33178 vector unsigned short); 33179 vector bool short vec_nor (vector bool short, vector bool short); 33180 vector signed char vec_nor (vector signed char, vector signed char); 33181 vector unsigned char vec_nor (vector unsigned char, 33182 vector unsigned char); 33183 vector bool char vec_nor (vector bool char, vector bool char); 33184 33185 vector float vec_or (vector float, vector float); 33186 vector float vec_or (vector float, vector bool int); 33187 vector float vec_or (vector bool int, vector float); 33188 vector bool int vec_or (vector bool int, vector bool int); 33189 vector signed int vec_or (vector bool int, vector signed int); 33190 vector signed int vec_or (vector signed int, vector bool int); 33191 vector signed int vec_or (vector signed int, vector signed int); 33192 vector unsigned int vec_or (vector bool int, vector unsigned int); 33193 vector unsigned int vec_or (vector unsigned int, vector bool int); 33194 vector unsigned int vec_or (vector unsigned int, vector unsigned int); 33195 vector bool short vec_or (vector bool short, vector bool short); 33196 vector signed short vec_or (vector bool short, vector signed short); 33197 vector signed short vec_or (vector signed short, vector bool short); 33198 vector signed short vec_or (vector signed short, vector signed short); 33199 vector unsigned short vec_or (vector bool short, vector unsigned short); 33200 vector unsigned short vec_or (vector unsigned short, vector bool short); 33201 vector unsigned short vec_or (vector unsigned short, 33202 vector unsigned short); 33203 vector signed char vec_or (vector bool char, vector signed char); 33204 vector bool char vec_or (vector bool char, vector bool char); 33205 vector signed char vec_or (vector signed char, vector bool char); 33206 vector signed char vec_or (vector signed char, vector signed char); 33207 vector unsigned char vec_or (vector bool char, vector unsigned char); 33208 vector unsigned char vec_or (vector unsigned char, vector bool char); 33209 vector unsigned char vec_or (vector unsigned char, 33210 vector unsigned char); 33211 33212 vector signed char vec_pack (vector signed short, vector signed short); 33213 vector unsigned char vec_pack (vector unsigned short, 33214 vector unsigned short); 33215 vector bool char vec_pack (vector bool short, vector bool short); 33216 vector signed short vec_pack (vector signed int, vector signed int); 33217 vector unsigned short vec_pack (vector unsigned int, 33218 vector unsigned int); 33219 vector bool short vec_pack (vector bool int, vector bool int); 33220 33221 vector bool short vec_vpkuwum (vector bool int, vector bool int); 33222 vector signed short vec_vpkuwum (vector signed int, vector signed int); 33223 vector unsigned short vec_vpkuwum (vector unsigned int, 33224 vector unsigned int); 33225 33226 vector bool char vec_vpkuhum (vector bool short, vector bool short); 33227 vector signed char vec_vpkuhum (vector signed short, 33228 vector signed short); 33229 vector unsigned char vec_vpkuhum (vector unsigned short, 33230 vector unsigned short); 33231 33232 vector pixel vec_packpx (vector unsigned int, vector unsigned int); 33233 33234 vector unsigned char vec_packs (vector unsigned short, 33235 vector unsigned short); 33236 vector signed char vec_packs (vector signed short, vector signed short); 33237 vector unsigned short vec_packs (vector unsigned int, 33238 vector unsigned int); 33239 vector signed short vec_packs (vector signed int, vector signed int); 33240 33241 vector signed short vec_vpkswss (vector signed int, vector signed int); 33242 33243 vector unsigned short vec_vpkuwus (vector unsigned int, 33244 vector unsigned int); 33245 33246 vector signed char vec_vpkshss (vector signed short, 33247 vector signed short); 33248 33249 vector unsigned char vec_vpkuhus (vector unsigned short, 33250 vector unsigned short); 33251 33252 vector unsigned char vec_packsu (vector unsigned short, 33253 vector unsigned short); 33254 vector unsigned char vec_packsu (vector signed short, 33255 vector signed short); 33256 vector unsigned short vec_packsu (vector unsigned int, 33257 vector unsigned int); 33258 vector unsigned short vec_packsu (vector signed int, vector signed int); 33259 33260 vector unsigned short vec_vpkswus (vector signed int, 33261 vector signed int); 33262 33263 vector unsigned char vec_vpkshus (vector signed short, 33264 vector signed short); 33265 33266 vector float vec_perm (vector float, 33267 vector float, 33268 vector unsigned char); 33269 vector signed int vec_perm (vector signed int, 33270 vector signed int, 33271 vector unsigned char); 33272 vector unsigned int vec_perm (vector unsigned int, 33273 vector unsigned int, 33274 vector unsigned char); 33275 vector bool int vec_perm (vector bool int, 33276 vector bool int, 33277 vector unsigned char); 33278 vector signed short vec_perm (vector signed short, 33279 vector signed short, 33280 vector unsigned char); 33281 vector unsigned short vec_perm (vector unsigned short, 33282 vector unsigned short, 33283 vector unsigned char); 33284 vector bool short vec_perm (vector bool short, 33285 vector bool short, 33286 vector unsigned char); 33287 vector pixel vec_perm (vector pixel, 33288 vector pixel, 33289 vector unsigned char); 33290 vector signed char vec_perm (vector signed char, 33291 vector signed char, 33292 vector unsigned char); 33293 vector unsigned char vec_perm (vector unsigned char, 33294 vector unsigned char, 33295 vector unsigned char); 33296 vector bool char vec_perm (vector bool char, 33297 vector bool char, 33298 vector unsigned char); 33299 33300 vector float vec_re (vector float); 33301 33302 vector signed char vec_rl (vector signed char, 33303 vector unsigned char); 33304 vector unsigned char vec_rl (vector unsigned char, 33305 vector unsigned char); 33306 vector signed short vec_rl (vector signed short, vector unsigned short); 33307 vector unsigned short vec_rl (vector unsigned short, 33308 vector unsigned short); 33309 vector signed int vec_rl (vector signed int, vector unsigned int); 33310 vector unsigned int vec_rl (vector unsigned int, vector unsigned int); 33311 33312 vector signed int vec_vrlw (vector signed int, vector unsigned int); 33313 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int); 33314 33315 vector signed short vec_vrlh (vector signed short, 33316 vector unsigned short); 33317 vector unsigned short vec_vrlh (vector unsigned short, 33318 vector unsigned short); 33319 33320 vector signed char vec_vrlb (vector signed char, vector unsigned char); 33321 vector unsigned char vec_vrlb (vector unsigned char, 33322 vector unsigned char); 33323 33324 vector float vec_round (vector float); 33325 33326 vector float vec_rsqrte (vector float); 33327 33328 vector float vec_sel (vector float, vector float, vector bool int); 33329 vector float vec_sel (vector float, vector float, vector unsigned int); 33330 vector signed int vec_sel (vector signed int, 33331 vector signed int, 33332 vector bool int); 33333 vector signed int vec_sel (vector signed int, 33334 vector signed int, 33335 vector unsigned int); 33336 vector unsigned int vec_sel (vector unsigned int, 33337 vector unsigned int, 33338 vector bool int); 33339 vector unsigned int vec_sel (vector unsigned int, 33340 vector unsigned int, 33341 vector unsigned int); 33342 vector bool int vec_sel (vector bool int, 33343 vector bool int, 33344 vector bool int); 33345 vector bool int vec_sel (vector bool int, 33346 vector bool int, 33347 vector unsigned int); 33348 vector signed short vec_sel (vector signed short, 33349 vector signed short, 33350 vector bool short); 33351 vector signed short vec_sel (vector signed short, 33352 vector signed short, 33353 vector unsigned short); 33354 vector unsigned short vec_sel (vector unsigned short, 33355 vector unsigned short, 33356 vector bool short); 33357 vector unsigned short vec_sel (vector unsigned short, 33358 vector unsigned short, 33359 vector unsigned short); 33360 vector bool short vec_sel (vector bool short, 33361 vector bool short, 33362 vector bool short); 33363 vector bool short vec_sel (vector bool short, 33364 vector bool short, 33365 vector unsigned short); 33366 vector signed char vec_sel (vector signed char, 33367 vector signed char, 33368 vector bool char); 33369 vector signed char vec_sel (vector signed char, 33370 vector signed char, 33371 vector unsigned char); 33372 vector unsigned char vec_sel (vector unsigned char, 33373 vector unsigned char, 33374 vector bool char); 33375 vector unsigned char vec_sel (vector unsigned char, 33376 vector unsigned char, 33377 vector unsigned char); 33378 vector bool char vec_sel (vector bool char, 33379 vector bool char, 33380 vector bool char); 33381 vector bool char vec_sel (vector bool char, 33382 vector bool char, 33383 vector unsigned char); 33384 33385 vector signed char vec_sl (vector signed char, 33386 vector unsigned char); 33387 vector unsigned char vec_sl (vector unsigned char, 33388 vector unsigned char); 33389 vector signed short vec_sl (vector signed short, vector unsigned short); 33390 vector unsigned short vec_sl (vector unsigned short, 33391 vector unsigned short); 33392 vector signed int vec_sl (vector signed int, vector unsigned int); 33393 vector unsigned int vec_sl (vector unsigned int, vector unsigned int); 33394 33395 vector signed int vec_vslw (vector signed int, vector unsigned int); 33396 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int); 33397 33398 vector signed short vec_vslh (vector signed short, 33399 vector unsigned short); 33400 vector unsigned short vec_vslh (vector unsigned short, 33401 vector unsigned short); 33402 33403 vector signed char vec_vslb (vector signed char, vector unsigned char); 33404 vector unsigned char vec_vslb (vector unsigned char, 33405 vector unsigned char); 33406 33407 vector float vec_sld (vector float, vector float, const int); 33408 vector signed int vec_sld (vector signed int, 33409 vector signed int, 33410 const int); 33411 vector unsigned int vec_sld (vector unsigned int, 33412 vector unsigned int, 33413 const int); 33414 vector bool int vec_sld (vector bool int, 33415 vector bool int, 33416 const int); 33417 vector signed short vec_sld (vector signed short, 33418 vector signed short, 33419 const int); 33420 vector unsigned short vec_sld (vector unsigned short, 33421 vector unsigned short, 33422 const int); 33423 vector bool short vec_sld (vector bool short, 33424 vector bool short, 33425 const int); 33426 vector pixel vec_sld (vector pixel, 33427 vector pixel, 33428 const int); 33429 vector signed char vec_sld (vector signed char, 33430 vector signed char, 33431 const int); 33432 vector unsigned char vec_sld (vector unsigned char, 33433 vector unsigned char, 33434 const int); 33435 vector bool char vec_sld (vector bool char, 33436 vector bool char, 33437 const int); 33438 33439 vector signed int vec_sll (vector signed int, 33440 vector unsigned int); 33441 vector signed int vec_sll (vector signed int, 33442 vector unsigned short); 33443 vector signed int vec_sll (vector signed int, 33444 vector unsigned char); 33445 vector unsigned int vec_sll (vector unsigned int, 33446 vector unsigned int); 33447 vector unsigned int vec_sll (vector unsigned int, 33448 vector unsigned short); 33449 vector unsigned int vec_sll (vector unsigned int, 33450 vector unsigned char); 33451 vector bool int vec_sll (vector bool int, 33452 vector unsigned int); 33453 vector bool int vec_sll (vector bool int, 33454 vector unsigned short); 33455 vector bool int vec_sll (vector bool int, 33456 vector unsigned char); 33457 vector signed short vec_sll (vector signed short, 33458 vector unsigned int); 33459 vector signed short vec_sll (vector signed short, 33460 vector unsigned short); 33461 vector signed short vec_sll (vector signed short, 33462 vector unsigned char); 33463 vector unsigned short vec_sll (vector unsigned short, 33464 vector unsigned int); 33465 vector unsigned short vec_sll (vector unsigned short, 33466 vector unsigned short); 33467 vector unsigned short vec_sll (vector unsigned short, 33468 vector unsigned char); 33469 vector bool short vec_sll (vector bool short, vector unsigned int); 33470 vector bool short vec_sll (vector bool short, vector unsigned short); 33471 vector bool short vec_sll (vector bool short, vector unsigned char); 33472 vector pixel vec_sll (vector pixel, vector unsigned int); 33473 vector pixel vec_sll (vector pixel, vector unsigned short); 33474 vector pixel vec_sll (vector pixel, vector unsigned char); 33475 vector signed char vec_sll (vector signed char, vector unsigned int); 33476 vector signed char vec_sll (vector signed char, vector unsigned short); 33477 vector signed char vec_sll (vector signed char, vector unsigned char); 33478 vector unsigned char vec_sll (vector unsigned char, 33479 vector unsigned int); 33480 vector unsigned char vec_sll (vector unsigned char, 33481 vector unsigned short); 33482 vector unsigned char vec_sll (vector unsigned char, 33483 vector unsigned char); 33484 vector bool char vec_sll (vector bool char, vector unsigned int); 33485 vector bool char vec_sll (vector bool char, vector unsigned short); 33486 vector bool char vec_sll (vector bool char, vector unsigned char); 33487 33488 vector float vec_slo (vector float, vector signed char); 33489 vector float vec_slo (vector float, vector unsigned char); 33490 vector signed int vec_slo (vector signed int, vector signed char); 33491 vector signed int vec_slo (vector signed int, vector unsigned char); 33492 vector unsigned int vec_slo (vector unsigned int, vector signed char); 33493 vector unsigned int vec_slo (vector unsigned int, vector unsigned char); 33494 vector signed short vec_slo (vector signed short, vector signed char); 33495 vector signed short vec_slo (vector signed short, vector unsigned char); 33496 vector unsigned short vec_slo (vector unsigned short, 33497 vector signed char); 33498 vector unsigned short vec_slo (vector unsigned short, 33499 vector unsigned char); 33500 vector pixel vec_slo (vector pixel, vector signed char); 33501 vector pixel vec_slo (vector pixel, vector unsigned char); 33502 vector signed char vec_slo (vector signed char, vector signed char); 33503 vector signed char vec_slo (vector signed char, vector unsigned char); 33504 vector unsigned char vec_slo (vector unsigned char, vector signed char); 33505 vector unsigned char vec_slo (vector unsigned char, 33506 vector unsigned char); 33507 33508 vector signed char vec_splat (vector signed char, const int); 33509 vector unsigned char vec_splat (vector unsigned char, const int); 33510 vector bool char vec_splat (vector bool char, const int); 33511 vector signed short vec_splat (vector signed short, const int); 33512 vector unsigned short vec_splat (vector unsigned short, const int); 33513 vector bool short vec_splat (vector bool short, const int); 33514 vector pixel vec_splat (vector pixel, const int); 33515 vector float vec_splat (vector float, const int); 33516 vector signed int vec_splat (vector signed int, const int); 33517 vector unsigned int vec_splat (vector unsigned int, const int); 33518 vector bool int vec_splat (vector bool int, const int); 33519 33520 vector float vec_vspltw (vector float, const int); 33521 vector signed int vec_vspltw (vector signed int, const int); 33522 vector unsigned int vec_vspltw (vector unsigned int, const int); 33523 vector bool int vec_vspltw (vector bool int, const int); 33524 33525 vector bool short vec_vsplth (vector bool short, const int); 33526 vector signed short vec_vsplth (vector signed short, const int); 33527 vector unsigned short vec_vsplth (vector unsigned short, const int); 33528 vector pixel vec_vsplth (vector pixel, const int); 33529 33530 vector signed char vec_vspltb (vector signed char, const int); 33531 vector unsigned char vec_vspltb (vector unsigned char, const int); 33532 vector bool char vec_vspltb (vector bool char, const int); 33533 33534 vector signed char vec_splat_s8 (const int); 33535 33536 vector signed short vec_splat_s16 (const int); 33537 33538 vector signed int vec_splat_s32 (const int); 33539 33540 vector unsigned char vec_splat_u8 (const int); 33541 33542 vector unsigned short vec_splat_u16 (const int); 33543 33544 vector unsigned int vec_splat_u32 (const int); 33545 33546 vector signed char vec_sr (vector signed char, vector unsigned char); 33547 vector unsigned char vec_sr (vector unsigned char, 33548 vector unsigned char); 33549 vector signed short vec_sr (vector signed short, 33550 vector unsigned short); 33551 vector unsigned short vec_sr (vector unsigned short, 33552 vector unsigned short); 33553 vector signed int vec_sr (vector signed int, vector unsigned int); 33554 vector unsigned int vec_sr (vector unsigned int, vector unsigned int); 33555 33556 vector signed int vec_vsrw (vector signed int, vector unsigned int); 33557 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int); 33558 33559 vector signed short vec_vsrh (vector signed short, 33560 vector unsigned short); 33561 vector unsigned short vec_vsrh (vector unsigned short, 33562 vector unsigned short); 33563 33564 vector signed char vec_vsrb (vector signed char, vector unsigned char); 33565 vector unsigned char vec_vsrb (vector unsigned char, 33566 vector unsigned char); 33567 33568 vector signed char vec_sra (vector signed char, vector unsigned char); 33569 vector unsigned char vec_sra (vector unsigned char, 33570 vector unsigned char); 33571 vector signed short vec_sra (vector signed short, 33572 vector unsigned short); 33573 vector unsigned short vec_sra (vector unsigned short, 33574 vector unsigned short); 33575 vector signed int vec_sra (vector signed int, vector unsigned int); 33576 vector unsigned int vec_sra (vector unsigned int, vector unsigned int); 33577 33578 vector signed int vec_vsraw (vector signed int, vector unsigned int); 33579 vector unsigned int vec_vsraw (vector unsigned int, 33580 vector unsigned int); 33581 33582 vector signed short vec_vsrah (vector signed short, 33583 vector unsigned short); 33584 vector unsigned short vec_vsrah (vector unsigned short, 33585 vector unsigned short); 33586 33587 vector signed char vec_vsrab (vector signed char, vector unsigned char); 33588 vector unsigned char vec_vsrab (vector unsigned char, 33589 vector unsigned char); 33590 33591 vector signed int vec_srl (vector signed int, vector unsigned int); 33592 vector signed int vec_srl (vector signed int, vector unsigned short); 33593 vector signed int vec_srl (vector signed int, vector unsigned char); 33594 vector unsigned int vec_srl (vector unsigned int, vector unsigned int); 33595 vector unsigned int vec_srl (vector unsigned int, 33596 vector unsigned short); 33597 vector unsigned int vec_srl (vector unsigned int, vector unsigned char); 33598 vector bool int vec_srl (vector bool int, vector unsigned int); 33599 vector bool int vec_srl (vector bool int, vector unsigned short); 33600 vector bool int vec_srl (vector bool int, vector unsigned char); 33601 vector signed short vec_srl (vector signed short, vector unsigned int); 33602 vector signed short vec_srl (vector signed short, 33603 vector unsigned short); 33604 vector signed short vec_srl (vector signed short, vector unsigned char); 33605 vector unsigned short vec_srl (vector unsigned short, 33606 vector unsigned int); 33607 vector unsigned short vec_srl (vector unsigned short, 33608 vector unsigned short); 33609 vector unsigned short vec_srl (vector unsigned short, 33610 vector unsigned char); 33611 vector bool short vec_srl (vector bool short, vector unsigned int); 33612 vector bool short vec_srl (vector bool short, vector unsigned short); 33613 vector bool short vec_srl (vector bool short, vector unsigned char); 33614 vector pixel vec_srl (vector pixel, vector unsigned int); 33615 vector pixel vec_srl (vector pixel, vector unsigned short); 33616 vector pixel vec_srl (vector pixel, vector unsigned char); 33617 vector signed char vec_srl (vector signed char, vector unsigned int); 33618 vector signed char vec_srl (vector signed char, vector unsigned short); 33619 vector signed char vec_srl (vector signed char, vector unsigned char); 33620 vector unsigned char vec_srl (vector unsigned char, 33621 vector unsigned int); 33622 vector unsigned char vec_srl (vector unsigned char, 33623 vector unsigned short); 33624 vector unsigned char vec_srl (vector unsigned char, 33625 vector unsigned char); 33626 vector bool char vec_srl (vector bool char, vector unsigned int); 33627 vector bool char vec_srl (vector bool char, vector unsigned short); 33628 vector bool char vec_srl (vector bool char, vector unsigned char); 33629 33630 vector float vec_sro (vector float, vector signed char); 33631 vector float vec_sro (vector float, vector unsigned char); 33632 vector signed int vec_sro (vector signed int, vector signed char); 33633 vector signed int vec_sro (vector signed int, vector unsigned char); 33634 vector unsigned int vec_sro (vector unsigned int, vector signed char); 33635 vector unsigned int vec_sro (vector unsigned int, vector unsigned char); 33636 vector signed short vec_sro (vector signed short, vector signed char); 33637 vector signed short vec_sro (vector signed short, vector unsigned char); 33638 vector unsigned short vec_sro (vector unsigned short, 33639 vector signed char); 33640 vector unsigned short vec_sro (vector unsigned short, 33641 vector unsigned char); 33642 vector pixel vec_sro (vector pixel, vector signed char); 33643 vector pixel vec_sro (vector pixel, vector unsigned char); 33644 vector signed char vec_sro (vector signed char, vector signed char); 33645 vector signed char vec_sro (vector signed char, vector unsigned char); 33646 vector unsigned char vec_sro (vector unsigned char, vector signed char); 33647 vector unsigned char vec_sro (vector unsigned char, 33648 vector unsigned char); 33649 33650 void vec_st (vector float, int, vector float *); 33651 void vec_st (vector float, int, float *); 33652 void vec_st (vector signed int, int, vector signed int *); 33653 void vec_st (vector signed int, int, int *); 33654 void vec_st (vector unsigned int, int, vector unsigned int *); 33655 void vec_st (vector unsigned int, int, unsigned int *); 33656 void vec_st (vector bool int, int, vector bool int *); 33657 void vec_st (vector bool int, int, unsigned int *); 33658 void vec_st (vector bool int, int, int *); 33659 void vec_st (vector signed short, int, vector signed short *); 33660 void vec_st (vector signed short, int, short *); 33661 void vec_st (vector unsigned short, int, vector unsigned short *); 33662 void vec_st (vector unsigned short, int, unsigned short *); 33663 void vec_st (vector bool short, int, vector bool short *); 33664 void vec_st (vector bool short, int, unsigned short *); 33665 void vec_st (vector pixel, int, vector pixel *); 33666 void vec_st (vector pixel, int, unsigned short *); 33667 void vec_st (vector pixel, int, short *); 33668 void vec_st (vector bool short, int, short *); 33669 void vec_st (vector signed char, int, vector signed char *); 33670 void vec_st (vector signed char, int, signed char *); 33671 void vec_st (vector unsigned char, int, vector unsigned char *); 33672 void vec_st (vector unsigned char, int, unsigned char *); 33673 void vec_st (vector bool char, int, vector bool char *); 33674 void vec_st (vector bool char, int, unsigned char *); 33675 void vec_st (vector bool char, int, signed char *); 33676 33677 void vec_ste (vector signed char, int, signed char *); 33678 void vec_ste (vector unsigned char, int, unsigned char *); 33679 void vec_ste (vector bool char, int, signed char *); 33680 void vec_ste (vector bool char, int, unsigned char *); 33681 void vec_ste (vector signed short, int, short *); 33682 void vec_ste (vector unsigned short, int, unsigned short *); 33683 void vec_ste (vector bool short, int, short *); 33684 void vec_ste (vector bool short, int, unsigned short *); 33685 void vec_ste (vector pixel, int, short *); 33686 void vec_ste (vector pixel, int, unsigned short *); 33687 void vec_ste (vector float, int, float *); 33688 void vec_ste (vector signed int, int, int *); 33689 void vec_ste (vector unsigned int, int, unsigned int *); 33690 void vec_ste (vector bool int, int, int *); 33691 void vec_ste (vector bool int, int, unsigned int *); 33692 33693 void vec_stvewx (vector float, int, float *); 33694 void vec_stvewx (vector signed int, int, int *); 33695 void vec_stvewx (vector unsigned int, int, unsigned int *); 33696 void vec_stvewx (vector bool int, int, int *); 33697 void vec_stvewx (vector bool int, int, unsigned int *); 33698 33699 void vec_stvehx (vector signed short, int, short *); 33700 void vec_stvehx (vector unsigned short, int, unsigned short *); 33701 void vec_stvehx (vector bool short, int, short *); 33702 void vec_stvehx (vector bool short, int, unsigned short *); 33703 void vec_stvehx (vector pixel, int, short *); 33704 void vec_stvehx (vector pixel, int, unsigned short *); 33705 33706 void vec_stvebx (vector signed char, int, signed char *); 33707 void vec_stvebx (vector unsigned char, int, unsigned char *); 33708 void vec_stvebx (vector bool char, int, signed char *); 33709 void vec_stvebx (vector bool char, int, unsigned char *); 33710 33711 void vec_stl (vector float, int, vector float *); 33712 void vec_stl (vector float, int, float *); 33713 void vec_stl (vector signed int, int, vector signed int *); 33714 void vec_stl (vector signed int, int, int *); 33715 void vec_stl (vector unsigned int, int, vector unsigned int *); 33716 void vec_stl (vector unsigned int, int, unsigned int *); 33717 void vec_stl (vector bool int, int, vector bool int *); 33718 void vec_stl (vector bool int, int, unsigned int *); 33719 void vec_stl (vector bool int, int, int *); 33720 void vec_stl (vector signed short, int, vector signed short *); 33721 void vec_stl (vector signed short, int, short *); 33722 void vec_stl (vector unsigned short, int, vector unsigned short *); 33723 void vec_stl (vector unsigned short, int, unsigned short *); 33724 void vec_stl (vector bool short, int, vector bool short *); 33725 void vec_stl (vector bool short, int, unsigned short *); 33726 void vec_stl (vector bool short, int, short *); 33727 void vec_stl (vector pixel, int, vector pixel *); 33728 void vec_stl (vector pixel, int, unsigned short *); 33729 void vec_stl (vector pixel, int, short *); 33730 void vec_stl (vector signed char, int, vector signed char *); 33731 void vec_stl (vector signed char, int, signed char *); 33732 void vec_stl (vector unsigned char, int, vector unsigned char *); 33733 void vec_stl (vector unsigned char, int, unsigned char *); 33734 void vec_stl (vector bool char, int, vector bool char *); 33735 void vec_stl (vector bool char, int, unsigned char *); 33736 void vec_stl (vector bool char, int, signed char *); 33737 33738 vector signed char vec_sub (vector bool char, vector signed char); 33739 vector signed char vec_sub (vector signed char, vector bool char); 33740 vector signed char vec_sub (vector signed char, vector signed char); 33741 vector unsigned char vec_sub (vector bool char, vector unsigned char); 33742 vector unsigned char vec_sub (vector unsigned char, vector bool char); 33743 vector unsigned char vec_sub (vector unsigned char, 33744 vector unsigned char); 33745 vector signed short vec_sub (vector bool short, vector signed short); 33746 vector signed short vec_sub (vector signed short, vector bool short); 33747 vector signed short vec_sub (vector signed short, vector signed short); 33748 vector unsigned short vec_sub (vector bool short, 33749 vector unsigned short); 33750 vector unsigned short vec_sub (vector unsigned short, 33751 vector bool short); 33752 vector unsigned short vec_sub (vector unsigned short, 33753 vector unsigned short); 33754 vector signed int vec_sub (vector bool int, vector signed int); 33755 vector signed int vec_sub (vector signed int, vector bool int); 33756 vector signed int vec_sub (vector signed int, vector signed int); 33757 vector unsigned int vec_sub (vector bool int, vector unsigned int); 33758 vector unsigned int vec_sub (vector unsigned int, vector bool int); 33759 vector unsigned int vec_sub (vector unsigned int, vector unsigned int); 33760 vector float vec_sub (vector float, vector float); 33761 33762 vector float vec_vsubfp (vector float, vector float); 33763 33764 vector signed int vec_vsubuwm (vector bool int, vector signed int); 33765 vector signed int vec_vsubuwm (vector signed int, vector bool int); 33766 vector signed int vec_vsubuwm (vector signed int, vector signed int); 33767 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int); 33768 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int); 33769 vector unsigned int vec_vsubuwm (vector unsigned int, 33770 vector unsigned int); 33771 33772 vector signed short vec_vsubuhm (vector bool short, 33773 vector signed short); 33774 vector signed short vec_vsubuhm (vector signed short, 33775 vector bool short); 33776 vector signed short vec_vsubuhm (vector signed short, 33777 vector signed short); 33778 vector unsigned short vec_vsubuhm (vector bool short, 33779 vector unsigned short); 33780 vector unsigned short vec_vsubuhm (vector unsigned short, 33781 vector bool short); 33782 vector unsigned short vec_vsubuhm (vector unsigned short, 33783 vector unsigned short); 33784 33785 vector signed char vec_vsububm (vector bool char, vector signed char); 33786 vector signed char vec_vsububm (vector signed char, vector bool char); 33787 vector signed char vec_vsububm (vector signed char, vector signed char); 33788 vector unsigned char vec_vsububm (vector bool char, 33789 vector unsigned char); 33790 vector unsigned char vec_vsububm (vector unsigned char, 33791 vector bool char); 33792 vector unsigned char vec_vsububm (vector unsigned char, 33793 vector unsigned char); 33794 33795 vector unsigned int vec_subc (vector unsigned int, vector unsigned int); 33796 33797 vector unsigned char vec_subs (vector bool char, vector unsigned char); 33798 vector unsigned char vec_subs (vector unsigned char, vector bool char); 33799 vector unsigned char vec_subs (vector unsigned char, 33800 vector unsigned char); 33801 vector signed char vec_subs (vector bool char, vector signed char); 33802 vector signed char vec_subs (vector signed char, vector bool char); 33803 vector signed char vec_subs (vector signed char, vector signed char); 33804 vector unsigned short vec_subs (vector bool short, 33805 vector unsigned short); 33806 vector unsigned short vec_subs (vector unsigned short, 33807 vector bool short); 33808 vector unsigned short vec_subs (vector unsigned short, 33809 vector unsigned short); 33810 vector signed short vec_subs (vector bool short, vector signed short); 33811 vector signed short vec_subs (vector signed short, vector bool short); 33812 vector signed short vec_subs (vector signed short, vector signed short); 33813 vector unsigned int vec_subs (vector bool int, vector unsigned int); 33814 vector unsigned int vec_subs (vector unsigned int, vector bool int); 33815 vector unsigned int vec_subs (vector unsigned int, vector unsigned int); 33816 vector signed int vec_subs (vector bool int, vector signed int); 33817 vector signed int vec_subs (vector signed int, vector bool int); 33818 vector signed int vec_subs (vector signed int, vector signed int); 33819 33820 vector signed int vec_vsubsws (vector bool int, vector signed int); 33821 vector signed int vec_vsubsws (vector signed int, vector bool int); 33822 vector signed int vec_vsubsws (vector signed int, vector signed int); 33823 33824 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int); 33825 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int); 33826 vector unsigned int vec_vsubuws (vector unsigned int, 33827 vector unsigned int); 33828 33829 vector signed short vec_vsubshs (vector bool short, 33830 vector signed short); 33831 vector signed short vec_vsubshs (vector signed short, 33832 vector bool short); 33833 vector signed short vec_vsubshs (vector signed short, 33834 vector signed short); 33835 33836 vector unsigned short vec_vsubuhs (vector bool short, 33837 vector unsigned short); 33838 vector unsigned short vec_vsubuhs (vector unsigned short, 33839 vector bool short); 33840 vector unsigned short vec_vsubuhs (vector unsigned short, 33841 vector unsigned short); 33842 33843 vector signed char vec_vsubsbs (vector bool char, vector signed char); 33844 vector signed char vec_vsubsbs (vector signed char, vector bool char); 33845 vector signed char vec_vsubsbs (vector signed char, vector signed char); 33846 33847 vector unsigned char vec_vsububs (vector bool char, 33848 vector unsigned char); 33849 vector unsigned char vec_vsububs (vector unsigned char, 33850 vector bool char); 33851 vector unsigned char vec_vsububs (vector unsigned char, 33852 vector unsigned char); 33853 33854 vector unsigned int vec_sum4s (vector unsigned char, 33855 vector unsigned int); 33856 vector signed int vec_sum4s (vector signed char, vector signed int); 33857 vector signed int vec_sum4s (vector signed short, vector signed int); 33858 33859 vector signed int vec_vsum4shs (vector signed short, vector signed int); 33860 33861 vector signed int vec_vsum4sbs (vector signed char, vector signed int); 33862 33863 vector unsigned int vec_vsum4ubs (vector unsigned char, 33864 vector unsigned int); 33865 33866 vector signed int vec_sum2s (vector signed int, vector signed int); 33867 33868 vector signed int vec_sums (vector signed int, vector signed int); 33869 33870 vector float vec_trunc (vector float); 33871 33872 vector signed short vec_unpackh (vector signed char); 33873 vector bool short vec_unpackh (vector bool char); 33874 vector signed int vec_unpackh (vector signed short); 33875 vector bool int vec_unpackh (vector bool short); 33876 vector unsigned int vec_unpackh (vector pixel); 33877 33878 vector bool int vec_vupkhsh (vector bool short); 33879 vector signed int vec_vupkhsh (vector signed short); 33880 33881 vector unsigned int vec_vupkhpx (vector pixel); 33882 33883 vector bool short vec_vupkhsb (vector bool char); 33884 vector signed short vec_vupkhsb (vector signed char); 33885 33886 vector signed short vec_unpackl (vector signed char); 33887 vector bool short vec_unpackl (vector bool char); 33888 vector unsigned int vec_unpackl (vector pixel); 33889 vector signed int vec_unpackl (vector signed short); 33890 vector bool int vec_unpackl (vector bool short); 33891 33892 vector unsigned int vec_vupklpx (vector pixel); 33893 33894 vector bool int vec_vupklsh (vector bool short); 33895 vector signed int vec_vupklsh (vector signed short); 33896 33897 vector bool short vec_vupklsb (vector bool char); 33898 vector signed short vec_vupklsb (vector signed char); 33899 33900 vector float vec_xor (vector float, vector float); 33901 vector float vec_xor (vector float, vector bool int); 33902 vector float vec_xor (vector bool int, vector float); 33903 vector bool int vec_xor (vector bool int, vector bool int); 33904 vector signed int vec_xor (vector bool int, vector signed int); 33905 vector signed int vec_xor (vector signed int, vector bool int); 33906 vector signed int vec_xor (vector signed int, vector signed int); 33907 vector unsigned int vec_xor (vector bool int, vector unsigned int); 33908 vector unsigned int vec_xor (vector unsigned int, vector bool int); 33909 vector unsigned int vec_xor (vector unsigned int, vector unsigned int); 33910 vector bool short vec_xor (vector bool short, vector bool short); 33911 vector signed short vec_xor (vector bool short, vector signed short); 33912 vector signed short vec_xor (vector signed short, vector bool short); 33913 vector signed short vec_xor (vector signed short, vector signed short); 33914 vector unsigned short vec_xor (vector bool short, 33915 vector unsigned short); 33916 vector unsigned short vec_xor (vector unsigned short, 33917 vector bool short); 33918 vector unsigned short vec_xor (vector unsigned short, 33919 vector unsigned short); 33920 vector signed char vec_xor (vector bool char, vector signed char); 33921 vector bool char vec_xor (vector bool char, vector bool char); 33922 vector signed char vec_xor (vector signed char, vector bool char); 33923 vector signed char vec_xor (vector signed char, vector signed char); 33924 vector unsigned char vec_xor (vector bool char, vector unsigned char); 33925 vector unsigned char vec_xor (vector unsigned char, vector bool char); 33926 vector unsigned char vec_xor (vector unsigned char, 33927 vector unsigned char); 33928 33929 int vec_all_eq (vector signed char, vector bool char); 33930 int vec_all_eq (vector signed char, vector signed char); 33931 int vec_all_eq (vector unsigned char, vector bool char); 33932 int vec_all_eq (vector unsigned char, vector unsigned char); 33933 int vec_all_eq (vector bool char, vector bool char); 33934 int vec_all_eq (vector bool char, vector unsigned char); 33935 int vec_all_eq (vector bool char, vector signed char); 33936 int vec_all_eq (vector signed short, vector bool short); 33937 int vec_all_eq (vector signed short, vector signed short); 33938 int vec_all_eq (vector unsigned short, vector bool short); 33939 int vec_all_eq (vector unsigned short, vector unsigned short); 33940 int vec_all_eq (vector bool short, vector bool short); 33941 int vec_all_eq (vector bool short, vector unsigned short); 33942 int vec_all_eq (vector bool short, vector signed short); 33943 int vec_all_eq (vector pixel, vector pixel); 33944 int vec_all_eq (vector signed int, vector bool int); 33945 int vec_all_eq (vector signed int, vector signed int); 33946 int vec_all_eq (vector unsigned int, vector bool int); 33947 int vec_all_eq (vector unsigned int, vector unsigned int); 33948 int vec_all_eq (vector bool int, vector bool int); 33949 int vec_all_eq (vector bool int, vector unsigned int); 33950 int vec_all_eq (vector bool int, vector signed int); 33951 int vec_all_eq (vector float, vector float); 33952 33953 int vec_all_ge (vector bool char, vector unsigned char); 33954 int vec_all_ge (vector unsigned char, vector bool char); 33955 int vec_all_ge (vector unsigned char, vector unsigned char); 33956 int vec_all_ge (vector bool char, vector signed char); 33957 int vec_all_ge (vector signed char, vector bool char); 33958 int vec_all_ge (vector signed char, vector signed char); 33959 int vec_all_ge (vector bool short, vector unsigned short); 33960 int vec_all_ge (vector unsigned short, vector bool short); 33961 int vec_all_ge (vector unsigned short, vector unsigned short); 33962 int vec_all_ge (vector signed short, vector signed short); 33963 int vec_all_ge (vector bool short, vector signed short); 33964 int vec_all_ge (vector signed short, vector bool short); 33965 int vec_all_ge (vector bool int, vector unsigned int); 33966 int vec_all_ge (vector unsigned int, vector bool int); 33967 int vec_all_ge (vector unsigned int, vector unsigned int); 33968 int vec_all_ge (vector bool int, vector signed int); 33969 int vec_all_ge (vector signed int, vector bool int); 33970 int vec_all_ge (vector signed int, vector signed int); 33971 int vec_all_ge (vector float, vector float); 33972 33973 int vec_all_gt (vector bool char, vector unsigned char); 33974 int vec_all_gt (vector unsigned char, vector bool char); 33975 int vec_all_gt (vector unsigned char, vector unsigned char); 33976 int vec_all_gt (vector bool char, vector signed char); 33977 int vec_all_gt (vector signed char, vector bool char); 33978 int vec_all_gt (vector signed char, vector signed char); 33979 int vec_all_gt (vector bool short, vector unsigned short); 33980 int vec_all_gt (vector unsigned short, vector bool short); 33981 int vec_all_gt (vector unsigned short, vector unsigned short); 33982 int vec_all_gt (vector bool short, vector signed short); 33983 int vec_all_gt (vector signed short, vector bool short); 33984 int vec_all_gt (vector signed short, vector signed short); 33985 int vec_all_gt (vector bool int, vector unsigned int); 33986 int vec_all_gt (vector unsigned int, vector bool int); 33987 int vec_all_gt (vector unsigned int, vector unsigned int); 33988 int vec_all_gt (vector bool int, vector signed int); 33989 int vec_all_gt (vector signed int, vector bool int); 33990 int vec_all_gt (vector signed int, vector signed int); 33991 int vec_all_gt (vector float, vector float); 33992 33993 int vec_all_in (vector float, vector float); 33994 33995 int vec_all_le (vector bool char, vector unsigned char); 33996 int vec_all_le (vector unsigned char, vector bool char); 33997 int vec_all_le (vector unsigned char, vector unsigned char); 33998 int vec_all_le (vector bool char, vector signed char); 33999 int vec_all_le (vector signed char, vector bool char); 34000 int vec_all_le (vector signed char, vector signed char); 34001 int vec_all_le (vector bool short, vector unsigned short); 34002 int vec_all_le (vector unsigned short, vector bool short); 34003 int vec_all_le (vector unsigned short, vector unsigned short); 34004 int vec_all_le (vector bool short, vector signed short); 34005 int vec_all_le (vector signed short, vector bool short); 34006 int vec_all_le (vector signed short, vector signed short); 34007 int vec_all_le (vector bool int, vector unsigned int); 34008 int vec_all_le (vector unsigned int, vector bool int); 34009 int vec_all_le (vector unsigned int, vector unsigned int); 34010 int vec_all_le (vector bool int, vector signed int); 34011 int vec_all_le (vector signed int, vector bool int); 34012 int vec_all_le (vector signed int, vector signed int); 34013 int vec_all_le (vector float, vector float); 34014 34015 int vec_all_lt (vector bool char, vector unsigned char); 34016 int vec_all_lt (vector unsigned char, vector bool char); 34017 int vec_all_lt (vector unsigned char, vector unsigned char); 34018 int vec_all_lt (vector bool char, vector signed char); 34019 int vec_all_lt (vector signed char, vector bool char); 34020 int vec_all_lt (vector signed char, vector signed char); 34021 int vec_all_lt (vector bool short, vector unsigned short); 34022 int vec_all_lt (vector unsigned short, vector bool short); 34023 int vec_all_lt (vector unsigned short, vector unsigned short); 34024 int vec_all_lt (vector bool short, vector signed short); 34025 int vec_all_lt (vector signed short, vector bool short); 34026 int vec_all_lt (vector signed short, vector signed short); 34027 int vec_all_lt (vector bool int, vector unsigned int); 34028 int vec_all_lt (vector unsigned int, vector bool int); 34029 int vec_all_lt (vector unsigned int, vector unsigned int); 34030 int vec_all_lt (vector bool int, vector signed int); 34031 int vec_all_lt (vector signed int, vector bool int); 34032 int vec_all_lt (vector signed int, vector signed int); 34033 int vec_all_lt (vector float, vector float); 34034 34035 int vec_all_nan (vector float); 34036 34037 int vec_all_ne (vector signed char, vector bool char); 34038 int vec_all_ne (vector signed char, vector signed char); 34039 int vec_all_ne (vector unsigned char, vector bool char); 34040 int vec_all_ne (vector unsigned char, vector unsigned char); 34041 int vec_all_ne (vector bool char, vector bool char); 34042 int vec_all_ne (vector bool char, vector unsigned char); 34043 int vec_all_ne (vector bool char, vector signed char); 34044 int vec_all_ne (vector signed short, vector bool short); 34045 int vec_all_ne (vector signed short, vector signed short); 34046 int vec_all_ne (vector unsigned short, vector bool short); 34047 int vec_all_ne (vector unsigned short, vector unsigned short); 34048 int vec_all_ne (vector bool short, vector bool short); 34049 int vec_all_ne (vector bool short, vector unsigned short); 34050 int vec_all_ne (vector bool short, vector signed short); 34051 int vec_all_ne (vector pixel, vector pixel); 34052 int vec_all_ne (vector signed int, vector bool int); 34053 int vec_all_ne (vector signed int, vector signed int); 34054 int vec_all_ne (vector unsigned int, vector bool int); 34055 int vec_all_ne (vector unsigned int, vector unsigned int); 34056 int vec_all_ne (vector bool int, vector bool int); 34057 int vec_all_ne (vector bool int, vector unsigned int); 34058 int vec_all_ne (vector bool int, vector signed int); 34059 int vec_all_ne (vector float, vector float); 34060 34061 int vec_all_nge (vector float, vector float); 34062 34063 int vec_all_ngt (vector float, vector float); 34064 34065 int vec_all_nle (vector float, vector float); 34066 34067 int vec_all_nlt (vector float, vector float); 34068 34069 int vec_all_numeric (vector float); 34070 34071 int vec_any_eq (vector signed char, vector bool char); 34072 int vec_any_eq (vector signed char, vector signed char); 34073 int vec_any_eq (vector unsigned char, vector bool char); 34074 int vec_any_eq (vector unsigned char, vector unsigned char); 34075 int vec_any_eq (vector bool char, vector bool char); 34076 int vec_any_eq (vector bool char, vector unsigned char); 34077 int vec_any_eq (vector bool char, vector signed char); 34078 int vec_any_eq (vector signed short, vector bool short); 34079 int vec_any_eq (vector signed short, vector signed short); 34080 int vec_any_eq (vector unsigned short, vector bool short); 34081 int vec_any_eq (vector unsigned short, vector unsigned short); 34082 int vec_any_eq (vector bool short, vector bool short); 34083 int vec_any_eq (vector bool short, vector unsigned short); 34084 int vec_any_eq (vector bool short, vector signed short); 34085 int vec_any_eq (vector pixel, vector pixel); 34086 int vec_any_eq (vector signed int, vector bool int); 34087 int vec_any_eq (vector signed int, vector signed int); 34088 int vec_any_eq (vector unsigned int, vector bool int); 34089 int vec_any_eq (vector unsigned int, vector unsigned int); 34090 int vec_any_eq (vector bool int, vector bool int); 34091 int vec_any_eq (vector bool int, vector unsigned int); 34092 int vec_any_eq (vector bool int, vector signed int); 34093 int vec_any_eq (vector float, vector float); 34094 34095 int vec_any_ge (vector signed char, vector bool char); 34096 int vec_any_ge (vector unsigned char, vector bool char); 34097 int vec_any_ge (vector unsigned char, vector unsigned char); 34098 int vec_any_ge (vector signed char, vector signed char); 34099 int vec_any_ge (vector bool char, vector unsigned char); 34100 int vec_any_ge (vector bool char, vector signed char); 34101 int vec_any_ge (vector unsigned short, vector bool short); 34102 int vec_any_ge (vector unsigned short, vector unsigned short); 34103 int vec_any_ge (vector signed short, vector signed short); 34104 int vec_any_ge (vector signed short, vector bool short); 34105 int vec_any_ge (vector bool short, vector unsigned short); 34106 int vec_any_ge (vector bool short, vector signed short); 34107 int vec_any_ge (vector signed int, vector bool int); 34108 int vec_any_ge (vector unsigned int, vector bool int); 34109 int vec_any_ge (vector unsigned int, vector unsigned int); 34110 int vec_any_ge (vector signed int, vector signed int); 34111 int vec_any_ge (vector bool int, vector unsigned int); 34112 int vec_any_ge (vector bool int, vector signed int); 34113 int vec_any_ge (vector float, vector float); 34114 34115 int vec_any_gt (vector bool char, vector unsigned char); 34116 int vec_any_gt (vector unsigned char, vector bool char); 34117 int vec_any_gt (vector unsigned char, vector unsigned char); 34118 int vec_any_gt (vector bool char, vector signed char); 34119 int vec_any_gt (vector signed char, vector bool char); 34120 int vec_any_gt (vector signed char, vector signed char); 34121 int vec_any_gt (vector bool short, vector unsigned short); 34122 int vec_any_gt (vector unsigned short, vector bool short); 34123 int vec_any_gt (vector unsigned short, vector unsigned short); 34124 int vec_any_gt (vector bool short, vector signed short); 34125 int vec_any_gt (vector signed short, vector bool short); 34126 int vec_any_gt (vector signed short, vector signed short); 34127 int vec_any_gt (vector bool int, vector unsigned int); 34128 int vec_any_gt (vector unsigned int, vector bool int); 34129 int vec_any_gt (vector unsigned int, vector unsigned int); 34130 int vec_any_gt (vector bool int, vector signed int); 34131 int vec_any_gt (vector signed int, vector bool int); 34132 int vec_any_gt (vector signed int, vector signed int); 34133 int vec_any_gt (vector float, vector float); 34134 34135 int vec_any_le (vector bool char, vector unsigned char); 34136 int vec_any_le (vector unsigned char, vector bool char); 34137 int vec_any_le (vector unsigned char, vector unsigned char); 34138 int vec_any_le (vector bool char, vector signed char); 34139 int vec_any_le (vector signed char, vector bool char); 34140 int vec_any_le (vector signed char, vector signed char); 34141 int vec_any_le (vector bool short, vector unsigned short); 34142 int vec_any_le (vector unsigned short, vector bool short); 34143 int vec_any_le (vector unsigned short, vector unsigned short); 34144 int vec_any_le (vector bool short, vector signed short); 34145 int vec_any_le (vector signed short, vector bool short); 34146 int vec_any_le (vector signed short, vector signed short); 34147 int vec_any_le (vector bool int, vector unsigned int); 34148 int vec_any_le (vector unsigned int, vector bool int); 34149 int vec_any_le (vector unsigned int, vector unsigned int); 34150 int vec_any_le (vector bool int, vector signed int); 34151 int vec_any_le (vector signed int, vector bool int); 34152 int vec_any_le (vector signed int, vector signed int); 34153 int vec_any_le (vector float, vector float); 34154 34155 int vec_any_lt (vector bool char, vector unsigned char); 34156 int vec_any_lt (vector unsigned char, vector bool char); 34157 int vec_any_lt (vector unsigned char, vector unsigned char); 34158 int vec_any_lt (vector bool char, vector signed char); 34159 int vec_any_lt (vector signed char, vector bool char); 34160 int vec_any_lt (vector signed char, vector signed char); 34161 int vec_any_lt (vector bool short, vector unsigned short); 34162 int vec_any_lt (vector unsigned short, vector bool short); 34163 int vec_any_lt (vector unsigned short, vector unsigned short); 34164 int vec_any_lt (vector bool short, vector signed short); 34165 int vec_any_lt (vector signed short, vector bool short); 34166 int vec_any_lt (vector signed short, vector signed short); 34167 int vec_any_lt (vector bool int, vector unsigned int); 34168 int vec_any_lt (vector unsigned int, vector bool int); 34169 int vec_any_lt (vector unsigned int, vector unsigned int); 34170 int vec_any_lt (vector bool int, vector signed int); 34171 int vec_any_lt (vector signed int, vector bool int); 34172 int vec_any_lt (vector signed int, vector signed int); 34173 int vec_any_lt (vector float, vector float); 34174 34175 int vec_any_nan (vector float); 34176 34177 int vec_any_ne (vector signed char, vector bool char); 34178 int vec_any_ne (vector signed char, vector signed char); 34179 int vec_any_ne (vector unsigned char, vector bool char); 34180 int vec_any_ne (vector unsigned char, vector unsigned char); 34181 int vec_any_ne (vector bool char, vector bool char); 34182 int vec_any_ne (vector bool char, vector unsigned char); 34183 int vec_any_ne (vector bool char, vector signed char); 34184 int vec_any_ne (vector signed short, vector bool short); 34185 int vec_any_ne (vector signed short, vector signed short); 34186 int vec_any_ne (vector unsigned short, vector bool short); 34187 int vec_any_ne (vector unsigned short, vector unsigned short); 34188 int vec_any_ne (vector bool short, vector bool short); 34189 int vec_any_ne (vector bool short, vector unsigned short); 34190 int vec_any_ne (vector bool short, vector signed short); 34191 int vec_any_ne (vector pixel, vector pixel); 34192 int vec_any_ne (vector signed int, vector bool int); 34193 int vec_any_ne (vector signed int, vector signed int); 34194 int vec_any_ne (vector unsigned int, vector bool int); 34195 int vec_any_ne (vector unsigned int, vector unsigned int); 34196 int vec_any_ne (vector bool int, vector bool int); 34197 int vec_any_ne (vector bool int, vector unsigned int); 34198 int vec_any_ne (vector bool int, vector signed int); 34199 int vec_any_ne (vector float, vector float); 34200 34201 int vec_any_nge (vector float, vector float); 34202 34203 int vec_any_ngt (vector float, vector float); 34204 34205 int vec_any_nle (vector float, vector float); 34206 34207 int vec_any_nlt (vector float, vector float); 34208 34209 int vec_any_numeric (vector float); 34210 34211 int vec_any_out (vector float, vector float); 34212 34213 34214 File: gcc.info, Node: SPARC VIS Built-in Functions, Next: SPU Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins 34215 34216 5.50.13 SPARC VIS Built-in Functions 34217 ------------------------------------ 34218 34219 GCC supports SIMD operations on the SPARC using both the generic vector 34220 extensions (*note Vector Extensions::) as well as built-in functions for 34221 the SPARC Visual Instruction Set (VIS). When you use the `-mvis' 34222 switch, the VIS extension is exposed as the following built-in 34223 functions: 34224 34225 typedef int v2si __attribute__ ((vector_size (8))); 34226 typedef short v4hi __attribute__ ((vector_size (8))); 34227 typedef short v2hi __attribute__ ((vector_size (4))); 34228 typedef char v8qi __attribute__ ((vector_size (8))); 34229 typedef char v4qi __attribute__ ((vector_size (4))); 34230 34231 void * __builtin_vis_alignaddr (void *, long); 34232 int64_t __builtin_vis_faligndatadi (int64_t, int64_t); 34233 v2si __builtin_vis_faligndatav2si (v2si, v2si); 34234 v4hi __builtin_vis_faligndatav4hi (v4si, v4si); 34235 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi); 34236 34237 v4hi __builtin_vis_fexpand (v4qi); 34238 34239 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi); 34240 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi); 34241 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi); 34242 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi); 34243 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi); 34244 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi); 34245 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi); 34246 34247 v4qi __builtin_vis_fpack16 (v4hi); 34248 v8qi __builtin_vis_fpack32 (v2si, v2si); 34249 v2hi __builtin_vis_fpackfix (v2si); 34250 v8qi __builtin_vis_fpmerge (v4qi, v4qi); 34251 34252 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t); 34253 34254 34255 File: gcc.info, Node: SPU Built-in Functions, Prev: SPARC VIS Built-in Functions, Up: Target Builtins 34256 34257 5.50.14 SPU Built-in Functions 34258 ------------------------------ 34259 34260 GCC provides extensions for the SPU processor as described in the 34261 Sony/Toshiba/IBM SPU Language Extensions Specification, which can be 34262 found at `http://cell.scei.co.jp/' or 34263 `http://www.ibm.com/developerworks/power/cell/'. GCC's implementation 34264 differs in several ways. 34265 34266 * The optional extension of specifying vector constants in 34267 parentheses is not supported. 34268 34269 * A vector initializer requires no cast if the vector constant is of 34270 the same type as the variable it is initializing. 34271 34272 * If `signed' or `unsigned' is omitted, the signedness of the vector 34273 type is the default signedness of the base type. The default 34274 varies depending on the operating system, so a portable program 34275 should always specify the signedness. 34276 34277 * By default, the keyword `__vector' is added. The macro `vector' is 34278 defined in `<spu_intrinsics.h>' and can be undefined. 34279 34280 * GCC allows using a `typedef' name as the type specifier for a 34281 vector type. 34282 34283 * For C, overloaded functions are implemented with macros so the 34284 following does not work: 34285 34286 spu_add ((vector signed int){1, 2, 3, 4}, foo); 34287 34288 Since `spu_add' is a macro, the vector constant in the example is 34289 treated as four separate arguments. Wrap the entire argument in 34290 parentheses for this to work. 34291 34292 * The extended version of `__builtin_expect' is not supported. 34293 34294 34295 _Note:_ Only the interface described in the aforementioned 34296 specification is supported. Internally, GCC uses built-in functions to 34297 implement the required functionality, but these are not supported and 34298 are subject to change without notice. 34299 34300 34301 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions 34302 34303 5.51 Format Checks Specific to Particular Target Machines 34304 ========================================================= 34305 34306 For some target machines, GCC supports additional options to the format 34307 attribute (*note Declaring Attributes of Functions: Function 34308 Attributes.). 34309 34310 * Menu: 34311 34312 * Solaris Format Checks:: 34313 34314 34315 File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks 34316 34317 5.51.1 Solaris Format Checks 34318 ---------------------------- 34319 34320 Solaris targets support the `cmn_err' (or `__cmn_err__') format check. 34321 `cmn_err' accepts a subset of the standard `printf' conversions, and 34322 the two-argument `%b' conversion for displaying bit-fields. See the 34323 Solaris man page for `cmn_err' for more information. 34324 34325 34326 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions 34327 34328 5.52 Pragmas Accepted by GCC 34329 ============================ 34330 34331 GCC supports several types of pragmas, primarily in order to compile 34332 code originally written for other compilers. Note that in general we 34333 do not recommend the use of pragmas; *Note Function Attributes::, for 34334 further explanation. 34335 34336 * Menu: 34337 34338 * ARM Pragmas:: 34339 * M32C Pragmas:: 34340 * RS/6000 and PowerPC Pragmas:: 34341 * Darwin Pragmas:: 34342 * Solaris Pragmas:: 34343 * Symbol-Renaming Pragmas:: 34344 * Structure-Packing Pragmas:: 34345 * Weak Pragmas:: 34346 * Diagnostic Pragmas:: 34347 * Visibility Pragmas:: 34348 * Push/Pop Macro Pragmas:: 34349 * Function Specific Option Pragmas:: 34350 34351 34352 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas 34353 34354 5.52.1 ARM Pragmas 34355 ------------------ 34356 34357 The ARM target defines pragmas for controlling the default addition of 34358 `long_call' and `short_call' attributes to functions. *Note Function 34359 Attributes::, for information about the effects of these attributes. 34360 34361 `long_calls' 34362 Set all subsequent functions to have the `long_call' attribute. 34363 34364 `no_long_calls' 34365 Set all subsequent functions to have the `short_call' attribute. 34366 34367 `long_calls_off' 34368 Do not affect the `long_call' or `short_call' attributes of 34369 subsequent functions. 34370 34371 34372 File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas 34373 34374 5.52.2 M32C Pragmas 34375 ------------------- 34376 34377 `memregs NUMBER' 34378 Overrides the command line option `-memregs=' for the current 34379 file. Use with care! This pragma must be before any function in 34380 the file, and mixing different memregs values in different objects 34381 may make them incompatible. This pragma is useful when a 34382 performance-critical function uses a memreg for temporary values, 34383 as it may allow you to reduce the number of memregs used. 34384 34385 34386 34387 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas 34388 34389 5.52.3 RS/6000 and PowerPC Pragmas 34390 ---------------------------------- 34391 34392 The RS/6000 and PowerPC targets define one pragma for controlling 34393 whether or not the `longcall' attribute is added to function 34394 declarations by default. This pragma overrides the `-mlongcall' 34395 option, but not the `longcall' and `shortcall' attributes. *Note 34396 RS/6000 and PowerPC Options::, for more information about when long 34397 calls are and are not necessary. 34398 34399 `longcall (1)' 34400 Apply the `longcall' attribute to all subsequent function 34401 declarations. 34402 34403 `longcall (0)' 34404 Do not apply the `longcall' attribute to subsequent function 34405 declarations. 34406 34407 34408 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas 34409 34410 5.52.4 Darwin Pragmas 34411 --------------------- 34412 34413 The following pragmas are available for all architectures running the 34414 Darwin operating system. These are useful for compatibility with other 34415 Mac OS compilers. 34416 34417 `mark TOKENS...' 34418 This pragma is accepted, but has no effect. 34419 34420 `options align=ALIGNMENT' 34421 This pragma sets the alignment of fields in structures. The 34422 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or 34423 `power', to emulate PowerPC alignment. Uses of this pragma nest 34424 properly; to restore the previous setting, use `reset' for the 34425 ALIGNMENT. 34426 34427 `segment TOKENS...' 34428 This pragma is accepted, but has no effect. 34429 34430 `unused (VAR [, VAR]...)' 34431 This pragma declares variables to be possibly unused. GCC will not 34432 produce warnings for the listed variables. The effect is similar 34433 to that of the `unused' attribute, except that this pragma may 34434 appear anywhere within the variables' scopes. 34435 34436 34437 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas 34438 34439 5.52.5 Solaris Pragmas 34440 ---------------------- 34441 34442 The Solaris target supports `#pragma redefine_extname' (*note 34443 Symbol-Renaming Pragmas::). It also supports additional `#pragma' 34444 directives for compatibility with the system compiler. 34445 34446 `align ALIGNMENT (VARIABLE [, VARIABLE]...)' 34447 Increase the minimum alignment of each VARIABLE to ALIGNMENT. 34448 This is the same as GCC's `aligned' attribute *note Variable 34449 Attributes::). Macro expansion occurs on the arguments to this 34450 pragma when compiling C and Objective-C. It does not currently 34451 occur when compiling C++, but this is a bug which may be fixed in 34452 a future release. 34453 34454 `fini (FUNCTION [, FUNCTION]...)' 34455 This pragma causes each listed FUNCTION to be called after main, 34456 or during shared module unloading, by adding a call to the `.fini' 34457 section. 34458 34459 `init (FUNCTION [, FUNCTION]...)' 34460 This pragma causes each listed FUNCTION to be called during 34461 initialization (before `main') or during shared module loading, by 34462 adding a call to the `.init' section. 34463 34464 34465 34466 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas 34467 34468 5.52.6 Symbol-Renaming Pragmas 34469 ------------------------------ 34470 34471 For compatibility with the Solaris and Tru64 UNIX system headers, GCC 34472 supports two `#pragma' directives which change the name used in 34473 assembly for a given declaration. These pragmas are only available on 34474 platforms whose system headers need them. To get this effect on all 34475 platforms supported by GCC, use the asm labels extension (*note Asm 34476 Labels::). 34477 34478 `redefine_extname OLDNAME NEWNAME' 34479 This pragma gives the C function OLDNAME the assembly symbol 34480 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will 34481 be defined if this pragma is available (currently only on Solaris). 34482 34483 `extern_prefix STRING' 34484 This pragma causes all subsequent external function and variable 34485 declarations to have STRING prepended to their assembly symbols. 34486 This effect may be terminated with another `extern_prefix' pragma 34487 whose argument is an empty string. The preprocessor macro 34488 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is 34489 available (currently only on Tru64 UNIX). 34490 34491 These pragmas and the asm labels extension interact in a complicated 34492 manner. Here are some corner cases you may want to be aware of. 34493 34494 1. Both pragmas silently apply only to declarations with external 34495 linkage. Asm labels do not have this restriction. 34496 34497 2. In C++, both pragmas silently apply only to declarations with "C" 34498 linkage. Again, asm labels do not have this restriction. 34499 34500 3. If any of the three ways of changing the assembly name of a 34501 declaration is applied to a declaration whose assembly name has 34502 already been determined (either by a previous use of one of these 34503 features, or because the compiler needed the assembly name in 34504 order to generate code), and the new name is different, a warning 34505 issues and the name does not change. 34506 34507 4. The OLDNAME used by `#pragma redefine_extname' is always the 34508 C-language name. 34509 34510 5. If `#pragma extern_prefix' is in effect, and a declaration occurs 34511 with an asm label attached, the prefix is silently ignored for 34512 that declaration. 34513 34514 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to 34515 the same declaration, whichever triggered first wins, and a 34516 warning issues if they contradict each other. (We would like to 34517 have `#pragma redefine_extname' always win, for consistency with 34518 asm labels, but if `#pragma extern_prefix' triggers first we have 34519 no way of knowing that that happened.) 34520 34521 34522 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas 34523 34524 5.52.7 Structure-Packing Pragmas 34525 -------------------------------- 34526 34527 For compatibility with Microsoft Windows compilers, GCC supports a set 34528 of `#pragma' directives which change the maximum alignment of members 34529 of structures (other than zero-width bitfields), unions, and classes 34530 subsequently defined. The N value below always is required to be a 34531 small power of two and specifies the new alignment in bytes. 34532 34533 1. `#pragma pack(N)' simply sets the new alignment. 34534 34535 2. `#pragma pack()' sets the alignment to the one that was in effect 34536 when compilation started (see also command line option 34537 `-fpack-struct[=<n>]' *note Code Gen Options::). 34538 34539 3. `#pragma pack(push[,N])' pushes the current alignment setting on 34540 an internal stack and then optionally sets the new alignment. 34541 34542 4. `#pragma pack(pop)' restores the alignment setting to the one 34543 saved at the top of the internal stack (and removes that stack 34544 entry). Note that `#pragma pack([N])' does not influence this 34545 internal stack; thus it is possible to have `#pragma pack(push)' 34546 followed by multiple `#pragma pack(N)' instances and finalized by 34547 a single `#pragma pack(pop)'. 34548 34549 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma' 34550 which lays out a structure as the documented `__attribute__ 34551 ((ms_struct))'. 34552 1. `#pragma ms_struct on' turns on the layout for structures declared. 34553 34554 2. `#pragma ms_struct off' turns off the layout for structures 34555 declared. 34556 34557 3. `#pragma ms_struct reset' goes back to the default layout. 34558 34559 34560 File: gcc.info, Node: Weak Pragmas, Next: Diagnostic Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas 34561 34562 5.52.8 Weak Pragmas 34563 ------------------- 34564 34565 For compatibility with SVR4, GCC supports a set of `#pragma' directives 34566 for declaring symbols to be weak, and defining weak aliases. 34567 34568 `#pragma weak SYMBOL' 34569 This pragma declares SYMBOL to be weak, as if the declaration had 34570 the attribute of the same name. The pragma may appear before or 34571 after the declaration of SYMBOL, but must appear before either its 34572 first use or its definition. It is not an error for SYMBOL to 34573 never be defined at all. 34574 34575 `#pragma weak SYMBOL1 = SYMBOL2' 34576 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is 34577 an error if SYMBOL2 is not defined in the current translation unit. 34578 34579 34580 File: gcc.info, Node: Diagnostic Pragmas, Next: Visibility Pragmas, Prev: Weak Pragmas, Up: Pragmas 34581 34582 5.52.9 Diagnostic Pragmas 34583 ------------------------- 34584 34585 GCC allows the user to selectively enable or disable certain types of 34586 diagnostics, and change the kind of the diagnostic. For example, a 34587 project's policy might require that all sources compile with `-Werror' 34588 but certain files might have exceptions allowing specific types of 34589 warnings. Or, a project might selectively enable diagnostics and treat 34590 them as errors depending on which preprocessor macros are defined. 34591 34592 `#pragma GCC diagnostic KIND OPTION' 34593 Modifies the disposition of a diagnostic. Note that not all 34594 diagnostics are modifiable; at the moment only warnings (normally 34595 controlled by `-W...') can be controlled, and not all of them. 34596 Use `-fdiagnostics-show-option' to determine which diagnostics are 34597 controllable and which option controls them. 34598 34599 KIND is `error' to treat this diagnostic as an error, `warning' to 34600 treat it like a warning (even if `-Werror' is in effect), or 34601 `ignored' if the diagnostic is to be ignored. OPTION is a double 34602 quoted string which matches the command line option. 34603 34604 #pragma GCC diagnostic warning "-Wformat" 34605 #pragma GCC diagnostic error "-Wformat" 34606 #pragma GCC diagnostic ignored "-Wformat" 34607 34608 Note that these pragmas override any command line options. Also, 34609 while it is syntactically valid to put these pragmas anywhere in 34610 your sources, the only supported location for them is before any 34611 data or functions are defined. Doing otherwise may result in 34612 unpredictable results depending on how the optimizer manages your 34613 sources. If the same option is listed multiple times, the last 34614 one specified is the one that is in effect. This pragma is not 34615 intended to be a general purpose replacement for command line 34616 options, but for implementing strict control over project policies. 34617 34618 34619 GCC also offers a simple mechanism for printing messages during 34620 compilation. 34621 34622 `#pragma message STRING' 34623 Prints STRING as a compiler message on compilation. The message 34624 is informational only, and is neither a compilation warning nor an 34625 error. 34626 34627 #pragma message "Compiling " __FILE__ "..." 34628 34629 STRING may be parenthesized, and is printed with location 34630 information. For example, 34631 34632 #define DO_PRAGMA(x) _Pragma (#x) 34633 #define TODO(x) DO_PRAGMA(message ("TODO - " #x)) 34634 34635 TODO(Remember to fix this) 34636 34637 prints `/tmp/file.c:4: note: #pragma message: TODO - Remember to 34638 fix this'. 34639 34640 34641 34642 File: gcc.info, Node: Visibility Pragmas, Next: Push/Pop Macro Pragmas, Prev: Diagnostic Pragmas, Up: Pragmas 34643 34644 5.52.10 Visibility Pragmas 34645 -------------------------- 34646 34647 `#pragma GCC visibility push(VISIBILITY)' 34648 `#pragma GCC visibility pop' 34649 This pragma allows the user to set the visibility for multiple 34650 declarations without having to give each a visibility attribute 34651 *Note Function Attributes::, for more information about visibility 34652 and the attribute syntax. 34653 34654 In C++, `#pragma GCC visibility' affects only namespace-scope 34655 declarations. Class members and template specializations are not 34656 affected; if you want to override the visibility for a particular 34657 member or instantiation, you must use an attribute. 34658 34659 34660 34661 File: gcc.info, Node: Push/Pop Macro Pragmas, Next: Function Specific Option Pragmas, Prev: Visibility Pragmas, Up: Pragmas 34662 34663 5.52.11 Push/Pop Macro Pragmas 34664 ------------------------------ 34665 34666 For compatibility with Microsoft Windows compilers, GCC supports 34667 `#pragma push_macro("MACRO_NAME")' and `#pragma 34668 pop_macro("MACRO_NAME")'. 34669 34670 `#pragma push_macro("MACRO_NAME")' 34671 This pragma saves the value of the macro named as MACRO_NAME to 34672 the top of the stack for this macro. 34673 34674 `#pragma pop_macro("MACRO_NAME")' 34675 This pragma sets the value of the macro named as MACRO_NAME to the 34676 value on top of the stack for this macro. If the stack for 34677 MACRO_NAME is empty, the value of the macro remains unchanged. 34678 34679 For example: 34680 34681 #define X 1 34682 #pragma push_macro("X") 34683 #undef X 34684 #define X -1 34685 #pragma pop_macro("X") 34686 int x [X]; 34687 34688 In this example, the definition of X as 1 is saved by `#pragma 34689 push_macro' and restored by `#pragma pop_macro'. 34690 34691 34692 File: gcc.info, Node: Function Specific Option Pragmas, Prev: Push/Pop Macro Pragmas, Up: Pragmas 34693 34694 5.52.12 Function Specific Option Pragmas 34695 ---------------------------------------- 34696 34697 `#pragma GCC target ("STRING"...)' 34698 This pragma allows you to set target specific options for functions 34699 defined later in the source file. One or more strings can be 34700 specified. Each function that is defined after this point will be 34701 as if `attribute((target("STRING")))' was specified for that 34702 function. The parenthesis around the options is optional. *Note 34703 Function Attributes::, for more information about the `target' 34704 attribute and the attribute syntax. 34705 34706 The `#pragma GCC target' pragma is not implemented in GCC versions 34707 earlier than 4.4, and is currently only implemented for the 386 34708 and x86_64 backends. 34709 34710 `#pragma GCC optimize ("STRING"...)' 34711 This pragma allows you to set global optimization options for 34712 functions defined later in the source file. One or more strings 34713 can be specified. Each function that is defined after this point 34714 will be as if `attribute((optimize("STRING")))' was specified for 34715 that function. The parenthesis around the options is optional. 34716 *Note Function Attributes::, for more information about the 34717 `optimize' attribute and the attribute syntax. 34718 34719 The `#pragma GCC optimize' pragma is not implemented in GCC 34720 versions earlier than 4.4. 34721 34722 `#pragma GCC push_options' 34723 `#pragma GCC pop_options' 34724 These pragmas maintain a stack of the current target and 34725 optimization options. It is intended for include files where you 34726 temporarily want to switch to using a different `#pragma GCC 34727 target' or `#pragma GCC optimize' and then to pop back to the 34728 previous options. 34729 34730 The `#pragma GCC push_options' and `#pragma GCC pop_options' 34731 pragmas are not implemented in GCC versions earlier than 4.4. 34732 34733 `#pragma GCC reset_options' 34734 This pragma clears the current `#pragma GCC target' and `#pragma 34735 GCC optimize' to use the default switches as specified on the 34736 command line. 34737 34738 The `#pragma GCC reset_options' pragma is not implemented in GCC 34739 versions earlier than 4.4. 34740 34741 34742 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions 34743 34744 5.53 Unnamed struct/union fields within structs/unions 34745 ====================================================== 34746 34747 For compatibility with other compilers, GCC allows you to define a 34748 structure or union that contains, as fields, structures and unions 34749 without names. For example: 34750 34751 struct { 34752 int a; 34753 union { 34754 int b; 34755 float c; 34756 }; 34757 int d; 34758 } foo; 34759 34760 In this example, the user would be able to access members of the 34761 unnamed union with code like `foo.b'. Note that only unnamed structs 34762 and unions are allowed, you may not have, for example, an unnamed `int'. 34763 34764 You must never create such structures that cause ambiguous field 34765 definitions. For example, this structure: 34766 34767 struct { 34768 int a; 34769 struct { 34770 int a; 34771 }; 34772 } foo; 34773 34774 It is ambiguous which `a' is being referred to with `foo.a'. Such 34775 constructs are not supported and must be avoided. In the future, such 34776 constructs may be detected and treated as compilation errors. 34777 34778 Unless `-fms-extensions' is used, the unnamed field must be a 34779 structure or union definition without a tag (for example, `struct { int 34780 a; };'). If `-fms-extensions' is used, the field may also be a 34781 definition with a tag such as `struct foo { int a; };', a reference to 34782 a previously defined structure or union such as `struct foo;', or a 34783 reference to a `typedef' name for a previously defined structure or 34784 union type. 34785 34786 34787 File: gcc.info, Node: Thread-Local, Next: Binary constants, Prev: Unnamed Fields, Up: C Extensions 34788 34789 5.54 Thread-Local Storage 34790 ========================= 34791 34792 Thread-local storage (TLS) is a mechanism by which variables are 34793 allocated such that there is one instance of the variable per extant 34794 thread. The run-time model GCC uses to implement this originates in 34795 the IA-64 processor-specific ABI, but has since been migrated to other 34796 processors as well. It requires significant support from the linker 34797 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and 34798 `libpthread.so'), so it is not available everywhere. 34799 34800 At the user level, the extension is visible with a new storage class 34801 keyword: `__thread'. For example: 34802 34803 __thread int i; 34804 extern __thread struct state s; 34805 static __thread char *p; 34806 34807 The `__thread' specifier may be used alone, with the `extern' or 34808 `static' specifiers, but with no other storage class specifier. When 34809 used with `extern' or `static', `__thread' must appear immediately 34810 after the other storage class specifier. 34811 34812 The `__thread' specifier may be applied to any global, file-scoped 34813 static, function-scoped static, or static data member of a class. It 34814 may not be applied to block-scoped automatic or non-static data member. 34815 34816 When the address-of operator is applied to a thread-local variable, it 34817 is evaluated at run-time and returns the address of the current thread's 34818 instance of that variable. An address so obtained may be used by any 34819 thread. When a thread terminates, any pointers to thread-local 34820 variables in that thread become invalid. 34821 34822 No static initialization may refer to the address of a thread-local 34823 variable. 34824 34825 In C++, if an initializer is present for a thread-local variable, it 34826 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++ 34827 standard. 34828 34829 See ELF Handling For Thread-Local Storage 34830 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of 34831 the four thread-local storage addressing models, and how the run-time 34832 is expected to function. 34833 34834 * Menu: 34835 34836 * C99 Thread-Local Edits:: 34837 * C++98 Thread-Local Edits:: 34838 34839 34840 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local 34841 34842 5.54.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage 34843 ------------------------------------------------------- 34844 34845 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that 34846 document the exact semantics of the language extension. 34847 34848 * `5.1.2 Execution environments' 34849 34850 Add new text after paragraph 1 34851 34852 Within either execution environment, a "thread" is a flow of 34853 control within a program. It is implementation defined 34854 whether or not there may be more than one thread associated 34855 with a program. It is implementation defined how threads 34856 beyond the first are created, the name and type of the 34857 function called at thread startup, and how threads may be 34858 terminated. However, objects with thread storage duration 34859 shall be initialized before thread startup. 34860 34861 * `6.2.4 Storage durations of objects' 34862 34863 Add new text before paragraph 3 34864 34865 An object whose identifier is declared with the storage-class 34866 specifier `__thread' has "thread storage duration". Its 34867 lifetime is the entire execution of the thread, and its 34868 stored value is initialized only once, prior to thread 34869 startup. 34870 34871 * `6.4.1 Keywords' 34872 34873 Add `__thread'. 34874 34875 * `6.7.1 Storage-class specifiers' 34876 34877 Add `__thread' to the list of storage class specifiers in 34878 paragraph 1. 34879 34880 Change paragraph 2 to 34881 34882 With the exception of `__thread', at most one storage-class 34883 specifier may be given [...]. The `__thread' specifier may 34884 be used alone, or immediately following `extern' or `static'. 34885 34886 Add new text after paragraph 6 34887 34888 The declaration of an identifier for a variable that has 34889 block scope that specifies `__thread' shall also specify 34890 either `extern' or `static'. 34891 34892 The `__thread' specifier shall be used only with variables. 34893 34894 34895 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local 34896 34897 5.54.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage 34898 -------------------------------------------------------- 34899 34900 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98) 34901 that document the exact semantics of the language extension. 34902 34903 * [intro.execution] 34904 34905 New text after paragraph 4 34906 34907 A "thread" is a flow of control within the abstract machine. 34908 It is implementation defined whether or not there may be more 34909 than one thread. 34910 34911 New text after paragraph 7 34912 34913 It is unspecified whether additional action must be taken to 34914 ensure when and whether side effects are visible to other 34915 threads. 34916 34917 * [lex.key] 34918 34919 Add `__thread'. 34920 34921 * [basic.start.main] 34922 34923 Add after paragraph 5 34924 34925 The thread that begins execution at the `main' function is 34926 called the "main thread". It is implementation defined how 34927 functions beginning threads other than the main thread are 34928 designated or typed. A function so designated, as well as 34929 the `main' function, is called a "thread startup function". 34930 It is implementation defined what happens if a thread startup 34931 function returns. It is implementation defined what happens 34932 to other threads when any thread calls `exit'. 34933 34934 * [basic.start.init] 34935 34936 Add after paragraph 4 34937 34938 The storage for an object of thread storage duration shall be 34939 statically initialized before the first statement of the 34940 thread startup function. An object of thread storage 34941 duration shall not require dynamic initialization. 34942 34943 * [basic.start.term] 34944 34945 Add after paragraph 3 34946 34947 The type of an object with thread storage duration shall not 34948 have a non-trivial destructor, nor shall it be an array type 34949 whose elements (directly or indirectly) have non-trivial 34950 destructors. 34951 34952 * [basic.stc] 34953 34954 Add "thread storage duration" to the list in paragraph 1. 34955 34956 Change paragraph 2 34957 34958 Thread, static, and automatic storage durations are 34959 associated with objects introduced by declarations [...]. 34960 34961 Add `__thread' to the list of specifiers in paragraph 3. 34962 34963 * [basic.stc.thread] 34964 34965 New section before [basic.stc.static] 34966 34967 The keyword `__thread' applied to a non-local object gives the 34968 object thread storage duration. 34969 34970 A local variable or class data member declared both `static' 34971 and `__thread' gives the variable or member thread storage 34972 duration. 34973 34974 * [basic.stc.static] 34975 34976 Change paragraph 1 34977 34978 All objects which have neither thread storage duration, 34979 dynamic storage duration nor are local [...]. 34980 34981 * [dcl.stc] 34982 34983 Add `__thread' to the list in paragraph 1. 34984 34985 Change paragraph 1 34986 34987 With the exception of `__thread', at most one 34988 STORAGE-CLASS-SPECIFIER shall appear in a given 34989 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used 34990 alone, or immediately following the `extern' or `static' 34991 specifiers. [...] 34992 34993 Add after paragraph 5 34994 34995 The `__thread' specifier can be applied only to the names of 34996 objects and to anonymous unions. 34997 34998 * [class.mem] 34999 35000 Add after paragraph 6 35001 35002 Non-`static' members shall not be `__thread'. 35003 35004 35005 File: gcc.info, Node: Binary constants, Prev: Thread-Local, Up: C Extensions 35006 35007 5.55 Binary constants using the `0b' prefix 35008 =========================================== 35009 35010 Integer constants can be written as binary constants, consisting of a 35011 sequence of `0' and `1' digits, prefixed by `0b' or `0B'. This is 35012 particularly useful in environments that operate a lot on the bit-level 35013 (like microcontrollers). 35014 35015 The following statements are identical: 35016 35017 i = 42; 35018 i = 0x2a; 35019 i = 052; 35020 i = 0b101010; 35021 35022 The type of these constants follows the same rules as for octal or 35023 hexadecimal integer constants, so suffixes like `L' or `UL' can be 35024 applied. 35025 35026 35027 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top 35028 35029 6 Extensions to the C++ Language 35030 ******************************** 35031 35032 The GNU compiler provides these extensions to the C++ language (and you 35033 can also use most of the C language extensions in your C++ programs). 35034 If you want to write code that checks whether these features are 35035 available, you can test for the GNU compiler the same way as for C 35036 programs: check for a predefined macro `__GNUC__'. You can also use 35037 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros: 35038 (cpp)Common Predefined Macros.). 35039 35040 * Menu: 35041 35042 * Volatiles:: What constitutes an access to a volatile object. 35043 * Restricted Pointers:: C99 restricted pointers and references. 35044 * Vague Linkage:: Where G++ puts inlines, vtables and such. 35045 * C++ Interface:: You can use a single C++ header file for both 35046 declarations and definitions. 35047 * Template Instantiation:: Methods for ensuring that exactly one copy of 35048 each needed template instantiation is emitted. 35049 * Bound member functions:: You can extract a function pointer to the 35050 method denoted by a `->*' or `.*' expression. 35051 * C++ Attributes:: Variable, function, and type attributes for C++ only. 35052 * Namespace Association:: Strong using-directives for namespace association. 35053 * Type Traits:: Compiler support for type traits 35054 * Java Exceptions:: Tweaking exception handling to work with Java. 35055 * Deprecated Features:: Things will disappear from g++. 35056 * Backwards Compatibility:: Compatibilities with earlier definitions of C++. 35057 35058 35059 File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions 35060 35061 6.1 When is a Volatile Object Accessed? 35062 ======================================= 35063 35064 Both the C and C++ standard have the concept of volatile objects. These 35065 are normally accessed by pointers and used for accessing hardware. The 35066 standards encourage compilers to refrain from optimizations concerning 35067 accesses to volatile objects. The C standard leaves it implementation 35068 defined as to what constitutes a volatile access. The C++ standard 35069 omits to specify this, except to say that C++ should behave in a 35070 similar manner to C with respect to volatiles, where possible. The 35071 minimum either standard specifies is that at a sequence point all 35072 previous accesses to volatile objects have stabilized and no subsequent 35073 accesses have occurred. Thus an implementation is free to reorder and 35074 combine volatile accesses which occur between sequence points, but 35075 cannot do so for accesses across a sequence point. The use of 35076 volatiles does not allow you to violate the restriction on updating 35077 objects multiple times within a sequence point. 35078 35079 *Note Volatile qualifier and the C compiler: Qualifiers implementation. 35080 35081 The behavior differs slightly between C and C++ in the non-obvious 35082 cases: 35083 35084 volatile int *src = SOMEVALUE; 35085 *src; 35086 35087 With C, such expressions are rvalues, and GCC interprets this either 35088 as a read of the volatile object being pointed to or only as request to 35089 evaluate the side-effects. The C++ standard specifies that such 35090 expressions do not undergo lvalue to rvalue conversion, and that the 35091 type of the dereferenced object may be incomplete. The C++ standard 35092 does not specify explicitly that it is this lvalue to rvalue conversion 35093 which may be responsible for causing an access. However, there is 35094 reason to believe that it is, because otherwise certain simple 35095 expressions become undefined. However, because it would surprise most 35096 programmers, G++ treats dereferencing a pointer to volatile object of 35097 complete type when the value is unused as GCC would do for an 35098 equivalent type in C. When the object has incomplete type, G++ issues 35099 a warning; if you wish to force an error, you must force a conversion 35100 to rvalue with, for instance, a static cast. 35101 35102 When using a reference to volatile, G++ does not treat equivalent 35103 expressions as accesses to volatiles, but instead issues a warning that 35104 no volatile is accessed. The rationale for this is that otherwise it 35105 becomes difficult to determine where volatile access occur, and not 35106 possible to ignore the return value from functions returning volatile 35107 references. Again, if you wish to force a read, cast the reference to 35108 an rvalue. 35109 35110 35111 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions 35112 35113 6.2 Restricting Pointer Aliasing 35114 ================================ 35115 35116 As with the C front end, G++ understands the C99 feature of restricted 35117 pointers, specified with the `__restrict__', or `__restrict' type 35118 qualifier. Because you cannot compile C++ by specifying the `-std=c99' 35119 language flag, `restrict' is not a keyword in C++. 35120 35121 In addition to allowing restricted pointers, you can specify restricted 35122 references, which indicate that the reference is not aliased in the 35123 local context. 35124 35125 void fn (int *__restrict__ rptr, int &__restrict__ rref) 35126 { 35127 /* ... */ 35128 } 35129 35130 In the body of `fn', RPTR points to an unaliased integer and RREF 35131 refers to a (different) unaliased integer. 35132 35133 You may also specify whether a member function's THIS pointer is 35134 unaliased by using `__restrict__' as a member function qualifier. 35135 35136 void T::fn () __restrict__ 35137 { 35138 /* ... */ 35139 } 35140 35141 Within the body of `T::fn', THIS will have the effective definition `T 35142 *__restrict__ const this'. Notice that the interpretation of a 35143 `__restrict__' member function qualifier is different to that of 35144 `const' or `volatile' qualifier, in that it is applied to the pointer 35145 rather than the object. This is consistent with other compilers which 35146 implement restricted pointers. 35147 35148 As with all outermost parameter qualifiers, `__restrict__' is ignored 35149 in function definition matching. This means you only need to specify 35150 `__restrict__' in a function definition, rather than in a function 35151 prototype as well. 35152 35153 35154 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions 35155 35156 6.3 Vague Linkage 35157 ================= 35158 35159 There are several constructs in C++ which require space in the object 35160 file but are not clearly tied to a single translation unit. We say that 35161 these constructs have "vague linkage". Typically such constructs are 35162 emitted wherever they are needed, though sometimes we can be more 35163 clever. 35164 35165 Inline Functions 35166 Inline functions are typically defined in a header file which can 35167 be included in many different compilations. Hopefully they can 35168 usually be inlined, but sometimes an out-of-line copy is 35169 necessary, if the address of the function is taken or if inlining 35170 fails. In general, we emit an out-of-line copy in all translation 35171 units where one is needed. As an exception, we only emit inline 35172 virtual functions with the vtable, since it will always require a 35173 copy. 35174 35175 Local static variables and string constants used in an inline 35176 function are also considered to have vague linkage, since they 35177 must be shared between all inlined and out-of-line instances of 35178 the function. 35179 35180 VTables 35181 C++ virtual functions are implemented in most compilers using a 35182 lookup table, known as a vtable. The vtable contains pointers to 35183 the virtual functions provided by a class, and each object of the 35184 class contains a pointer to its vtable (or vtables, in some 35185 multiple-inheritance situations). If the class declares any 35186 non-inline, non-pure virtual functions, the first one is chosen as 35187 the "key method" for the class, and the vtable is only emitted in 35188 the translation unit where the key method is defined. 35189 35190 _Note:_ If the chosen key method is later defined as inline, the 35191 vtable will still be emitted in every translation unit which 35192 defines it. Make sure that any inline virtuals are declared 35193 inline in the class body, even if they are not defined there. 35194 35195 type_info objects 35196 C++ requires information about types to be written out in order to 35197 implement `dynamic_cast', `typeid' and exception handling. For 35198 polymorphic classes (classes with virtual functions), the type_info 35199 object is written out along with the vtable so that `dynamic_cast' 35200 can determine the dynamic type of a class object at runtime. For 35201 all other types, we write out the type_info object when it is 35202 used: when applying `typeid' to an expression, throwing an object, 35203 or referring to a type in a catch clause or exception 35204 specification. 35205 35206 Template Instantiations 35207 Most everything in this section also applies to template 35208 instantiations, but there are other options as well. *Note 35209 Where's the Template?: Template Instantiation. 35210 35211 35212 When used with GNU ld version 2.8 or later on an ELF system such as 35213 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of 35214 these constructs will be discarded at link time. This is known as 35215 COMDAT support. 35216 35217 On targets that don't support COMDAT, but do support weak symbols, GCC 35218 will use them. This way one copy will override all the others, but the 35219 unused copies will still take up space in the executable. 35220 35221 For targets which do not support either COMDAT or weak symbols, most 35222 entities with vague linkage will be emitted as local symbols to avoid 35223 duplicate definition errors from the linker. This will not happen for 35224 local statics in inlines, however, as having multiple copies will 35225 almost certainly break things. 35226 35227 *Note Declarations and Definitions in One Header: C++ Interface, for 35228 another way to control placement of these constructs. 35229 35230 35231 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions 35232 35233 6.4 #pragma interface and implementation 35234 ======================================== 35235 35236 `#pragma interface' and `#pragma implementation' provide the user with 35237 a way of explicitly directing the compiler to emit entities with vague 35238 linkage (and debugging information) in a particular translation unit. 35239 35240 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most 35241 cases, because of COMDAT support and the "key method" heuristic 35242 mentioned in *Note Vague Linkage::. Using them can actually cause your 35243 program to grow due to unnecessary out-of-line copies of inline 35244 functions. Currently (3.4) the only benefit of these `#pragma's is 35245 reduced duplication of debugging information, and that should be 35246 addressed soon on DWARF 2 targets with the use of COMDAT groups. 35247 35248 `#pragma interface' 35249 `#pragma interface "SUBDIR/OBJECTS.h"' 35250 Use this directive in _header files_ that define object classes, 35251 to save space in most of the object files that use those classes. 35252 Normally, local copies of certain information (backup copies of 35253 inline member functions, debugging information, and the internal 35254 tables that implement virtual functions) must be kept in each 35255 object file that includes class definitions. You can use this 35256 pragma to avoid such duplication. When a header file containing 35257 `#pragma interface' is included in a compilation, this auxiliary 35258 information will not be generated (unless the main input source 35259 file itself uses `#pragma implementation'). Instead, the object 35260 files will contain references to be resolved at link time. 35261 35262 The second form of this directive is useful for the case where you 35263 have multiple headers with the same name in different directories. 35264 If you use this form, you must specify the same string to `#pragma 35265 implementation'. 35266 35267 `#pragma implementation' 35268 `#pragma implementation "OBJECTS.h"' 35269 Use this pragma in a _main input file_, when you want full output 35270 from included header files to be generated (and made globally 35271 visible). The included header file, in turn, should use `#pragma 35272 interface'. Backup copies of inline member functions, debugging 35273 information, and the internal tables used to implement virtual 35274 functions are all generated in implementation files. 35275 35276 If you use `#pragma implementation' with no argument, it applies to 35277 an include file with the same basename(1) as your source file. 35278 For example, in `allclass.cc', giving just `#pragma implementation' 35279 by itself is equivalent to `#pragma implementation "allclass.h"'. 35280 35281 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as 35282 an implementation file whenever you would include it from 35283 `allclass.cc' even if you never specified `#pragma 35284 implementation'. This was deemed to be more trouble than it was 35285 worth, however, and disabled. 35286 35287 Use the string argument if you want a single implementation file to 35288 include code from multiple header files. (You must also use 35289 `#include' to include the header file; `#pragma implementation' 35290 only specifies how to use the file--it doesn't actually include 35291 it.) 35292 35293 There is no way to split up the contents of a single header file 35294 into multiple implementation files. 35295 35296 `#pragma implementation' and `#pragma interface' also have an effect 35297 on function inlining. 35298 35299 If you define a class in a header file marked with `#pragma 35300 interface', the effect on an inline function defined in that class is 35301 similar to an explicit `extern' declaration--the compiler emits no code 35302 at all to define an independent version of the function. Its 35303 definition is used only for inlining with its callers. 35304 35305 Conversely, when you include the same header file in a main source file 35306 that declares it as `#pragma implementation', the compiler emits code 35307 for the function itself; this defines a version of the function that 35308 can be found via pointers (or by callers compiled without inlining). 35309 If all calls to the function can be inlined, you can avoid emitting the 35310 function by compiling with `-fno-implement-inlines'. If any calls were 35311 not inlined, you will get linker errors. 35312 35313 ---------- Footnotes ---------- 35314 35315 (1) A file's "basename" was the name stripped of all leading path 35316 information and of trailing suffixes, such as `.h' or `.C' or `.cc'. 35317 35318 35319 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions 35320 35321 6.5 Where's the Template? 35322 ========================= 35323 35324 C++ templates are the first language feature to require more 35325 intelligence from the environment than one usually finds on a UNIX 35326 system. Somehow the compiler and linker have to make sure that each 35327 template instance occurs exactly once in the executable if it is needed, 35328 and not at all otherwise. There are two basic approaches to this 35329 problem, which are referred to as the Borland model and the Cfront 35330 model. 35331 35332 Borland model 35333 Borland C++ solved the template instantiation problem by adding 35334 the code equivalent of common blocks to their linker; the compiler 35335 emits template instances in each translation unit that uses them, 35336 and the linker collapses them together. The advantage of this 35337 model is that the linker only has to consider the object files 35338 themselves; there is no external complexity to worry about. This 35339 disadvantage is that compilation time is increased because the 35340 template code is being compiled repeatedly. Code written for this 35341 model tends to include definitions of all templates in the header 35342 file, since they must be seen to be instantiated. 35343 35344 Cfront model 35345 The AT&T C++ translator, Cfront, solved the template instantiation 35346 problem by creating the notion of a template repository, an 35347 automatically maintained place where template instances are 35348 stored. A more modern version of the repository works as follows: 35349 As individual object files are built, the compiler places any 35350 template definitions and instantiations encountered in the 35351 repository. At link time, the link wrapper adds in the objects in 35352 the repository and compiles any needed instances that were not 35353 previously emitted. The advantages of this model are more optimal 35354 compilation speed and the ability to use the system linker; to 35355 implement the Borland model a compiler vendor also needs to 35356 replace the linker. The disadvantages are vastly increased 35357 complexity, and thus potential for error; for some code this can be 35358 just as transparent, but in practice it can been very difficult to 35359 build multiple programs in one directory and one program in 35360 multiple directories. Code written for this model tends to 35361 separate definitions of non-inline member templates into a 35362 separate file, which should be compiled separately. 35363 35364 When used with GNU ld version 2.8 or later on an ELF system such as 35365 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the 35366 Borland model. On other systems, G++ implements neither automatic 35367 model. 35368 35369 A future version of G++ will support a hybrid model whereby the 35370 compiler will emit any instantiations for which the template definition 35371 is included in the compile, and store template definitions and 35372 instantiation context information into the object file for the rest. 35373 The link wrapper will extract that information as necessary and invoke 35374 the compiler to produce the remaining instantiations. The linker will 35375 then combine duplicate instantiations. 35376 35377 In the mean time, you have the following options for dealing with 35378 template instantiations: 35379 35380 1. Compile your template-using code with `-frepo'. The compiler will 35381 generate files with the extension `.rpo' listing all of the 35382 template instantiations used in the corresponding object files 35383 which could be instantiated there; the link wrapper, `collect2', 35384 will then update the `.rpo' files to tell the compiler where to 35385 place those instantiations and rebuild any affected object files. 35386 The link-time overhead is negligible after the first pass, as the 35387 compiler will continue to place the instantiations in the same 35388 files. 35389 35390 This is your best option for application code written for the 35391 Borland model, as it will just work. Code written for the Cfront 35392 model will need to be modified so that the template definitions 35393 are available at one or more points of instantiation; usually this 35394 is as simple as adding `#include <tmethods.cc>' to the end of each 35395 template header. 35396 35397 For library code, if you want the library to provide all of the 35398 template instantiations it needs, just try to link all of its 35399 object files together; the link will fail, but cause the 35400 instantiations to be generated as a side effect. Be warned, 35401 however, that this may cause conflicts if multiple libraries try 35402 to provide the same instantiations. For greater control, use 35403 explicit instantiation as described in the next option. 35404 35405 2. Compile your code with `-fno-implicit-templates' to disable the 35406 implicit generation of template instances, and explicitly 35407 instantiate all the ones you use. This approach requires more 35408 knowledge of exactly which instances you need than do the others, 35409 but it's less mysterious and allows greater control. You can 35410 scatter the explicit instantiations throughout your program, 35411 perhaps putting them in the translation units where the instances 35412 are used or the translation units that define the templates 35413 themselves; you can put all of the explicit instantiations you 35414 need into one big file; or you can create small files like 35415 35416 #include "Foo.h" 35417 #include "Foo.cc" 35418 35419 template class Foo<int>; 35420 template ostream& operator << 35421 (ostream&, const Foo<int>&); 35422 35423 for each of the instances you need, and create a template 35424 instantiation library from those. 35425 35426 If you are using Cfront-model code, you can probably get away with 35427 not using `-fno-implicit-templates' when compiling files that don't 35428 `#include' the member template definitions. 35429 35430 If you use one big file to do the instantiations, you may want to 35431 compile it without `-fno-implicit-templates' so you get all of the 35432 instances required by your explicit instantiations (but not by any 35433 other files) without having to specify them as well. 35434 35435 G++ has extended the template instantiation syntax given in the ISO 35436 standard to allow forward declaration of explicit instantiations 35437 (with `extern'), instantiation of the compiler support data for a 35438 template class (i.e. the vtable) without instantiating any of its 35439 members (with `inline'), and instantiation of only the static data 35440 members of a template class, without the support data or member 35441 functions (with (`static'): 35442 35443 extern template int max (int, int); 35444 inline template class Foo<int>; 35445 static template class Foo<int>; 35446 35447 3. Do nothing. Pretend G++ does implement automatic instantiation 35448 management. Code written for the Borland model will work fine, but 35449 each translation unit will contain instances of each of the 35450 templates it uses. In a large program, this can lead to an 35451 unacceptable amount of code duplication. 35452 35453 35454 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions 35455 35456 6.6 Extracting the function pointer from a bound pointer to member function 35457 =========================================================================== 35458 35459 In C++, pointer to member functions (PMFs) are implemented using a wide 35460 pointer of sorts to handle all the possible call mechanisms; the PMF 35461 needs to store information about how to adjust the `this' pointer, and 35462 if the function pointed to is virtual, where to find the vtable, and 35463 where in the vtable to look for the member function. If you are using 35464 PMFs in an inner loop, you should really reconsider that decision. If 35465 that is not an option, you can extract the pointer to the function that 35466 would be called for a given object/PMF pair and call it directly inside 35467 the inner loop, to save a bit of time. 35468 35469 Note that you will still be paying the penalty for the call through a 35470 function pointer; on most modern architectures, such a call defeats the 35471 branch prediction features of the CPU. This is also true of normal 35472 virtual function calls. 35473 35474 The syntax for this extension is 35475 35476 extern A a; 35477 extern int (A::*fp)(); 35478 typedef int (*fptr)(A *); 35479 35480 fptr p = (fptr)(a.*fp); 35481 35482 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no 35483 object is needed to obtain the address of the function. They can be 35484 converted to function pointers directly: 35485 35486 fptr p1 = (fptr)(&A::foo); 35487 35488 You must specify `-Wno-pmf-conversions' to use this extension. 35489 35490 35491 File: gcc.info, Node: C++ Attributes, Next: Namespace Association, Prev: Bound member functions, Up: C++ Extensions 35492 35493 6.7 C++-Specific Variable, Function, and Type Attributes 35494 ======================================================== 35495 35496 Some attributes only make sense for C++ programs. 35497 35498 `init_priority (PRIORITY)' 35499 In Standard C++, objects defined at namespace scope are guaranteed 35500 to be initialized in an order in strict accordance with that of 35501 their definitions _in a given translation unit_. No guarantee is 35502 made for initializations across translation units. However, GNU 35503 C++ allows users to control the order of initialization of objects 35504 defined at namespace scope with the `init_priority' attribute by 35505 specifying a relative PRIORITY, a constant integral expression 35506 currently bounded between 101 and 65535 inclusive. Lower numbers 35507 indicate a higher priority. 35508 35509 In the following example, `A' would normally be created before 35510 `B', but the `init_priority' attribute has reversed that order: 35511 35512 Some_Class A __attribute__ ((init_priority (2000))); 35513 Some_Class B __attribute__ ((init_priority (543))); 35514 35515 Note that the particular values of PRIORITY do not matter; only 35516 their relative ordering. 35517 35518 `java_interface' 35519 This type attribute informs C++ that the class is a Java 35520 interface. It may only be applied to classes declared within an 35521 `extern "Java"' block. Calls to methods declared in this 35522 interface will be dispatched using GCJ's interface table 35523 mechanism, instead of regular virtual table dispatch. 35524 35525 35526 See also *Note Namespace Association::. 35527 35528 35529 File: gcc.info, Node: Namespace Association, Next: Type Traits, Prev: C++ Attributes, Up: C++ Extensions 35530 35531 6.8 Namespace Association 35532 ========================= 35533 35534 *Caution:* The semantics of this extension are not fully defined. 35535 Users should refrain from using this extension as its semantics may 35536 change subtly over time. It is possible that this extension will be 35537 removed in future versions of G++. 35538 35539 A using-directive with `__attribute ((strong))' is stronger than a 35540 normal using-directive in two ways: 35541 35542 * Templates from the used namespace can be specialized and explicitly 35543 instantiated as though they were members of the using namespace. 35544 35545 * The using namespace is considered an associated namespace of all 35546 templates in the used namespace for purposes of argument-dependent 35547 name lookup. 35548 35549 The used namespace must be nested within the using namespace so that 35550 normal unqualified lookup works properly. 35551 35552 This is useful for composing a namespace transparently from 35553 implementation namespaces. For example: 35554 35555 namespace std { 35556 namespace debug { 35557 template <class T> struct A { }; 35558 } 35559 using namespace debug __attribute ((__strong__)); 35560 template <> struct A<int> { }; // ok to specialize 35561 35562 template <class T> void f (A<T>); 35563 } 35564 35565 int main() 35566 { 35567 f (std::A<float>()); // lookup finds std::f 35568 f (std::A<int>()); 35569 } 35570 35571 35572 File: gcc.info, Node: Type Traits, Next: Java Exceptions, Prev: Namespace Association, Up: C++ Extensions 35573 35574 6.9 Type Traits 35575 =============== 35576 35577 The C++ front-end implements syntactic extensions that allow to 35578 determine at compile time various characteristics of a type (or of a 35579 pair of types). 35580 35581 `__has_nothrow_assign (type)' 35582 If `type' is const qualified or is a reference type then the trait 35583 is false. Otherwise if `__has_trivial_assign (type)' is true then 35584 the trait is true, else if `type' is a cv class or union type with 35585 copy assignment operators that are known not to throw an exception 35586 then the trait is true, else it is false. Requires: `type' shall 35587 be a complete type, an array type of unknown bound, or is a `void' 35588 type. 35589 35590 `__has_nothrow_copy (type)' 35591 If `__has_trivial_copy (type)' is true then the trait is true, 35592 else if `type' is a cv class or union type with copy constructors 35593 that are known not to throw an exception then the trait is true, 35594 else it is false. Requires: `type' shall be a complete type, an 35595 array type of unknown bound, or is a `void' type. 35596 35597 `__has_nothrow_constructor (type)' 35598 If `__has_trivial_constructor (type)' is true then the trait is 35599 true, else if `type' is a cv class or union type (or array 35600 thereof) with a default constructor that is known not to throw an 35601 exception then the trait is true, else it is false. Requires: 35602 `type' shall be a complete type, an array type of unknown bound, 35603 or is a `void' type. 35604 35605 `__has_trivial_assign (type)' 35606 If `type' is const qualified or is a reference type then the trait 35607 is false. Otherwise if `__is_pod (type)' is true then the trait is 35608 true, else if `type' is a cv class or union type with a trivial 35609 copy assignment ([class.copy]) then the trait is true, else it is 35610 false. Requires: `type' shall be a complete type, an array type 35611 of unknown bound, or is a `void' type. 35612 35613 `__has_trivial_copy (type)' 35614 If `__is_pod (type)' is true or `type' is a reference type then 35615 the trait is true, else if `type' is a cv class or union type with 35616 a trivial copy constructor ([class.copy]) then the trait is true, 35617 else it is false. Requires: `type' shall be a complete type, an 35618 array type of unknown bound, or is a `void' type. 35619 35620 `__has_trivial_constructor (type)' 35621 If `__is_pod (type)' is true then the trait is true, else if 35622 `type' is a cv class or union type (or array thereof) with a 35623 trivial default constructor ([class.ctor]) then the trait is true, 35624 else it is false. Requires: `type' shall be a complete type, an 35625 array type of unknown bound, or is a `void' type. 35626 35627 `__has_trivial_destructor (type)' 35628 If `__is_pod (type)' is true or `type' is a reference type then 35629 the trait is true, else if `type' is a cv class or union type (or 35630 array thereof) with a trivial destructor ([class.dtor]) then the 35631 trait is true, else it is false. Requires: `type' shall be a 35632 complete type, an array type of unknown bound, or is a `void' type. 35633 35634 `__has_virtual_destructor (type)' 35635 If `type' is a class type with a virtual destructor ([class.dtor]) 35636 then the trait is true, else it is false. Requires: `type' shall 35637 be a complete type, an array type of unknown bound, or is a `void' 35638 type. 35639 35640 `__is_abstract (type)' 35641 If `type' is an abstract class ([class.abstract]) then the trait 35642 is true, else it is false. Requires: `type' shall be a complete 35643 type, an array type of unknown bound, or is a `void' type. 35644 35645 `__is_base_of (base_type, derived_type)' 35646 If `base_type' is a base class of `derived_type' ([class.derived]) 35647 then the trait is true, otherwise it is false. Top-level cv 35648 qualifications of `base_type' and `derived_type' are ignored. For 35649 the purposes of this trait, a class type is considered is own 35650 base. Requires: if `__is_class (base_type)' and `__is_class 35651 (derived_type)' are true and `base_type' and `derived_type' are 35652 not the same type (disregarding cv-qualifiers), `derived_type' 35653 shall be a complete type. Diagnostic is produced if this 35654 requirement is not met. 35655 35656 `__is_class (type)' 35657 If `type' is a cv class type, and not a union type 35658 ([basic.compound]) the trait is true, else it is false. 35659 35660 `__is_empty (type)' 35661 If `__is_class (type)' is false then the trait is false. 35662 Otherwise `type' is considered empty if and only if: `type' has no 35663 non-static data members, or all non-static data members, if any, 35664 are bit-fields of length 0, and `type' has no virtual members, and 35665 `type' has no virtual base classes, and `type' has no base classes 35666 `base_type' for which `__is_empty (base_type)' is false. 35667 Requires: `type' shall be a complete type, an array type of 35668 unknown bound, or is a `void' type. 35669 35670 `__is_enum (type)' 35671 If `type' is a cv enumeration type ([basic.compound]) the trait is 35672 true, else it is false. 35673 35674 `__is_pod (type)' 35675 If `type' is a cv POD type ([basic.types]) then the trait is true, 35676 else it is false. Requires: `type' shall be a complete type, an 35677 array type of unknown bound, or is a `void' type. 35678 35679 `__is_polymorphic (type)' 35680 If `type' is a polymorphic class ([class.virtual]) then the trait 35681 is true, else it is false. Requires: `type' shall be a complete 35682 type, an array type of unknown bound, or is a `void' type. 35683 35684 `__is_union (type)' 35685 If `type' is a cv union type ([basic.compound]) the trait is true, 35686 else it is false. 35687 35688 35689 35690 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Type Traits, Up: C++ Extensions 35691 35692 6.10 Java Exceptions 35693 ==================== 35694 35695 The Java language uses a slightly different exception handling model 35696 from C++. Normally, GNU C++ will automatically detect when you are 35697 writing C++ code that uses Java exceptions, and handle them 35698 appropriately. However, if C++ code only needs to execute destructors 35699 when Java exceptions are thrown through it, GCC will guess incorrectly. 35700 Sample problematic code is: 35701 35702 struct S { ~S(); }; 35703 extern void bar(); // is written in Java, and may throw exceptions 35704 void foo() 35705 { 35706 S s; 35707 bar(); 35708 } 35709 35710 The usual effect of an incorrect guess is a link failure, complaining of 35711 a missing routine called `__gxx_personality_v0'. 35712 35713 You can inform the compiler that Java exceptions are to be used in a 35714 translation unit, irrespective of what it might think, by writing 35715 `#pragma GCC java_exceptions' at the head of the file. This `#pragma' 35716 must appear before any functions that throw or catch exceptions, or run 35717 destructors when exceptions are thrown through them. 35718 35719 You cannot mix Java and C++ exceptions in the same translation unit. 35720 It is believed to be safe to throw a C++ exception from one file through 35721 another file compiled for the Java exception model, or vice versa, but 35722 there may be bugs in this area. 35723 35724 35725 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions 35726 35727 6.11 Deprecated Features 35728 ======================== 35729 35730 In the past, the GNU C++ compiler was extended to experiment with new 35731 features, at a time when the C++ language was still evolving. Now that 35732 the C++ standard is complete, some of those features are superseded by 35733 superior alternatives. Using the old features might cause a warning in 35734 some cases that the feature will be dropped in the future. In other 35735 cases, the feature might be gone already. 35736 35737 While the list below is not exhaustive, it documents some of the 35738 options that are now deprecated: 35739 35740 `-fexternal-templates' 35741 `-falt-external-templates' 35742 These are two of the many ways for G++ to implement template 35743 instantiation. *Note Template Instantiation::. The C++ standard 35744 clearly defines how template definitions have to be organized 35745 across implementation units. G++ has an implicit instantiation 35746 mechanism that should work just fine for standard-conforming code. 35747 35748 `-fstrict-prototype' 35749 `-fno-strict-prototype' 35750 Previously it was possible to use an empty prototype parameter 35751 list to indicate an unspecified number of parameters (like C), 35752 rather than no parameters, as C++ demands. This feature has been 35753 removed, except where it is required for backwards compatibility. 35754 *Note Backwards Compatibility::. 35755 35756 G++ allows a virtual function returning `void *' to be overridden by 35757 one returning a different pointer type. This extension to the 35758 covariant return type rules is now deprecated and will be removed from a 35759 future version. 35760 35761 The G++ minimum and maximum operators (`<?' and `>?') and their 35762 compound forms (`<?=') and `>?=') have been deprecated and are now 35763 removed from G++. Code using these operators should be modified to use 35764 `std::min' and `std::max' instead. 35765 35766 The named return value extension has been deprecated, and is now 35767 removed from G++. 35768 35769 The use of initializer lists with new expressions has been deprecated, 35770 and is now removed from G++. 35771 35772 Floating and complex non-type template parameters have been deprecated, 35773 and are now removed from G++. 35774 35775 The implicit typename extension has been deprecated and is now removed 35776 from G++. 35777 35778 The use of default arguments in function pointers, function typedefs 35779 and other places where they are not permitted by the standard is 35780 deprecated and will be removed from a future version of G++. 35781 35782 G++ allows floating-point literals to appear in integral constant 35783 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is 35784 deprecated and will be removed from a future version. 35785 35786 G++ allows static data members of const floating-point type to be 35787 declared with an initializer in a class definition. The standard only 35788 allows initializers for static members of const integral types and const 35789 enumeration types so this extension has been deprecated and will be 35790 removed from a future version. 35791 35792 35793 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions 35794 35795 6.12 Backwards Compatibility 35796 ============================ 35797 35798 Now that there is a definitive ISO standard C++, G++ has a specification 35799 to adhere to. The C++ language evolved over time, and features that 35800 used to be acceptable in previous drafts of the standard, such as the 35801 ARM [Annotated C++ Reference Manual], are no longer accepted. In order 35802 to allow compilation of C++ written to such drafts, G++ contains some 35803 backwards compatibilities. _All such backwards compatibility features 35804 are liable to disappear in future versions of G++._ They should be 35805 considered deprecated. *Note Deprecated Features::. 35806 35807 `For scope' 35808 If a variable is declared at for scope, it used to remain in scope 35809 until the end of the scope which contained the for statement 35810 (rather than just within the for scope). G++ retains this, but 35811 issues a warning, if such a variable is accessed outside the for 35812 scope. 35813 35814 `Implicit C language' 35815 Old C system header files did not contain an `extern "C" {...}' 35816 scope to set the language. On such systems, all header files are 35817 implicitly scoped inside a C language scope. Also, an empty 35818 prototype `()' will be treated as an unspecified number of 35819 arguments, rather than no arguments, as C++ demands. 35820 35821 35822 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top 35823 35824 7 GNU Objective-C runtime features 35825 ********************************** 35826 35827 This document is meant to describe some of the GNU Objective-C runtime 35828 features. It is not intended to teach you Objective-C, there are 35829 several resources on the Internet that present the language. Questions 35830 and comments about this document to Ovidiu Predescu <ovidiu (a] cup.hp.com>. 35831 35832 * Menu: 35833 35834 * Executing code before main:: 35835 * Type encoding:: 35836 * Garbage Collection:: 35837 * Constant string objects:: 35838 * compatibility_alias:: 35839 35840 35841 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C 35842 35843 7.1 `+load': Executing code before main 35844 ======================================= 35845 35846 The GNU Objective-C runtime provides a way that allows you to execute 35847 code before the execution of the program enters the `main' function. 35848 The code is executed on a per-class and a per-category basis, through a 35849 special class method `+load'. 35850 35851 This facility is very useful if you want to initialize global variables 35852 which can be accessed by the program directly, without sending a message 35853 to the class first. The usual way to initialize global variables, in 35854 the `+initialize' method, might not be useful because `+initialize' is 35855 only called when the first message is sent to a class object, which in 35856 some cases could be too late. 35857 35858 Suppose for example you have a `FileStream' class that declares 35859 `Stdin', `Stdout' and `Stderr' as global variables, like below: 35860 35861 35862 FileStream *Stdin = nil; 35863 FileStream *Stdout = nil; 35864 FileStream *Stderr = nil; 35865 35866 @implementation FileStream 35867 35868 + (void)initialize 35869 { 35870 Stdin = [[FileStream new] initWithFd:0]; 35871 Stdout = [[FileStream new] initWithFd:1]; 35872 Stderr = [[FileStream new] initWithFd:2]; 35873 } 35874 35875 /* Other methods here */ 35876 @end 35877 35878 In this example, the initialization of `Stdin', `Stdout' and `Stderr' 35879 in `+initialize' occurs too late. The programmer can send a message to 35880 one of these objects before the variables are actually initialized, 35881 thus sending messages to the `nil' object. The `+initialize' method 35882 which actually initializes the global variables is not invoked until 35883 the first message is sent to the class object. The solution would 35884 require these variables to be initialized just before entering `main'. 35885 35886 The correct solution of the above problem is to use the `+load' method 35887 instead of `+initialize': 35888 35889 35890 @implementation FileStream 35891 35892 + (void)load 35893 { 35894 Stdin = [[FileStream new] initWithFd:0]; 35895 Stdout = [[FileStream new] initWithFd:1]; 35896 Stderr = [[FileStream new] initWithFd:2]; 35897 } 35898 35899 /* Other methods here */ 35900 @end 35901 35902 The `+load' is a method that is not overridden by categories. If a 35903 class and a category of it both implement `+load', both methods are 35904 invoked. This allows some additional initializations to be performed in 35905 a category. 35906 35907 This mechanism is not intended to be a replacement for `+initialize'. 35908 You should be aware of its limitations when you decide to use it 35909 instead of `+initialize'. 35910 35911 * Menu: 35912 35913 * What you can and what you cannot do in +load:: 35914 35915 35916 File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main 35917 35918 7.1.1 What you can and what you cannot do in `+load' 35919 ---------------------------------------------------- 35920 35921 The `+load' implementation in the GNU runtime guarantees you the 35922 following things: 35923 35924 * you can write whatever C code you like; 35925 35926 * you can send messages to Objective-C constant strings (`@"this is a 35927 constant string"'); 35928 35929 * you can allocate and send messages to objects whose class is 35930 implemented in the same file; 35931 35932 * the `+load' implementation of all super classes of a class are 35933 executed before the `+load' of that class is executed; 35934 35935 * the `+load' implementation of a class is executed before the 35936 `+load' implementation of any category. 35937 35938 35939 In particular, the following things, even if they can work in a 35940 particular case, are not guaranteed: 35941 35942 * allocation of or sending messages to arbitrary objects; 35943 35944 * allocation of or sending messages to objects whose classes have a 35945 category implemented in the same file; 35946 35947 35948 You should make no assumptions about receiving `+load' in sibling 35949 classes when you write `+load' of a class. The order in which sibling 35950 classes receive `+load' is not guaranteed. 35951 35952 The order in which `+load' and `+initialize' are called could be 35953 problematic if this matters. If you don't allocate objects inside 35954 `+load', it is guaranteed that `+load' is called before `+initialize'. 35955 If you create an object inside `+load' the `+initialize' method of 35956 object's class is invoked even if `+load' was not invoked. Note if you 35957 explicitly call `+load' on a class, `+initialize' will be called first. 35958 To avoid possible problems try to implement only one of these methods. 35959 35960 The `+load' method is also invoked when a bundle is dynamically loaded 35961 into your running program. This happens automatically without any 35962 intervening operation from you. When you write bundles and you need to 35963 write `+load' you can safely create and send messages to objects whose 35964 classes already exist in the running program. The same restrictions as 35965 above apply to classes defined in bundle. 35966 35967 35968 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C 35969 35970 7.2 Type encoding 35971 ================= 35972 35973 The Objective-C compiler generates type encodings for all the types. 35974 These type encodings are used at runtime to find out information about 35975 selectors and methods and about objects and classes. 35976 35977 The types are encoded in the following way: 35978 35979 `_Bool' `B' 35980 `char' `c' 35981 `unsigned char' `C' 35982 `short' `s' 35983 `unsigned short' `S' 35984 `int' `i' 35985 `unsigned int' `I' 35986 `long' `l' 35987 `unsigned long' `L' 35988 `long long' `q' 35989 `unsigned long `Q' 35990 long' 35991 `float' `f' 35992 `double' `d' 35993 `void' `v' 35994 `id' `@' 35995 `Class' `#' 35996 `SEL' `:' 35997 `char*' `*' 35998 unknown type `?' 35999 Complex types `j' followed by the inner type. For example 36000 `_Complex double' is encoded as "jd". 36001 bit-fields `b' followed by the starting position of the 36002 bit-field, the type of the bit-field and the size of 36003 the bit-field (the bit-fields encoding was changed 36004 from the NeXT's compiler encoding, see below) 36005 36006 The encoding of bit-fields has changed to allow bit-fields to be 36007 properly handled by the runtime functions that compute sizes and 36008 alignments of types that contain bit-fields. The previous encoding 36009 contained only the size of the bit-field. Using only this information 36010 it is not possible to reliably compute the size occupied by the 36011 bit-field. This is very important in the presence of the Boehm's 36012 garbage collector because the objects are allocated using the typed 36013 memory facility available in this collector. The typed memory 36014 allocation requires information about where the pointers are located 36015 inside the object. 36016 36017 The position in the bit-field is the position, counting in bits, of the 36018 bit closest to the beginning of the structure. 36019 36020 The non-atomic types are encoded as follows: 36021 36022 pointers `^' followed by the pointed type. 36023 arrays `[' followed by the number of elements in the array 36024 followed by the type of the elements followed by `]' 36025 structures `{' followed by the name of the structure (or `?' if the 36026 structure is unnamed), the `=' sign, the type of the 36027 members and by `}' 36028 unions `(' followed by the name of the structure (or `?' if the 36029 union is unnamed), the `=' sign, the type of the members 36030 followed by `)' 36031 36032 Here are some types and their encodings, as they are generated by the 36033 compiler on an i386 machine: 36034 36035 36036 Objective-C type Compiler encoding 36037 int a[10]; `[10i]' 36038 struct { `{?=i[3f]b128i3b131i2c}' 36039 int i; 36040 float f[3]; 36041 int a:3; 36042 int b:2; 36043 char c; 36044 } 36045 36046 36047 In addition to the types the compiler also encodes the type 36048 specifiers. The table below describes the encoding of the current 36049 Objective-C type specifiers: 36050 36051 36052 Specifier Encoding 36053 `const' `r' 36054 `in' `n' 36055 `inout' `N' 36056 `out' `o' 36057 `bycopy' `O' 36058 `oneway' `V' 36059 36060 36061 The type specifiers are encoded just before the type. Unlike types 36062 however, the type specifiers are only encoded when they appear in method 36063 argument types. 36064 36065 36066 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C 36067 36068 7.3 Garbage Collection 36069 ====================== 36070 36071 Support for a new memory management policy has been added by using a 36072 powerful conservative garbage collector, known as the 36073 Boehm-Demers-Weiser conservative garbage collector. It is available 36074 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'. 36075 36076 To enable the support for it you have to configure the compiler using 36077 an additional argument, `--enable-objc-gc'. You need to have garbage 36078 collector installed before building the compiler. This will build an 36079 additional runtime library which has several enhancements to support 36080 the garbage collector. The new library has a new name, `libobjc_gc.a' 36081 to not conflict with the non-garbage-collected library. 36082 36083 When the garbage collector is used, the objects are allocated using the 36084 so-called typed memory allocation mechanism available in the 36085 Boehm-Demers-Weiser collector. This mode requires precise information 36086 on where pointers are located inside objects. This information is 36087 computed once per class, immediately after the class has been 36088 initialized. 36089 36090 There is a new runtime function `class_ivar_set_gcinvisible()' which 36091 can be used to declare a so-called "weak pointer" reference. Such a 36092 pointer is basically hidden for the garbage collector; this can be 36093 useful in certain situations, especially when you want to keep track of 36094 the allocated objects, yet allow them to be collected. This kind of 36095 pointers can only be members of objects, you cannot declare a global 36096 pointer as a weak reference. Every type which is a pointer type can be 36097 declared a weak pointer, including `id', `Class' and `SEL'. 36098 36099 Here is an example of how to use this feature. Suppose you want to 36100 implement a class whose instances hold a weak pointer reference; the 36101 following class does this: 36102 36103 36104 @interface WeakPointer : Object 36105 { 36106 const void* weakPointer; 36107 } 36108 36109 - initWithPointer:(const void*)p; 36110 - (const void*)weakPointer; 36111 @end 36112 36113 36114 @implementation WeakPointer 36115 36116 + (void)initialize 36117 { 36118 class_ivar_set_gcinvisible (self, "weakPointer", YES); 36119 } 36120 36121 - initWithPointer:(const void*)p 36122 { 36123 weakPointer = p; 36124 return self; 36125 } 36126 36127 - (const void*)weakPointer 36128 { 36129 return weakPointer; 36130 } 36131 36132 @end 36133 36134 Weak pointers are supported through a new type character specifier 36135 represented by the `!' character. The `class_ivar_set_gcinvisible()' 36136 function adds or removes this specifier to the string type description 36137 of the instance variable named as argument. 36138 36139 36140 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C 36141 36142 7.4 Constant string objects 36143 =========================== 36144 36145 GNU Objective-C provides constant string objects that are generated 36146 directly by the compiler. You declare a constant string object by 36147 prefixing a C constant string with the character `@': 36148 36149 id myString = @"this is a constant string object"; 36150 36151 The constant string objects are by default instances of the 36152 `NXConstantString' class which is provided by the GNU Objective-C 36153 runtime. To get the definition of this class you must include the 36154 `objc/NXConstStr.h' header file. 36155 36156 User defined libraries may want to implement their own constant string 36157 class. To be able to support them, the GNU Objective-C compiler 36158 provides a new command line options 36159 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere 36160 to a strict structure, the same as `NXConstantString''s structure: 36161 36162 36163 @interface MyConstantStringClass 36164 { 36165 Class isa; 36166 char *c_string; 36167 unsigned int len; 36168 } 36169 @end 36170 36171 `NXConstantString' inherits from `Object'; user class libraries may 36172 choose to inherit the customized constant string class from a different 36173 class than `Object'. There is no requirement in the methods the 36174 constant string class has to implement, but the final ivar layout of 36175 the class must be the compatible with the given structure. 36176 36177 When the compiler creates the statically allocated constant string 36178 object, the `c_string' field will be filled by the compiler with the 36179 string; the `length' field will be filled by the compiler with the 36180 string length; the `isa' pointer will be filled with `NULL' by the 36181 compiler, and it will later be fixed up automatically at runtime by the 36182 GNU Objective-C runtime library to point to the class which was set by 36183 the `-fconstant-string-class' option when the object file is loaded (if 36184 you wonder how it works behind the scenes, the name of the class to 36185 use, and the list of static objects to fixup, are stored by the 36186 compiler in the object file in a place where the GNU runtime library 36187 will find them at runtime). 36188 36189 As a result, when a file is compiled with the 36190 `-fconstant-string-class' option, all the constant string objects will 36191 be instances of the class specified as argument to this option. It is 36192 possible to have multiple compilation units referring to different 36193 constant string classes, neither the compiler nor the linker impose any 36194 restrictions in doing this. 36195 36196 36197 File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C 36198 36199 7.5 compatibility_alias 36200 ======================= 36201 36202 This is a feature of the Objective-C compiler rather than of the 36203 runtime, anyway since it is documented nowhere and its existence was 36204 forgotten, we are documenting it here. 36205 36206 The keyword `@compatibility_alias' allows you to define a class name 36207 as equivalent to another class name. For example: 36208 36209 @compatibility_alias WOApplication GSWApplication; 36210 36211 tells the compiler that each time it encounters `WOApplication' as a 36212 class name, it should replace it with `GSWApplication' (that is, 36213 `WOApplication' is just an alias for `GSWApplication'). 36214 36215 There are some constraints on how this can be used-- 36216 36217 * `WOApplication' (the alias) must not be an existing class; 36218 36219 * `GSWApplication' (the real class) must be an existing class. 36220 36221 36222 36223 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top 36224 36225 8 Binary Compatibility 36226 ********************** 36227 36228 Binary compatibility encompasses several related concepts: 36229 36230 "application binary interface (ABI)" 36231 The set of runtime conventions followed by all of the tools that 36232 deal with binary representations of a program, including 36233 compilers, assemblers, linkers, and language runtime support. 36234 Some ABIs are formal with a written specification, possibly 36235 designed by multiple interested parties. Others are simply the 36236 way things are actually done by a particular set of tools. 36237 36238 "ABI conformance" 36239 A compiler conforms to an ABI if it generates code that follows 36240 all of the specifications enumerated by that ABI. A library 36241 conforms to an ABI if it is implemented according to that ABI. An 36242 application conforms to an ABI if it is built using tools that 36243 conform to that ABI and does not contain source code that 36244 specifically changes behavior specified by the ABI. 36245 36246 "calling conventions" 36247 Calling conventions are a subset of an ABI that specify of how 36248 arguments are passed and function results are returned. 36249 36250 "interoperability" 36251 Different sets of tools are interoperable if they generate files 36252 that can be used in the same program. The set of tools includes 36253 compilers, assemblers, linkers, libraries, header files, startup 36254 files, and debuggers. Binaries produced by different sets of 36255 tools are not interoperable unless they implement the same ABI. 36256 This applies to different versions of the same tools as well as 36257 tools from different vendors. 36258 36259 "intercallability" 36260 Whether a function in a binary built by one set of tools can call a 36261 function in a binary built by a different set of tools is a subset 36262 of interoperability. 36263 36264 "implementation-defined features" 36265 Language standards include lists of implementation-defined 36266 features whose behavior can vary from one implementation to 36267 another. Some of these features are normally covered by a 36268 platform's ABI and others are not. The features that are not 36269 covered by an ABI generally affect how a program behaves, but not 36270 intercallability. 36271 36272 "compatibility" 36273 Conformance to the same ABI and the same behavior of 36274 implementation-defined features are both relevant for 36275 compatibility. 36276 36277 The application binary interface implemented by a C or C++ compiler 36278 affects code generation and runtime support for: 36279 36280 * size and alignment of data types 36281 36282 * layout of structured types 36283 36284 * calling conventions 36285 36286 * register usage conventions 36287 36288 * interfaces for runtime arithmetic support 36289 36290 * object file formats 36291 36292 In addition, the application binary interface implemented by a C++ 36293 compiler affects code generation and runtime support for: 36294 * name mangling 36295 36296 * exception handling 36297 36298 * invoking constructors and destructors 36299 36300 * layout, alignment, and padding of classes 36301 36302 * layout and alignment of virtual tables 36303 36304 Some GCC compilation options cause the compiler to generate code that 36305 does not conform to the platform's default ABI. Other options cause 36306 different program behavior for implementation-defined features that are 36307 not covered by an ABI. These options are provided for consistency with 36308 other compilers that do not follow the platform's default ABI or the 36309 usual behavior of implementation-defined features for the platform. Be 36310 very careful about using such options. 36311 36312 Most platforms have a well-defined ABI that covers C code, but ABIs 36313 that cover C++ functionality are not yet common. 36314 36315 Starting with GCC 3.2, GCC binary conventions for C++ are based on a 36316 written, vendor-neutral C++ ABI that was designed to be specific to 36317 64-bit Itanium but also includes generic specifications that apply to 36318 any platform. This C++ ABI is also implemented by other compiler 36319 vendors on some platforms, notably GNU/Linux and BSD systems. We have 36320 tried hard to provide a stable ABI that will be compatible with future 36321 GCC releases, but it is possible that we will encounter problems that 36322 make this difficult. Such problems could include different 36323 interpretations of the C++ ABI by different vendors, bugs in the ABI, or 36324 bugs in the implementation of the ABI in different compilers. GCC's 36325 `-Wabi' switch warns when G++ generates code that is probably not 36326 compatible with the C++ ABI. 36327 36328 The C++ library used with a C++ compiler includes the Standard C++ 36329 Library, with functionality defined in the C++ Standard, plus language 36330 runtime support. The runtime support is included in a C++ ABI, but 36331 there is no formal ABI for the Standard C++ Library. Two 36332 implementations of that library are interoperable if one follows the 36333 de-facto ABI of the other and if they are both built with the same 36334 compiler, or with compilers that conform to the same ABI for C++ 36335 compiler and runtime support. 36336 36337 When G++ and another C++ compiler conform to the same C++ ABI, but the 36338 implementations of the Standard C++ Library that they normally use do 36339 not follow the same ABI for the Standard C++ Library, object files 36340 built with those compilers can be used in the same program only if they 36341 use the same C++ library. This requires specifying the location of the 36342 C++ library header files when invoking the compiler whose usual library 36343 is not being used. The location of GCC's C++ header files depends on 36344 how the GCC build was configured, but can be seen by using the G++ `-v' 36345 option. With default configuration options for G++ 3.3 the compile 36346 line for a different C++ compiler needs to include 36347 36348 -IGCC_INSTALL_DIRECTORY/include/c++/3.3 36349 36350 Similarly, compiling code with G++ that must use a C++ library other 36351 than the GNU C++ library requires specifying the location of the header 36352 files for that other library. 36353 36354 The most straightforward way to link a program to use a particular C++ 36355 library is to use a C++ driver that specifies that C++ library by 36356 default. The `g++' driver, for example, tells the linker where to find 36357 GCC's C++ library (`libstdc++') plus the other libraries and startup 36358 files it needs, in the proper order. 36359 36360 If a program must use a different C++ library and it's not possible to 36361 do the final link using a C++ driver that uses that library by default, 36362 it is necessary to tell `g++' the location and name of that library. 36363 It might also be necessary to specify different startup files and other 36364 runtime support libraries, and to suppress the use of GCC's support 36365 libraries with one or more of the options `-nostdlib', `-nostartfiles', 36366 and `-nodefaultlibs'. 36367 36368 36369 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top 36370 36371 9 `gcov'--a Test Coverage Program 36372 ********************************* 36373 36374 `gcov' is a tool you can use in conjunction with GCC to test code 36375 coverage in your programs. 36376 36377 * Menu: 36378 36379 * Gcov Intro:: Introduction to gcov. 36380 * Invoking Gcov:: How to use gcov. 36381 * Gcov and Optimization:: Using gcov with GCC optimization. 36382 * Gcov Data Files:: The files used by gcov. 36383 * Cross-profiling:: Data file relocation. 36384 36385 36386 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov 36387 36388 9.1 Introduction to `gcov' 36389 ========================== 36390 36391 `gcov' is a test coverage program. Use it in concert with GCC to 36392 analyze your programs to help create more efficient, faster running 36393 code and to discover untested parts of your program. You can use 36394 `gcov' as a profiling tool to help discover where your optimization 36395 efforts will best affect your code. You can also use `gcov' along with 36396 the other profiling tool, `gprof', to assess which parts of your code 36397 use the greatest amount of computing time. 36398 36399 Profiling tools help you analyze your code's performance. Using a 36400 profiler such as `gcov' or `gprof', you can find out some basic 36401 performance statistics, such as: 36402 36403 * how often each line of code executes 36404 36405 * what lines of code are actually executed 36406 36407 * how much computing time each section of code uses 36408 36409 Once you know these things about how your code works when compiled, you 36410 can look at each module to see which modules should be optimized. 36411 `gcov' helps you determine where to work on optimization. 36412 36413 Software developers also use coverage testing in concert with 36414 testsuites, to make sure software is actually good enough for a release. 36415 Testsuites can verify that a program works as expected; a coverage 36416 program tests to see how much of the program is exercised by the 36417 testsuite. Developers can then determine what kinds of test cases need 36418 to be added to the testsuites to create both better testing and a better 36419 final product. 36420 36421 You should compile your code without optimization if you plan to use 36422 `gcov' because the optimization, by combining some lines of code into 36423 one function, may not give you as much information as you need to look 36424 for `hot spots' where the code is using a great deal of computer time. 36425 Likewise, because `gcov' accumulates statistics by line (at the lowest 36426 resolution), it works best with a programming style that places only 36427 one statement on each line. If you use complicated macros that expand 36428 to loops or to other control structures, the statistics are less 36429 helpful--they only report on the line where the macro call appears. If 36430 your complex macros behave like functions, you can replace them with 36431 inline functions to solve this problem. 36432 36433 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how 36434 many times each line of a source file `SOURCEFILE.c' has executed. You 36435 can use these logfiles along with `gprof' to aid in fine-tuning the 36436 performance of your programs. `gprof' gives timing information you can 36437 use along with the information you get from `gcov'. 36438 36439 `gcov' works only on code compiled with GCC. It is not compatible 36440 with any other profiling or test coverage mechanism. 36441 36442 36443 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov 36444 36445 9.2 Invoking `gcov' 36446 =================== 36447 36448 gcov [OPTIONS] SOURCEFILES 36449 36450 `gcov' accepts the following options: 36451 36452 `-h' 36453 `--help' 36454 Display help about using `gcov' (on the standard output), and exit 36455 without doing any further processing. 36456 36457 `-v' 36458 `--version' 36459 Display the `gcov' version number (on the standard output), and 36460 exit without doing any further processing. 36461 36462 `-a' 36463 `--all-blocks' 36464 Write individual execution counts for every basic block. Normally 36465 gcov outputs execution counts only for the main blocks of a line. 36466 With this option you can determine if blocks within a single line 36467 are not being executed. 36468 36469 `-b' 36470 `--branch-probabilities' 36471 Write branch frequencies to the output file, and write branch 36472 summary info to the standard output. This option allows you to 36473 see how often each branch in your program was taken. 36474 Unconditional branches will not be shown, unless the `-u' option 36475 is given. 36476 36477 `-c' 36478 `--branch-counts' 36479 Write branch frequencies as the number of branches taken, rather 36480 than the percentage of branches taken. 36481 36482 `-m' 36483 `--pmu-profile' 36484 Output the additional PMU profile information if available. 36485 36486 `-q' 36487 `--pmu_profile-path' 36488 PMU profile path (default `pmuprofile.gcda'). 36489 36490 `-n' 36491 `--no-output' 36492 Do not create the `gcov' output file. 36493 36494 `-l' 36495 `--long-file-names' 36496 Create long file names for included source files. For example, if 36497 the header file `x.h' contains code, and was included in the file 36498 `a.c', then running `gcov' on the file `a.c' will produce an 36499 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This 36500 can be useful if `x.h' is included in multiple source files. If 36501 you use the `-p' option, both the including and included file 36502 names will be complete path names. 36503 36504 `-p' 36505 `--preserve-paths' 36506 Preserve complete path information in the names of generated 36507 `.gcov' files. Without this option, just the filename component is 36508 used. With this option, all directories are used, with `/' 36509 characters translated to `#' characters, `.' directory components 36510 removed and `..' components renamed to `^'. This is useful if 36511 sourcefiles are in several different directories. It also affects 36512 the `-l' option. 36513 36514 `-f' 36515 `--function-summaries' 36516 Output summaries for each function in addition to the file level 36517 summary. 36518 36519 `-o DIRECTORY|FILE' 36520 `--object-directory DIRECTORY' 36521 `--object-file FILE' 36522 Specify either the directory containing the gcov data files, or the 36523 object path name. The `.gcno', and `.gcda' data files are 36524 searched for using this option. If a directory is specified, the 36525 data files are in that directory and named after the source file 36526 name, without its extension. If a file is specified here, the 36527 data files are named after that file, without its extension. If 36528 this option is not supplied, it defaults to the current directory. 36529 36530 `-u' 36531 `--unconditional-branches' 36532 When branch probabilities are given, include those of 36533 unconditional branches. Unconditional branches are normally not 36534 interesting. 36535 36536 `-i' 36537 `--intermediate-format' 36538 Output gcov file in an intermediate text format that can be used by 36539 `lcov' or other applications. It will output a single *.gcov file 36540 per *gcda file. No source code required. 36541 36542 36543 `gcov' should be run with the current directory the same as that when 36544 you invoked the compiler. Otherwise it will not be able to locate the 36545 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the 36546 current directory. These contain the coverage information of the 36547 source file they correspond to. One `.gcov' file is produced for each 36548 source file containing code, which was compiled to produce the data 36549 files. The MANGLEDNAME part of the output file name is usually simply 36550 the source file name, but can be something more complicated if the `-l' 36551 or `-p' options are given. Refer to those options for details. 36552 36553 The `.gcov' files contain the `:' separated fields along with program 36554 source code. The format is 36555 36556 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT 36557 36558 Additional block information may succeed each line, when requested by 36559 command line option. The EXECUTION_COUNT is `-' for lines containing 36560 no code and `#####' for lines which were never executed. Some lines of 36561 information at the start have LINE_NUMBER of zero. 36562 36563 The preamble lines are of the form 36564 36565 -:0:TAG:VALUE 36566 36567 The ordering and number of these preamble lines will be augmented as 36568 `gcov' development progresses -- do not rely on them remaining 36569 unchanged. Use TAG to locate a particular preamble line. 36570 36571 The additional block information is of the form 36572 36573 TAG INFORMATION 36574 36575 The INFORMATION is human readable, but designed to be simple enough 36576 for machine parsing too. 36577 36578 When printing percentages, 0% and 100% are only printed when the values 36579 are _exactly_ 0% and 100% respectively. Other values which would 36580 conventionally be rounded to 0% or 100% are instead printed as the 36581 nearest non-boundary value. 36582 36583 When using `gcov', you must first compile your program with two 36584 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the 36585 compiler to generate additional information needed by gcov (basically a 36586 flow graph of the program) and also includes additional code in the 36587 object files for generating the extra profiling information needed by 36588 gcov. These additional files are placed in the directory where the 36589 object file is located. 36590 36591 Running the program will cause profile output to be generated. For 36592 each source file compiled with `-fprofile-arcs', an accompanying 36593 `.gcda' file will be placed in the object file directory. 36594 36595 Running `gcov' with your program's source file names as arguments will 36596 now produce a listing of the code along with frequency of execution for 36597 each line. For example, if your program is called `tmp.c', this is 36598 what you see when you use the basic `gcov' facility: 36599 36600 $ gcc -fprofile-arcs -ftest-coverage tmp.c 36601 $ a.out 36602 $ gcov tmp.c 36603 90.00% of 10 source lines executed in file tmp.c 36604 Creating tmp.c.gcov. 36605 36606 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample: 36607 36608 -: 0:Source:tmp.c 36609 -: 0:Graph:tmp.gcno 36610 -: 0:Data:tmp.gcda 36611 -: 0:Runs:1 36612 -: 0:Programs:1 36613 -: 1:#include <stdio.h> 36614 -: 2: 36615 -: 3:int main (void) 36616 1: 4:{ 36617 1: 5: int i, total; 36618 -: 6: 36619 1: 7: total = 0; 36620 -: 8: 36621 11: 9: for (i = 0; i < 10; i++) 36622 10: 10: total += i; 36623 -: 11: 36624 1: 12: if (total != 45) 36625 #####: 13: printf ("Failure\n"); 36626 -: 14: else 36627 1: 15: printf ("Success\n"); 36628 1: 16: return 0; 36629 -: 17:} 36630 36631 When you use the `-a' option, you will get individual block counts, 36632 and the output looks like this: 36633 36634 -: 0:Source:tmp.c 36635 -: 0:Graph:tmp.gcno 36636 -: 0:Data:tmp.gcda 36637 -: 0:Runs:1 36638 -: 0:Programs:1 36639 -: 1:#include <stdio.h> 36640 -: 2: 36641 -: 3:int main (void) 36642 1: 4:{ 36643 1: 4-block 0 36644 1: 5: int i, total; 36645 -: 6: 36646 1: 7: total = 0; 36647 -: 8: 36648 11: 9: for (i = 0; i < 10; i++) 36649 11: 9-block 0 36650 10: 10: total += i; 36651 10: 10-block 0 36652 -: 11: 36653 1: 12: if (total != 45) 36654 1: 12-block 0 36655 #####: 13: printf ("Failure\n"); 36656 $$$$$: 13-block 0 36657 -: 14: else 36658 1: 15: printf ("Success\n"); 36659 1: 15-block 0 36660 1: 16: return 0; 36661 1: 16-block 0 36662 -: 17:} 36663 36664 In this mode, each basic block is only shown on one line - the last 36665 line of the block. A multi-line block will only contribute to the 36666 execution count of that last line, and other lines will not be shown to 36667 contain code, unless previous blocks end on those lines. The total 36668 execution count of a line is shown and subsequent lines show the 36669 execution counts for individual blocks that end on that line. After 36670 each block, the branch and call counts of the block will be shown, if 36671 the `-b' option is given. 36672 36673 Because of the way GCC instruments calls, a call count can be shown 36674 after a line with no individual blocks. As you can see, line 13 36675 contains a basic block that was not executed. 36676 36677 When you use the `-b' option, your output looks like this: 36678 36679 $ gcov -b tmp.c 36680 90.00% of 10 source lines executed in file tmp.c 36681 80.00% of 5 branches executed in file tmp.c 36682 80.00% of 5 branches taken at least once in file tmp.c 36683 50.00% of 2 calls executed in file tmp.c 36684 Creating tmp.c.gcov. 36685 36686 Here is a sample of a resulting `tmp.c.gcov' file: 36687 36688 -: 0:Source:tmp.c 36689 -: 0:Graph:tmp.gcno 36690 -: 0:Data:tmp.gcda 36691 -: 0:Runs:1 36692 -: 0:Programs:1 36693 -: 1:#include <stdio.h> 36694 -: 2: 36695 -: 3:int main (void) 36696 function main called 1 returned 1 blocks executed 75% 36697 1: 4:{ 36698 1: 5: int i, total; 36699 -: 6: 36700 1: 7: total = 0; 36701 -: 8: 36702 11: 9: for (i = 0; i < 10; i++) 36703 branch 0 taken 91% (fallthrough) 36704 branch 1 taken 9% 36705 10: 10: total += i; 36706 -: 11: 36707 1: 12: if (total != 45) 36708 branch 0 taken 0% (fallthrough) 36709 branch 1 taken 100% 36710 #####: 13: printf ("Failure\n"); 36711 call 0 never executed 36712 -: 14: else 36713 1: 15: printf ("Success\n"); 36714 call 0 called 1 returned 100% 36715 1: 16: return 0; 36716 -: 17:} 36717 36718 For each function, a line is printed showing how many times the 36719 function is called, how many times it returns and what percentage of the 36720 function's blocks were executed. 36721 36722 For each basic block, a line is printed after the last line of the 36723 basic block describing the branch or call that ends the basic block. 36724 There can be multiple branches and calls listed for a single source 36725 line if there are multiple basic blocks that end on that line. In this 36726 case, the branches and calls are each given a number. There is no 36727 simple way to map these branches and calls back to source constructs. 36728 In general, though, the lowest numbered branch or call will correspond 36729 to the leftmost construct on the source line. 36730 36731 For a branch, if it was executed at least once, then a percentage 36732 indicating the number of times the branch was taken divided by the 36733 number of times the branch was executed will be printed. Otherwise, the 36734 message "never executed" is printed. 36735 36736 For a call, if it was executed at least once, then a percentage 36737 indicating the number of times the call returned divided by the number 36738 of times the call was executed will be printed. This will usually be 36739 100%, but may be less for functions that call `exit' or `longjmp', and 36740 thus may not return every time they are called. 36741 36742 The execution counts are cumulative. If the example program were 36743 executed again without removing the `.gcda' file, the count for the 36744 number of times each line in the source was executed would be added to 36745 the results of the previous run(s). This is potentially useful in 36746 several ways. For example, it could be used to accumulate data over a 36747 number of program runs as part of a test verification suite, or to 36748 provide more accurate long-term information over a large number of 36749 program runs. 36750 36751 The data in the `.gcda' files is saved immediately before the program 36752 exits. For each source file compiled with `-fprofile-arcs', the 36753 profiling code first attempts to read in an existing `.gcda' file; if 36754 the file doesn't match the executable (differing number of basic block 36755 counts) it will ignore the contents of the file. It then adds in the 36756 new execution counts and finally writes the data to the file. 36757 36758 36759 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov 36760 36761 9.3 Using `gcov' with GCC Optimization 36762 ====================================== 36763 36764 If you plan to use `gcov' to help optimize your code, you must first 36765 compile your program with two special GCC options: `-fprofile-arcs 36766 -ftest-coverage'. Aside from that, you can use any other GCC options; 36767 but if you want to prove that every single line in your program was 36768 executed, you should not compile with optimization at the same time. 36769 On some machines the optimizer can eliminate some simple code lines by 36770 combining them with other lines. For example, code like this: 36771 36772 if (a != b) 36773 c = 1; 36774 else 36775 c = 0; 36776 36777 can be compiled into one instruction on some machines. In this case, 36778 there is no way for `gcov' to calculate separate execution counts for 36779 each line because there isn't separate code for each line. Hence the 36780 `gcov' output looks like this if you compiled the program with 36781 optimization: 36782 36783 100: 12:if (a != b) 36784 100: 13: c = 1; 36785 100: 14:else 36786 100: 15: c = 0; 36787 36788 The output shows that this block of code, combined by optimization, 36789 executed 100 times. In one sense this result is correct, because there 36790 was only one instruction representing all four of these lines. However, 36791 the output does not indicate how many times the result was 0 and how 36792 many times the result was 1. 36793 36794 Inlineable functions can create unexpected line counts. Line counts 36795 are shown for the source code of the inlineable function, but what is 36796 shown depends on where the function is inlined, or if it is not inlined 36797 at all. 36798 36799 If the function is not inlined, the compiler must emit an out of line 36800 copy of the function, in any object file that needs it. If `fileA.o' 36801 and `fileB.o' both contain out of line bodies of a particular 36802 inlineable function, they will also both contain coverage counts for 36803 that function. When `fileA.o' and `fileB.o' are linked together, the 36804 linker will, on many systems, select one of those out of line bodies 36805 for all calls to that function, and remove or ignore the other. 36806 Unfortunately, it will not remove the coverage counters for the unused 36807 function body. Hence when instrumented, all but one use of that 36808 function will show zero counts. 36809 36810 If the function is inlined in several places, the block structure in 36811 each location might not be the same. For instance, a condition might 36812 now be calculable at compile time in some instances. Because the 36813 coverage of all the uses of the inline function will be shown for the 36814 same source lines, the line counts themselves might seem inconsistent. 36815 36816 36817 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov 36818 36819 9.4 Brief description of `gcov' data files 36820 ========================================== 36821 36822 `gcov' uses two files for profiling. The names of these files are 36823 derived from the original _object_ file by substituting the file suffix 36824 with either `.gcno', or `.gcda'. All of these files are placed in the 36825 same directory as the object file, and contain data stored in a 36826 platform-independent format. 36827 36828 The `.gcno' file is generated when the source file is compiled with 36829 the GCC `-ftest-coverage' option. It contains information to 36830 reconstruct the basic block graphs and assign source line numbers to 36831 blocks. 36832 36833 The `.gcda' file is generated when a program containing object files 36834 built with the GCC `-fprofile-arcs' option is executed. A separate 36835 `.gcda' file is created for each object file compiled with this option. 36836 It contains arc transition counts, and some summary information. 36837 36838 The full details of the file format is specified in `gcov-io.h', and 36839 functions provided in that header file should be used to access the 36840 coverage files. 36841 36842 36843 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov 36844 36845 9.5 Data file relocation to support cross-profiling 36846 =================================================== 36847 36848 Running the program will cause profile output to be generated. For each 36849 source file compiled with `-fprofile-arcs', an accompanying `.gcda' 36850 file will be placed in the object file directory. That implicitly 36851 requires running the program on the same system as it was built or 36852 having the same absolute directory structure on the target system. The 36853 program will try to create the needed directory structure, if it is not 36854 already present. 36855 36856 To support cross-profiling, a program compiled with `-fprofile-arcs' 36857 can relocate the data files based on two environment variables: 36858 36859 * GCOV_PREFIX contains the prefix to add to the absolute paths in 36860 the object file. Prefix must be absolute as well, otherwise its 36861 value is ignored. The default is no prefix. 36862 36863 * GCOV_PREFIX_STRIP indicates the how many initial directory names 36864 to strip off the hardwired absolute paths. Default value is 0. 36865 36866 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is 36867 undefined, empty or non-absolute. 36868 36869 For example, if the object file `/user/build/foo.o' was built with 36870 `-fprofile-arcs', the final executable will try to create the data file 36871 `/user/build/foo.gcda' when running on the target system. This will 36872 fail if the corresponding directory does not exist and it is unable to 36873 create it. This can be overcome by, for example, setting the 36874 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. 36875 Such a setting will name the data file `/target/run/build/foo.gcda'. 36876 36877 You must move the data files to the expected directory tree in order to 36878 use them for profile directed optimizations (`--use-profile'), or to 36879 use the `gcov' tool. 36880 36881 36882 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top 36883 36884 10 Known Causes of Trouble with GCC 36885 *********************************** 36886 36887 This section describes known problems that affect users of GCC. Most 36888 of these are not GCC bugs per se--if they were, we would fix them. But 36889 the result for a user may be like the result of a bug. 36890 36891 Some of these problems are due to bugs in other software, some are 36892 missing features that are too much work to add, and some are places 36893 where people's opinions differ as to what is best. 36894 36895 * Menu: 36896 36897 * Actual Bugs:: Bugs we will fix later. 36898 * Cross-Compiler Problems:: Common problems of cross compiling with GCC. 36899 * Interoperation:: Problems using GCC with other compilers, 36900 and with certain linkers, assemblers and debuggers. 36901 * Incompatibilities:: GCC is incompatible with traditional C. 36902 * Fixed Headers:: GCC uses corrected versions of system header files. 36903 This is necessary, but doesn't always work smoothly. 36904 * Standard Libraries:: GCC uses the system C library, which might not be 36905 compliant with the ISO C standard. 36906 * Disappointments:: Regrettable things we can't change, but not quite bugs. 36907 * C++ Misunderstandings:: Common misunderstandings with GNU C++. 36908 * Protoize Caveats:: Things to watch out for when using `protoize'. 36909 * Non-bugs:: Things we think are right, but some others disagree. 36910 * Warnings and Errors:: Which problems in your code get warnings, 36911 and which get errors. 36912 36913 36914 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble 36915 36916 10.1 Actual Bugs We Haven't Fixed Yet 36917 ===================================== 36918 36919 * The `fixincludes' script interacts badly with automounters; if the 36920 directory of system header files is automounted, it tends to be 36921 unmounted while `fixincludes' is running. This would seem to be a 36922 bug in the automounter. We don't know any good way to work around 36923 it. 36924 36925 * The `fixproto' script will sometimes add prototypes for the 36926 `sigsetjmp' and `siglongjmp' functions that reference the 36927 `jmp_buf' type before that type is defined. To work around this, 36928 edit the offending file and place the typedef in front of the 36929 prototypes. 36930 36931 36932 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble 36933 36934 10.2 Cross-Compiler Problems 36935 ============================ 36936 36937 You may run into problems with cross compilation on certain machines, 36938 for several reasons. 36939 36940 * At present, the program `mips-tfile' which adds debug support to 36941 object files on MIPS systems does not work in a cross compile 36942 environment. 36943 36944 36945 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 36946 36947 10.3 Interoperation 36948 =================== 36949 36950 This section lists various difficulties encountered in using GCC 36951 together with other compilers or with the assemblers, linkers, 36952 libraries and debuggers on certain systems. 36953 36954 * On many platforms, GCC supports a different ABI for C++ than do 36955 other compilers, so the object files compiled by GCC cannot be 36956 used with object files generated by another C++ compiler. 36957 36958 An area where the difference is most apparent is name mangling. 36959 The use of different name mangling is intentional, to protect you 36960 from more subtle problems. Compilers differ as to many internal 36961 details of C++ implementation, including: how class instances are 36962 laid out, how multiple inheritance is implemented, and how virtual 36963 function calls are handled. If the name encoding were made the 36964 same, your programs would link against libraries provided from 36965 other compilers--but the programs would then crash when run. 36966 Incompatible libraries are then detected at link time, rather than 36967 at run time. 36968 36969 * On some BSD systems, including some versions of Ultrix, use of 36970 profiling causes static variable destructors (currently used only 36971 in C++) not to be run. 36972 36973 * On some SGI systems, when you use `-lgl_s' as an option, it gets 36974 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 36975 does not happen when you use GCC. You must specify all three 36976 options explicitly. 36977 36978 * On a SPARC, GCC aligns all values of type `double' on an 8-byte 36979 boundary, and it expects every `double' to be so aligned. The Sun 36980 compiler usually gives `double' values 8-byte alignment, with one 36981 exception: function arguments of type `double' may not be aligned. 36982 36983 As a result, if a function compiled with Sun CC takes the address 36984 of an argument of type `double' and passes this pointer of type 36985 `double *' to a function compiled with GCC, dereferencing the 36986 pointer may cause a fatal signal. 36987 36988 One way to solve this problem is to compile your entire program 36989 with GCC. Another solution is to modify the function that is 36990 compiled with Sun CC to copy the argument into a local variable; 36991 local variables are always properly aligned. A third solution is 36992 to modify the function that uses the pointer to dereference it via 36993 the following function `access_double' instead of directly with 36994 `*': 36995 36996 inline double 36997 access_double (double *unaligned_ptr) 36998 { 36999 union d2i { double d; int i[2]; }; 37000 37001 union d2i *p = (union d2i *) unaligned_ptr; 37002 union d2i u; 37003 37004 u.i[0] = p->i[0]; 37005 u.i[1] = p->i[1]; 37006 37007 return u.d; 37008 } 37009 37010 Storing into the pointer can be done likewise with the same union. 37011 37012 * On Solaris, the `malloc' function in the `libmalloc.a' library may 37013 allocate memory that is only 4 byte aligned. Since GCC on the 37014 SPARC assumes that doubles are 8 byte aligned, this may result in a 37015 fatal signal if doubles are stored in memory allocated by the 37016 `libmalloc.a' library. 37017 37018 The solution is to not use the `libmalloc.a' library. Use instead 37019 `malloc' and related functions from `libc.a'; they do not have 37020 this problem. 37021 37022 * On the HP PA machine, ADB sometimes fails to work on functions 37023 compiled with GCC. Specifically, it fails to work on functions 37024 that use `alloca' or variable-size arrays. This is because GCC 37025 doesn't generate HP-UX unwind descriptors for such functions. It 37026 may even be impossible to generate them. 37027 37028 * Debugging (`-g') is not supported on the HP PA machine, unless you 37029 use the preliminary GNU tools. 37030 37031 * Taking the address of a label may generate errors from the HP-UX 37032 PA assembler. GAS for the PA does not have this problem. 37033 37034 * Using floating point parameters for indirect calls to static 37035 functions will not work when using the HP assembler. There simply 37036 is no way for GCC to specify what registers hold arguments for 37037 static functions when using the HP assembler. GAS for the PA does 37038 not have this problem. 37039 37040 * In extremely rare cases involving some very large functions you may 37041 receive errors from the HP linker complaining about an out of 37042 bounds unconditional branch offset. This used to occur more often 37043 in previous versions of GCC, but is now exceptionally rare. If 37044 you should run into it, you can work around by making your 37045 function smaller. 37046 37047 * GCC compiled code sometimes emits warnings from the HP-UX 37048 assembler of the form: 37049 37050 (warning) Use of GR3 when 37051 frame >= 8192 may cause conflict. 37052 37053 These warnings are harmless and can be safely ignored. 37054 37055 * In extremely rare cases involving some very large functions you may 37056 receive errors from the AIX Assembler complaining about a 37057 displacement that is too large. If you should run into it, you 37058 can work around by making your function smaller. 37059 37060 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker 37061 semantics which merges global symbols between libraries and 37062 applications, especially necessary for C++ streams functionality. 37063 This is not the default behavior of AIX shared libraries and 37064 dynamic linking. `libstdc++.a' is built on AIX with 37065 "runtime-linking" enabled so that symbol merging can occur. To 37066 utilize this feature, the application linked with `libstdc++.a' 37067 must include the `-Wl,-brtl' flag on the link line. G++ cannot 37068 impose this because this option may interfere with the semantics 37069 of the user program and users may not always use `g++' to link his 37070 or her application. Applications are not required to use the 37071 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a' 37072 library which is not dependent on the symbol merging semantics 37073 will continue to function correctly. 37074 37075 * An application can interpose its own definition of functions for 37076 functions invoked by `libstdc++.a' with "runtime-linking" enabled 37077 on AIX. To accomplish this the application must be linked with 37078 "runtime-linking" option and the functions explicitly must be 37079 exported by the application (`-Wl,-brtl,-bE:exportfile'). 37080 37081 * AIX on the RS/6000 provides support (NLS) for environments outside 37082 of the United States. Compilers and assemblers use NLS to support 37083 locale-specific representations of various objects including 37084 floating-point numbers (`.' vs `,' for separating decimal 37085 fractions). There have been problems reported where the library 37086 linked with GCC does not produce the same floating-point formats 37087 that the assembler accepts. If you have this problem, set the 37088 `LANG' environment variable to `C' or `En_US'. 37089 37090 * Even if you specify `-fdollars-in-identifiers', you cannot 37091 successfully use `$' in identifiers on the RS/6000 due to a 37092 restriction in the IBM assembler. GAS supports these identifiers. 37093 37094 37095 37096 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble 37097 37098 10.4 Incompatibilities of GCC 37099 ============================= 37100 37101 There are several noteworthy incompatibilities between GNU C and K&R 37102 (non-ISO) versions of C. 37103 37104 * GCC normally makes string constants read-only. If several 37105 identical-looking string constants are used, GCC stores only one 37106 copy of the string. 37107 37108 One consequence is that you cannot call `mktemp' with a string 37109 constant argument. The function `mktemp' always alters the string 37110 its argument points to. 37111 37112 Another consequence is that `sscanf' does not work on some very 37113 old systems when passed a string constant as its format control 37114 string or input. This is because `sscanf' incorrectly tries to 37115 write into the string constant. Likewise `fscanf' and `scanf'. 37116 37117 The solution to these problems is to change the program to use 37118 `char'-array variables with initialization strings for these 37119 purposes instead of string constants. 37120 37121 * `-2147483648' is positive. 37122 37123 This is because 2147483648 cannot fit in the type `int', so 37124 (following the ISO C rules) its data type is `unsigned long int'. 37125 Negating this value yields 2147483648 again. 37126 37127 * GCC does not substitute macro arguments when they appear inside of 37128 string constants. For example, the following macro in GCC 37129 37130 #define foo(a) "a" 37131 37132 will produce output `"a"' regardless of what the argument A is. 37133 37134 * When you use `setjmp' and `longjmp', the only automatic variables 37135 guaranteed to remain valid are those declared `volatile'. This is 37136 a consequence of automatic register allocation. Consider this 37137 function: 37138 37139 jmp_buf j; 37140 37141 foo () 37142 { 37143 int a, b; 37144 37145 a = fun1 (); 37146 if (setjmp (j)) 37147 return a; 37148 37149 a = fun2 (); 37150 /* `longjmp (j)' may occur in `fun3'. */ 37151 return a + fun3 (); 37152 } 37153 37154 Here `a' may or may not be restored to its first value when the 37155 `longjmp' occurs. If `a' is allocated in a register, then its 37156 first value is restored; otherwise, it keeps the last value stored 37157 in it. 37158 37159 If you use the `-W' option with the `-O' option, you will get a 37160 warning when GCC thinks such a problem might be possible. 37161 37162 * Programs that use preprocessing directives in the middle of macro 37163 arguments do not work with GCC. For example, a program like this 37164 will not work: 37165 37166 foobar ( 37167 #define luser 37168 hack) 37169 37170 ISO C does not permit such a construct. 37171 37172 * K&R compilers allow comments to cross over an inclusion boundary 37173 (i.e. started in an include file and ended in the including file). 37174 37175 * Declarations of external variables and functions within a block 37176 apply only to the block containing the declaration. In other 37177 words, they have the same scope as any other declaration in the 37178 same place. 37179 37180 In some other C compilers, a `extern' declaration affects all the 37181 rest of the file even if it happens within a block. 37182 37183 * In traditional C, you can combine `long', etc., with a typedef 37184 name, as shown here: 37185 37186 typedef int foo; 37187 typedef long foo bar; 37188 37189 In ISO C, this is not allowed: `long' and other type modifiers 37190 require an explicit `int'. 37191 37192 * PCC allows typedef names to be used as function parameters. 37193 37194 * Traditional C allows the following erroneous pair of declarations 37195 to appear together in a given scope: 37196 37197 typedef int foo; 37198 typedef foo foo; 37199 37200 * GCC treats all characters of identifiers as significant. 37201 According to K&R-1 (2.2), "No more than the first eight characters 37202 are significant, although more may be used.". Also according to 37203 K&R-1 (2.2), "An identifier is a sequence of letters and digits; 37204 the first character must be a letter. The underscore _ counts as 37205 a letter.", but GCC also allows dollar signs in identifiers. 37206 37207 * PCC allows whitespace in the middle of compound assignment 37208 operators such as `+='. GCC, following the ISO standard, does not 37209 allow this. 37210 37211 * GCC complains about unterminated character constants inside of 37212 preprocessing conditionals that fail. Some programs have English 37213 comments enclosed in conditionals that are guaranteed to fail; if 37214 these comments contain apostrophes, GCC will probably report an 37215 error. For example, this code would produce an error: 37216 37217 #if 0 37218 You can't expect this to work. 37219 #endif 37220 37221 The best solution to such a problem is to put the text into an 37222 actual C comment delimited by `/*...*/'. 37223 37224 * Many user programs contain the declaration `long time ();'. In the 37225 past, the system header files on many systems did not actually 37226 declare `time', so it did not matter what type your program 37227 declared it to return. But in systems with ISO C headers, `time' 37228 is declared to return `time_t', and if that is not the same as 37229 `long', then `long time ();' is erroneous. 37230 37231 The solution is to change your program to use appropriate system 37232 headers (`<time.h>' on systems with ISO C headers) and not to 37233 declare `time' if the system header files declare it, or failing 37234 that to use `time_t' as the return type of `time'. 37235 37236 * When compiling functions that return `float', PCC converts it to a 37237 double. GCC actually returns a `float'. If you are concerned 37238 with PCC compatibility, you should declare your functions to return 37239 `double'; you might as well say what you mean. 37240 37241 * When compiling functions that return structures or unions, GCC 37242 output code normally uses a method different from that used on most 37243 versions of Unix. As a result, code compiled with GCC cannot call 37244 a structure-returning function compiled with PCC, and vice versa. 37245 37246 The method used by GCC is as follows: a structure or union which is 37247 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or 37248 union with any other size is stored into an address supplied by 37249 the caller (usually in a special, fixed register, but on some 37250 machines it is passed on the stack). The target hook 37251 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 37252 37253 By contrast, PCC on most target machines returns structures and 37254 unions of any size by copying the data into an area of static 37255 storage, and then returning the address of that storage as if it 37256 were a pointer value. The caller must copy the data from that 37257 memory area to the place where the value is wanted. GCC does not 37258 use this method because it is slower and nonreentrant. 37259 37260 On some newer machines, PCC uses a reentrant convention for all 37261 structure and union returning. GCC on most of these machines uses 37262 a compatible convention when returning structures and unions in 37263 memory, but still returns small structures and unions in registers. 37264 37265 You can tell GCC to use a compatible convention for all structure 37266 and union returning with the option `-fpcc-struct-return'. 37267 37268 * GCC complains about program fragments such as `0x74ae-0x4000' 37269 which appear to be two hexadecimal constants separated by the minus 37270 operator. Actually, this string is a single "preprocessing token". 37271 Each such token must correspond to one token in C. Since this 37272 does not, GCC prints an error message. Although it may appear 37273 obvious that what is meant is an operator and two values, the ISO 37274 C standard specifically requires that this be treated as erroneous. 37275 37276 A "preprocessing token" is a "preprocessing number" if it begins 37277 with a digit and is followed by letters, underscores, digits, 37278 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-' 37279 character sequences. (In strict C89 mode, the sequences `p+', 37280 `p-', `P+' and `P-' cannot appear in preprocessing numbers.) 37281 37282 To make the above program fragment valid, place whitespace in 37283 front of the minus sign. This whitespace will end the 37284 preprocessing number. 37285 37286 37287 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 37288 37289 10.5 Fixed Header Files 37290 ======================= 37291 37292 GCC needs to install corrected versions of some system header files. 37293 This is because most target systems have some header files that won't 37294 work with GCC unless they are changed. Some have bugs, some are 37295 incompatible with ISO C, and some depend on special features of other 37296 compilers. 37297 37298 Installing GCC automatically creates and installs the fixed header 37299 files, by running a program called `fixincludes'. Normally, you don't 37300 need to pay attention to this. But there are cases where it doesn't do 37301 the right thing automatically. 37302 37303 * If you update the system's header files, such as by installing a 37304 new system version, the fixed header files of GCC are not 37305 automatically updated. They can be updated using the `mkheaders' 37306 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 37307 37308 * On some systems, header file directories contain machine-specific 37309 symbolic links in certain places. This makes it possible to share 37310 most of the header files among hosts running the same version of 37311 the system on different machine models. 37312 37313 The programs that fix the header files do not understand this 37314 special way of using symbolic links; therefore, the directory of 37315 fixed header files is good only for the machine model used to 37316 build it. 37317 37318 It is possible to make separate sets of fixed header files for the 37319 different machine models, and arrange a structure of symbolic 37320 links so as to use the proper set, but you'll have to do this by 37321 hand. 37322 37323 37324 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 37325 37326 10.6 Standard Libraries 37327 ======================= 37328 37329 GCC by itself attempts to be a conforming freestanding implementation. 37330 *Note Language Standards Supported by GCC: Standards, for details of 37331 what this means. Beyond the library facilities required of such an 37332 implementation, the rest of the C library is supplied by the vendor of 37333 the operating system. If that C library doesn't conform to the C 37334 standards, then your programs might get warnings (especially when using 37335 `-Wall') that you don't expect. 37336 37337 For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 37338 while the C standard says that `sprintf' returns an `int'. The 37339 `fixincludes' program could make the prototype for this function match 37340 the Standard, but that would be wrong, since the function will still 37341 return `char *'. 37342 37343 If you need a Standard compliant library, then you need to find one, as 37344 GCC does not provide one. The GNU C library (called `glibc') provides 37345 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and 37346 HURD-based GNU systems; no recent version of it supports other systems, 37347 though some very old versions did. Version 2.2 of the GNU C library 37348 includes nearly complete C99 support. You could also ask your 37349 operating system vendor if newer libraries are available. 37350 37351 37352 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 37353 37354 10.7 Disappointments and Misunderstandings 37355 ========================================== 37356 37357 These problems are perhaps regrettable, but we don't know any practical 37358 way around them. 37359 37360 * Certain local variables aren't recognized by debuggers when you 37361 compile with optimization. 37362 37363 This occurs because sometimes GCC optimizes the variable out of 37364 existence. There is no way to tell the debugger how to compute the 37365 value such a variable "would have had", and it is not clear that 37366 would be desirable anyway. So GCC simply does not mention the 37367 eliminated variable when it writes debugging information. 37368 37369 You have to expect a certain amount of disagreement between the 37370 executable and your source code, when you use optimization. 37371 37372 * Users often think it is a bug when GCC reports an error for code 37373 like this: 37374 37375 int foo (struct mumble *); 37376 37377 struct mumble { ... }; 37378 37379 int foo (struct mumble *x) 37380 { ... } 37381 37382 This code really is erroneous, because the scope of `struct 37383 mumble' in the prototype is limited to the argument list 37384 containing it. It does not refer to the `struct mumble' defined 37385 with file scope immediately below--they are two unrelated types 37386 with similar names in different scopes. 37387 37388 But in the definition of `foo', the file-scope type is used 37389 because that is available to be inherited. Thus, the definition 37390 and the prototype do not match, and you get an error. 37391 37392 This behavior may seem silly, but it's what the ISO standard 37393 specifies. It is easy enough for you to make your code work by 37394 moving the definition of `struct mumble' above the prototype. 37395 It's not worth being incompatible with ISO C just to avoid an 37396 error for the example shown above. 37397 37398 * Accesses to bit-fields even in volatile objects works by accessing 37399 larger objects, such as a byte or a word. You cannot rely on what 37400 size of object is accessed in order to read or write the 37401 bit-field; it may even vary for a given bit-field according to the 37402 precise usage. 37403 37404 If you care about controlling the amount of memory that is 37405 accessed, use volatile but do not use bit-fields. 37406 37407 * GCC comes with shell scripts to fix certain known problems in 37408 system header files. They install corrected copies of various 37409 header files in a special directory where only GCC will normally 37410 look for them. The scripts adapt to various systems by searching 37411 all the system header files for the problem cases that we know 37412 about. 37413 37414 If new system header files are installed, nothing automatically 37415 arranges to update the corrected header files. They can be 37416 updated using the `mkheaders' script installed in 37417 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'. 37418 37419 * On 68000 and x86 systems, for instance, you can get paradoxical 37420 results if you test the precise values of floating point numbers. 37421 For example, you can find that a floating point value which is not 37422 a NaN is not equal to itself. This results from the fact that the 37423 floating point registers hold a few more bits of precision than 37424 fit in a `double' in memory. Compiled code moves values between 37425 memory and floating point registers at its convenience, and moving 37426 them into memory truncates them. 37427 37428 You can partially avoid this problem by using the `-ffloat-store' 37429 option (*note Optimize Options::). 37430 37431 * On AIX and other platforms without weak symbol support, templates 37432 need to be instantiated explicitly and symbols for static members 37433 of templates will not be generated. 37434 37435 * On AIX, GCC scans object files and library archives for static 37436 constructors and destructors when linking an application before the 37437 linker prunes unreferenced symbols. This is necessary to prevent 37438 the AIX linker from mistakenly assuming that static constructor or 37439 destructor are unused and removing them before the scanning can 37440 occur. All static constructors and destructors found will be 37441 referenced even though the modules in which they occur may not be 37442 used by the program. This may lead to both increased executable 37443 size and unexpected symbol references. 37444 37445 37446 File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 37447 37448 10.8 Common Misunderstandings with GNU C++ 37449 ========================================== 37450 37451 C++ is a complex language and an evolving one, and its standard 37452 definition (the ISO C++ standard) was only recently completed. As a 37453 result, your C++ compiler may occasionally surprise you, even when its 37454 behavior is correct. This section discusses some areas that frequently 37455 give rise to questions of this sort. 37456 37457 * Menu: 37458 37459 * Static Definitions:: Static member declarations are not definitions 37460 * Name lookup:: Name lookup, templates, and accessing members of base classes 37461 * Temporaries:: Temporaries may vanish before you expect 37462 * Copy Assignment:: Copy Assignment operators copy virtual bases twice 37463 37464 37465 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings 37466 37467 10.8.1 Declare _and_ Define Static Members 37468 ------------------------------------------ 37469 37470 When a class has static data members, it is not enough to _declare_ the 37471 static member; you must also _define_ it. For example: 37472 37473 class Foo 37474 { 37475 ... 37476 void method(); 37477 static int bar; 37478 }; 37479 37480 This declaration only establishes that the class `Foo' has an `int' 37481 named `Foo::bar', and a member function named `Foo::method'. But you 37482 still need to define _both_ `method' and `bar' elsewhere. According to 37483 the ISO standard, you must supply an initializer in one (and only one) 37484 source file, such as: 37485 37486 int Foo::bar = 0; 37487 37488 Other C++ compilers may not correctly implement the standard behavior. 37489 As a result, when you switch to `g++' from one of these compilers, you 37490 may discover that a program that appeared to work correctly in fact 37491 does not conform to the standard: `g++' reports as undefined symbols 37492 any static data members that lack definitions. 37493 37494 37495 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings 37496 37497 10.8.2 Name lookup, templates, and accessing members of base classes 37498 -------------------------------------------------------------------- 37499 37500 The C++ standard prescribes that all names that are not dependent on 37501 template parameters are bound to their present definitions when parsing 37502 a template function or class.(1) Only names that are dependent are 37503 looked up at the point of instantiation. For example, consider 37504 37505 void foo(double); 37506 37507 struct A { 37508 template <typename T> 37509 void f () { 37510 foo (1); // 1 37511 int i = N; // 2 37512 T t; 37513 t.bar(); // 3 37514 foo (t); // 4 37515 } 37516 37517 static const int N; 37518 }; 37519 37520 Here, the names `foo' and `N' appear in a context that does not depend 37521 on the type of `T'. The compiler will thus require that they are 37522 defined in the context of use in the template, not only before the 37523 point of instantiation, and will here use `::foo(double)' and `A::N', 37524 respectively. In particular, it will convert the integer value to a 37525 `double' when passing it to `::foo(double)'. 37526 37527 Conversely, `bar' and the call to `foo' in the fourth marked line are 37528 used in contexts that do depend on the type of `T', so they are only 37529 looked up at the point of instantiation, and you can provide 37530 declarations for them after declaring the template, but before 37531 instantiating it. In particular, if you instantiate `A::f<int>', the 37532 last line will call an overloaded `::foo(int)' if one was provided, 37533 even if after the declaration of `struct A'. 37534 37535 This distinction between lookup of dependent and non-dependent names is 37536 called two-stage (or dependent) name lookup. G++ implements it since 37537 version 3.4. 37538 37539 Two-stage name lookup sometimes leads to situations with behavior 37540 different from non-template codes. The most common is probably this: 37541 37542 template <typename T> struct Base { 37543 int i; 37544 }; 37545 37546 template <typename T> struct Derived : public Base<T> { 37547 int get_i() { return i; } 37548 }; 37549 37550 In `get_i()', `i' is not used in a dependent context, so the compiler 37551 will look for a name declared at the enclosing namespace scope (which 37552 is the global scope here). It will not look into the base class, since 37553 that is dependent and you may declare specializations of `Base' even 37554 after declaring `Derived', so the compiler can't really know what `i' 37555 would refer to. If there is no global variable `i', then you will get 37556 an error message. 37557 37558 In order to make it clear that you want the member of the base class, 37559 you need to defer lookup until instantiation time, at which the base 37560 class is known. For this, you need to access `i' in a dependent 37561 context, by either using `this->i' (remember that `this' is of type 37562 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'. 37563 Alternatively, `Base<T>::i' might be brought into scope by a 37564 `using'-declaration. 37565 37566 Another, similar example involves calling member functions of a base 37567 class: 37568 37569 template <typename T> struct Base { 37570 int f(); 37571 }; 37572 37573 template <typename T> struct Derived : Base<T> { 37574 int g() { return f(); }; 37575 }; 37576 37577 Again, the call to `f()' is not dependent on template arguments (there 37578 are no arguments that depend on the type `T', and it is also not 37579 otherwise specified that the call should be in a dependent context). 37580 Thus a global declaration of such a function must be available, since 37581 the one in the base class is not visible until instantiation time. The 37582 compiler will consequently produce the following error message: 37583 37584 x.cc: In member function `int Derived<T>::g()': 37585 x.cc:6: error: there are no arguments to `f' that depend on a template 37586 parameter, so a declaration of `f' must be available 37587 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 37588 allowing the use of an undeclared name is deprecated) 37589 37590 To make the code valid either use `this->f()', or `Base<T>::f()'. 37591 Using the `-fpermissive' flag will also let the compiler accept the 37592 code, by marking all function calls for which no declaration is visible 37593 at the time of definition of the template for later lookup at 37594 instantiation time, as if it were a dependent call. We do not 37595 recommend using `-fpermissive' to work around invalid code, and it will 37596 also only catch cases where functions in base classes are called, not 37597 where variables in base classes are used (as in the example above). 37598 37599 Note that some compilers (including G++ versions prior to 3.4) get 37600 these examples wrong and accept above code without an error. Those 37601 compilers do not implement two-stage name lookup correctly. 37602 37603 ---------- Footnotes ---------- 37604 37605 (1) The C++ standard just uses the term "dependent" for names that 37606 depend on the type or value of template parameters. This shorter term 37607 will also be used in the rest of this section. 37608 37609 37610 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings 37611 37612 10.8.3 Temporaries May Vanish Before You Expect 37613 ----------------------------------------------- 37614 37615 It is dangerous to use pointers or references to _portions_ of a 37616 temporary object. The compiler may very well delete the object before 37617 you expect it to, leaving a pointer to garbage. The most common place 37618 where this problem crops up is in classes like string classes, 37619 especially ones that define a conversion function to type `char *' or 37620 `const char *'--which is one reason why the standard `string' class 37621 requires you to call the `c_str' member function. However, any class 37622 that returns a pointer to some internal structure is potentially 37623 subject to this problem. 37624 37625 For example, a program may use a function `strfunc' that returns 37626 `string' objects, and another function `charfunc' that operates on 37627 pointers to `char': 37628 37629 string strfunc (); 37630 void charfunc (const char *); 37631 37632 void 37633 f () 37634 { 37635 const char *p = strfunc().c_str(); 37636 ... 37637 charfunc (p); 37638 ... 37639 charfunc (p); 37640 } 37641 37642 In this situation, it may seem reasonable to save a pointer to the C 37643 string returned by the `c_str' member function and use that rather than 37644 call `c_str' repeatedly. However, the temporary string created by the 37645 call to `strfunc' is destroyed after `p' is initialized, at which point 37646 `p' is left pointing to freed memory. 37647 37648 Code like this may run successfully under some other compilers, 37649 particularly obsolete cfront-based compilers that delete temporaries 37650 along with normal local variables. However, the GNU C++ behavior is 37651 standard-conforming, so if your program depends on late destruction of 37652 temporaries it is not portable. 37653 37654 The safe way to write such code is to give the temporary a name, which 37655 forces it to remain until the end of the scope of the name. For 37656 example: 37657 37658 const string& tmp = strfunc (); 37659 charfunc (tmp.c_str ()); 37660 37661 37662 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings 37663 37664 10.8.4 Implicit Copy-Assignment for Virtual Bases 37665 ------------------------------------------------- 37666 37667 When a base class is virtual, only one subobject of the base class 37668 belongs to each full object. Also, the constructors and destructors are 37669 invoked only once, and called from the most-derived class. However, 37670 such objects behave unspecified when being assigned. For example: 37671 37672 struct Base{ 37673 char *name; 37674 Base(char *n) : name(strdup(n)){} 37675 Base& operator= (const Base& other){ 37676 free (name); 37677 name = strdup (other.name); 37678 } 37679 }; 37680 37681 struct A:virtual Base{ 37682 int val; 37683 A():Base("A"){} 37684 }; 37685 37686 struct B:virtual Base{ 37687 int bval; 37688 B():Base("B"){} 37689 }; 37690 37691 struct Derived:public A, public B{ 37692 Derived():Base("Derived"){} 37693 }; 37694 37695 void func(Derived &d1, Derived &d2) 37696 { 37697 d1 = d2; 37698 } 37699 37700 The C++ standard specifies that `Base::Base' is only called once when 37701 constructing or copy-constructing a Derived object. It is unspecified 37702 whether `Base::operator=' is called more than once when the implicit 37703 copy-assignment for Derived objects is invoked (as it is inside `func' 37704 in the example). 37705 37706 G++ implements the "intuitive" algorithm for copy-assignment: assign 37707 all direct bases, then assign all members. In that algorithm, the 37708 virtual base subobject can be encountered more than once. In the 37709 example, copying proceeds in the following order: `val', `name' (via 37710 `strdup'), `bval', and `name' again. 37711 37712 If application code relies on copy-assignment, a user-defined 37713 copy-assignment operator removes any uncertainties. With such an 37714 operator, the application can define whether and how the virtual base 37715 subobject is assigned. 37716 37717 37718 File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble 37719 37720 10.9 Caveats of using `protoize' 37721 ================================ 37722 37723 The conversion programs `protoize' and `unprotoize' can sometimes 37724 change a source file in a way that won't work unless you rearrange it. 37725 37726 * `protoize' can insert references to a type name or type tag before 37727 the definition, or in a file where they are not defined. 37728 37729 If this happens, compiler error messages should show you where the 37730 new references are, so fixing the file by hand is straightforward. 37731 37732 * There are some C constructs which `protoize' cannot figure out. 37733 For example, it can't determine argument types for declaring a 37734 pointer-to-function variable; this you must do by hand. `protoize' 37735 inserts a comment containing `???' each time it finds such a 37736 variable; so you can find all such variables by searching for this 37737 string. ISO C does not require declaring the argument types of 37738 pointer-to-function types. 37739 37740 * Using `unprotoize' can easily introduce bugs. If the program 37741 relied on prototypes to bring about conversion of arguments, these 37742 conversions will not take place in the program without prototypes. 37743 One case in which you can be sure `unprotoize' is safe is when you 37744 are removing prototypes that were made with `protoize'; if the 37745 program worked before without any prototypes, it will work again 37746 without them. 37747 37748 You can find all the places where this problem might occur by 37749 compiling the program with the `-Wtraditional-conversion' option. 37750 It prints a warning whenever an argument is converted. 37751 37752 * Both conversion programs can be confused if there are macro calls 37753 in and around the text to be converted. In other words, the 37754 standard syntax for a declaration or definition must not result 37755 from expanding a macro. This problem is inherent in the design of 37756 C and cannot be fixed. If only a few functions have confusing 37757 macro calls, you can easily convert them manually. 37758 37759 * `protoize' cannot get the argument types for a function whose 37760 definition was not actually compiled due to preprocessing 37761 conditionals. When this happens, `protoize' changes nothing in 37762 regard to such a function. `protoize' tries to detect such 37763 instances and warn about them. 37764 37765 You can generally work around this problem by using `protoize' step 37766 by step, each time specifying a different set of `-D' options for 37767 compilation, until all of the functions have been converted. 37768 There is no automatic way to verify that you have got them all, 37769 however. 37770 37771 * Confusion may result if there is an occasion to convert a function 37772 declaration or definition in a region of source code where there 37773 is more than one formal parameter list present. Thus, attempts to 37774 convert code containing multiple (conditionally compiled) versions 37775 of a single function header (in the same vicinity) may not produce 37776 the desired (or expected) results. 37777 37778 If you plan on converting source files which contain such code, it 37779 is recommended that you first make sure that each conditionally 37780 compiled region of source code which contains an alternative 37781 function header also contains at least one additional follower 37782 token (past the final right parenthesis of the function header). 37783 This should circumvent the problem. 37784 37785 * `unprotoize' can become confused when trying to convert a function 37786 definition or declaration which contains a declaration for a 37787 pointer-to-function formal argument which has the same name as the 37788 function being defined or declared. We recommend you avoid such 37789 choices of formal parameter names. 37790 37791 * You might also want to correct some of the indentation by hand and 37792 break long lines. (The conversion programs don't write lines 37793 longer than eighty characters in any case.) 37794 37795 37796 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble 37797 37798 10.10 Certain Changes We Don't Want to Make 37799 =========================================== 37800 37801 This section lists changes that people frequently request, but which we 37802 do not make because we think GCC is better without them. 37803 37804 * Checking the number and type of arguments to a function which has 37805 an old-fashioned definition and no prototype. 37806 37807 Such a feature would work only occasionally--only for calls that 37808 appear in the same file as the called function, following the 37809 definition. The only way to check all calls reliably is to add a 37810 prototype for the function. But adding a prototype eliminates the 37811 motivation for this feature. So the feature is not worthwhile. 37812 37813 * Warning about using an expression whose type is signed as a shift 37814 count. 37815 37816 Shift count operands are probably signed more often than unsigned. 37817 Warning about this would cause far more annoyance than good. 37818 37819 * Warning about assigning a signed value to an unsigned variable. 37820 37821 Such assignments must be very common; warning about them would 37822 cause more annoyance than good. 37823 37824 * Warning when a non-void function value is ignored. 37825 37826 C contains many standard functions that return a value that most 37827 programs choose to ignore. One obvious example is `printf'. 37828 Warning about this practice only leads the defensive programmer to 37829 clutter programs with dozens of casts to `void'. Such casts are 37830 required so frequently that they become visual noise. Writing 37831 those casts becomes so automatic that they no longer convey useful 37832 information about the intentions of the programmer. For functions 37833 where the return value should never be ignored, use the 37834 `warn_unused_result' function attribute (*note Function 37835 Attributes::). 37836 37837 * Making `-fshort-enums' the default. 37838 37839 This would cause storage layout to be incompatible with most other 37840 C compilers. And it doesn't seem very important, given that you 37841 can get the same result in other ways. The case where it matters 37842 most is when the enumeration-valued object is inside a structure, 37843 and in that case you can specify a field width explicitly. 37844 37845 * Making bit-fields unsigned by default on particular machines where 37846 "the ABI standard" says to do so. 37847 37848 The ISO C standard leaves it up to the implementation whether a 37849 bit-field declared plain `int' is signed or not. This in effect 37850 creates two alternative dialects of C. 37851 37852 The GNU C compiler supports both dialects; you can specify the 37853 signed dialect with `-fsigned-bitfields' and the unsigned dialect 37854 with `-funsigned-bitfields'. However, this leaves open the 37855 question of which dialect to use by default. 37856 37857 Currently, the preferred dialect makes plain bit-fields signed, 37858 because this is simplest. Since `int' is the same as `signed int' 37859 in every other context, it is cleanest for them to be the same in 37860 bit-fields as well. 37861 37862 Some computer manufacturers have published Application Binary 37863 Interface standards which specify that plain bit-fields should be 37864 unsigned. It is a mistake, however, to say anything about this 37865 issue in an ABI. This is because the handling of plain bit-fields 37866 distinguishes two dialects of C. Both dialects are meaningful on 37867 every type of machine. Whether a particular object file was 37868 compiled using signed bit-fields or unsigned is of no concern to 37869 other object files, even if they access the same bit-fields in the 37870 same data structures. 37871 37872 A given program is written in one or the other of these two 37873 dialects. The program stands a chance to work on most any machine 37874 if it is compiled with the proper dialect. It is unlikely to work 37875 at all if compiled with the wrong dialect. 37876 37877 Many users appreciate the GNU C compiler because it provides an 37878 environment that is uniform across machines. These users would be 37879 inconvenienced if the compiler treated plain bit-fields 37880 differently on certain machines. 37881 37882 Occasionally users write programs intended only for a particular 37883 machine type. On these occasions, the users would benefit if the 37884 GNU C compiler were to support by default the same dialect as the 37885 other compilers on that machine. But such applications are rare. 37886 And users writing a program to run on more than one type of 37887 machine cannot possibly benefit from this kind of compatibility. 37888 37889 This is why GCC does and will treat plain bit-fields in the same 37890 fashion on all types of machines (by default). 37891 37892 There are some arguments for making bit-fields unsigned by default 37893 on all machines. If, for example, this becomes a universal de 37894 facto standard, it would make sense for GCC to go along with it. 37895 This is something to be considered in the future. 37896 37897 (Of course, users strongly concerned about portability should 37898 indicate explicitly in each bit-field whether it is signed or not. 37899 In this way, they write programs which have the same meaning in 37900 both C dialects.) 37901 37902 * Undefining `__STDC__' when `-ansi' is not used. 37903 37904 Currently, GCC defines `__STDC__' unconditionally. This provides 37905 good results in practice. 37906 37907 Programmers normally use conditionals on `__STDC__' to ask whether 37908 it is safe to use certain features of ISO C, such as function 37909 prototypes or ISO token concatenation. Since plain `gcc' supports 37910 all the features of ISO C, the correct answer to these questions is 37911 "yes". 37912 37913 Some users try to use `__STDC__' to check for the availability of 37914 certain library facilities. This is actually incorrect usage in 37915 an ISO C program, because the ISO C standard says that a conforming 37916 freestanding implementation should define `__STDC__' even though it 37917 does not have the library facilities. `gcc -ansi -pedantic' is a 37918 conforming freestanding implementation, and it is therefore 37919 required to define `__STDC__', even though it does not come with 37920 an ISO C library. 37921 37922 Sometimes people say that defining `__STDC__' in a compiler that 37923 does not completely conform to the ISO C standard somehow violates 37924 the standard. This is illogical. The standard is a standard for 37925 compilers that claim to support ISO C, such as `gcc -ansi'--not 37926 for other compilers such as plain `gcc'. Whatever the ISO C 37927 standard says is relevant to the design of plain `gcc' without 37928 `-ansi' only for pragmatic reasons, not as a requirement. 37929 37930 GCC normally defines `__STDC__' to be 1, and in addition defines 37931 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std' 37932 option for strict conformance to some version of ISO C. On some 37933 hosts, system include files use a different convention, where 37934 `__STDC__' is normally 0, but is 1 if the user specifies strict 37935 conformance to the C Standard. GCC follows the host convention 37936 when processing system include files, but when processing user 37937 files it follows the usual GNU C convention. 37938 37939 * Undefining `__STDC__' in C++. 37940 37941 Programs written to compile with C++-to-C translators get the 37942 value of `__STDC__' that goes with the C compiler that is 37943 subsequently used. These programs must test `__STDC__' to 37944 determine what kind of C preprocessor that compiler uses: whether 37945 they should concatenate tokens in the ISO C fashion or in the 37946 traditional fashion. 37947 37948 These programs work properly with GNU C++ if `__STDC__' is defined. 37949 They would not work otherwise. 37950 37951 In addition, many header files are written to provide prototypes 37952 in ISO C but not in traditional C. Many of these header files can 37953 work without change in C++ provided `__STDC__' is defined. If 37954 `__STDC__' is not defined, they will all fail, and will all need 37955 to be changed to test explicitly for C++ as well. 37956 37957 * Deleting "empty" loops. 37958 37959 Historically, GCC has not deleted "empty" loops under the 37960 assumption that the most likely reason you would put one in a 37961 program is to have a delay, so deleting them will not make real 37962 programs run any faster. 37963 37964 However, the rationale here is that optimization of a nonempty loop 37965 cannot produce an empty one. This held for carefully written C 37966 compiled with less powerful optimizers but is not always the case 37967 for carefully written C++ or with more powerful optimizers. Thus 37968 GCC will remove operations from loops whenever it can determine 37969 those operations are not externally visible (apart from the time 37970 taken to execute them, of course). In case the loop can be proved 37971 to be finite, GCC will also remove the loop itself. 37972 37973 Be aware of this when performing timing tests, for instance the 37974 following loop can be completely removed, provided 37975 `some_expression' can provably not change any global state. 37976 37977 { 37978 int sum = 0; 37979 int ix; 37980 37981 for (ix = 0; ix != 10000; ix++) 37982 sum += some_expression; 37983 } 37984 37985 Even though `sum' is accumulated in the loop, no use is made of 37986 that summation, so the accumulation can be removed. 37987 37988 * Making side effects happen in the same order as in some other 37989 compiler. 37990 37991 It is never safe to depend on the order of evaluation of side 37992 effects. For example, a function call like this may very well 37993 behave differently from one compiler to another: 37994 37995 void func (int, int); 37996 37997 int i = 2; 37998 func (i++, i++); 37999 38000 There is no guarantee (in either the C or the C++ standard language 38001 definitions) that the increments will be evaluated in any 38002 particular order. Either increment might happen first. `func' 38003 might get the arguments `2, 3', or it might get `3, 2', or even 38004 `2, 2'. 38005 38006 * Making certain warnings into errors by default. 38007 38008 Some ISO C testsuites report failure when the compiler does not 38009 produce an error message for a certain program. 38010 38011 ISO C requires a "diagnostic" message for certain kinds of invalid 38012 programs, but a warning is defined by GCC to count as a 38013 diagnostic. If GCC produces a warning but not an error, that is 38014 correct ISO C support. If testsuites call this "failure", they 38015 should be run with the GCC option `-pedantic-errors', which will 38016 turn these warnings into errors. 38017 38018 38019 38020 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble 38021 38022 10.11 Warning Messages and Error Messages 38023 ========================================= 38024 38025 The GNU compiler can produce two kinds of diagnostics: errors and 38026 warnings. Each kind has a different purpose: 38027 38028 "Errors" report problems that make it impossible to compile your 38029 program. GCC reports errors with the source file name and line 38030 number where the problem is apparent. 38031 38032 "Warnings" report other unusual conditions in your code that _may_ 38033 indicate a problem, although compilation can (and does) proceed. 38034 Warning messages also report the source file name and line number, 38035 but include the text `warning:' to distinguish them from error 38036 messages. 38037 38038 Warnings may indicate danger points where you should check to make sure 38039 that your program really does what you intend; or the use of obsolete 38040 features; or the use of nonstandard features of GNU C or C++. Many 38041 warnings are issued only if you ask for them, with one of the `-W' 38042 options (for instance, `-Wall' requests a variety of useful warnings). 38043 38044 GCC always tries to compile your program if possible; it never 38045 gratuitously rejects a program whose meaning is clear merely because 38046 (for instance) it fails to conform to a standard. In some cases, 38047 however, the C and C++ standards specify that certain extensions are 38048 forbidden, and a diagnostic _must_ be issued by a conforming compiler. 38049 The `-pedantic' option tells GCC to issue warnings in such cases; 38050 `-pedantic-errors' says to make them errors instead. This does not 38051 mean that _all_ non-ISO constructs get warnings or errors. 38052 38053 *Note Options to Request or Suppress Warnings: Warning Options, for 38054 more detail on these and related command-line options. 38055 38056 38057 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top 38058 38059 11 Reporting Bugs 38060 ***************** 38061 38062 Your bug reports play an essential role in making GCC reliable. 38063 38064 When you encounter a problem, the first thing to do is to see if it is 38065 already known. *Note Trouble::. If it isn't known, then you should 38066 report the problem. 38067 38068 * Menu: 38069 38070 * Criteria: Bug Criteria. Have you really found a bug? 38071 * Reporting: Bug Reporting. How to report a bug effectively. 38072 * Known: Trouble. Known problems. 38073 * Help: Service. Where to ask for help. 38074 38075 38076 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs 38077 38078 11.1 Have You Found a Bug? 38079 ========================== 38080 38081 If you are not sure whether you have found a bug, here are some 38082 guidelines: 38083 38084 * If the compiler gets a fatal signal, for any input whatever, that 38085 is a compiler bug. Reliable compilers never crash. 38086 38087 * If the compiler produces invalid assembly code, for any input 38088 whatever (except an `asm' statement), that is a compiler bug, 38089 unless the compiler reports errors (not just warnings) which would 38090 ordinarily prevent the assembler from being run. 38091 38092 * If the compiler produces valid assembly code that does not 38093 correctly execute the input source code, that is a compiler bug. 38094 38095 However, you must double-check to make sure, because you may have a 38096 program whose behavior is undefined, which happened by chance to 38097 give the desired results with another C or C++ compiler. 38098 38099 For example, in many nonoptimizing compilers, you can write `x;' 38100 at the end of a function instead of `return x;', with the same 38101 results. But the value of the function is undefined if `return' 38102 is omitted; it is not a bug when GCC produces different results. 38103 38104 Problems often result from expressions with two increment 38105 operators, as in `f (*p++, *p++)'. Your previous compiler might 38106 have interpreted that expression the way you intended; GCC might 38107 interpret it another way. Neither compiler is wrong. The bug is 38108 in your code. 38109 38110 After you have localized the error to a single source line, it 38111 should be easy to check for these things. If your program is 38112 correct and well defined, you have found a compiler bug. 38113 38114 * If the compiler produces an error message for valid input, that is 38115 a compiler bug. 38116 38117 * If the compiler does not produce an error message for invalid 38118 input, that is a compiler bug. However, you should note that your 38119 idea of "invalid input" might be someone else's idea of "an 38120 extension" or "support for traditional practice". 38121 38122 * If you are an experienced user of one of the languages GCC 38123 supports, your suggestions for improvement of GCC are welcome in 38124 any case. 38125 38126 38127 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs 38128 38129 11.2 How and where to Report Bugs 38130 ================================= 38131 38132 Bugs should be reported to the bug database at 38133 `http://gcc.gnu.org/bugs.html'. 38134 38135 38136 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top 38137 38138 12 How To Get Help with GCC 38139 *************************** 38140 38141 If you need help installing, using or changing GCC, there are two ways 38142 to find it: 38143 38144 * Send a message to a suitable network mailing list. First try 38145 <gcc-help (a] gcc.gnu.org> (for help installing or using GCC), and if 38146 that brings no response, try <gcc (a] gcc.gnu.org>. For help changing 38147 GCC, ask <gcc (a] gcc.gnu.org>. If you think you have found a bug in 38148 GCC, please report it following the instructions at *note Bug 38149 Reporting::. 38150 38151 * Look in the service directory for someone who might help you for a 38152 fee. The service directory is found at 38153 `http://www.fsf.org/resources/service'. 38154 38155 For further information, see `http://gcc.gnu.org/faq.html#support'. 38156 38157 38158 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top 38159 38160 13 Contributing to GCC Development 38161 ********************************** 38162 38163 If you would like to help pretest GCC releases to assure they work well, 38164 current development sources are available by SVN (see 38165 `http://gcc.gnu.org/svn.html'). Source and binary snapshots are also 38166 available for FTP; see `http://gcc.gnu.org/snapshots.html'. 38167 38168 If you would like to work on improvements to GCC, please read the 38169 advice at these URLs: 38170 38171 `http://gcc.gnu.org/contribute.html' 38172 `http://gcc.gnu.org/contributewhy.html' 38173 38174 for information on how to make useful contributions and avoid 38175 duplication of effort. Suggested projects are listed at 38176 `http://gcc.gnu.org/projects/'. 38177 38178 38179 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top 38180 38181 Funding Free Software 38182 ********************* 38183 38184 If you want to have more free software a few years from now, it makes 38185 sense for you to help encourage people to contribute funds for its 38186 development. The most effective approach known is to encourage 38187 commercial redistributors to donate. 38188 38189 Users of free software systems can boost the pace of development by 38190 encouraging for-a-fee distributors to donate part of their selling price 38191 to free software developers--the Free Software Foundation, and others. 38192 38193 The way to convince distributors to do this is to demand it and expect 38194 it from them. So when you compare distributors, judge them partly by 38195 how much they give to free software development. Show distributors 38196 they must compete to be the one who gives the most. 38197 38198 To make this approach work, you must insist on numbers that you can 38199 compare, such as, "We will donate ten dollars to the Frobnitz project 38200 for each disk sold." Don't be satisfied with a vague promise, such as 38201 "A portion of the profits are donated," since it doesn't give a basis 38202 for comparison. 38203 38204 Even a precise fraction "of the profits from this disk" is not very 38205 meaningful, since creative accounting and unrelated business decisions 38206 can greatly alter what fraction of the sales price counts as profit. 38207 If the price you pay is $50, ten percent of the profit is probably less 38208 than a dollar; it might be a few cents, or nothing at all. 38209 38210 Some redistributors do development work themselves. This is useful 38211 too; but to keep everyone honest, you need to inquire how much they do, 38212 and what kind. Some kinds of development make much more long-term 38213 difference than others. For example, maintaining a separate version of 38214 a program contributes very little; maintaining the standard version of a 38215 program for the whole community contributes much. Easy new ports 38216 contribute little, since someone else would surely do them; difficult 38217 ports such as adding a new CPU to the GNU Compiler Collection 38218 contribute more; major new features or packages contribute the most. 38219 38220 By establishing the idea that supporting further development is "the 38221 proper thing to do" when distributing free software for a fee, we can 38222 assure a steady flow of resources into making more free software. 38223 38224 Copyright (C) 1994 Free Software Foundation, Inc. 38225 Verbatim copying and redistribution of this section is permitted 38226 without royalty; alteration is not permitted. 38227 38228 38229 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 38230 38231 The GNU Project and GNU/Linux 38232 ***************************** 38233 38234 The GNU Project was launched in 1984 to develop a complete Unix-like 38235 operating system which is free software: the GNU system. (GNU is a 38236 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 38237 Variants of the GNU operating system, which use the kernel Linux, are 38238 now widely used; though these systems are often referred to as "Linux", 38239 they are more accurately called GNU/Linux systems. 38240 38241 For more information, see: 38242 `http://www.gnu.org/' 38243 `http://www.gnu.org/gnu/linux-and-gnu.html' 38244 38245 38246 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 38247 38248 GNU General Public License 38249 ************************** 38250 38251 Version 3, 29 June 2007 38252 38253 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' 38254 38255 Everyone is permitted to copy and distribute verbatim copies of this 38256 license document, but changing it is not allowed. 38257 38258 Preamble 38259 ======== 38260 38261 The GNU General Public License is a free, copyleft license for software 38262 and other kinds of works. 38263 38264 The licenses for most software and other practical works are designed 38265 to take away your freedom to share and change the works. By contrast, 38266 the GNU General Public License is intended to guarantee your freedom to 38267 share and change all versions of a program-to make sure it remains free 38268 software for all its users. We, the Free Software Foundation, use the 38269 GNU General Public License for most of our software; it applies also to 38270 any other work released this way by its authors. You can apply it to 38271 your programs, too. 38272 38273 When we speak of free software, we are referring to freedom, not 38274 price. Our General Public Licenses are designed to make sure that you 38275 have the freedom to distribute copies of free software (and charge for 38276 them if you wish), that you receive source code or can get it if you 38277 want it, that you can change the software or use pieces of it in new 38278 free programs, and that you know you can do these things. 38279 38280 To protect your rights, we need to prevent others from denying you 38281 these rights or asking you to surrender the rights. Therefore, you 38282 have certain responsibilities if you distribute copies of the software, 38283 or if you modify it: responsibilities to respect the freedom of others. 38284 38285 For example, if you distribute copies of such a program, whether 38286 gratis or for a fee, you must pass on to the recipients the same 38287 freedoms that you received. You must make sure that they, too, receive 38288 or can get the source code. And you must show them these terms so they 38289 know their rights. 38290 38291 Developers that use the GNU GPL protect your rights with two steps: 38292 (1) assert copyright on the software, and (2) offer you this License 38293 giving you legal permission to copy, distribute and/or modify it. 38294 38295 For the developers' and authors' protection, the GPL clearly explains 38296 that there is no warranty for this free software. For both users' and 38297 authors' sake, the GPL requires that modified versions be marked as 38298 changed, so that their problems will not be attributed erroneously to 38299 authors of previous versions. 38300 38301 Some devices are designed to deny users access to install or run 38302 modified versions of the software inside them, although the 38303 manufacturer can do so. This is fundamentally incompatible with the 38304 aim of protecting users' freedom to change the software. The 38305 systematic pattern of such abuse occurs in the area of products for 38306 individuals to use, which is precisely where it is most unacceptable. 38307 Therefore, we have designed this version of the GPL to prohibit the 38308 practice for those products. If such problems arise substantially in 38309 other domains, we stand ready to extend this provision to those domains 38310 in future versions of the GPL, as needed to protect the freedom of 38311 users. 38312 38313 Finally, every program is threatened constantly by software patents. 38314 States should not allow patents to restrict development and use of 38315 software on general-purpose computers, but in those that do, we wish to 38316 avoid the special danger that patents applied to a free program could 38317 make it effectively proprietary. To prevent this, the GPL assures that 38318 patents cannot be used to render the program non-free. 38319 38320 The precise terms and conditions for copying, distribution and 38321 modification follow. 38322 38323 TERMS AND CONDITIONS 38324 ==================== 38325 38326 0. Definitions. 38327 38328 "This License" refers to version 3 of the GNU General Public 38329 License. 38330 38331 "Copyright" also means copyright-like laws that apply to other 38332 kinds of works, such as semiconductor masks. 38333 38334 "The Program" refers to any copyrightable work licensed under this 38335 License. Each licensee is addressed as "you". "Licensees" and 38336 "recipients" may be individuals or organizations. 38337 38338 To "modify" a work means to copy from or adapt all or part of the 38339 work in a fashion requiring copyright permission, other than the 38340 making of an exact copy. The resulting work is called a "modified 38341 version" of the earlier work or a work "based on" the earlier work. 38342 38343 A "covered work" means either the unmodified Program or a work 38344 based on the Program. 38345 38346 To "propagate" a work means to do anything with it that, without 38347 permission, would make you directly or secondarily liable for 38348 infringement under applicable copyright law, except executing it 38349 on a computer or modifying a private copy. Propagation includes 38350 copying, distribution (with or without modification), making 38351 available to the public, and in some countries other activities as 38352 well. 38353 38354 To "convey" a work means any kind of propagation that enables other 38355 parties to make or receive copies. Mere interaction with a user 38356 through a computer network, with no transfer of a copy, is not 38357 conveying. 38358 38359 An interactive user interface displays "Appropriate Legal Notices" 38360 to the extent that it includes a convenient and prominently visible 38361 feature that (1) displays an appropriate copyright notice, and (2) 38362 tells the user that there is no warranty for the work (except to 38363 the extent that warranties are provided), that licensees may 38364 convey the work under this License, and how to view a copy of this 38365 License. If the interface presents a list of user commands or 38366 options, such as a menu, a prominent item in the list meets this 38367 criterion. 38368 38369 1. Source Code. 38370 38371 The "source code" for a work means the preferred form of the work 38372 for making modifications to it. "Object code" means any 38373 non-source form of a work. 38374 38375 A "Standard Interface" means an interface that either is an 38376 official standard defined by a recognized standards body, or, in 38377 the case of interfaces specified for a particular programming 38378 language, one that is widely used among developers working in that 38379 language. 38380 38381 The "System Libraries" of an executable work include anything, 38382 other than the work as a whole, that (a) is included in the normal 38383 form of packaging a Major Component, but which is not part of that 38384 Major Component, and (b) serves only to enable use of the work 38385 with that Major Component, or to implement a Standard Interface 38386 for which an implementation is available to the public in source 38387 code form. A "Major Component", in this context, means a major 38388 essential component (kernel, window system, and so on) of the 38389 specific operating system (if any) on which the executable work 38390 runs, or a compiler used to produce the work, or an object code 38391 interpreter used to run it. 38392 38393 The "Corresponding Source" for a work in object code form means all 38394 the source code needed to generate, install, and (for an executable 38395 work) run the object code and to modify the work, including 38396 scripts to control those activities. However, it does not include 38397 the work's System Libraries, or general-purpose tools or generally 38398 available free programs which are used unmodified in performing 38399 those activities but which are not part of the work. For example, 38400 Corresponding Source includes interface definition files 38401 associated with source files for the work, and the source code for 38402 shared libraries and dynamically linked subprograms that the work 38403 is specifically designed to require, such as by intimate data 38404 communication or control flow between those subprograms and other 38405 parts of the work. 38406 38407 The Corresponding Source need not include anything that users can 38408 regenerate automatically from other parts of the Corresponding 38409 Source. 38410 38411 The Corresponding Source for a work in source code form is that 38412 same work. 38413 38414 2. Basic Permissions. 38415 38416 All rights granted under this License are granted for the term of 38417 copyright on the Program, and are irrevocable provided the stated 38418 conditions are met. This License explicitly affirms your unlimited 38419 permission to run the unmodified Program. The output from running 38420 a covered work is covered by this License only if the output, 38421 given its content, constitutes a covered work. This License 38422 acknowledges your rights of fair use or other equivalent, as 38423 provided by copyright law. 38424 38425 You may make, run and propagate covered works that you do not 38426 convey, without conditions so long as your license otherwise 38427 remains in force. You may convey covered works to others for the 38428 sole purpose of having them make modifications exclusively for 38429 you, or provide you with facilities for running those works, 38430 provided that you comply with the terms of this License in 38431 conveying all material for which you do not control copyright. 38432 Those thus making or running the covered works for you must do so 38433 exclusively on your behalf, under your direction and control, on 38434 terms that prohibit them from making any copies of your 38435 copyrighted material outside their relationship with you. 38436 38437 Conveying under any other circumstances is permitted solely under 38438 the conditions stated below. Sublicensing is not allowed; section 38439 10 makes it unnecessary. 38440 38441 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 38442 38443 No covered work shall be deemed part of an effective technological 38444 measure under any applicable law fulfilling obligations under 38445 article 11 of the WIPO copyright treaty adopted on 20 December 38446 1996, or similar laws prohibiting or restricting circumvention of 38447 such measures. 38448 38449 When you convey a covered work, you waive any legal power to forbid 38450 circumvention of technological measures to the extent such 38451 circumvention is effected by exercising rights under this License 38452 with respect to the covered work, and you disclaim any intention 38453 to limit operation or modification of the work as a means of 38454 enforcing, against the work's users, your or third parties' legal 38455 rights to forbid circumvention of technological measures. 38456 38457 4. Conveying Verbatim Copies. 38458 38459 You may convey verbatim copies of the Program's source code as you 38460 receive it, in any medium, provided that you conspicuously and 38461 appropriately publish on each copy an appropriate copyright notice; 38462 keep intact all notices stating that this License and any 38463 non-permissive terms added in accord with section 7 apply to the 38464 code; keep intact all notices of the absence of any warranty; and 38465 give all recipients a copy of this License along with the Program. 38466 38467 You may charge any price or no price for each copy that you convey, 38468 and you may offer support or warranty protection for a fee. 38469 38470 5. Conveying Modified Source Versions. 38471 38472 You may convey a work based on the Program, or the modifications to 38473 produce it from the Program, in the form of source code under the 38474 terms of section 4, provided that you also meet all of these 38475 conditions: 38476 38477 a. The work must carry prominent notices stating that you 38478 modified it, and giving a relevant date. 38479 38480 b. The work must carry prominent notices stating that it is 38481 released under this License and any conditions added under 38482 section 7. This requirement modifies the requirement in 38483 section 4 to "keep intact all notices". 38484 38485 c. You must license the entire work, as a whole, under this 38486 License to anyone who comes into possession of a copy. This 38487 License will therefore apply, along with any applicable 38488 section 7 additional terms, to the whole of the work, and all 38489 its parts, regardless of how they are packaged. This License 38490 gives no permission to license the work in any other way, but 38491 it does not invalidate such permission if you have separately 38492 received it. 38493 38494 d. If the work has interactive user interfaces, each must display 38495 Appropriate Legal Notices; however, if the Program has 38496 interactive interfaces that do not display Appropriate Legal 38497 Notices, your work need not make them do so. 38498 38499 A compilation of a covered work with other separate and independent 38500 works, which are not by their nature extensions of the covered 38501 work, and which are not combined with it such as to form a larger 38502 program, in or on a volume of a storage or distribution medium, is 38503 called an "aggregate" if the compilation and its resulting 38504 copyright are not used to limit the access or legal rights of the 38505 compilation's users beyond what the individual works permit. 38506 Inclusion of a covered work in an aggregate does not cause this 38507 License to apply to the other parts of the aggregate. 38508 38509 6. Conveying Non-Source Forms. 38510 38511 You may convey a covered work in object code form under the terms 38512 of sections 4 and 5, provided that you also convey the 38513 machine-readable Corresponding Source under the terms of this 38514 License, in one of these ways: 38515 38516 a. Convey the object code in, or embodied in, a physical product 38517 (including a physical distribution medium), accompanied by the 38518 Corresponding Source fixed on a durable physical medium 38519 customarily used for software interchange. 38520 38521 b. Convey the object code in, or embodied in, a physical product 38522 (including a physical distribution medium), accompanied by a 38523 written offer, valid for at least three years and valid for 38524 as long as you offer spare parts or customer support for that 38525 product model, to give anyone who possesses the object code 38526 either (1) a copy of the Corresponding Source for all the 38527 software in the product that is covered by this License, on a 38528 durable physical medium customarily used for software 38529 interchange, for a price no more than your reasonable cost of 38530 physically performing this conveying of source, or (2) access 38531 to copy the Corresponding Source from a network server at no 38532 charge. 38533 38534 c. Convey individual copies of the object code with a copy of 38535 the written offer to provide the Corresponding Source. This 38536 alternative is allowed only occasionally and noncommercially, 38537 and only if you received the object code with such an offer, 38538 in accord with subsection 6b. 38539 38540 d. Convey the object code by offering access from a designated 38541 place (gratis or for a charge), and offer equivalent access 38542 to the Corresponding Source in the same way through the same 38543 place at no further charge. You need not require recipients 38544 to copy the Corresponding Source along with the object code. 38545 If the place to copy the object code is a network server, the 38546 Corresponding Source may be on a different server (operated 38547 by you or a third party) that supports equivalent copying 38548 facilities, provided you maintain clear directions next to 38549 the object code saying where to find the Corresponding Source. 38550 Regardless of what server hosts the Corresponding Source, you 38551 remain obligated to ensure that it is available for as long 38552 as needed to satisfy these requirements. 38553 38554 e. Convey the object code using peer-to-peer transmission, 38555 provided you inform other peers where the object code and 38556 Corresponding Source of the work are being offered to the 38557 general public at no charge under subsection 6d. 38558 38559 38560 A separable portion of the object code, whose source code is 38561 excluded from the Corresponding Source as a System Library, need 38562 not be included in conveying the object code work. 38563 38564 A "User Product" is either (1) a "consumer product", which means 38565 any tangible personal property which is normally used for personal, 38566 family, or household purposes, or (2) anything designed or sold for 38567 incorporation into a dwelling. In determining whether a product 38568 is a consumer product, doubtful cases shall be resolved in favor of 38569 coverage. For a particular product received by a particular user, 38570 "normally used" refers to a typical or common use of that class of 38571 product, regardless of the status of the particular user or of the 38572 way in which the particular user actually uses, or expects or is 38573 expected to use, the product. A product is a consumer product 38574 regardless of whether the product has substantial commercial, 38575 industrial or non-consumer uses, unless such uses represent the 38576 only significant mode of use of the product. 38577 38578 "Installation Information" for a User Product means any methods, 38579 procedures, authorization keys, or other information required to 38580 install and execute modified versions of a covered work in that 38581 User Product from a modified version of its Corresponding Source. 38582 The information must suffice to ensure that the continued 38583 functioning of the modified object code is in no case prevented or 38584 interfered with solely because modification has been made. 38585 38586 If you convey an object code work under this section in, or with, 38587 or specifically for use in, a User Product, and the conveying 38588 occurs as part of a transaction in which the right of possession 38589 and use of the User Product is transferred to the recipient in 38590 perpetuity or for a fixed term (regardless of how the transaction 38591 is characterized), the Corresponding Source conveyed under this 38592 section must be accompanied by the Installation Information. But 38593 this requirement does not apply if neither you nor any third party 38594 retains the ability to install modified object code on the User 38595 Product (for example, the work has been installed in ROM). 38596 38597 The requirement to provide Installation Information does not 38598 include a requirement to continue to provide support service, 38599 warranty, or updates for a work that has been modified or 38600 installed by the recipient, or for the User Product in which it 38601 has been modified or installed. Access to a network may be denied 38602 when the modification itself materially and adversely affects the 38603 operation of the network or violates the rules and protocols for 38604 communication across the network. 38605 38606 Corresponding Source conveyed, and Installation Information 38607 provided, in accord with this section must be in a format that is 38608 publicly documented (and with an implementation available to the 38609 public in source code form), and must require no special password 38610 or key for unpacking, reading or copying. 38611 38612 7. Additional Terms. 38613 38614 "Additional permissions" are terms that supplement the terms of 38615 this License by making exceptions from one or more of its 38616 conditions. Additional permissions that are applicable to the 38617 entire Program shall be treated as though they were included in 38618 this License, to the extent that they are valid under applicable 38619 law. If additional permissions apply only to part of the Program, 38620 that part may be used separately under those permissions, but the 38621 entire Program remains governed by this License without regard to 38622 the additional permissions. 38623 38624 When you convey a copy of a covered work, you may at your option 38625 remove any additional permissions from that copy, or from any part 38626 of it. (Additional permissions may be written to require their own 38627 removal in certain cases when you modify the work.) You may place 38628 additional permissions on material, added by you to a covered work, 38629 for which you have or can give appropriate copyright permission. 38630 38631 Notwithstanding any other provision of this License, for material 38632 you add to a covered work, you may (if authorized by the copyright 38633 holders of that material) supplement the terms of this License 38634 with terms: 38635 38636 a. Disclaiming warranty or limiting liability differently from 38637 the terms of sections 15 and 16 of this License; or 38638 38639 b. Requiring preservation of specified reasonable legal notices 38640 or author attributions in that material or in the Appropriate 38641 Legal Notices displayed by works containing it; or 38642 38643 c. Prohibiting misrepresentation of the origin of that material, 38644 or requiring that modified versions of such material be 38645 marked in reasonable ways as different from the original 38646 version; or 38647 38648 d. Limiting the use for publicity purposes of names of licensors 38649 or authors of the material; or 38650 38651 e. Declining to grant rights under trademark law for use of some 38652 trade names, trademarks, or service marks; or 38653 38654 f. Requiring indemnification of licensors and authors of that 38655 material by anyone who conveys the material (or modified 38656 versions of it) with contractual assumptions of liability to 38657 the recipient, for any liability that these contractual 38658 assumptions directly impose on those licensors and authors. 38659 38660 All other non-permissive additional terms are considered "further 38661 restrictions" within the meaning of section 10. If the Program as 38662 you received it, or any part of it, contains a notice stating that 38663 it is governed by this License along with a term that is a further 38664 restriction, you may remove that term. If a license document 38665 contains a further restriction but permits relicensing or 38666 conveying under this License, you may add to a covered work 38667 material governed by the terms of that license document, provided 38668 that the further restriction does not survive such relicensing or 38669 conveying. 38670 38671 If you add terms to a covered work in accord with this section, you 38672 must place, in the relevant source files, a statement of the 38673 additional terms that apply to those files, or a notice indicating 38674 where to find the applicable terms. 38675 38676 Additional terms, permissive or non-permissive, may be stated in 38677 the form of a separately written license, or stated as exceptions; 38678 the above requirements apply either way. 38679 38680 8. Termination. 38681 38682 You may not propagate or modify a covered work except as expressly 38683 provided under this License. Any attempt otherwise to propagate or 38684 modify it is void, and will automatically terminate your rights 38685 under this License (including any patent licenses granted under 38686 the third paragraph of section 11). 38687 38688 However, if you cease all violation of this License, then your 38689 license from a particular copyright holder is reinstated (a) 38690 provisionally, unless and until the copyright holder explicitly 38691 and finally terminates your license, and (b) permanently, if the 38692 copyright holder fails to notify you of the violation by some 38693 reasonable means prior to 60 days after the cessation. 38694 38695 Moreover, your license from a particular copyright holder is 38696 reinstated permanently if the copyright holder notifies you of the 38697 violation by some reasonable means, this is the first time you have 38698 received notice of violation of this License (for any work) from 38699 that copyright holder, and you cure the violation prior to 30 days 38700 after your receipt of the notice. 38701 38702 Termination of your rights under this section does not terminate 38703 the licenses of parties who have received copies or rights from 38704 you under this License. If your rights have been terminated and 38705 not permanently reinstated, you do not qualify to receive new 38706 licenses for the same material under section 10. 38707 38708 9. Acceptance Not Required for Having Copies. 38709 38710 You are not required to accept this License in order to receive or 38711 run a copy of the Program. Ancillary propagation of a covered work 38712 occurring solely as a consequence of using peer-to-peer 38713 transmission to receive a copy likewise does not require 38714 acceptance. However, nothing other than this License grants you 38715 permission to propagate or modify any covered work. These actions 38716 infringe copyright if you do not accept this License. Therefore, 38717 by modifying or propagating a covered work, you indicate your 38718 acceptance of this License to do so. 38719 38720 10. Automatic Licensing of Downstream Recipients. 38721 38722 Each time you convey a covered work, the recipient automatically 38723 receives a license from the original licensors, to run, modify and 38724 propagate that work, subject to this License. You are not 38725 responsible for enforcing compliance by third parties with this 38726 License. 38727 38728 An "entity transaction" is a transaction transferring control of an 38729 organization, or substantially all assets of one, or subdividing an 38730 organization, or merging organizations. If propagation of a 38731 covered work results from an entity transaction, each party to that 38732 transaction who receives a copy of the work also receives whatever 38733 licenses to the work the party's predecessor in interest had or 38734 could give under the previous paragraph, plus a right to 38735 possession of the Corresponding Source of the work from the 38736 predecessor in interest, if the predecessor has it or can get it 38737 with reasonable efforts. 38738 38739 You may not impose any further restrictions on the exercise of the 38740 rights granted or affirmed under this License. For example, you 38741 may not impose a license fee, royalty, or other charge for 38742 exercise of rights granted under this License, and you may not 38743 initiate litigation (including a cross-claim or counterclaim in a 38744 lawsuit) alleging that any patent claim is infringed by making, 38745 using, selling, offering for sale, or importing the Program or any 38746 portion of it. 38747 38748 11. Patents. 38749 38750 A "contributor" is a copyright holder who authorizes use under this 38751 License of the Program or a work on which the Program is based. 38752 The work thus licensed is called the contributor's "contributor 38753 version". 38754 38755 A contributor's "essential patent claims" are all patent claims 38756 owned or controlled by the contributor, whether already acquired or 38757 hereafter acquired, that would be infringed by some manner, 38758 permitted by this License, of making, using, or selling its 38759 contributor version, but do not include claims that would be 38760 infringed only as a consequence of further modification of the 38761 contributor version. For purposes of this definition, "control" 38762 includes the right to grant patent sublicenses in a manner 38763 consistent with the requirements of this License. 38764 38765 Each contributor grants you a non-exclusive, worldwide, 38766 royalty-free patent license under the contributor's essential 38767 patent claims, to make, use, sell, offer for sale, import and 38768 otherwise run, modify and propagate the contents of its 38769 contributor version. 38770 38771 In the following three paragraphs, a "patent license" is any 38772 express agreement or commitment, however denominated, not to 38773 enforce a patent (such as an express permission to practice a 38774 patent or covenant not to sue for patent infringement). To 38775 "grant" such a patent license to a party means to make such an 38776 agreement or commitment not to enforce a patent against the party. 38777 38778 If you convey a covered work, knowingly relying on a patent 38779 license, and the Corresponding Source of the work is not available 38780 for anyone to copy, free of charge and under the terms of this 38781 License, through a publicly available network server or other 38782 readily accessible means, then you must either (1) cause the 38783 Corresponding Source to be so available, or (2) arrange to deprive 38784 yourself of the benefit of the patent license for this particular 38785 work, or (3) arrange, in a manner consistent with the requirements 38786 of this License, to extend the patent license to downstream 38787 recipients. "Knowingly relying" means you have actual knowledge 38788 that, but for the patent license, your conveying the covered work 38789 in a country, or your recipient's use of the covered work in a 38790 country, would infringe one or more identifiable patents in that 38791 country that you have reason to believe are valid. 38792 38793 If, pursuant to or in connection with a single transaction or 38794 arrangement, you convey, or propagate by procuring conveyance of, a 38795 covered work, and grant a patent license to some of the parties 38796 receiving the covered work authorizing them to use, propagate, 38797 modify or convey a specific copy of the covered work, then the 38798 patent license you grant is automatically extended to all 38799 recipients of the covered work and works based on it. 38800 38801 A patent license is "discriminatory" if it does not include within 38802 the scope of its coverage, prohibits the exercise of, or is 38803 conditioned on the non-exercise of one or more of the rights that 38804 are specifically granted under this License. You may not convey a 38805 covered work if you are a party to an arrangement with a third 38806 party that is in the business of distributing software, under 38807 which you make payment to the third party based on the extent of 38808 your activity of conveying the work, and under which the third 38809 party grants, to any of the parties who would receive the covered 38810 work from you, a discriminatory patent license (a) in connection 38811 with copies of the covered work conveyed by you (or copies made 38812 from those copies), or (b) primarily for and in connection with 38813 specific products or compilations that contain the covered work, 38814 unless you entered into that arrangement, or that patent license 38815 was granted, prior to 28 March 2007. 38816 38817 Nothing in this License shall be construed as excluding or limiting 38818 any implied license or other defenses to infringement that may 38819 otherwise be available to you under applicable patent law. 38820 38821 12. No Surrender of Others' Freedom. 38822 38823 If conditions are imposed on you (whether by court order, 38824 agreement or otherwise) that contradict the conditions of this 38825 License, they do not excuse you from the conditions of this 38826 License. If you cannot convey a covered work so as to satisfy 38827 simultaneously your obligations under this License and any other 38828 pertinent obligations, then as a consequence you may not convey it 38829 at all. For example, if you agree to terms that obligate you to 38830 collect a royalty for further conveying from those to whom you 38831 convey the Program, the only way you could satisfy both those 38832 terms and this License would be to refrain entirely from conveying 38833 the Program. 38834 38835 13. Use with the GNU Affero General Public License. 38836 38837 Notwithstanding any other provision of this License, you have 38838 permission to link or combine any covered work with a work licensed 38839 under version 3 of the GNU Affero General Public License into a 38840 single combined work, and to convey the resulting work. The terms 38841 of this License will continue to apply to the part which is the 38842 covered work, but the special requirements of the GNU Affero 38843 General Public License, section 13, concerning interaction through 38844 a network will apply to the combination as such. 38845 38846 14. Revised Versions of this License. 38847 38848 The Free Software Foundation may publish revised and/or new 38849 versions of the GNU General Public License from time to time. 38850 Such new versions will be similar in spirit to the present 38851 version, but may differ in detail to address new problems or 38852 concerns. 38853 38854 Each version is given a distinguishing version number. If the 38855 Program specifies that a certain numbered version of the GNU 38856 General Public License "or any later version" applies to it, you 38857 have the option of following the terms and conditions either of 38858 that numbered version or of any later version published by the 38859 Free Software Foundation. If the Program does not specify a 38860 version number of the GNU General Public License, you may choose 38861 any version ever published by the Free Software Foundation. 38862 38863 If the Program specifies that a proxy can decide which future 38864 versions of the GNU General Public License can be used, that 38865 proxy's public statement of acceptance of a version permanently 38866 authorizes you to choose that version for the Program. 38867 38868 Later license versions may give you additional or different 38869 permissions. However, no additional obligations are imposed on any 38870 author or copyright holder as a result of your choosing to follow a 38871 later version. 38872 38873 15. Disclaimer of Warranty. 38874 38875 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 38876 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 38877 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 38878 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 38879 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 38880 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 38881 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 38882 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 38883 NECESSARY SERVICING, REPAIR OR CORRECTION. 38884 38885 16. Limitation of Liability. 38886 38887 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 38888 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 38889 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU 38890 FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 38891 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 38892 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 38893 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 38894 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 38895 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 38896 THE POSSIBILITY OF SUCH DAMAGES. 38897 38898 17. Interpretation of Sections 15 and 16. 38899 38900 If the disclaimer of warranty and limitation of liability provided 38901 above cannot be given local legal effect according to their terms, 38902 reviewing courts shall apply local law that most closely 38903 approximates an absolute waiver of all civil liability in 38904 connection with the Program, unless a warranty or assumption of 38905 liability accompanies a copy of the Program in return for a fee. 38906 38907 38908 END OF TERMS AND CONDITIONS 38909 =========================== 38910 38911 How to Apply These Terms to Your New Programs 38912 ============================================= 38913 38914 If you develop a new program, and you want it to be of the greatest 38915 possible use to the public, the best way to achieve this is to make it 38916 free software which everyone can redistribute and change under these 38917 terms. 38918 38919 To do so, attach the following notices to the program. It is safest 38920 to attach them to the start of each source file to most effectively 38921 state the exclusion of warranty; and each file should have at least the 38922 "copyright" line and a pointer to where the full notice is found. 38923 38924 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 38925 Copyright (C) YEAR NAME OF AUTHOR 38926 38927 This program is free software: you can redistribute it and/or modify 38928 it under the terms of the GNU General Public License as published by 38929 the Free Software Foundation, either version 3 of the License, or (at 38930 your option) any later version. 38931 38932 This program is distributed in the hope that it will be useful, but 38933 WITHOUT ANY WARRANTY; without even the implied warranty of 38934 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 38935 General Public License for more details. 38936 38937 You should have received a copy of the GNU General Public License 38938 along with this program. If not, see `http://www.gnu.org/licenses/'. 38939 38940 Also add information on how to contact you by electronic and paper 38941 mail. 38942 38943 If the program does terminal interaction, make it output a short 38944 notice like this when it starts in an interactive mode: 38945 38946 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 38947 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 38948 This is free software, and you are welcome to redistribute it 38949 under certain conditions; type `show c' for details. 38950 38951 The hypothetical commands `show w' and `show c' should show the 38952 appropriate parts of the General Public License. Of course, your 38953 program's commands might be different; for a GUI interface, you would 38954 use an "about box". 38955 38956 You should also get your employer (if you work as a programmer) or 38957 school, if any, to sign a "copyright disclaimer" for the program, if 38958 necessary. For more information on this, and how to apply and follow 38959 the GNU GPL, see `http://www.gnu.org/licenses/'. 38960 38961 The GNU General Public License does not permit incorporating your 38962 program into proprietary programs. If your program is a subroutine 38963 library, you may consider it more useful to permit linking proprietary 38964 applications with the library. If this is what you want to do, use the 38965 GNU Lesser General Public License instead of this License. But first, 38966 please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. 38967 38968 38969 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 38970 38971 GNU Free Documentation License 38972 ****************************** 38973 38974 Version 1.2, November 2002 38975 38976 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 38977 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 38978 38979 Everyone is permitted to copy and distribute verbatim copies 38980 of this license document, but changing it is not allowed. 38981 38982 0. PREAMBLE 38983 38984 The purpose of this License is to make a manual, textbook, or other 38985 functional and useful document "free" in the sense of freedom: to 38986 assure everyone the effective freedom to copy and redistribute it, 38987 with or without modifying it, either commercially or 38988 noncommercially. Secondarily, this License preserves for the 38989 author and publisher a way to get credit for their work, while not 38990 being considered responsible for modifications made by others. 38991 38992 This License is a kind of "copyleft", which means that derivative 38993 works of the document must themselves be free in the same sense. 38994 It complements the GNU General Public License, which is a copyleft 38995 license designed for free software. 38996 38997 We have designed this License in order to use it for manuals for 38998 free software, because free software needs free documentation: a 38999 free program should come with manuals providing the same freedoms 39000 that the software does. But this License is not limited to 39001 software manuals; it can be used for any textual work, regardless 39002 of subject matter or whether it is published as a printed book. 39003 We recommend this License principally for works whose purpose is 39004 instruction or reference. 39005 39006 1. APPLICABILITY AND DEFINITIONS 39007 39008 This License applies to any manual or other work, in any medium, 39009 that contains a notice placed by the copyright holder saying it 39010 can be distributed under the terms of this License. Such a notice 39011 grants a world-wide, royalty-free license, unlimited in duration, 39012 to use that work under the conditions stated herein. The 39013 "Document", below, refers to any such manual or work. Any member 39014 of the public is a licensee, and is addressed as "you". You 39015 accept the license if you copy, modify or distribute the work in a 39016 way requiring permission under copyright law. 39017 39018 A "Modified Version" of the Document means any work containing the 39019 Document or a portion of it, either copied verbatim, or with 39020 modifications and/or translated into another language. 39021 39022 A "Secondary Section" is a named appendix or a front-matter section 39023 of the Document that deals exclusively with the relationship of the 39024 publishers or authors of the Document to the Document's overall 39025 subject (or to related matters) and contains nothing that could 39026 fall directly within that overall subject. (Thus, if the Document 39027 is in part a textbook of mathematics, a Secondary Section may not 39028 explain any mathematics.) The relationship could be a matter of 39029 historical connection with the subject or with related matters, or 39030 of legal, commercial, philosophical, ethical or political position 39031 regarding them. 39032 39033 The "Invariant Sections" are certain Secondary Sections whose 39034 titles are designated, as being those of Invariant Sections, in 39035 the notice that says that the Document is released under this 39036 License. If a section does not fit the above definition of 39037 Secondary then it is not allowed to be designated as Invariant. 39038 The Document may contain zero Invariant Sections. If the Document 39039 does not identify any Invariant Sections then there are none. 39040 39041 The "Cover Texts" are certain short passages of text that are 39042 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 39043 that says that the Document is released under this License. A 39044 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 39045 be at most 25 words. 39046 39047 A "Transparent" copy of the Document means a machine-readable copy, 39048 represented in a format whose specification is available to the 39049 general public, that is suitable for revising the document 39050 straightforwardly with generic text editors or (for images 39051 composed of pixels) generic paint programs or (for drawings) some 39052 widely available drawing editor, and that is suitable for input to 39053 text formatters or for automatic translation to a variety of 39054 formats suitable for input to text formatters. A copy made in an 39055 otherwise Transparent file format whose markup, or absence of 39056 markup, has been arranged to thwart or discourage subsequent 39057 modification by readers is not Transparent. An image format is 39058 not Transparent if used for any substantial amount of text. A 39059 copy that is not "Transparent" is called "Opaque". 39060 39061 Examples of suitable formats for Transparent copies include plain 39062 ASCII without markup, Texinfo input format, LaTeX input format, 39063 SGML or XML using a publicly available DTD, and 39064 standard-conforming simple HTML, PostScript or PDF designed for 39065 human modification. Examples of transparent image formats include 39066 PNG, XCF and JPG. Opaque formats include proprietary formats that 39067 can be read and edited only by proprietary word processors, SGML or 39068 XML for which the DTD and/or processing tools are not generally 39069 available, and the machine-generated HTML, PostScript or PDF 39070 produced by some word processors for output purposes only. 39071 39072 The "Title Page" means, for a printed book, the title page itself, 39073 plus such following pages as are needed to hold, legibly, the 39074 material this License requires to appear in the title page. For 39075 works in formats which do not have any title page as such, "Title 39076 Page" means the text near the most prominent appearance of the 39077 work's title, preceding the beginning of the body of the text. 39078 39079 A section "Entitled XYZ" means a named subunit of the Document 39080 whose title either is precisely XYZ or contains XYZ in parentheses 39081 following text that translates XYZ in another language. (Here XYZ 39082 stands for a specific section name mentioned below, such as 39083 "Acknowledgements", "Dedications", "Endorsements", or "History".) 39084 To "Preserve the Title" of such a section when you modify the 39085 Document means that it remains a section "Entitled XYZ" according 39086 to this definition. 39087 39088 The Document may include Warranty Disclaimers next to the notice 39089 which states that this License applies to the Document. These 39090 Warranty Disclaimers are considered to be included by reference in 39091 this License, but only as regards disclaiming warranties: any other 39092 implication that these Warranty Disclaimers may have is void and 39093 has no effect on the meaning of this License. 39094 39095 2. VERBATIM COPYING 39096 39097 You may copy and distribute the Document in any medium, either 39098 commercially or noncommercially, provided that this License, the 39099 copyright notices, and the license notice saying this License 39100 applies to the Document are reproduced in all copies, and that you 39101 add no other conditions whatsoever to those of this License. You 39102 may not use technical measures to obstruct or control the reading 39103 or further copying of the copies you make or distribute. However, 39104 you may accept compensation in exchange for copies. If you 39105 distribute a large enough number of copies you must also follow 39106 the conditions in section 3. 39107 39108 You may also lend copies, under the same conditions stated above, 39109 and you may publicly display copies. 39110 39111 3. COPYING IN QUANTITY 39112 39113 If you publish printed copies (or copies in media that commonly 39114 have printed covers) of the Document, numbering more than 100, and 39115 the Document's license notice requires Cover Texts, you must 39116 enclose the copies in covers that carry, clearly and legibly, all 39117 these Cover Texts: Front-Cover Texts on the front cover, and 39118 Back-Cover Texts on the back cover. Both covers must also clearly 39119 and legibly identify you as the publisher of these copies. The 39120 front cover must present the full title with all words of the 39121 title equally prominent and visible. You may add other material 39122 on the covers in addition. Copying with changes limited to the 39123 covers, as long as they preserve the title of the Document and 39124 satisfy these conditions, can be treated as verbatim copying in 39125 other respects. 39126 39127 If the required texts for either cover are too voluminous to fit 39128 legibly, you should put the first ones listed (as many as fit 39129 reasonably) on the actual cover, and continue the rest onto 39130 adjacent pages. 39131 39132 If you publish or distribute Opaque copies of the Document 39133 numbering more than 100, you must either include a 39134 machine-readable Transparent copy along with each Opaque copy, or 39135 state in or with each Opaque copy a computer-network location from 39136 which the general network-using public has access to download 39137 using public-standard network protocols a complete Transparent 39138 copy of the Document, free of added material. If you use the 39139 latter option, you must take reasonably prudent steps, when you 39140 begin distribution of Opaque copies in quantity, to ensure that 39141 this Transparent copy will remain thus accessible at the stated 39142 location until at least one year after the last time you 39143 distribute an Opaque copy (directly or through your agents or 39144 retailers) of that edition to the public. 39145 39146 It is requested, but not required, that you contact the authors of 39147 the Document well before redistributing any large number of 39148 copies, to give them a chance to provide you with an updated 39149 version of the Document. 39150 39151 4. MODIFICATIONS 39152 39153 You may copy and distribute a Modified Version of the Document 39154 under the conditions of sections 2 and 3 above, provided that you 39155 release the Modified Version under precisely this License, with 39156 the Modified Version filling the role of the Document, thus 39157 licensing distribution and modification of the Modified Version to 39158 whoever possesses a copy of it. In addition, you must do these 39159 things in the Modified Version: 39160 39161 A. Use in the Title Page (and on the covers, if any) a title 39162 distinct from that of the Document, and from those of 39163 previous versions (which should, if there were any, be listed 39164 in the History section of the Document). You may use the 39165 same title as a previous version if the original publisher of 39166 that version gives permission. 39167 39168 B. List on the Title Page, as authors, one or more persons or 39169 entities responsible for authorship of the modifications in 39170 the Modified Version, together with at least five of the 39171 principal authors of the Document (all of its principal 39172 authors, if it has fewer than five), unless they release you 39173 from this requirement. 39174 39175 C. State on the Title page the name of the publisher of the 39176 Modified Version, as the publisher. 39177 39178 D. Preserve all the copyright notices of the Document. 39179 39180 E. Add an appropriate copyright notice for your modifications 39181 adjacent to the other copyright notices. 39182 39183 F. Include, immediately after the copyright notices, a license 39184 notice giving the public permission to use the Modified 39185 Version under the terms of this License, in the form shown in 39186 the Addendum below. 39187 39188 G. Preserve in that license notice the full lists of Invariant 39189 Sections and required Cover Texts given in the Document's 39190 license notice. 39191 39192 H. Include an unaltered copy of this License. 39193 39194 I. Preserve the section Entitled "History", Preserve its Title, 39195 and add to it an item stating at least the title, year, new 39196 authors, and publisher of the Modified Version as given on 39197 the Title Page. If there is no section Entitled "History" in 39198 the Document, create one stating the title, year, authors, 39199 and publisher of the Document as given on its Title Page, 39200 then add an item describing the Modified Version as stated in 39201 the previous sentence. 39202 39203 J. Preserve the network location, if any, given in the Document 39204 for public access to a Transparent copy of the Document, and 39205 likewise the network locations given in the Document for 39206 previous versions it was based on. These may be placed in 39207 the "History" section. You may omit a network location for a 39208 work that was published at least four years before the 39209 Document itself, or if the original publisher of the version 39210 it refers to gives permission. 39211 39212 K. For any section Entitled "Acknowledgements" or "Dedications", 39213 Preserve the Title of the section, and preserve in the 39214 section all the substance and tone of each of the contributor 39215 acknowledgements and/or dedications given therein. 39216 39217 L. Preserve all the Invariant Sections of the Document, 39218 unaltered in their text and in their titles. Section numbers 39219 or the equivalent are not considered part of the section 39220 titles. 39221 39222 M. Delete any section Entitled "Endorsements". Such a section 39223 may not be included in the Modified Version. 39224 39225 N. Do not retitle any existing section to be Entitled 39226 "Endorsements" or to conflict in title with any Invariant 39227 Section. 39228 39229 O. Preserve any Warranty Disclaimers. 39230 39231 If the Modified Version includes new front-matter sections or 39232 appendices that qualify as Secondary Sections and contain no 39233 material copied from the Document, you may at your option 39234 designate some or all of these sections as invariant. To do this, 39235 add their titles to the list of Invariant Sections in the Modified 39236 Version's license notice. These titles must be distinct from any 39237 other section titles. 39238 39239 You may add a section Entitled "Endorsements", provided it contains 39240 nothing but endorsements of your Modified Version by various 39241 parties--for example, statements of peer review or that the text 39242 has been approved by an organization as the authoritative 39243 definition of a standard. 39244 39245 You may add a passage of up to five words as a Front-Cover Text, 39246 and a passage of up to 25 words as a Back-Cover Text, to the end 39247 of the list of Cover Texts in the Modified Version. Only one 39248 passage of Front-Cover Text and one of Back-Cover Text may be 39249 added by (or through arrangements made by) any one entity. If the 39250 Document already includes a cover text for the same cover, 39251 previously added by you or by arrangement made by the same entity 39252 you are acting on behalf of, you may not add another; but you may 39253 replace the old one, on explicit permission from the previous 39254 publisher that added the old one. 39255 39256 The author(s) and publisher(s) of the Document do not by this 39257 License give permission to use their names for publicity for or to 39258 assert or imply endorsement of any Modified Version. 39259 39260 5. COMBINING DOCUMENTS 39261 39262 You may combine the Document with other documents released under 39263 this License, under the terms defined in section 4 above for 39264 modified versions, provided that you include in the combination 39265 all of the Invariant Sections of all of the original documents, 39266 unmodified, and list them all as Invariant Sections of your 39267 combined work in its license notice, and that you preserve all 39268 their Warranty Disclaimers. 39269 39270 The combined work need only contain one copy of this License, and 39271 multiple identical Invariant Sections may be replaced with a single 39272 copy. If there are multiple Invariant Sections with the same name 39273 but different contents, make the title of each such section unique 39274 by adding at the end of it, in parentheses, the name of the 39275 original author or publisher of that section if known, or else a 39276 unique number. Make the same adjustment to the section titles in 39277 the list of Invariant Sections in the license notice of the 39278 combined work. 39279 39280 In the combination, you must combine any sections Entitled 39281 "History" in the various original documents, forming one section 39282 Entitled "History"; likewise combine any sections Entitled 39283 "Acknowledgements", and any sections Entitled "Dedications". You 39284 must delete all sections Entitled "Endorsements." 39285 39286 6. COLLECTIONS OF DOCUMENTS 39287 39288 You may make a collection consisting of the Document and other 39289 documents released under this License, and replace the individual 39290 copies of this License in the various documents with a single copy 39291 that is included in the collection, provided that you follow the 39292 rules of this License for verbatim copying of each of the 39293 documents in all other respects. 39294 39295 You may extract a single document from such a collection, and 39296 distribute it individually under this License, provided you insert 39297 a copy of this License into the extracted document, and follow 39298 this License in all other respects regarding verbatim copying of 39299 that document. 39300 39301 7. AGGREGATION WITH INDEPENDENT WORKS 39302 39303 A compilation of the Document or its derivatives with other 39304 separate and independent documents or works, in or on a volume of 39305 a storage or distribution medium, is called an "aggregate" if the 39306 copyright resulting from the compilation is not used to limit the 39307 legal rights of the compilation's users beyond what the individual 39308 works permit. When the Document is included in an aggregate, this 39309 License does not apply to the other works in the aggregate which 39310 are not themselves derivative works of the Document. 39311 39312 If the Cover Text requirement of section 3 is applicable to these 39313 copies of the Document, then if the Document is less than one half 39314 of the entire aggregate, the Document's Cover Texts may be placed 39315 on covers that bracket the Document within the aggregate, or the 39316 electronic equivalent of covers if the Document is in electronic 39317 form. Otherwise they must appear on printed covers that bracket 39318 the whole aggregate. 39319 39320 8. TRANSLATION 39321 39322 Translation is considered a kind of modification, so you may 39323 distribute translations of the Document under the terms of section 39324 4. Replacing Invariant Sections with translations requires special 39325 permission from their copyright holders, but you may include 39326 translations of some or all Invariant Sections in addition to the 39327 original versions of these Invariant Sections. You may include a 39328 translation of this License, and all the license notices in the 39329 Document, and any Warranty Disclaimers, provided that you also 39330 include the original English version of this License and the 39331 original versions of those notices and disclaimers. In case of a 39332 disagreement between the translation and the original version of 39333 this License or a notice or disclaimer, the original version will 39334 prevail. 39335 39336 If a section in the Document is Entitled "Acknowledgements", 39337 "Dedications", or "History", the requirement (section 4) to 39338 Preserve its Title (section 1) will typically require changing the 39339 actual title. 39340 39341 9. TERMINATION 39342 39343 You may not copy, modify, sublicense, or distribute the Document 39344 except as expressly provided for under this License. Any other 39345 attempt to copy, modify, sublicense or distribute the Document is 39346 void, and will automatically terminate your rights under this 39347 License. However, parties who have received copies, or rights, 39348 from you under this License will not have their licenses 39349 terminated so long as such parties remain in full compliance. 39350 39351 10. FUTURE REVISIONS OF THIS LICENSE 39352 39353 The Free Software Foundation may publish new, revised versions of 39354 the GNU Free Documentation License from time to time. Such new 39355 versions will be similar in spirit to the present version, but may 39356 differ in detail to address new problems or concerns. See 39357 `http://www.gnu.org/copyleft/'. 39358 39359 Each version of the License is given a distinguishing version 39360 number. If the Document specifies that a particular numbered 39361 version of this License "or any later version" applies to it, you 39362 have the option of following the terms and conditions either of 39363 that specified version or of any later version that has been 39364 published (not as a draft) by the Free Software Foundation. If 39365 the Document does not specify a version number of this License, 39366 you may choose any version ever published (not as a draft) by the 39367 Free Software Foundation. 39368 39369 ADDENDUM: How to use this License for your documents 39370 ==================================================== 39371 39372 To use this License in a document you have written, include a copy of 39373 the License in the document and put the following copyright and license 39374 notices just after the title page: 39375 39376 Copyright (C) YEAR YOUR NAME. 39377 Permission is granted to copy, distribute and/or modify this document 39378 under the terms of the GNU Free Documentation License, Version 1.2 39379 or any later version published by the Free Software Foundation; 39380 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 39381 Texts. A copy of the license is included in the section entitled ``GNU 39382 Free Documentation License''. 39383 39384 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 39385 replace the "with...Texts." line with this: 39386 39387 with the Invariant Sections being LIST THEIR TITLES, with 39388 the Front-Cover Texts being LIST, and with the Back-Cover Texts 39389 being LIST. 39390 39391 If you have Invariant Sections without Cover Texts, or some other 39392 combination of the three, merge those two alternatives to suit the 39393 situation. 39394 39395 If your document contains nontrivial examples of program code, we 39396 recommend releasing these examples in parallel under your choice of 39397 free software license, such as the GNU General Public License, to 39398 permit their use in free software. 39399 39400 39401 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 39402 39403 Contributors to GCC 39404 ******************* 39405 39406 The GCC project would like to thank its many contributors. Without 39407 them the project would not have been nearly as successful as it has 39408 been. Any omissions in this list are accidental. Feel free to contact 39409 <law (a] redhat.com> or <gerald (a] pfeifer.com> if you have been left out or 39410 some of your contributions are not listed. Please keep this list in 39411 alphabetical order. 39412 39413 * Analog Devices helped implement the support for complex data types 39414 and iterators. 39415 39416 * John David Anglin for threading-related fixes and improvements to 39417 libstdc++-v3, and the HP-UX port. 39418 39419 * James van Artsdalen wrote the code that makes efficient use of the 39420 Intel 80387 register stack. 39421 39422 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 39423 Series port. 39424 39425 * Alasdair Baird for various bug fixes. 39426 39427 * Giovanni Bajo for analyzing lots of complicated C++ problem 39428 reports. 39429 39430 * Peter Barada for his work to improve code generation for new 39431 ColdFire cores. 39432 39433 * Gerald Baumgartner added the signature extension to the C++ front 39434 end. 39435 39436 * Godmar Back for his Java improvements and encouragement. 39437 39438 * Scott Bambrough for help porting the Java compiler. 39439 39440 * Wolfgang Bangerth for processing tons of bug reports. 39441 39442 * Jon Beniston for his Microsoft Windows port of Java. 39443 39444 * Daniel Berlin for better DWARF2 support, faster/better 39445 optimizations, improved alias analysis, plus migrating GCC to 39446 Bugzilla. 39447 39448 * Geoff Berry for his Java object serialization work and various 39449 patches. 39450 39451 * Uros Bizjak for the implementation of x87 math built-in functions 39452 and for various middle end and i386 back end improvements and bug 39453 fixes. 39454 39455 * Eric Blake for helping to make GCJ and libgcj conform to the 39456 specifications. 39457 39458 * Janne Blomqvist for contributions to GNU Fortran. 39459 39460 * Segher Boessenkool for various fixes. 39461 39462 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 39463 other Java work. 39464 39465 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 39466 miscellaneous clean-ups. 39467 39468 * Steven Bosscher for integrating the GNU Fortran front end into GCC 39469 and for contributing to the tree-ssa branch. 39470 39471 * Eric Botcazou for fixing middle- and backend bugs left and right. 39472 39473 * Per Bothner for his direction via the steering committee and 39474 various improvements to the infrastructure for supporting new 39475 languages. Chill front end implementation. Initial 39476 implementations of cpplib, fix-header, config.guess, libio, and 39477 past C++ library (libg++) maintainer. Dreaming up, designing and 39478 implementing much of GCJ. 39479 39480 * Devon Bowen helped port GCC to the Tahoe. 39481 39482 * Don Bowman for mips-vxworks contributions. 39483 39484 * Dave Brolley for work on cpplib and Chill. 39485 39486 * Paul Brook for work on the ARM architecture and maintaining GNU 39487 Fortran. 39488 39489 * Robert Brown implemented the support for Encore 32000 systems. 39490 39491 * Christian Bruel for improvements to local store elimination. 39492 39493 * Herman A.J. ten Brugge for various fixes. 39494 39495 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 39496 FAQ. 39497 39498 * Joe Buck for his direction via the steering committee. 39499 39500 * Craig Burley for leadership of the G77 Fortran effort. 39501 39502 * Stephan Buys for contributing Doxygen notes for libstdc++. 39503 39504 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 39505 to the C++ strings, streambufs and formatted I/O, hard detective 39506 work on the frustrating localization issues, and keeping up with 39507 the problem reports. 39508 39509 * John Carr for his alias work, SPARC hacking, infrastructure 39510 improvements, previous contributions to the steering committee, 39511 loop optimizations, etc. 39512 39513 * Stephane Carrez for 68HC11 and 68HC12 ports. 39514 39515 * Steve Chamberlain for support for the Renesas SH and H8 processors 39516 and the PicoJava processor, and for GCJ config fixes. 39517 39518 * Glenn Chambers for help with the GCJ FAQ. 39519 39520 * John-Marc Chandonia for various libgcj patches. 39521 39522 * Scott Christley for his Objective-C contributions. 39523 39524 * Eric Christopher for his Java porting help and clean-ups. 39525 39526 * Branko Cibej for more warning contributions. 39527 39528 * The GNU Classpath project for all of their merged runtime code. 39529 39530 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and 39531 other random hacking. 39532 39533 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 39534 39535 * R. Kelley Cook for making GCC buildable from a read-only directory 39536 as well as other miscellaneous build process and documentation 39537 clean-ups. 39538 39539 * Ralf Corsepius for SH testing and minor bug fixing. 39540 39541 * Stan Cox for care and feeding of the x86 port and lots of behind 39542 the scenes hacking. 39543 39544 * Alex Crain provided changes for the 3b1. 39545 39546 * Ian Dall for major improvements to the NS32k port. 39547 39548 * Paul Dale for his work to add uClinux platform support to the m68k 39549 backend. 39550 39551 * Dario Dariol contributed the four varieties of sample programs 39552 that print a copy of their source. 39553 39554 * Russell Davidson for fstream and stringstream fixes in libstdc++. 39555 39556 * Bud Davis for work on the G77 and GNU Fortran compilers. 39557 39558 * Mo DeJong for GCJ and libgcj bug fixes. 39559 39560 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 39561 various bug fixes, and the M32C port. 39562 39563 * Arnaud Desitter for helping to debug GNU Fortran. 39564 39565 * Gabriel Dos Reis for contributions to G++, contributions and 39566 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 39567 including `valarray<>', `complex<>', maintaining the numerics 39568 library (including that pesky `<limits>' :-) and keeping 39569 up-to-date anything to do with numbers. 39570 39571 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 39572 ISO C99 support, CFG dumping support, etc., plus support of the 39573 C++ runtime libraries including for all kinds of C interface 39574 issues, contributing and maintaining `complex<>', sanity checking 39575 and disbursement, configuration architecture, libio maintenance, 39576 and early math work. 39577 39578 * Zdenek Dvorak for a new loop unroller and various fixes. 39579 39580 * Richard Earnshaw for his ongoing work with the ARM. 39581 39582 * David Edelsohn for his direction via the steering committee, 39583 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 39584 loop changes, doing the entire AIX port of libstdc++ with his bare 39585 hands, and for ensuring GCC properly keeps working on AIX. 39586 39587 * Kevin Ediger for the floating point formatting of num_put::do_put 39588 in libstdc++. 39589 39590 * Phil Edwards for libstdc++ work including configuration hackery, 39591 documentation maintainer, chief breaker of the web pages, the 39592 occasional iostream bug fix, and work on shared library symbol 39593 versioning. 39594 39595 * Paul Eggert for random hacking all over GCC. 39596 39597 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 39598 configuration support for locales and fstream-related fixes. 39599 39600 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 39601 iostreams. 39602 39603 * Christian Ehrhardt for dealing with bug reports. 39604 39605 * Ben Elliston for his work to move the Objective-C runtime into its 39606 own subdirectory and for his work on autoconf. 39607 39608 * Revital Eres for work on the PowerPC 750CL port. 39609 39610 * Marc Espie for OpenBSD support. 39611 39612 * Doug Evans for much of the global optimization framework, arc, 39613 m32r, and SPARC work. 39614 39615 * Christopher Faylor for his work on the Cygwin port and for caring 39616 and feeding the gcc.gnu.org box and saving its users tons of spam. 39617 39618 * Fred Fish for BeOS support and Ada fixes. 39619 39620 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 39621 39622 * Peter Gerwinski for various bug fixes and the Pascal front end. 39623 39624 * Kaveh R. Ghazi for his direction via the steering committee, 39625 amazing work to make `-W -Wall -W* -Werror' useful, and 39626 continuously testing GCC on a plethora of platforms. Kaveh 39627 extends his gratitude to the CAIP Center at Rutgers University for 39628 providing him with computing resources to work on Free Software 39629 since the late 1980s. 39630 39631 * John Gilmore for a donation to the FSF earmarked improving GNU 39632 Java. 39633 39634 * Judy Goldberg for c++ contributions. 39635 39636 * Torbjorn Granlund for various fixes and the c-torture testsuite, 39637 multiply- and divide-by-constant optimization, improved long long 39638 support, improved leaf function register allocation, and his 39639 direction via the steering committee. 39640 39641 * Anthony Green for his `-Os' contributions and Java front end work. 39642 39643 * Stu Grossman for gdb hacking, allowing GCJ developers to debug 39644 Java code. 39645 39646 * Michael K. Gschwind contributed the port to the PDP-11. 39647 39648 * Ron Guilmette implemented the `protoize' and `unprotoize' tools, 39649 the support for Dwarf symbolic debugging information, and much of 39650 the support for System V Release 4. He has also worked heavily on 39651 the Intel 386 and 860 support. 39652 39653 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 39654 GCSE. 39655 39656 * Bruno Haible for improvements in the runtime overhead for EH, new 39657 warnings and assorted bug fixes. 39658 39659 * Andrew Haley for his amazing Java compiler and library efforts. 39660 39661 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 39662 series 300. 39663 39664 * Michael Hayes for various thankless work he's done trying to get 39665 the c30/c40 ports functional. Lots of loop and unroll 39666 improvements and fixes. 39667 39668 * Dara Hazeghi for wading through myriads of target-specific bug 39669 reports. 39670 39671 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 39672 39673 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 39674 work, loop opts, and generally fixing lots of old problems we've 39675 ignored for years, flow rewrite and lots of further stuff, 39676 including reviewing tons of patches. 39677 39678 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 39679 various fixes. 39680 39681 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 39682 contributed the support for the Sony NEWS machine. 39683 39684 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 39685 various fixes. 39686 39687 * Katherine Holcomb for work on GNU Fortran. 39688 39689 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 39690 of testing and bug fixing, particularly of GCC configury code. 39691 39692 * Steve Holmgren for MachTen patches. 39693 39694 * Jan Hubicka for his x86 port improvements. 39695 39696 * Falk Hueffner for working on C and optimization bug reports. 39697 39698 * Bernardo Innocenti for his m68k work, including merging of 39699 ColdFire improvements and uClinux support. 39700 39701 * Christian Iseli for various bug fixes. 39702 39703 * Kamil Iskra for general m68k hacking. 39704 39705 * Lee Iverson for random fixes and MIPS testing. 39706 39707 * Andreas Jaeger for testing and benchmarking of GCC and various bug 39708 fixes. 39709 39710 * Jakub Jelinek for his SPARC work and sibling call optimizations as 39711 well as lots of bug fixes and test cases, and for improving the 39712 Java build system. 39713 39714 * Janis Johnson for ia64 testing and fixes, her quality improvement 39715 sidetracks, and web page maintenance. 39716 39717 * Kean Johnston for SCO OpenServer support and various fixes. 39718 39719 * Tim Josling for the sample language treelang based originally on 39720 Richard Kenner's "toy" language. 39721 39722 * Nicolai Josuttis for additional libstdc++ documentation. 39723 39724 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 39725 target. 39726 39727 * Steven G. Kargl for work on GNU Fortran. 39728 39729 * David Kashtan of SRI adapted GCC to VMS. 39730 39731 * Ryszard Kabatek for many, many libstdc++ bug fixes and 39732 optimizations of strings, especially member functions, and for 39733 auto_ptr fixes. 39734 39735 * Geoffrey Keating for his ongoing work to make the PPC work for 39736 GNU/Linux and his automatic regression tester. 39737 39738 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 39739 work in just about every part of libstdc++. 39740 39741 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 39742 MIL-STD-1750A. 39743 39744 * Richard Kenner of the New York University Ultracomputer Research 39745 Laboratory wrote the machine descriptions for the AMD 29000, the 39746 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 39747 support for instruction attributes. He also made changes to 39748 better support RISC processors including changes to common 39749 subexpression elimination, strength reduction, function calling 39750 sequence handling, and condition code support, in addition to 39751 generalizing the code for frame pointer elimination and delay slot 39752 scheduling. Richard Kenner was also the head maintainer of GCC 39753 for several years. 39754 39755 * Mumit Khan for various contributions to the Cygwin and Mingw32 39756 ports and maintaining binary releases for Microsoft Windows hosts, 39757 and for massive libstdc++ porting work to Cygwin/Mingw32. 39758 39759 * Robin Kirkham for cpu32 support. 39760 39761 * Mark Klein for PA improvements. 39762 39763 * Thomas Koenig for various bug fixes. 39764 39765 * Bruce Korb for the new and improved fixincludes code. 39766 39767 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 39768 effort. 39769 39770 * Charles LaBrec contributed the support for the Integrated Solutions 39771 68020 system. 39772 39773 * Asher Langton and Mike Kumbera for contributing Cray pointer 39774 support to GNU Fortran, and for other GNU Fortran improvements. 39775 39776 * Jeff Law for his direction via the steering committee, 39777 coordinating the entire egcs project and GCC 2.95, rolling out 39778 snapshots and releases, handling merges from GCC2, reviewing tons 39779 of patches that might have fallen through the cracks else, and 39780 random but extensive hacking. 39781 39782 * Marc Lehmann for his direction via the steering committee and 39783 helping with analysis and improvements of x86 performance. 39784 39785 * Victor Leikehman for work on GNU Fortran. 39786 39787 * Ted Lemon wrote parts of the RTL reader and printer. 39788 39789 * Kriang Lerdsuwanakij for C++ improvements including template as 39790 template parameter support, and many C++ fixes. 39791 39792 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 39793 and random work on the Java front end. 39794 39795 * Alain Lichnewsky ported GCC to the MIPS CPU. 39796 39797 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 39798 and patches. 39799 39800 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 39801 39802 * Chen Liqin for various S+core related fixes/improvement, and for 39803 maintaining the S+core port. 39804 39805 * Weiwen Liu for testing and various bug fixes. 39806 39807 * Manuel Lo'pez-Iba'n~ez for improving `-Wconversion' and many other 39808 diagnostics fixes and improvements. 39809 39810 * Dave Love for his ongoing work with the Fortran front end and 39811 runtime libraries. 39812 39813 * Martin von Lo"wis for internal consistency checking infrastructure, 39814 various C++ improvements including namespace support, and tons of 39815 assistance with libstdc++/compiler merges. 39816 39817 * H.J. Lu for his previous contributions to the steering committee, 39818 many x86 bug reports, prototype patches, and keeping the GNU/Linux 39819 ports working. 39820 39821 * Greg McGary for random fixes and (someday) bounded pointers. 39822 39823 * Andrew MacLeod for his ongoing work in building a real EH system, 39824 various code generation improvements, work on the global 39825 optimizer, etc. 39826 39827 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 39828 hacking improvements to compile-time performance, overall 39829 knowledge and direction in the area of instruction scheduling, and 39830 design and implementation of the automaton based instruction 39831 scheduler. 39832 39833 * Bob Manson for his behind the scenes work on dejagnu. 39834 39835 * Philip Martin for lots of libstdc++ string and vector iterator 39836 fixes and improvements, and string clean up and testsuites. 39837 39838 * All of the Mauve project contributors, for Java test code. 39839 39840 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 39841 39842 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 39843 39844 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 39845 powerpc, haifa, ECOFF debug support, and other assorted hacking. 39846 39847 * Jason Merrill for his direction via the steering committee and 39848 leading the G++ effort. 39849 39850 * Martin Michlmayr for testing GCC on several architectures using the 39851 entire Debian archive. 39852 39853 * David Miller for his direction via the steering committee, lots of 39854 SPARC work, improvements in jump.c and interfacing with the Linux 39855 kernel developers. 39856 39857 * Gary Miller ported GCC to Charles River Data Systems machines. 39858 39859 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 39860 the entire libstdc++ testsuite namespace-compatible. 39861 39862 * Mark Mitchell for his direction via the steering committee, 39863 mountains of C++ work, load/store hoisting out of loops, alias 39864 analysis improvements, ISO C `restrict' support, and serving as 39865 release manager for GCC 3.x. 39866 39867 * Alan Modra for various GNU/Linux bits and testing. 39868 39869 * Toon Moene for his direction via the steering committee, Fortran 39870 maintenance, and his ongoing work to make us make Fortran run fast. 39871 39872 * Jason Molenda for major help in the care and feeding of all the 39873 services on the gcc.gnu.org (formerly egcs.cygnus.com) 39874 machine--mail, web services, ftp services, etc etc. Doing all 39875 this work on scrap paper and the backs of envelopes would have 39876 been... difficult. 39877 39878 * Catherine Moore for fixing various ugly problems we have sent her 39879 way, including the haifa bug which was killing the Alpha & PowerPC 39880 Linux kernels. 39881 39882 * Mike Moreton for his various Java patches. 39883 39884 * David Mosberger-Tang for various Alpha improvements, and for the 39885 initial IA-64 port. 39886 39887 * Stephen Moshier contributed the floating point emulator that 39888 assists in cross-compilation and permits support for floating 39889 point numbers wider than 64 bits and for ISO C99 support. 39890 39891 * Bill Moyer for his behind the scenes work on various issues. 39892 39893 * Philippe De Muyter for his work on the m68k port. 39894 39895 * Joseph S. Myers for his work on the PDP-11 port, format checking 39896 and ISO C99 support, and continuous emphasis on (and contributions 39897 to) documentation. 39898 39899 * Nathan Myers for his work on libstdc++-v3: architecture and 39900 authorship through the first three snapshots, including 39901 implementation of locale infrastructure, string, shadow C headers, 39902 and the initial project documentation (DESIGN, CHECKLIST, and so 39903 forth). Later, more work on MT-safe string and shadow headers. 39904 39905 * Felix Natter for documentation on porting libstdc++. 39906 39907 * Nathanael Nerode for cleaning up the configuration/build process. 39908 39909 * NeXT, Inc. donated the front end that supports the Objective-C 39910 language. 39911 39912 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to 39913 the search engine setup, various documentation fixes and other 39914 small fixes. 39915 39916 * Geoff Noer for his work on getting cygwin native builds working. 39917 39918 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 39919 tracking web pages, GIMPLE tuples, and assorted fixes. 39920 39921 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 39922 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and 39923 related infrastructure improvements. 39924 39925 * Alexandre Oliva for various build infrastructure improvements, 39926 scripts and amazing testing work, including keeping libtool issues 39927 sane and happy. 39928 39929 * Stefan Olsson for work on mt_alloc. 39930 39931 * Melissa O'Neill for various NeXT fixes. 39932 39933 * Rainer Orth for random MIPS work, including improvements to GCC's 39934 o32 ABI support, improvements to dejagnu's MIPS support, Java 39935 configuration clean-ups and porting work, etc. 39936 39937 * Hartmut Penner for work on the s390 port. 39938 39939 * Paul Petersen wrote the machine description for the Alliant FX/8. 39940 39941 * Alexandre Petit-Bianco for implementing much of the Java compiler 39942 and continued Java maintainership. 39943 39944 * Matthias Pfaller for major improvements to the NS32k port. 39945 39946 * Gerald Pfeifer for his direction via the steering committee, 39947 pointing out lots of problems we need to solve, maintenance of the 39948 web pages, and taking care of documentation maintenance in general. 39949 39950 * Andrew Pinski for processing bug reports by the dozen. 39951 39952 * Ovidiu Predescu for his work on the Objective-C front end and 39953 runtime libraries. 39954 39955 * Jerry Quinn for major performance improvements in C++ formatted 39956 I/O. 39957 39958 * Ken Raeburn for various improvements to checker, MIPS ports and 39959 various cleanups in the compiler. 39960 39961 * Rolf W. Rasmussen for hacking on AWT. 39962 39963 * David Reese of Sun Microsystems contributed to the Solaris on 39964 PowerPC port. 39965 39966 * Volker Reichelt for keeping up with the problem reports. 39967 39968 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 39969 hacking. 39970 39971 * Loren J. Rittle for improvements to libstdc++-v3 including the 39972 FreeBSD port, threading fixes, thread-related configury changes, 39973 critical threading documentation, and solutions to really tricky 39974 I/O problems, as well as keeping GCC properly working on FreeBSD 39975 and continuous testing. 39976 39977 * Craig Rodrigues for processing tons of bug reports. 39978 39979 * Ola Ro"nnerup for work on mt_alloc. 39980 39981 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 39982 39983 * David Ronis inspired and encouraged Craig to rewrite the G77 39984 documentation in texinfo format by contributing a first pass at a 39985 translation of the old `g77-0.5.16/f/DOC' file. 39986 39987 * Ken Rose for fixes to GCC's delay slot filling code. 39988 39989 * Paul Rubin wrote most of the preprocessor. 39990 39991 * Pe'tur Runo'lfsson for major performance improvements in C++ 39992 formatted I/O and large file support in C++ filebuf. 39993 39994 * Chip Salzenberg for libstdc++ patches and improvements to locales, 39995 traits, Makefiles, libio, libtool hackery, and "long long" support. 39996 39997 * Juha Sarlin for improvements to the H8 code generator. 39998 39999 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 40000 300. 40001 40002 * Roger Sayle for improvements to constant folding and GCC's RTL 40003 optimizers as well as for fixing numerous bugs. 40004 40005 * Bradley Schatz for his work on the GCJ FAQ. 40006 40007 * Peter Schauer wrote the code to allow debugging to work on the 40008 Alpha. 40009 40010 * William Schelter did most of the work on the Intel 80386 support. 40011 40012 * Tobias Schlu"ter for work on GNU Fortran. 40013 40014 * Bernd Schmidt for various code generation improvements and major 40015 work in the reload pass as well a serving as release manager for 40016 GCC 2.95.3. 40017 40018 * Peter Schmid for constant testing of libstdc++--especially 40019 application testing, going above and beyond what was requested for 40020 the release criteria--and libstdc++ header file tweaks. 40021 40022 * Jason Schroeder for jcf-dump patches. 40023 40024 * Andreas Schwab for his work on the m68k port. 40025 40026 * Lars Segerlund for work on GNU Fortran. 40027 40028 * Joel Sherrill for his direction via the steering committee, RTEMS 40029 contributions and RTEMS testing. 40030 40031 * Nathan Sidwell for many C++ fixes/improvements. 40032 40033 * Jeffrey Siegal for helping RMS with the original design of GCC, 40034 some code which handles the parse tree and RTL data structures, 40035 constant folding and help with the original VAX & m68k ports. 40036 40037 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 40038 from the LWG (thereby keeping GCC in line with updates from the 40039 ISO). 40040 40041 * Franz Sirl for his ongoing work with making the PPC port stable 40042 for GNU/Linux. 40043 40044 * Andrey Slepuhin for assorted AIX hacking. 40045 40046 * Trevor Smigiel for contributing the SPU port. 40047 40048 * Christopher Smith did the port for Convex machines. 40049 40050 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 40051 40052 * Randy Smith finished the Sun FPA support. 40053 40054 * Scott Snyder for queue, iterator, istream, and string fixes and 40055 libstdc++ testsuite entries. Also for providing the patch to G77 40056 to add rudimentary support for `INTEGER*1', `INTEGER*2', and 40057 `LOGICAL*1'. 40058 40059 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 40060 40061 * Richard Stallman, for writing the original GCC and launching the 40062 GNU project. 40063 40064 * Jan Stein of the Chalmers Computer Society provided support for 40065 Genix, as well as part of the 32000 machine description. 40066 40067 * Nigel Stephens for various mips16 related fixes/improvements. 40068 40069 * Jonathan Stone wrote the machine description for the Pyramid 40070 computer. 40071 40072 * Graham Stott for various infrastructure improvements. 40073 40074 * John Stracke for his Java HTTP protocol fixes. 40075 40076 * Mike Stump for his Elxsi port, G++ contributions over the years 40077 and more recently his vxworks contributions 40078 40079 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 40080 40081 * Shigeya Suzuki for this fixes for the bsdi platforms. 40082 40083 * Ian Lance Taylor for his mips16 work, general configury hacking, 40084 fixincludes, etc. 40085 40086 * Holger Teutsch provided the support for the Clipper CPU. 40087 40088 * Gary Thomas for his ongoing work to make the PPC work for 40089 GNU/Linux. 40090 40091 * Philipp Thomas for random bug fixes throughout the compiler 40092 40093 * Jason Thorpe for thread support in libstdc++ on NetBSD. 40094 40095 * Kresten Krab Thorup wrote the run time support for the Objective-C 40096 language and the fantastic Java bytecode interpreter. 40097 40098 * Michael Tiemann for random bug fixes, the first instruction 40099 scheduler, initial C++ support, function integration, NS32k, SPARC 40100 and M88k machine description work, delay slot scheduling. 40101 40102 * Andreas Tobler for his work porting libgcj to Darwin. 40103 40104 * Teemu Torma for thread safe exception handling support. 40105 40106 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 40107 definitions, and of the VAX machine description. 40108 40109 * Daniel Towner and Hariharan Sandanagobalane contributed and 40110 maintain the picoChip port. 40111 40112 * Tom Tromey for internationalization support and for his many Java 40113 contributions and libgcj maintainership. 40114 40115 * Lassi Tuura for improvements to config.guess to determine HP 40116 processor types. 40117 40118 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 40119 40120 * Andy Vaught for the design and initial implementation of the GNU 40121 Fortran front end. 40122 40123 * Brent Verner for work with the libstdc++ cshadow files and their 40124 associated configure steps. 40125 40126 * Todd Vierling for contributions for NetBSD ports. 40127 40128 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 40129 guidance. 40130 40131 * Dean Wakerley for converting the install documentation from HTML 40132 to texinfo in time for GCC 3.0. 40133 40134 * Krister Walfridsson for random bug fixes. 40135 40136 * Feng Wang for contributions to GNU Fortran. 40137 40138 * Stephen M. Webb for time and effort on making libstdc++ shadow 40139 files work with the tricky Solaris 8+ headers, and for pushing the 40140 build-time header tree. 40141 40142 * John Wehle for various improvements for the x86 code generator, 40143 related infrastructure improvements to help x86 code generation, 40144 value range propagation and other work, WE32k port. 40145 40146 * Ulrich Weigand for work on the s390 port. 40147 40148 * Zack Weinberg for major work on cpplib and various other bug fixes. 40149 40150 * Matt Welsh for help with Linux Threads support in GCJ. 40151 40152 * Urban Widmark for help fixing java.io. 40153 40154 * Mark Wielaard for new Java library code and his work integrating 40155 with Classpath. 40156 40157 * Dale Wiles helped port GCC to the Tahoe. 40158 40159 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 40160 40161 * Jim Wilson for his direction via the steering committee, tackling 40162 hard problems in various places that nobody else wanted to work 40163 on, strength reduction and other loop optimizations. 40164 40165 * Paul Woegerer and Tal Agmon for the CRX port. 40166 40167 * Carlo Wood for various fixes. 40168 40169 * Tom Wood for work on the m88k port. 40170 40171 * Canqun Yang for work on GNU Fortran. 40172 40173 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 40174 description for the Tron architecture (specifically, the Gmicro). 40175 40176 * Kevin Zachmann helped port GCC to the Tahoe. 40177 40178 * Ayal Zaks for Swing Modulo Scheduling (SMS). 40179 40180 * Xiaoqiang Zhang for work on GNU Fortran. 40181 40182 * Gilles Zunino for help porting Java to Irix. 40183 40184 40185 The following people are recognized for their contributions to GNAT, 40186 the Ada front end of GCC: 40187 * Bernard Banner 40188 40189 * Romain Berrendonner 40190 40191 * Geert Bosch 40192 40193 * Emmanuel Briot 40194 40195 * Joel Brobecker 40196 40197 * Ben Brosgol 40198 40199 * Vincent Celier 40200 40201 * Arnaud Charlet 40202 40203 * Chien Chieng 40204 40205 * Cyrille Comar 40206 40207 * Cyrille Crozes 40208 40209 * Robert Dewar 40210 40211 * Gary Dismukes 40212 40213 * Robert Duff 40214 40215 * Ed Falis 40216 40217 * Ramon Fernandez 40218 40219 * Sam Figueroa 40220 40221 * Vasiliy Fofanov 40222 40223 * Michael Friess 40224 40225 * Franco Gasperoni 40226 40227 * Ted Giering 40228 40229 * Matthew Gingell 40230 40231 * Laurent Guerby 40232 40233 * Jerome Guitton 40234 40235 * Olivier Hainque 40236 40237 * Jerome Hugues 40238 40239 * Hristian Kirtchev 40240 40241 * Jerome Lambourg 40242 40243 * Bruno Leclerc 40244 40245 * Albert Lee 40246 40247 * Sean McNeil 40248 40249 * Javier Miranda 40250 40251 * Laurent Nana 40252 40253 * Pascal Obry 40254 40255 * Dong-Ik Oh 40256 40257 * Laurent Pautet 40258 40259 * Brett Porter 40260 40261 * Thomas Quinot 40262 40263 * Nicolas Roche 40264 40265 * Pat Rogers 40266 40267 * Jose Ruiz 40268 40269 * Douglas Rupp 40270 40271 * Sergey Rybin 40272 40273 * Gail Schenker 40274 40275 * Ed Schonberg 40276 40277 * Nicolas Setton 40278 40279 * Samuel Tardieu 40280 40281 40282 The following people are recognized for their contributions of new 40283 features, bug reports, testing and integration of classpath/libgcj for 40284 GCC version 4.1: 40285 * Lillian Angel for `JTree' implementation and lots Free Swing 40286 additions and bug fixes. 40287 40288 * Wolfgang Baer for `GapContent' bug fixes. 40289 40290 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse 40291 event fixes, lots of Free Swing work including `JTable' editing. 40292 40293 * Stuart Ballard for RMI constant fixes. 40294 40295 * Goffredo Baroncelli for `HTTPURLConnection' fixes. 40296 40297 * Gary Benson for `MessageFormat' fixes. 40298 40299 * Daniel Bonniot for `Serialization' fixes. 40300 40301 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX' 40302 and `DOM xml:id' support. 40303 40304 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes. 40305 40306 * Archie Cobbs for build fixes, VM interface updates, 40307 `URLClassLoader' updates. 40308 40309 * Kelley Cook for build fixes. 40310 40311 * Martin Cordova for Suggestions for better `SocketTimeoutException'. 40312 40313 * David Daney for `BitSet' bug fixes, `HttpURLConnection' rewrite 40314 and improvements. 40315 40316 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 40317 2D support. Lots of imageio framework additions, lots of AWT and 40318 Free Swing bug fixes. 40319 40320 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization 40321 fixes, better `Proxy' support, bug fixes and IKVM integration. 40322 40323 * Santiago Gala for `AccessControlContext' fixes. 40324 40325 * Nicolas Geoffray for `VMClassLoader' and `AccessController' 40326 improvements. 40327 40328 * David Gilbert for `basic' and `metal' icon and plaf support and 40329 lots of documenting, Lots of Free Swing and metal theme additions. 40330 `MetalIconFactory' implementation. 40331 40332 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers. 40333 40334 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj 40335 build speedups. 40336 40337 * Kim Ho for `JFileChooser' implementation. 40338 40339 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986 40340 updates, `Serialization' fixes, `Properties' XML support and 40341 generic branch work, VMIntegration guide update. 40342 40343 * Bastiaan Huisman for `TimeZone' bug fixing. 40344 40345 * Andreas Jaeger for mprec updates. 40346 40347 * Paul Jenner for better `-Werror' support. 40348 40349 * Ito Kazumitsu for `NetworkInterface' implementation and updates. 40350 40351 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus 40352 bug fixes all over. Lots of Free Swing work including styled text. 40353 40354 * Simon Kitching for `String' cleanups and optimization suggestions. 40355 40356 * Michael Koch for configuration fixes, `Locale' updates, bug and 40357 build fixes. 40358 40359 * Guilhem Lavaux for configuration, thread and channel fixes and 40360 Kaffe integration. JCL native `Pointer' updates. Logger bug fixes. 40361 40362 * David Lichteblau for JCL support library global/local reference 40363 cleanups. 40364 40365 * Aaron Luchko for JDWP updates and documentation fixes. 40366 40367 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex 40368 features. 40369 40370 * Sven de Marothy for BMP imageio support, CSS and `TextLayout' 40371 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes 40372 and implementing the Qt4 peers. 40373 40374 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock, 40375 `SystemLogger' and `FileHandler' rotate implementations, NIO 40376 `FileChannel.map' support, security and policy updates. 40377 40378 * Bryce McKinlay for RMI work. 40379 40380 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 40381 testing and documenting. 40382 40383 * Kalle Olavi Niemitalo for build fixes. 40384 40385 * Rainer Orth for build fixes. 40386 40387 * Andrew Overholt for `File' locking fixes. 40388 40389 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates. 40390 40391 * Olga Rodimina for `MenuSelectionManager' implementation. 40392 40393 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes. 40394 40395 * Julian Scheid for documentation updates and gjdoc support. 40396 40397 * Christian Schlichtherle for zip fixes and cleanups. 40398 40399 * Robert Schuster for documentation updates and beans fixes, 40400 `TreeNode' enumerations and `ActionCommand' and various fixes, XML 40401 and URL, AWT and Free Swing bug fixes. 40402 40403 * Keith Seitz for lots of JDWP work. 40404 40405 * Christian Thalinger for 64-bit cleanups, Configuration and VM 40406 interface fixes and `CACAO' integration, `fdlibm' updates. 40407 40408 * Gael Thomas for `VMClassLoader' boot packages support suggestions. 40409 40410 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4' 40411 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates. 40412 40413 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe 40414 integration. `Qt4' build infrastructure, `SHA1PRNG' and 40415 `GdkPixbugDecoder' updates. 40416 40417 * Tom Tromey for Eclipse integration, generics work, lots of bug 40418 fixes and gcj integration including coordinating The Big Merge. 40419 40420 * Mark Wielaard for bug fixes, packaging and release management, 40421 `Clipboard' implementation, system call interrupts and network 40422 timeouts and `GdkPixpufDecoder' fixes. 40423 40424 40425 In addition to the above, all of which also contributed time and 40426 energy in testing GCC, we would like to thank the following for their 40427 contributions to testing: 40428 40429 * Michael Abd-El-Malek 40430 40431 * Thomas Arend 40432 40433 * Bonzo Armstrong 40434 40435 * Steven Ashe 40436 40437 * Chris Baldwin 40438 40439 * David Billinghurst 40440 40441 * Jim Blandy 40442 40443 * Stephane Bortzmeyer 40444 40445 * Horst von Brand 40446 40447 * Frank Braun 40448 40449 * Rodney Brown 40450 40451 * Sidney Cadot 40452 40453 * Bradford Castalia 40454 40455 * Robert Clark 40456 40457 * Jonathan Corbet 40458 40459 * Ralph Doncaster 40460 40461 * Richard Emberson 40462 40463 * Levente Farkas 40464 40465 * Graham Fawcett 40466 40467 * Mark Fernyhough 40468 40469 * Robert A. French 40470 40471 * Jo"rgen Freyh 40472 40473 * Mark K. Gardner 40474 40475 * Charles-Antoine Gauthier 40476 40477 * Yung Shing Gene 40478 40479 * David Gilbert 40480 40481 * Simon Gornall 40482 40483 * Fred Gray 40484 40485 * John Griffin 40486 40487 * Patrik Hagglund 40488 40489 * Phil Hargett 40490 40491 * Amancio Hasty 40492 40493 * Takafumi Hayashi 40494 40495 * Bryan W. Headley 40496 40497 * Kevin B. Hendricks 40498 40499 * Joep Jansen 40500 40501 * Christian Joensson 40502 40503 * Michel Kern 40504 40505 * David Kidd 40506 40507 * Tobias Kuipers 40508 40509 * Anand Krishnaswamy 40510 40511 * A. O. V. Le Blanc 40512 40513 * llewelly 40514 40515 * Damon Love 40516 40517 * Brad Lucier 40518 40519 * Matthias Klose 40520 40521 * Martin Knoblauch 40522 40523 * Rick Lutowski 40524 40525 * Jesse Macnish 40526 40527 * Stefan Morrell 40528 40529 * Anon A. Mous 40530 40531 * Matthias Mueller 40532 40533 * Pekka Nikander 40534 40535 * Rick Niles 40536 40537 * Jon Olson 40538 40539 * Magnus Persson 40540 40541 * Chris Pollard 40542 40543 * Richard Polton 40544 40545 * Derk Reefman 40546 40547 * David Rees 40548 40549 * Paul Reilly 40550 40551 * Tom Reilly 40552 40553 * Torsten Rueger 40554 40555 * Danny Sadinoff 40556 40557 * Marc Schifer 40558 40559 * Erik Schnetter 40560 40561 * Wayne K. Schroll 40562 40563 * David Schuler 40564 40565 * Vin Shelton 40566 40567 * Tim Souder 40568 40569 * Adam Sulmicki 40570 40571 * Bill Thorson 40572 40573 * George Talbot 40574 40575 * Pedro A. M. Vazquez 40576 40577 * Gregory Warnes 40578 40579 * Ian Watson 40580 40581 * David E. Young 40582 40583 * And many others 40584 40585 And finally we'd like to thank everyone who uses the compiler, provides 40586 feedback and generally reminds us why we're doing this work in the first 40587 place. 40588 40589 40590 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top 40591 40592 Option Index 40593 ************ 40594 40595 GCC's command line options are indexed here without any initial `-' or 40596 `--'. Where an option has both positive and negative forms (such as 40597 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are 40598 indexed under the most appropriate form; it may sometimes be useful to 40599 look up both forms. 40600 40601 [index] 40602 * Menu: 40603 40604 * ###: Overall Options. (line 204) 40605 * -fdump-statistics: Debugging Options. (line 647) 40606 * -fprofile-generate-sampling: Optimize Options. (line 1342) 40607 * A: Preprocessor Options. 40608 (line 539) 40609 * all_load: Darwin Options. (line 112) 40610 * allowable_client: Darwin Options. (line 199) 40611 * ansi <1>: C Dialect Options. (line 11) 40612 * ansi <2>: Non-bugs. (line 107) 40613 * ansi <3>: Other Builtins. (line 22) 40614 * ansi <4>: Standards. (line 16) 40615 * ansi: Preprocessor Options. 40616 (line 326) 40617 * arch_errors_fatal: Darwin Options. (line 116) 40618 * aux-info: C Dialect Options. (line 140) 40619 * B: Directory Options. (line 41) 40620 * b: Target Options. (line 13) 40621 * bcopy-builtin: PDP-11 Options. (line 32) 40622 * Bdynamic: VxWorks Options. (line 22) 40623 * bind_at_load: Darwin Options. (line 120) 40624 * Bstatic: VxWorks Options. (line 22) 40625 * bundle: Darwin Options. (line 125) 40626 * bundle_loader: Darwin Options. (line 129) 40627 * c: Link Options. (line 20) 40628 * C: Preprocessor Options. 40629 (line 597) 40630 * c: Overall Options. (line 159) 40631 * client_name: Darwin Options. (line 199) 40632 * combine: Overall Options. (line 215) 40633 * compatibility_version: Darwin Options. (line 199) 40634 * coverage: Debugging Options. (line 293) 40635 * current_version: Darwin Options. (line 199) 40636 * d: Debugging Options. (line 357) 40637 * D: Preprocessor Options. 40638 (line 34) 40639 * dA: Debugging Options. (line 560) 40640 * dD <1>: Debugging Options. (line 564) 40641 * dD: Preprocessor Options. 40642 (line 571) 40643 * dead_strip: Darwin Options. (line 199) 40644 * dependency-file: Darwin Options. (line 199) 40645 * dH: Debugging Options. (line 568) 40646 * dI: Preprocessor Options. 40647 (line 580) 40648 * dm: Debugging Options. (line 571) 40649 * dM: Preprocessor Options. 40650 (line 555) 40651 * dN: Preprocessor Options. 40652 (line 577) 40653 * dp: Debugging Options. (line 575) 40654 * dP: Debugging Options. (line 580) 40655 * dU: Preprocessor Options. 40656 (line 584) 40657 * dumpmachine: Debugging Options. (line 982) 40658 * dumpspecs: Debugging Options. (line 990) 40659 * dumpversion: Debugging Options. (line 986) 40660 * dv: Debugging Options. (line 584) 40661 * dx: Debugging Options. (line 589) 40662 * dy: Debugging Options. (line 593) 40663 * dylib_file: Darwin Options. (line 199) 40664 * dylinker_install_name: Darwin Options. (line 199) 40665 * dynamic: Darwin Options. (line 199) 40666 * dynamiclib: Darwin Options. (line 133) 40667 * E <1>: Overall Options. (line 180) 40668 * E: Link Options. (line 20) 40669 * EB <1>: ARC Options. (line 12) 40670 * EB: MIPS Options. (line 7) 40671 * EL <1>: ARC Options. (line 9) 40672 * EL: MIPS Options. (line 10) 40673 * exported_symbols_list: Darwin Options. (line 199) 40674 * F: Darwin Options. (line 32) 40675 * fabi-version: C++ Dialect Options. 40676 (line 20) 40677 * falign-functions: Optimize Options. (line 1188) 40678 * falign-jumps: Optimize Options. (line 1238) 40679 * falign-labels: Optimize Options. (line 1206) 40680 * falign-loops: Optimize Options. (line 1224) 40681 * fargument-alias: Code Gen Options. (line 418) 40682 * fargument-noalias: Code Gen Options. (line 418) 40683 * fargument-noalias-anything: Code Gen Options. (line 418) 40684 * fargument-noalias-global: Code Gen Options. (line 418) 40685 * fassociative-math: Optimize Options. (line 1513) 40686 * fasynchronous-unwind-tables: Code Gen Options. (line 64) 40687 * fauto-inc-dec: Optimize Options. (line 455) 40688 * fbounds-check: Code Gen Options. (line 15) 40689 * fbranch-probabilities: Optimize Options. (line 1639) 40690 * fbranch-target-load-optimize: Optimize Options. (line 1763) 40691 * fbranch-target-load-optimize2: Optimize Options. (line 1769) 40692 * fbtr-bb-exclusive: Optimize Options. (line 1773) 40693 * fcall-saved: Code Gen Options. (line 267) 40694 * fcall-used: Code Gen Options. (line 253) 40695 * fcaller-saves: Optimize Options. (line 676) 40696 * fcgraph-section: Optimize Options. (line 1386) 40697 * fcheck-data-deps: Optimize Options. (line 901) 40698 * fcheck-new: C++ Dialect Options. 40699 (line 34) 40700 * fcommon: Variable Attributes. 40701 (line 105) 40702 * fcond-mismatch: C Dialect Options. (line 258) 40703 * fconserve-space: C++ Dialect Options. 40704 (line 44) 40705 * fconserve-stack: Optimize Options. (line 689) 40706 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options. 40707 (line 30) 40708 * fcprop-registers: Optimize Options. (line 1306) 40709 * fcrossjumping: Optimize Options. (line 448) 40710 * fcse-follow-jumps: Optimize Options. (line 376) 40711 * fcse-skip-blocks: Optimize Options. (line 385) 40712 * fcx-fortran-rules: Optimize Options. (line 1625) 40713 * fcx-limited-range: Optimize Options. (line 1613) 40714 * fdata-sections: Optimize Options. (line 1744) 40715 * fdbg-cnt: Debugging Options. (line 346) 40716 * fdbg-cnt-list: Debugging Options. (line 343) 40717 * fdce: Optimize Options. (line 461) 40718 * fdebug-prefix-map: Debugging Options. (line 240) 40719 * fdelayed-branch: Optimize Options. (line 557) 40720 * fdelete-null-pointer-checks: Optimize Options. (line 484) 40721 * fdiagnostics-show-location: Language Independent Options. 40722 (line 21) 40723 * fdiagnostics-show-option: Language Independent Options. 40724 (line 36) 40725 * fdirectives-only: Preprocessor Options. 40726 (line 447) 40727 * fdollars-in-identifiers <1>: Preprocessor Options. 40728 (line 469) 40729 * fdollars-in-identifiers: Interoperation. (line 146) 40730 * fdse: Optimize Options. (line 465) 40731 * fdump-class-hierarchy: Debugging Options. (line 618) 40732 * fdump-ipa: Debugging Options. (line 627) 40733 * fdump-noaddr: Debugging Options. (line 596) 40734 * fdump-rtl-alignments: Debugging Options. (line 372) 40735 * fdump-rtl-all: Debugging Options. (line 557) 40736 * fdump-rtl-asmcons: Debugging Options. (line 375) 40737 * fdump-rtl-auto_inc_dec: Debugging Options. (line 379) 40738 * fdump-rtl-barriers: Debugging Options. (line 383) 40739 * fdump-rtl-bbpart: Debugging Options. (line 386) 40740 * fdump-rtl-bbro: Debugging Options. (line 389) 40741 * fdump-rtl-btl2: Debugging Options. (line 393) 40742 * fdump-rtl-bypass: Debugging Options. (line 397) 40743 * fdump-rtl-ce1: Debugging Options. (line 408) 40744 * fdump-rtl-ce2: Debugging Options. (line 408) 40745 * fdump-rtl-ce3: Debugging Options. (line 408) 40746 * fdump-rtl-combine: Debugging Options. (line 400) 40747 * fdump-rtl-compgotos: Debugging Options. (line 403) 40748 * fdump-rtl-cprop_hardreg: Debugging Options. (line 412) 40749 * fdump-rtl-csa: Debugging Options. (line 415) 40750 * fdump-rtl-cse1: Debugging Options. (line 419) 40751 * fdump-rtl-cse2: Debugging Options. (line 419) 40752 * fdump-rtl-dbr: Debugging Options. (line 426) 40753 * fdump-rtl-dce: Debugging Options. (line 423) 40754 * fdump-rtl-dce1: Debugging Options. (line 430) 40755 * fdump-rtl-dce2: Debugging Options. (line 430) 40756 * fdump-rtl-dfinish: Debugging Options. (line 554) 40757 * fdump-rtl-dfinit: Debugging Options. (line 554) 40758 * fdump-rtl-eh: Debugging Options. (line 434) 40759 * fdump-rtl-eh_ranges: Debugging Options. (line 437) 40760 * fdump-rtl-expand: Debugging Options. (line 440) 40761 * fdump-rtl-fwprop1: Debugging Options. (line 444) 40762 * fdump-rtl-fwprop2: Debugging Options. (line 444) 40763 * fdump-rtl-gcse1: Debugging Options. (line 449) 40764 * fdump-rtl-gcse2: Debugging Options. (line 449) 40765 * fdump-rtl-init-regs: Debugging Options. (line 453) 40766 * fdump-rtl-initvals: Debugging Options. (line 456) 40767 * fdump-rtl-into_cfglayout: Debugging Options. (line 459) 40768 * fdump-rtl-ira: Debugging Options. (line 462) 40769 * fdump-rtl-jump: Debugging Options. (line 465) 40770 * fdump-rtl-loop2: Debugging Options. (line 468) 40771 * fdump-rtl-mach: Debugging Options. (line 472) 40772 * fdump-rtl-mode_sw: Debugging Options. (line 476) 40773 * fdump-rtl-outof_cfglayout: Debugging Options. (line 482) 40774 * fdump-rtl-peephole2: Debugging Options. (line 485) 40775 * fdump-rtl-postreload: Debugging Options. (line 488) 40776 * fdump-rtl-pro_and_epilogue: Debugging Options. (line 491) 40777 * fdump-rtl-regclass: Debugging Options. (line 554) 40778 * fdump-rtl-regmove: Debugging Options. (line 494) 40779 * fdump-rtl-rnreg: Debugging Options. (line 479) 40780 * fdump-rtl-sched1: Debugging Options. (line 498) 40781 * fdump-rtl-sched2: Debugging Options. (line 498) 40782 * fdump-rtl-see: Debugging Options. (line 502) 40783 * fdump-rtl-seqabstr: Debugging Options. (line 505) 40784 * fdump-rtl-shorten: Debugging Options. (line 508) 40785 * fdump-rtl-sibling: Debugging Options. (line 511) 40786 * fdump-rtl-sms: Debugging Options. (line 524) 40787 * fdump-rtl-split1: Debugging Options. (line 518) 40788 * fdump-rtl-split2: Debugging Options. (line 518) 40789 * fdump-rtl-split3: Debugging Options. (line 518) 40790 * fdump-rtl-split4: Debugging Options. (line 518) 40791 * fdump-rtl-split5: Debugging Options. (line 518) 40792 * fdump-rtl-stack: Debugging Options. (line 528) 40793 * fdump-rtl-subreg1: Debugging Options. (line 534) 40794 * fdump-rtl-subreg2: Debugging Options. (line 534) 40795 * fdump-rtl-subregs_of_mode_finish: Debugging Options. (line 554) 40796 * fdump-rtl-subregs_of_mode_init: Debugging Options. (line 554) 40797 * fdump-rtl-unshare: Debugging Options. (line 538) 40798 * fdump-rtl-vartrack: Debugging Options. (line 541) 40799 * fdump-rtl-vregs: Debugging Options. (line 544) 40800 * fdump-rtl-web: Debugging Options. (line 547) 40801 * fdump-translation-unit: Debugging Options. (line 609) 40802 * fdump-tree: Debugging Options. (line 658) 40803 * fdump-tree-alias: Debugging Options. (line 749) 40804 * fdump-tree-all: Debugging Options. (line 834) 40805 * fdump-tree-ccp: Debugging Options. (line 753) 40806 * fdump-tree-cfg: Debugging Options. (line 729) 40807 * fdump-tree-ch: Debugging Options. (line 741) 40808 * fdump-tree-copyprop: Debugging Options. (line 769) 40809 * fdump-tree-copyrename: Debugging Options. (line 815) 40810 * fdump-tree-dce: Debugging Options. (line 777) 40811 * fdump-tree-dom: Debugging Options. (line 795) 40812 * fdump-tree-dse: Debugging Options. (line 800) 40813 * fdump-tree-forwprop: Debugging Options. (line 810) 40814 * fdump-tree-fre: Debugging Options. (line 765) 40815 * fdump-tree-gimple: Debugging Options. (line 724) 40816 * fdump-tree-mudflap: Debugging Options. (line 781) 40817 * fdump-tree-nrv: Debugging Options. (line 820) 40818 * fdump-tree-phiopt: Debugging Options. (line 805) 40819 * fdump-tree-pre: Debugging Options. (line 761) 40820 * fdump-tree-sink: Debugging Options. (line 791) 40821 * fdump-tree-sra: Debugging Options. (line 786) 40822 * fdump-tree-ssa: Debugging Options. (line 745) 40823 * fdump-tree-store_copyprop: Debugging Options. (line 773) 40824 * fdump-tree-storeccp: Debugging Options. (line 757) 40825 * fdump-tree-vcg: Debugging Options. (line 733) 40826 * fdump-tree-vect: Debugging Options. (line 825) 40827 * fdump-tree-vrp: Debugging Options. (line 830) 40828 * fdump-unnumbered: Debugging Options. (line 602) 40829 * fdwarf2-cfi-asm: Debugging Options. (line 244) 40830 * fearly-inlining: Optimize Options. (line 220) 40831 * feliminate-dwarf2-dups: Debugging Options. (line 152) 40832 * feliminate-unused-debug-symbols: Debugging Options. (line 52) 40833 * feliminate-unused-debug-types: Debugging Options. (line 994) 40834 * fenable-icf-debug: Debugging Options. (line 227) 40835 * fexceptions: Code Gen Options. (line 34) 40836 * fexec-charset: Preprocessor Options. 40837 (line 496) 40838 * fexpensive-optimizations: Optimize Options. (line 497) 40839 * fextended-identifiers: Preprocessor Options. 40840 (line 472) 40841 * ffast-math: Optimize Options. (line 1464) 40842 * ffinite-math-only: Optimize Options. (line 1537) 40843 * ffix-and-continue: Darwin Options. (line 106) 40844 * ffixed: Code Gen Options. (line 241) 40845 * ffloat-store <1>: Disappointments. (line 77) 40846 * ffloat-store: Optimize Options. (line 1450) 40847 * ffor-scope: C++ Dialect Options. 40848 (line 104) 40849 * fforward-propagate: Optimize Options. (line 149) 40850 * ffreestanding <1>: C Dialect Options. (line 211) 40851 * ffreestanding <2>: Function Attributes. 40852 (line 412) 40853 * ffreestanding <3>: Warning Options. (line 197) 40854 * ffreestanding: Standards. (line 84) 40855 * ffriend-injection: C++ Dialect Options. 40856 (line 74) 40857 * ffunction-sections: Optimize Options. (line 1744) 40858 * ffvpt: Optimize Options. (line 1677) 40859 * fgcse: Optimize Options. (line 399) 40860 * fgcse-after-reload: Optimize Options. (line 435) 40861 * fgcse-las: Optimize Options. (line 428) 40862 * fgcse-lm: Optimize Options. (line 410) 40863 * fgcse-sm: Optimize Options. (line 419) 40864 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options. 40865 (line 39) 40866 * fgnu89-inline: C Dialect Options. (line 120) 40867 * fhosted: C Dialect Options. (line 204) 40868 * fif-conversion: Optimize Options. (line 469) 40869 * fif-conversion2: Optimize Options. (line 478) 40870 * filelist: Darwin Options. (line 199) 40871 * findirect-data: Darwin Options. (line 106) 40872 * findirect-inlining: Optimize Options. (line 193) 40873 * finhibit-size-directive: Code Gen Options. (line 158) 40874 * finline-functions: Optimize Options. (line 201) 40875 * finline-functions-called-once: Optimize Options. (line 212) 40876 * finline-limit: Optimize Options. (line 230) 40877 * finline-small-functions: Optimize Options. (line 185) 40878 * finput-charset: Preprocessor Options. 40879 (line 509) 40880 * finstrument-functions <1>: Code Gen Options. (line 297) 40881 * finstrument-functions: Function Attributes. 40882 (line 712) 40883 * finstrument-functions-exclude-file-list: Code Gen Options. (line 334) 40884 * finstrument-functions-exclude-function-list: Code Gen Options. 40885 (line 352) 40886 * fipa-cp: Optimize Options. (line 742) 40887 * fipa-cp-clone: Optimize Options. (line 750) 40888 * fipa-matrix-reorg: Optimize Options. (line 760) 40889 * fipa-pta: Optimize Options. (line 738) 40890 * fipa-pure-const: Optimize Options. (line 715) 40891 * fipa-reference: Optimize Options. (line 719) 40892 * fipa-struct-reorg: Optimize Options. (line 723) 40893 * fira-coalesce: Optimize Options. (line 536) 40894 * fira-verbose: Optimize Options. (line 552) 40895 * fivopts: Optimize Options. (line 937) 40896 * fkeep-inline-functions <1>: Optimize Options. (line 256) 40897 * fkeep-inline-functions: Inline. (line 51) 40898 * fkeep-static-consts: Optimize Options. (line 263) 40899 * flat_namespace: Darwin Options. (line 199) 40900 * flax-vector-conversions: C Dialect Options. (line 263) 40901 * fleading-underscore: Code Gen Options. (line 435) 40902 * fmem-report: Debugging Options. (line 268) 40903 * fmerge-all-constants: Optimize Options. (line 282) 40904 * fmerge-constants: Optimize Options. (line 272) 40905 * fmerge-debug-strings: Debugging Options. (line 232) 40906 * fmessage-length: Language Independent Options. 40907 (line 15) 40908 * fmodulo-sched: Optimize Options. (line 293) 40909 * fmodulo-sched-allow-regmoves: Optimize Options. (line 298) 40910 * fmove-loop-invariants: Optimize Options. (line 1734) 40911 * fms-extensions <1>: C++ Dialect Options. 40912 (line 139) 40913 * fms-extensions <2>: C Dialect Options. (line 229) 40914 * fms-extensions: Unnamed Fields. (line 37) 40915 * fmudflap: Optimize Options. (line 338) 40916 * fmudflapir: Optimize Options. (line 338) 40917 * fmudflapth: Optimize Options. (line 338) 40918 * fnext-runtime: Objective-C and Objective-C++ Dialect Options. 40919 (line 43) 40920 * fno-access-control: C++ Dialect Options. 40921 (line 30) 40922 * fno-asm: C Dialect Options. (line 156) 40923 * fno-branch-count-reg: Optimize Options. (line 305) 40924 * fno-builtin <1>: Function Attributes. 40925 (line 412) 40926 * fno-builtin <2>: Warning Options. (line 197) 40927 * fno-builtin <3>: C Dialect Options. (line 170) 40928 * fno-builtin: Other Builtins. (line 14) 40929 * fno-common <1>: Variable Attributes. 40930 (line 105) 40931 * fno-common: Code Gen Options. (line 135) 40932 * fno-deduce-init-list: C++ Dialect Options. 40933 (line 56) 40934 * fno-default-inline <1>: Inline. (line 71) 40935 * fno-default-inline <2>: Optimize Options. (line 134) 40936 * fno-default-inline: C++ Dialect Options. 40937 (line 280) 40938 * fno-defer-pop: Optimize Options. (line 141) 40939 * fno-dwarf2-cfi-asm: Debugging Options. (line 244) 40940 * fno-elide-constructors: C++ Dialect Options. 40941 (line 87) 40942 * fno-enforce-eh-specs: C++ Dialect Options. 40943 (line 93) 40944 * fno-for-scope: C++ Dialect Options. 40945 (line 104) 40946 * fno-function-cse: Optimize Options. (line 315) 40947 * fno-gnu-keywords: C++ Dialect Options. 40948 (line 116) 40949 * fno-guess-branch-probability: Optimize Options. (line 1060) 40950 * fno-ident: Code Gen Options. (line 155) 40951 * fno-implement-inlines <1>: C++ Dialect Options. 40952 (line 133) 40953 * fno-implement-inlines: C++ Interface. (line 75) 40954 * fno-implicit-inline-templates: C++ Dialect Options. 40955 (line 127) 40956 * fno-implicit-templates <1>: C++ Dialect Options. 40957 (line 121) 40958 * fno-implicit-templates: Template Instantiation. 40959 (line 87) 40960 * fno-inline: Optimize Options. (line 179) 40961 * fno-ira-share-save-slots: Optimize Options. (line 540) 40962 * fno-ira-share-spill-slots: Optimize Options. (line 546) 40963 * fno-jump-tables: Code Gen Options. (line 233) 40964 * fno-math-errno: Optimize Options. (line 1478) 40965 * fno-merge-debug-strings: Debugging Options. (line 232) 40966 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options. 40967 (line 49) 40968 * fno-nonansi-builtins: C++ Dialect Options. 40969 (line 144) 40970 * fno-operator-names: C++ Dialect Options. 40971 (line 149) 40972 * fno-optional-diags: C++ Dialect Options. 40973 (line 153) 40974 * fno-peephole: Optimize Options. (line 1051) 40975 * fno-peephole2: Optimize Options. (line 1051) 40976 * fno-rtti: C++ Dialect Options. 40977 (line 168) 40978 * fno-sched-interblock: Optimize Options. (line 583) 40979 * fno-sched-spec: Optimize Options. (line 588) 40980 * fno-show-column: Preprocessor Options. 40981 (line 534) 40982 * fno-signed-bitfields: C Dialect Options. (line 296) 40983 * fno-signed-zeros: Optimize Options. (line 1549) 40984 * fno-stack-limit: Code Gen Options. (line 401) 40985 * fno-threadsafe-statics: C++ Dialect Options. 40986 (line 190) 40987 * fno-toplevel-reorder: Optimize Options. (line 1258) 40988 * fno-trapping-math: Optimize Options. (line 1559) 40989 * fno-unsigned-bitfields: C Dialect Options. (line 296) 40990 * fno-use-cxa-get-exception-ptr: C++ Dialect Options. 40991 (line 203) 40992 * fno-weak: C++ Dialect Options. 40993 (line 265) 40994 * fno-working-directory: Preprocessor Options. 40995 (line 519) 40996 * fno-zero-initialized-in-bss: Optimize Options. (line 326) 40997 * fnon-call-exceptions: Code Gen Options. (line 48) 40998 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options. 40999 (line 56) 41000 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options. 41001 (line 81) 41002 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options. 41003 (line 85) 41004 * fobjc-gc: Objective-C and Objective-C++ Dialect Options. 41005 (line 170) 41006 * fomit-frame-pointer: Optimize Options. (line 158) 41007 * fopenmp: C Dialect Options. (line 221) 41008 * foptimize-register-move: Optimize Options. (line 504) 41009 * foptimize-sibling-calls: Optimize Options. (line 174) 41010 * force_cpusubtype_ALL: Darwin Options. (line 138) 41011 * force_flat_namespace: Darwin Options. (line 199) 41012 * fpack-struct: Code Gen Options. (line 284) 41013 * fpcc-struct-return <1>: Incompatibilities. (line 170) 41014 * fpcc-struct-return: Code Gen Options. (line 70) 41015 * fpch-deps: Preprocessor Options. 41016 (line 282) 41017 * fpch-preprocess: Preprocessor Options. 41018 (line 290) 41019 * fpeel-loops: Optimize Options. (line 1726) 41020 * fpermissive: C++ Dialect Options. 41021 (line 158) 41022 * fPIC: Code Gen Options. (line 205) 41023 * fpic: Code Gen Options. (line 184) 41024 * fpie: Code Gen Options. (line 218) 41025 * fPIE: Code Gen Options. (line 218) 41026 * fpmu-profile-generate: Optimize Options. (line 1370) 41027 * fpmu-profile-use: Optimize Options. (line 1381) 41028 * fpost-ipa-mem-report: Debugging Options. (line 274) 41029 * fpre-ipa-mem-report: Debugging Options. (line 272) 41030 * fpredictive-commoning: Optimize Options. (line 1033) 41031 * fprefetch-loop-arrays: Optimize Options. (line 1040) 41032 * fpreprocessed: Preprocessor Options. 41033 (line 477) 41034 * fprofile-arcs <1>: Debugging Options. (line 278) 41035 * fprofile-arcs: Other Builtins. (line 242) 41036 * fprofile-correction: Optimize Options. (line 1313) 41037 * fprofile-dir: Optimize Options. (line 1320) 41038 * fprofile-generate: Optimize Options. (line 1330) 41039 * fprofile-use: Optimize Options. (line 1355) 41040 * fprofile-values: Optimize Options. (line 1658) 41041 * frandom-string: Debugging Options. (line 863) 41042 * freciprocal-math: Optimize Options. (line 1528) 41043 * frecord-gcc-switches: Code Gen Options. (line 174) 41044 * frecord-options-in-elf: Optimize Options. (line 1442) 41045 * freg-struct-return: Code Gen Options. (line 88) 41046 * fregmove: Optimize Options. (line 504) 41047 * frename-registers: Optimize Options. (line 1693) 41048 * freorder-blocks: Optimize Options. (line 1077) 41049 * freorder-blocks-and-partition: Optimize Options. (line 1083) 41050 * freorder-functions: Optimize Options. (line 1094) 41051 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options. 41052 (line 174) 41053 * frepo <1>: Template Instantiation. 41054 (line 62) 41055 * frepo: C++ Dialect Options. 41056 (line 163) 41057 * frerun-cse-after-loop: Optimize Options. (line 393) 41058 * freschedule-modulo-scheduled-loops: Optimize Options. (line 652) 41059 * fripa: Optimize Options. (line 1394) 41060 * fripa-disallow-asm-modules: Optimize Options. (line 1402) 41061 * fripa-disallow-opt-mismatch: Optimize Options. (line 1410) 41062 * fripa-no-promote-always-inline-func: Optimize Options. (line 1422) 41063 * fripa-verbose: Optimize Options. (line 1417) 41064 * frounding-math: Optimize Options. (line 1574) 41065 * fsample-profile: Optimize Options. (line 1427) 41066 * fsample-profile-aggreagate-using: Optimize Options. (line 1438) 41067 * fsample-profile-use-entry: Optimize Options. (line 1432) 41068 * fsched-spec-load: Optimize Options. (line 593) 41069 * fsched-spec-load-dangerous: Optimize Options. (line 598) 41070 * fsched-stalled-insns: Optimize Options. (line 604) 41071 * fsched-stalled-insns-dep: Optimize Options. (line 614) 41072 * fsched-verbose: Debugging Options. (line 873) 41073 * fsched2-use-superblocks: Optimize Options. (line 624) 41074 * fsched2-use-traces: Optimize Options. (line 635) 41075 * fschedule-insns: Optimize Options. (line 564) 41076 * fschedule-insns2: Optimize Options. (line 574) 41077 * fsection-anchors: Optimize Options. (line 1793) 41078 * fsee: Optimize Options. (line 647) 41079 * fsel-sched-pipelining: Optimize Options. (line 666) 41080 * fsel-sched-pipelining-outer-loops: Optimize Options. (line 671) 41081 * fselective-scheduling: Optimize Options. (line 658) 41082 * fselective-scheduling2: Optimize Options. (line 662) 41083 * fshort-double: Code Gen Options. (line 117) 41084 * fshort-enums <1>: Structures unions enumerations and bit-fields implementation. 41085 (line 43) 41086 * fshort-enums <2>: Type Attributes. (line 113) 41087 * fshort-enums <3>: Code Gen Options. (line 106) 41088 * fshort-enums: Non-bugs. (line 42) 41089 * fshort-wchar: Code Gen Options. (line 125) 41090 * fsignaling-nans: Optimize Options. (line 1594) 41091 * fsigned-bitfields <1>: Non-bugs. (line 57) 41092 * fsigned-bitfields: C Dialect Options. (line 296) 41093 * fsigned-char <1>: C Dialect Options. (line 286) 41094 * fsigned-char: Characters implementation. 41095 (line 31) 41096 * fsingle-precision-constant: Optimize Options. (line 1609) 41097 * fsplit-ivs-in-unroller: Optimize Options. (line 1014) 41098 * fsplit-wide-types: Optimize Options. (line 368) 41099 * fstack-check: Code Gen Options. (line 362) 41100 * fstack-limit-register: Code Gen Options. (line 401) 41101 * fstack-limit-symbol: Code Gen Options. (line 401) 41102 * fstack-protector: Optimize Options. (line 1777) 41103 * fstack-protector-all: Optimize Options. (line 1786) 41104 * fstats: C++ Dialect Options. 41105 (line 178) 41106 * fstrict-aliasing: Optimize Options. (line 1107) 41107 * fstrict-overflow: Optimize Options. (line 1153) 41108 * fsyntax-only: Warning Options. (line 14) 41109 * ftabstop: Preprocessor Options. 41110 (line 490) 41111 * ftemplate-depth: C++ Dialect Options. 41112 (line 183) 41113 * ftest-coverage: Debugging Options. (line 334) 41114 * fthread-jumps: Optimize Options. (line 359) 41115 * ftime-report: Debugging Options. (line 264) 41116 * ftls-model: Code Gen Options. (line 446) 41117 * ftracer: Optimize Options. (line 1703) 41118 * ftrapv: Code Gen Options. (line 22) 41119 * ftree-builtin-call-dce: Optimize Options. (line 788) 41120 * ftree-ccp: Optimize Options. (line 774) 41121 * ftree-ch: Optimize Options. (line 808) 41122 * ftree-copy-prop: Optimize Options. (line 710) 41123 * ftree-copyrename: Optimize Options. (line 957) 41124 * ftree-dce: Optimize Options. (line 784) 41125 * ftree-dominator-opts: Optimize Options. (line 794) 41126 * ftree-dse: Optimize Options. (line 801) 41127 * ftree-fre: Optimize Options. (line 703) 41128 * ftree-loop-im: Optimize Options. (line 922) 41129 * ftree-loop-ivcanon: Optimize Options. (line 931) 41130 * ftree-loop-linear: Optimize Options. (line 823) 41131 * ftree-loop-optimize: Optimize Options. (line 819) 41132 * ftree-lr-shrinking: Optimize Options. (line 815) 41133 * ftree-parallelize-loops: Optimize Options. (line 942) 41134 * ftree-pre: Optimize Options. (line 699) 41135 * ftree-reassoc: Optimize Options. (line 695) 41136 * ftree-sink: Optimize Options. (line 770) 41137 * ftree-sra: Optimize Options. (line 951) 41138 * ftree-ter: Optimize Options. (line 964) 41139 * ftree-vect-loop-version: Optimize Options. (line 976) 41140 * ftree-vectorize: Optimize Options. (line 972) 41141 * ftree-vectorizer-verbose: Debugging Options. (line 838) 41142 * ftree-vrp: Optimize Options. (line 988) 41143 * funit-at-a-time: Optimize Options. (line 1251) 41144 * funroll-all-loops: Optimize Options. (line 1720) 41145 * funroll-loops: Optimize Options. (line 1710) 41146 * funsafe-loop-optimizations: Optimize Options. (line 440) 41147 * funsafe-math-optimizations: Optimize Options. (line 1496) 41148 * funsigned-bitfields <1>: Non-bugs. (line 57) 41149 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation. 41150 (line 17) 41151 * funsigned-bitfields: C Dialect Options. (line 296) 41152 * funsigned-char <1>: C Dialect Options. (line 268) 41153 * funsigned-char: Characters implementation. 41154 (line 31) 41155 * funswitch-loops: Optimize Options. (line 1738) 41156 * funwind-tables: Code Gen Options. (line 57) 41157 * fuse-cxa-atexit: C++ Dialect Options. 41158 (line 196) 41159 * fvar-tracking: Debugging Options. (line 918) 41160 * fvariable-expansion-in-unroller: Optimize Options. (line 1028) 41161 * fvect-cost-model: Optimize Options. (line 985) 41162 * fverbose-asm: Code Gen Options. (line 165) 41163 * fvisibility: Code Gen Options. (line 454) 41164 * fvisibility-inlines-hidden: C++ Dialect Options. 41165 (line 208) 41166 * fvisibility-ms-compat: C++ Dialect Options. 41167 (line 236) 41168 * fvpt: Optimize Options. (line 1668) 41169 * fweb: Optimize Options. (line 1270) 41170 * fwhole-program: Optimize Options. (line 1281) 41171 * fwide-exec-charset: Preprocessor Options. 41172 (line 501) 41173 * fworking-directory: Preprocessor Options. 41174 (line 519) 41175 * fwrapv: Code Gen Options. (line 26) 41176 * fzero-link: Objective-C and Objective-C++ Dialect Options. 41177 (line 184) 41178 * G: MIPS Options. (line 314) 41179 * g: Debugging Options. (line 10) 41180 * G <1>: M32R/D Options. (line 57) 41181 * G <2>: System V Options. (line 10) 41182 * G: RS/6000 and PowerPC Options. 41183 (line 663) 41184 * gcoff: Debugging Options. (line 70) 41185 * gdwarf-2: Debugging Options. (line 88) 41186 * gdwarf-4: Debugging Options. (line 95) 41187 * gen-decls: Objective-C and Objective-C++ Dialect Options. 41188 (line 194) 41189 * gfull: Darwin Options. (line 71) 41190 * ggdb: Debugging Options. (line 38) 41191 * gmlt: Debugging Options. (line 148) 41192 * gno-strict-dwarf: Debugging Options. (line 111) 41193 * gnu-ld: HPPA Options. (line 111) 41194 * gstabs: Debugging Options. (line 44) 41195 * gstabs+: Debugging Options. (line 64) 41196 * gstrict-dwarf: Debugging Options. (line 103) 41197 * gused: Darwin Options. (line 66) 41198 * gvms: Debugging Options. (line 115) 41199 * gxcoff: Debugging Options. (line 75) 41200 * gxcoff+: Debugging Options. (line 80) 41201 * H: Preprocessor Options. 41202 (line 652) 41203 * headerpad_max_install_names: Darwin Options. (line 199) 41204 * help <1>: Preprocessor Options. 41205 (line 644) 41206 * help: Overall Options. (line 231) 41207 * hp-ld: HPPA Options. (line 123) 41208 * I <1>: Preprocessor Options. 41209 (line 65) 41210 * I: Directory Options. (line 10) 41211 * I- <1>: Directory Options. (line 107) 41212 * I-: Preprocessor Options. 41213 (line 363) 41214 * idirafter: Preprocessor Options. 41215 (line 405) 41216 * iframework: Darwin Options. (line 59) 41217 * imacros: Preprocessor Options. 41218 (line 396) 41219 * image_base: Darwin Options. (line 199) 41220 * imultilib: Preprocessor Options. 41221 (line 428) 41222 * include: Preprocessor Options. 41223 (line 385) 41224 * init: Darwin Options. (line 199) 41225 * install_name: Darwin Options. (line 199) 41226 * iprefix: Preprocessor Options. 41227 (line 412) 41228 * iquote <1>: Preprocessor Options. 41229 (line 440) 41230 * iquote: Directory Options. (line 31) 41231 * isysroot: Preprocessor Options. 41232 (line 424) 41233 * isystem: Preprocessor Options. 41234 (line 432) 41235 * iwithprefix: Preprocessor Options. 41236 (line 418) 41237 * iwithprefixbefore: Preprocessor Options. 41238 (line 418) 41239 * keep_private_externs: Darwin Options. (line 199) 41240 * L: Directory Options. (line 37) 41241 * l: Link Options. (line 26) 41242 * lobjc: Link Options. (line 53) 41243 * M: Preprocessor Options. 41244 (line 173) 41245 * m1: SH Options. (line 9) 41246 * m10: PDP-11 Options. (line 29) 41247 * m128bit-long-double: i386 and x86-64 Options. 41248 (line 269) 41249 * m16-bit: CRIS Options. (line 64) 41250 * m2: SH Options. (line 12) 41251 * m210: MCore Options. (line 43) 41252 * m3: SH Options. (line 18) 41253 * m31: S/390 and zSeries Options. 41254 (line 87) 41255 * m32 <1>: SPARC Options. (line 191) 41256 * m32 <2>: RS/6000 and PowerPC Options. 41257 (line 252) 41258 * m32: i386 and x86-64 Options. 41259 (line 631) 41260 * m32-bit: CRIS Options. (line 64) 41261 * m32r: M32R/D Options. (line 15) 41262 * m32r2: M32R/D Options. (line 9) 41263 * m32rx: M32R/D Options. (line 12) 41264 * m340: MCore Options. (line 43) 41265 * m3dnow: i386 and x86-64 Options. 41266 (line 441) 41267 * m3e: SH Options. (line 21) 41268 * m4: SH Options. (line 35) 41269 * m4-nofpu: SH Options. (line 24) 41270 * m4-single: SH Options. (line 31) 41271 * m4-single-only: SH Options. (line 27) 41272 * m40: PDP-11 Options. (line 23) 41273 * m45: PDP-11 Options. (line 26) 41274 * m4a: SH Options. (line 50) 41275 * m4a-nofpu: SH Options. (line 38) 41276 * m4a-single: SH Options. (line 46) 41277 * m4a-single-only: SH Options. (line 42) 41278 * m4al: SH Options. (line 53) 41279 * m4byte-functions: MCore Options. (line 27) 41280 * m5200: M680x0 Options. (line 143) 41281 * m5206e: M680x0 Options. (line 152) 41282 * m528x: M680x0 Options. (line 156) 41283 * m5307: M680x0 Options. (line 160) 41284 * m5407: M680x0 Options. (line 164) 41285 * m64 <1>: SPARC Options. (line 191) 41286 * m64 <2>: i386 and x86-64 Options. 41287 (line 631) 41288 * m64 <3>: S/390 and zSeries Options. 41289 (line 87) 41290 * m64: RS/6000 and PowerPC Options. 41291 (line 252) 41292 * m68000: M680x0 Options. (line 91) 41293 * m68010: M680x0 Options. (line 99) 41294 * m68020: M680x0 Options. (line 105) 41295 * m68020-40: M680x0 Options. (line 174) 41296 * m68020-60: M680x0 Options. (line 183) 41297 * m68030: M680x0 Options. (line 110) 41298 * m68040: M680x0 Options. (line 115) 41299 * m68060: M680x0 Options. (line 124) 41300 * m6811: M68hc1x Options. (line 13) 41301 * m6812: M68hc1x Options. (line 18) 41302 * m68881: M680x0 Options. (line 193) 41303 * m68hc11: M68hc1x Options. (line 13) 41304 * m68hc12: M68hc1x Options. (line 18) 41305 * m68hcs12: M68hc1x Options. (line 23) 41306 * m68S12: M68hc1x Options. (line 23) 41307 * m8-bit: CRIS Options. (line 64) 41308 * m96bit-long-double: i386 and x86-64 Options. 41309 (line 269) 41310 * mabi <1>: RS/6000 and PowerPC Options. 41311 (line 549) 41312 * mabi <2>: ARM Options. (line 10) 41313 * mabi: i386 and x86-64 Options. 41314 (line 534) 41315 * mabi-mmixware: MMIX Options. (line 20) 41316 * mabi=32: MIPS Options. (line 129) 41317 * mabi=64: MIPS Options. (line 129) 41318 * mabi=eabi: MIPS Options. (line 129) 41319 * mabi=gnu: MMIX Options. (line 20) 41320 * mabi=ibmlongdouble: RS/6000 and PowerPC Options. 41321 (line 562) 41322 * mabi=ieeelongdouble: RS/6000 and PowerPC Options. 41323 (line 566) 41324 * mabi=n32: MIPS Options. (line 129) 41325 * mabi=no-spe: RS/6000 and PowerPC Options. 41326 (line 559) 41327 * mabi=o64: MIPS Options. (line 129) 41328 * mabi=spe: RS/6000 and PowerPC Options. 41329 (line 554) 41330 * mabicalls: MIPS Options. (line 153) 41331 * mabort-on-noreturn: ARM Options. (line 144) 41332 * mabshi: PDP-11 Options. (line 55) 41333 * mac0: PDP-11 Options. (line 16) 41334 * macc-4: FRV Options. (line 113) 41335 * macc-8: FRV Options. (line 116) 41336 * maccumulate-outgoing-args: i386 and x86-64 Options. 41337 (line 551) 41338 * madjust-unroll: SH Options. (line 196) 41339 * mads: RS/6000 and PowerPC Options. 41340 (line 592) 41341 * maix-struct-return: RS/6000 and PowerPC Options. 41342 (line 542) 41343 * maix32: RS/6000 and PowerPC Options. 41344 (line 290) 41345 * maix64: RS/6000 and PowerPC Options. 41346 (line 290) 41347 * malign-300: H8/300 Options. (line 31) 41348 * malign-double: i386 and x86-64 Options. 41349 (line 253) 41350 * malign-int: M680x0 Options. (line 263) 41351 * malign-labels: FRV Options. (line 104) 41352 * malign-loops: M32R/D Options. (line 73) 41353 * malign-natural: RS/6000 and PowerPC Options. 41354 (line 329) 41355 * malign-power: RS/6000 and PowerPC Options. 41356 (line 329) 41357 * malloc-cc: FRV Options. (line 25) 41358 * malpha-as: DEC Alpha Options. (line 159) 41359 * maltivec: RS/6000 and PowerPC Options. 41360 (line 183) 41361 * mam33: MN10300 Options. (line 17) 41362 * mandroid: GNU/Linux Options. (line 21) 41363 * mapcs: ARM Options. (line 22) 41364 * mapcs-frame: ARM Options. (line 14) 41365 * mapp-regs <1>: SPARC Options. (line 10) 41366 * mapp-regs: V850 Options. (line 57) 41367 * march <1>: M680x0 Options. (line 12) 41368 * march <2>: i386 and x86-64 Options. 41369 (line 160) 41370 * march <3>: S/390 and zSeries Options. 41371 (line 116) 41372 * march <4>: HPPA Options. (line 162) 41373 * march <5>: ARM Options. (line 107) 41374 * march <6>: i386 and x86-64 Options. 41375 (line 152) 41376 * march <7>: HPPA Options. (line 9) 41377 * march <8>: MIPS Options. (line 14) 41378 * march: CRIS Options. (line 10) 41379 * masm=DIALECT: i386 and x86-64 Options. 41380 (line 209) 41381 * mauto-incdec: M68hc1x Options. (line 26) 41382 * mauto-pic: IA-64 Options. (line 50) 41383 * mavoid-indexed-addresses: RS/6000 and PowerPC Options. 41384 (line 399) 41385 * mb: SH Options. (line 58) 41386 * mbackchain: S/390 and zSeries Options. 41387 (line 35) 41388 * mbase-addresses: MMIX Options. (line 54) 41389 * mbcopy: PDP-11 Options. (line 36) 41390 * mbig: RS/6000 and PowerPC Options. 41391 (line 474) 41392 * mbig-endian <1>: ARM Options. (line 67) 41393 * mbig-endian <2>: IA-64 Options. (line 9) 41394 * mbig-endian <3>: RS/6000 and PowerPC Options. 41395 (line 474) 41396 * mbig-endian: MCore Options. (line 39) 41397 * mbig-switch <1>: V850 Options. (line 52) 41398 * mbig-switch: HPPA Options. (line 23) 41399 * mbigtable: SH Options. (line 74) 41400 * mbionic: GNU/Linux Options. (line 17) 41401 * mbit-align: RS/6000 and PowerPC Options. 41402 (line 428) 41403 * mbitfield: M680x0 Options. (line 231) 41404 * mbitops: SH Options. (line 78) 41405 * mbranch-cheap: PDP-11 Options. (line 65) 41406 * mbranch-cost: MIPS Options. (line 610) 41407 * mbranch-cost=NUMBER: M32R/D Options. (line 82) 41408 * mbranch-expensive: PDP-11 Options. (line 61) 41409 * mbranch-hints: SPU Options. (line 27) 41410 * mbranch-likely: MIPS Options. (line 617) 41411 * mbranch-predict: MMIX Options. (line 49) 41412 * mbss-plt: RS/6000 and PowerPC Options. 41413 (line 206) 41414 * mbuild-constants: DEC Alpha Options. (line 142) 41415 * mbwx: DEC Alpha Options. (line 171) 41416 * mc68000: M680x0 Options. (line 91) 41417 * mc68020: M680x0 Options. (line 105) 41418 * mcall-gnu: RS/6000 and PowerPC Options. 41419 (line 534) 41420 * mcall-linux: RS/6000 and PowerPC Options. 41421 (line 530) 41422 * mcall-netbsd: RS/6000 and PowerPC Options. 41423 (line 538) 41424 * mcall-prologues: AVR Options. (line 39) 41425 * mcall-solaris: RS/6000 and PowerPC Options. 41426 (line 526) 41427 * mcall-sysv: RS/6000 and PowerPC Options. 41428 (line 513) 41429 * mcall-sysv-eabi: RS/6000 and PowerPC Options. 41430 (line 520) 41431 * mcall-sysv-noeabi: RS/6000 and PowerPC Options. 41432 (line 523) 41433 * mcallee-super-interworking: ARM Options. (line 233) 41434 * mcaller-super-interworking: ARM Options. (line 239) 41435 * mcallgraph-data: MCore Options. (line 31) 41436 * mcc-init: CRIS Options. (line 41) 41437 * mcfv4e: M680x0 Options. (line 168) 41438 * mcheck-zero-division: MIPS Options. (line 425) 41439 * mcirrus-fix-invalid-insns: ARM Options. (line 184) 41440 * mcix: DEC Alpha Options. (line 171) 41441 * mcld: i386 and x86-64 Options. 41442 (line 464) 41443 * mcmodel=embmedany: SPARC Options. (line 213) 41444 * mcmodel=kernel: i386 and x86-64 Options. 41445 (line 653) 41446 * mcmodel=large: i386 and x86-64 Options. 41447 (line 665) 41448 * mcmodel=medany: SPARC Options. (line 207) 41449 * mcmodel=medium: i386 and x86-64 Options. 41450 (line 658) 41451 * mcmodel=medlow: SPARC Options. (line 196) 41452 * mcmodel=medmid: SPARC Options. (line 201) 41453 * mcmodel=small: i386 and x86-64 Options. 41454 (line 647) 41455 * mcmpb: RS/6000 and PowerPC Options. 41456 (line 31) 41457 * mcode-readable: MIPS Options. (line 385) 41458 * mcond-exec: FRV Options. (line 152) 41459 * mcond-move: FRV Options. (line 128) 41460 * mconsole: i386 and x86-64 Windows Options. 41461 (line 9) 41462 * mconst-align: CRIS Options. (line 55) 41463 * mconst16: Xtensa Options. (line 10) 41464 * mconstant-gp: IA-64 Options. (line 46) 41465 * mcorea: Blackfin Options. (line 149) 41466 * mcoreb: Blackfin Options. (line 155) 41467 * mcpu <1>: ARM Options. (line 79) 41468 * mcpu <2>: picoChip Options. (line 9) 41469 * mcpu <3>: RS/6000 and PowerPC Options. 41470 (line 114) 41471 * mcpu <4>: M680x0 Options. (line 28) 41472 * mcpu <5>: i386 and x86-64 Options. 41473 (line 157) 41474 * mcpu <6>: FRV Options. (line 212) 41475 * mcpu <7>: SPARC Options. (line 96) 41476 * mcpu <8>: DEC Alpha Options. (line 223) 41477 * mcpu <9>: ARC Options. (line 23) 41478 * mcpu: CRIS Options. (line 10) 41479 * mcpu32: M680x0 Options. (line 134) 41480 * mcpu= <1>: Blackfin Options. (line 7) 41481 * mcpu=: M32C Options. (line 7) 41482 * mcsync-anomaly: Blackfin Options. (line 55) 41483 * mcx16: i386 and x86-64 Options. 41484 (line 478) 41485 * mcygwin: i386 and x86-64 Windows Options. 41486 (line 16) 41487 * MD: Preprocessor Options. 41488 (line 262) 41489 * mdalign: SH Options. (line 64) 41490 * mdata: ARC Options. (line 30) 41491 * mdata-align: CRIS Options. (line 55) 41492 * mdebug <1>: S/390 and zSeries Options. 41493 (line 112) 41494 * mdebug: M32R/D Options. (line 69) 41495 * mdec-asm: PDP-11 Options. (line 78) 41496 * mdisable-callt: V850 Options. (line 80) 41497 * mdisable-fpregs: HPPA Options. (line 33) 41498 * mdisable-indexing: HPPA Options. (line 40) 41499 * mdiv <1>: MCore Options. (line 15) 41500 * mdiv: M680x0 Options. (line 205) 41501 * mdiv=STRATEGY: SH Options. (line 141) 41502 * mdivide-breaks: MIPS Options. (line 431) 41503 * mdivide-traps: MIPS Options. (line 431) 41504 * mdivsi3_libfunc=NAME: SH Options. (line 182) 41505 * mdll: i386 and x86-64 Windows Options. 41506 (line 30) 41507 * mdlmzb: RS/6000 and PowerPC Options. 41508 (line 421) 41509 * mdmx: MIPS Options. (line 278) 41510 * mdouble: FRV Options. (line 38) 41511 * mdouble-float <1>: RS/6000 and PowerPC Options. 41512 (line 347) 41513 * mdouble-float: MIPS Options. (line 236) 41514 * mdsp: MIPS Options. (line 255) 41515 * mdspr2: MIPS Options. (line 261) 41516 * mdual-nops: SPU Options. (line 55) 41517 * mdwarf2-asm: IA-64 Options. (line 79) 41518 * mdword: FRV Options. (line 32) 41519 * mdynamic-no-pic: RS/6000 and PowerPC Options. 41520 (line 479) 41521 * meabi: RS/6000 and PowerPC Options. 41522 (line 611) 41523 * mearly-stop-bits: IA-64 Options. (line 85) 41524 * meb: Score Options. (line 9) 41525 * mel: Score Options. (line 12) 41526 * melf <1>: MMIX Options. (line 44) 41527 * melf: CRIS Options. (line 87) 41528 * memb: RS/6000 and PowerPC Options. 41529 (line 606) 41530 * membedded-data: MIPS Options. (line 372) 41531 * memregs=: M32C Options. (line 21) 41532 * mep: V850 Options. (line 16) 41533 * mepsilon: MMIX Options. (line 15) 41534 * merror-reloc: SPU Options. (line 10) 41535 * mesa: S/390 and zSeries Options. 41536 (line 95) 41537 * metrax100: CRIS Options. (line 26) 41538 * metrax4: CRIS Options. (line 26) 41539 * mexplicit-relocs <1>: DEC Alpha Options. (line 184) 41540 * mexplicit-relocs: MIPS Options. (line 416) 41541 * mextern-sdata: MIPS Options. (line 334) 41542 * MF: Preprocessor Options. 41543 (line 208) 41544 * mfast-fp: Blackfin Options. (line 128) 41545 * mfast-indirect-calls: HPPA Options. (line 52) 41546 * mfaster-structs: SPARC Options. (line 71) 41547 * mfdpic: FRV Options. (line 56) 41548 * mfix: DEC Alpha Options. (line 171) 41549 * mfix-and-continue: Darwin Options. (line 106) 41550 * mfix-cortex-m3-ldrd: ARC Options. (line 36) 41551 * mfix-r10000: MIPS Options. (line 502) 41552 * mfix-r4000: MIPS Options. (line 481) 41553 * mfix-r4400: MIPS Options. (line 495) 41554 * mfix-sb1: MIPS Options. (line 534) 41555 * mfix-vr4120: MIPS Options. (line 513) 41556 * mfix-vr4130: MIPS Options. (line 527) 41557 * mfixed-cc: FRV Options. (line 28) 41558 * mfixed-range <1>: SPU Options. (line 47) 41559 * mfixed-range <2>: IA-64 Options. (line 90) 41560 * mfixed-range <3>: HPPA Options. (line 59) 41561 * mfixed-range: SH Options. (line 189) 41562 * mflip-mips16: MIPS Options. (line 109) 41563 * mfloat-abi: ARM Options. (line 41) 41564 * mfloat-gprs: RS/6000 and PowerPC Options. 41565 (line 235) 41566 * mfloat-ieee: DEC Alpha Options. (line 179) 41567 * mfloat-vax: DEC Alpha Options. (line 179) 41568 * mfloat32: PDP-11 Options. (line 52) 41569 * mfloat64: PDP-11 Options. (line 48) 41570 * mflush-func: MIPS Options. (line 601) 41571 * mflush-func=NAME: M32R/D Options. (line 94) 41572 * mflush-trap=NUMBER: M32R/D Options. (line 87) 41573 * mfmovd: SH Options. (line 81) 41574 * mfp: ARM Options. (line 119) 41575 * mfp-exceptions: MIPS Options. (line 628) 41576 * mfp-reg: DEC Alpha Options. (line 25) 41577 * mfp-rounding-mode: DEC Alpha Options. (line 85) 41578 * mfp-trap-mode: DEC Alpha Options. (line 63) 41579 * mfp32: MIPS Options. (line 219) 41580 * mfp64: MIPS Options. (line 222) 41581 * mfpe: ARM Options. (line 119) 41582 * mfpr-32: FRV Options. (line 13) 41583 * mfpr-64: FRV Options. (line 16) 41584 * mfprnd: RS/6000 and PowerPC Options. 41585 (line 31) 41586 * mfpu <1>: PDP-11 Options. (line 9) 41587 * mfpu <2>: SPARC Options. (line 20) 41588 * mfpu <3>: RS/6000 and PowerPC Options. 41589 (line 355) 41590 * mfpu: ARM Options. (line 119) 41591 * mfull-toc: RS/6000 and PowerPC Options. 41592 (line 263) 41593 * mfused-madd <1>: i386 and x86-64 Options. 41594 (line 615) 41595 * mfused-madd <2>: MIPS Options. (line 466) 41596 * mfused-madd <3>: RS/6000 and PowerPC Options. 41597 (line 408) 41598 * mfused-madd <4>: Xtensa Options. (line 19) 41599 * mfused-madd: S/390 and zSeries Options. 41600 (line 137) 41601 * mg: VAX Options. (line 17) 41602 * MG: Preprocessor Options. 41603 (line 217) 41604 * mgas <1>: HPPA Options. (line 75) 41605 * mgas: DEC Alpha Options. (line 159) 41606 * mgen-cell-microcode: RS/6000 and PowerPC Options. 41607 (line 194) 41608 * mgettrcost=NUMBER: SH Options. (line 211) 41609 * mglibc: GNU/Linux Options. (line 9) 41610 * mgnu: VAX Options. (line 13) 41611 * mgnu-as: IA-64 Options. (line 18) 41612 * mgnu-ld: IA-64 Options. (line 23) 41613 * mgotplt: CRIS Options. (line 81) 41614 * mgp32: MIPS Options. (line 213) 41615 * mgp64: MIPS Options. (line 216) 41616 * mgpopt: MIPS Options. (line 357) 41617 * mgpr-32: FRV Options. (line 7) 41618 * mgpr-64: FRV Options. (line 10) 41619 * mgprel-ro: FRV Options. (line 79) 41620 * mh: H8/300 Options. (line 14) 41621 * mhard-dfp <1>: S/390 and zSeries Options. 41622 (line 20) 41623 * mhard-dfp: RS/6000 and PowerPC Options. 41624 (line 31) 41625 * mhard-float <1>: FRV Options. (line 19) 41626 * mhard-float <2>: SPARC Options. (line 20) 41627 * mhard-float <3>: MIPS Options. (line 225) 41628 * mhard-float <4>: RS/6000 and PowerPC Options. 41629 (line 341) 41630 * mhard-float <5>: M680x0 Options. (line 193) 41631 * mhard-float <6>: ARM Options. (line 57) 41632 * mhard-float: S/390 and zSeries Options. 41633 (line 11) 41634 * mhard-quad-float: SPARC Options. (line 41) 41635 * mhardlit: MCore Options. (line 10) 41636 * mhint-max-distance: SPU Options. (line 67) 41637 * mhint-max-nops: SPU Options. (line 61) 41638 * mhitachi: SH Options. (line 84) 41639 * micplb: Blackfin Options. (line 168) 41640 * mid-shared-library: Blackfin Options. (line 76) 41641 * mieee <1>: SH Options. (line 99) 41642 * mieee: DEC Alpha Options. (line 39) 41643 * mieee-conformant: DEC Alpha Options. (line 134) 41644 * mieee-fp: i386 and x86-64 Options. 41645 (line 215) 41646 * mieee-with-inexact: DEC Alpha Options. (line 52) 41647 * milp32: IA-64 Options. (line 114) 41648 * mimpure-text: SPARC Options. (line 81) 41649 * mincoming-stack-boundary: i386 and x86-64 Options. 41650 (line 383) 41651 * mindexed-addressing: SH Options. (line 201) 41652 * minline-all-stringops: i386 and x86-64 Options. 41653 (line 572) 41654 * minline-compares: i386 and x86-64 Options. 41655 (line 584) 41656 * minline-float-divide-max-throughput: IA-64 Options. (line 58) 41657 * minline-float-divide-min-latency: IA-64 Options. (line 54) 41658 * minline-ic_invalidate: SH Options. (line 106) 41659 * minline-int-divide-max-throughput: IA-64 Options. (line 66) 41660 * minline-int-divide-min-latency: IA-64 Options. (line 62) 41661 * minline-plt <1>: Blackfin Options. (line 133) 41662 * minline-plt: FRV Options. (line 64) 41663 * minline-sqrt-max-throughput: IA-64 Options. (line 74) 41664 * minline-sqrt-min-latency: IA-64 Options. (line 70) 41665 * minline-stringops-dynamically: i386 and x86-64 Options. 41666 (line 579) 41667 * minmax: M68hc1x Options. (line 31) 41668 * minsert-sched-nops: RS/6000 and PowerPC Options. 41669 (line 501) 41670 * mint16: PDP-11 Options. (line 40) 41671 * mint32 <1>: H8/300 Options. (line 28) 41672 * mint32: PDP-11 Options. (line 44) 41673 * mint8: AVR Options. (line 51) 41674 * minterlink-mips16: MIPS Options. (line 116) 41675 * minvalid-symbols: SH Options. (line 234) 41676 * mips1: MIPS Options. (line 76) 41677 * mips16: MIPS Options. (line 101) 41678 * mips2: MIPS Options. (line 79) 41679 * mips3: MIPS Options. (line 82) 41680 * mips32: MIPS Options. (line 88) 41681 * mips32r2: MIPS Options. (line 91) 41682 * mips3d: MIPS Options. (line 284) 41683 * mips4: MIPS Options. (line 85) 41684 * mips64: MIPS Options. (line 94) 41685 * mips64r2: MIPS Options. (line 97) 41686 * misel: RS/6000 and PowerPC Options. 41687 (line 212) 41688 * misize: SH Options. (line 118) 41689 * missue-rate=NUMBER: M32R/D Options. (line 79) 41690 * mjump-in-delay: HPPA Options. (line 28) 41691 * mkernel: Darwin Options. (line 84) 41692 * mknuthdiv: MMIX Options. (line 33) 41693 * ml: SH Options. (line 61) 41694 * mlarge-data: DEC Alpha Options. (line 195) 41695 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options. 41696 (line 295) 41697 * mlarge-mem: SPU Options. (line 35) 41698 * mlarge-text: DEC Alpha Options. (line 213) 41699 * mleaf-id-shared-library: Blackfin Options. (line 87) 41700 * mlibfuncs: MMIX Options. (line 10) 41701 * mlibrary-pic: FRV Options. (line 110) 41702 * mlinked-fp: FRV Options. (line 94) 41703 * mlinker-opt: HPPA Options. (line 85) 41704 * mlinux: CRIS Options. (line 91) 41705 * mlittle: RS/6000 and PowerPC Options. 41706 (line 468) 41707 * mlittle-endian <1>: MCore Options. (line 39) 41708 * mlittle-endian <2>: RS/6000 and PowerPC Options. 41709 (line 468) 41710 * mlittle-endian <3>: IA-64 Options. (line 13) 41711 * mlittle-endian <4>: ARM Options. (line 63) 41712 * mlittle-endian: SPARC Options. (line 185) 41713 * mllsc: MIPS Options. (line 241) 41714 * mlocal-sdata: MIPS Options. (line 322) 41715 * mlong-calls <1>: MIPS Options. (line 452) 41716 * mlong-calls <2>: V850 Options. (line 10) 41717 * mlong-calls <3>: M68hc1x Options. (line 35) 41718 * mlong-calls <4>: FRV Options. (line 99) 41719 * mlong-calls <5>: Blackfin Options. (line 116) 41720 * mlong-calls: ARM Options. (line 149) 41721 * mlong-double-128: S/390 and zSeries Options. 41722 (line 29) 41723 * mlong-double-64: S/390 and zSeries Options. 41724 (line 29) 41725 * mlong-load-store: HPPA Options. (line 66) 41726 * mlong32: MIPS Options. (line 297) 41727 * mlong64: MIPS Options. (line 292) 41728 * mlongcall: RS/6000 and PowerPC Options. 41729 (line 677) 41730 * mlongcalls: Xtensa Options. (line 67) 41731 * mlow-64k: Blackfin Options. (line 65) 41732 * mlp64: IA-64 Options. (line 114) 41733 * MM: Preprocessor Options. 41734 (line 198) 41735 * mmac <1>: CRX Options. (line 9) 41736 * mmac: Score Options. (line 21) 41737 * mmad: MIPS Options. (line 461) 41738 * mmangle-cpu: ARC Options. (line 15) 41739 * mmax: DEC Alpha Options. (line 171) 41740 * mmax-stack-frame: CRIS Options. (line 22) 41741 * mmcu: AVR Options. (line 9) 41742 * MMD: Preprocessor Options. 41743 (line 278) 41744 * mmedia: FRV Options. (line 44) 41745 * mmemcpy: MIPS Options. (line 446) 41746 * mmemory-latency: DEC Alpha Options. (line 276) 41747 * mmfcrf: RS/6000 and PowerPC Options. 41748 (line 31) 41749 * mmfpgpr: RS/6000 and PowerPC Options. 41750 (line 31) 41751 * mminimal-toc: RS/6000 and PowerPC Options. 41752 (line 263) 41753 * mmmx: i386 and x86-64 Options. 41754 (line 441) 41755 * mmodel=large: M32R/D Options. (line 33) 41756 * mmodel=medium: M32R/D Options. (line 27) 41757 * mmodel=small: M32R/D Options. (line 18) 41758 * mmovbe: i386 and x86-64 Options. 41759 (line 496) 41760 * mmt: MIPS Options. (line 289) 41761 * mmul-bug-workaround: CRIS Options. (line 31) 41762 * mmuladd: FRV Options. (line 50) 41763 * mmulhw: RS/6000 and PowerPC Options. 41764 (line 414) 41765 * mmult-bug: MN10300 Options. (line 9) 41766 * mmulti-cond-exec: FRV Options. (line 176) 41767 * mmulticore: Blackfin Options. (line 137) 41768 * mmultiple: RS/6000 and PowerPC Options. 41769 (line 366) 41770 * mmvcle: S/390 and zSeries Options. 41771 (line 105) 41772 * mmvme: RS/6000 and PowerPC Options. 41773 (line 587) 41774 * mn: H8/300 Options. (line 20) 41775 * mnested-cond-exec: FRV Options. (line 189) 41776 * mnew-mnemonics: RS/6000 and PowerPC Options. 41777 (line 99) 41778 * mnhwloop: Score Options. (line 15) 41779 * mno-3dnow: i386 and x86-64 Options. 41780 (line 441) 41781 * mno-4byte-functions: MCore Options. (line 27) 41782 * mno-abicalls: MIPS Options. (line 153) 41783 * mno-abshi: PDP-11 Options. (line 58) 41784 * mno-ac0: PDP-11 Options. (line 20) 41785 * mno-align-double: i386 and x86-64 Options. 41786 (line 253) 41787 * mno-align-int: M680x0 Options. (line 263) 41788 * mno-align-loops: M32R/D Options. (line 76) 41789 * mno-align-stringops: i386 and x86-64 Options. 41790 (line 567) 41791 * mno-altivec: RS/6000 and PowerPC Options. 41792 (line 183) 41793 * mno-am33: MN10300 Options. (line 20) 41794 * mno-app-regs <1>: SPARC Options. (line 10) 41795 * mno-app-regs: V850 Options. (line 61) 41796 * mno-avoid-indexed-addresses: RS/6000 and PowerPC Options. 41797 (line 399) 41798 * mno-backchain: S/390 and zSeries Options. 41799 (line 35) 41800 * mno-base-addresses: MMIX Options. (line 54) 41801 * mno-bit-align: RS/6000 and PowerPC Options. 41802 (line 428) 41803 * mno-bitfield: M680x0 Options. (line 227) 41804 * mno-branch-likely: MIPS Options. (line 617) 41805 * mno-branch-predict: MMIX Options. (line 49) 41806 * mno-bwx: DEC Alpha Options. (line 171) 41807 * mno-callgraph-data: MCore Options. (line 31) 41808 * mno-check-zero-division: MIPS Options. (line 425) 41809 * mno-cirrus-fix-invalid-insns: ARM Options. (line 184) 41810 * mno-cix: DEC Alpha Options. (line 171) 41811 * mno-cmpb: RS/6000 and PowerPC Options. 41812 (line 31) 41813 * mno-cond-exec: FRV Options. (line 158) 41814 * mno-cond-move: FRV Options. (line 134) 41815 * mno-const-align: CRIS Options. (line 55) 41816 * mno-const16: Xtensa Options. (line 10) 41817 * mno-crt0: MN10300 Options. (line 31) 41818 * mno-csync-anomaly: Blackfin Options. (line 61) 41819 * mno-cygwin: i386 and x86-64 Windows Options. 41820 (line 23) 41821 * mno-data-align: CRIS Options. (line 55) 41822 * mno-debug: S/390 and zSeries Options. 41823 (line 112) 41824 * mno-div <1>: MCore Options. (line 15) 41825 * mno-div: M680x0 Options. (line 205) 41826 * mno-dlmzb: RS/6000 and PowerPC Options. 41827 (line 421) 41828 * mno-double: FRV Options. (line 41) 41829 * mno-dsp: MIPS Options. (line 255) 41830 * mno-dspr2: MIPS Options. (line 261) 41831 * mno-dwarf2-asm: IA-64 Options. (line 79) 41832 * mno-dword: FRV Options. (line 35) 41833 * mno-eabi: RS/6000 and PowerPC Options. 41834 (line 611) 41835 * mno-early-stop-bits: IA-64 Options. (line 85) 41836 * mno-eflags: FRV Options. (line 125) 41837 * mno-embedded-data: MIPS Options. (line 372) 41838 * mno-ep: V850 Options. (line 16) 41839 * mno-epsilon: MMIX Options. (line 15) 41840 * mno-explicit-relocs <1>: DEC Alpha Options. (line 184) 41841 * mno-explicit-relocs: MIPS Options. (line 416) 41842 * mno-extern-sdata: MIPS Options. (line 334) 41843 * mno-fancy-math-387: i386 and x86-64 Options. 41844 (line 242) 41845 * mno-faster-structs: SPARC Options. (line 71) 41846 * mno-fix: DEC Alpha Options. (line 171) 41847 * mno-fix-r10000: MIPS Options. (line 502) 41848 * mno-fix-r4000: MIPS Options. (line 481) 41849 * mno-fix-r4400: MIPS Options. (line 495) 41850 * mno-float32: PDP-11 Options. (line 48) 41851 * mno-float64: PDP-11 Options. (line 52) 41852 * mno-flush-func: M32R/D Options. (line 99) 41853 * mno-flush-trap: M32R/D Options. (line 91) 41854 * mno-fp-in-toc: RS/6000 and PowerPC Options. 41855 (line 263) 41856 * mno-fp-regs: DEC Alpha Options. (line 25) 41857 * mno-fp-ret-in-387: i386 and x86-64 Options. 41858 (line 232) 41859 * mno-fprnd: RS/6000 and PowerPC Options. 41860 (line 31) 41861 * mno-fpu: SPARC Options. (line 25) 41862 * mno-fused-madd <1>: MIPS Options. (line 466) 41863 * mno-fused-madd <2>: RS/6000 and PowerPC Options. 41864 (line 408) 41865 * mno-fused-madd <3>: S/390 and zSeries Options. 41866 (line 137) 41867 * mno-fused-madd: Xtensa Options. (line 19) 41868 * mno-gnu-as: IA-64 Options. (line 18) 41869 * mno-gnu-ld: IA-64 Options. (line 23) 41870 * mno-gotplt: CRIS Options. (line 81) 41871 * mno-gpopt: MIPS Options. (line 357) 41872 * mno-hard-dfp <1>: RS/6000 and PowerPC Options. 41873 (line 31) 41874 * mno-hard-dfp: S/390 and zSeries Options. 41875 (line 20) 41876 * mno-hardlit: MCore Options. (line 10) 41877 * mno-id-shared-library: Blackfin Options. (line 83) 41878 * mno-ieee-fp: i386 and x86-64 Options. 41879 (line 215) 41880 * mno-int16: PDP-11 Options. (line 44) 41881 * mno-int32: PDP-11 Options. (line 40) 41882 * mno-interlink-mips16: MIPS Options. (line 116) 41883 * mno-interrupts: AVR Options. (line 35) 41884 * mno-isel: RS/6000 and PowerPC Options. 41885 (line 212) 41886 * mno-knuthdiv: MMIX Options. (line 33) 41887 * mno-leaf-id-shared-library: Blackfin Options. (line 93) 41888 * mno-libfuncs: MMIX Options. (line 10) 41889 * mno-llsc: MIPS Options. (line 241) 41890 * mno-local-sdata: MIPS Options. (line 322) 41891 * mno-long-calls <1>: ARM Options. (line 149) 41892 * mno-long-calls <2>: V850 Options. (line 10) 41893 * mno-long-calls <3>: HPPA Options. (line 136) 41894 * mno-long-calls <4>: M68hc1x Options. (line 35) 41895 * mno-long-calls <5>: MIPS Options. (line 452) 41896 * mno-long-calls: Blackfin Options. (line 116) 41897 * mno-longcall: RS/6000 and PowerPC Options. 41898 (line 677) 41899 * mno-longcalls: Xtensa Options. (line 67) 41900 * mno-low-64k: Blackfin Options. (line 69) 41901 * mno-lsim: FR30 Options. (line 14) 41902 * mno-mad: MIPS Options. (line 461) 41903 * mno-max: DEC Alpha Options. (line 171) 41904 * mno-mdmx: MIPS Options. (line 278) 41905 * mno-media: FRV Options. (line 47) 41906 * mno-memcpy: MIPS Options. (line 446) 41907 * mno-mfcrf: RS/6000 and PowerPC Options. 41908 (line 31) 41909 * mno-mfpgpr: RS/6000 and PowerPC Options. 41910 (line 31) 41911 * mno-mips16: MIPS Options. (line 101) 41912 * mno-mips3d: MIPS Options. (line 284) 41913 * mno-mmx: i386 and x86-64 Options. 41914 (line 441) 41915 * mno-mt: MIPS Options. (line 289) 41916 * mno-mul-bug-workaround: CRIS Options. (line 31) 41917 * mno-muladd: FRV Options. (line 53) 41918 * mno-mulhw: RS/6000 and PowerPC Options. 41919 (line 414) 41920 * mno-mult-bug: MN10300 Options. (line 13) 41921 * mno-multi-cond-exec: FRV Options. (line 183) 41922 * mno-multiple: RS/6000 and PowerPC Options. 41923 (line 366) 41924 * mno-mvcle: S/390 and zSeries Options. 41925 (line 105) 41926 * mno-nested-cond-exec: FRV Options. (line 195) 41927 * mno-optimize-membar: FRV Options. (line 205) 41928 * mno-pack: FRV Options. (line 122) 41929 * mno-packed-stack: S/390 and zSeries Options. 41930 (line 54) 41931 * mno-paired: RS/6000 and PowerPC Options. 41932 (line 226) 41933 * mno-paired-single: MIPS Options. (line 272) 41934 * mno-pic: IA-64 Options. (line 26) 41935 * mno-plt: MIPS Options. (line 180) 41936 * mno-popcntb: RS/6000 and PowerPC Options. 41937 (line 31) 41938 * mno-power: RS/6000 and PowerPC Options. 41939 (line 31) 41940 * mno-power2: RS/6000 and PowerPC Options. 41941 (line 31) 41942 * mno-powerpc: RS/6000 and PowerPC Options. 41943 (line 31) 41944 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options. 41945 (line 31) 41946 * mno-powerpc-gpopt: RS/6000 and PowerPC Options. 41947 (line 31) 41948 * mno-powerpc64: RS/6000 and PowerPC Options. 41949 (line 31) 41950 * mno-prolog-function: V850 Options. (line 23) 41951 * mno-prologue-epilogue: CRIS Options. (line 71) 41952 * mno-prototype: RS/6000 and PowerPC Options. 41953 (line 571) 41954 * mno-push-args: i386 and x86-64 Options. 41955 (line 544) 41956 * mno-register-names: IA-64 Options. (line 37) 41957 * mno-regnames: RS/6000 and PowerPC Options. 41958 (line 671) 41959 * mno-relax-immediate: MCore Options. (line 19) 41960 * mno-relocatable: RS/6000 and PowerPC Options. 41961 (line 445) 41962 * mno-relocatable-lib: RS/6000 and PowerPC Options. 41963 (line 453) 41964 * mno-rtd: M680x0 Options. (line 258) 41965 * mno-scc: FRV Options. (line 146) 41966 * mno-sched-ar-data-spec: IA-64 Options. (line 128) 41967 * mno-sched-ar-in-data-spec: IA-64 Options. (line 149) 41968 * mno-sched-br-data-spec: IA-64 Options. (line 121) 41969 * mno-sched-br-in-data-spec: IA-64 Options. (line 142) 41970 * mno-sched-control-ldc: IA-64 Options. (line 168) 41971 * mno-sched-control-spec: IA-64 Options. (line 135) 41972 * mno-sched-count-spec-in-critical-path: IA-64 Options. (line 194) 41973 * mno-sched-in-control-spec: IA-64 Options. (line 156) 41974 * mno-sched-ldc: IA-64 Options. (line 162) 41975 * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 41976 * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 41977 * mno-sched-prolog: ARM Options. (line 32) 41978 * mno-sched-spec-verbose: IA-64 Options. (line 176) 41979 * mno-sdata <1>: IA-64 Options. (line 42) 41980 * mno-sdata: RS/6000 and PowerPC Options. 41981 (line 658) 41982 * mno-sep-data: Blackfin Options. (line 111) 41983 * mno-serialize-volatile: Xtensa Options. (line 35) 41984 * mno-short: M680x0 Options. (line 222) 41985 * mno-side-effects: CRIS Options. (line 46) 41986 * mno-single-exit: MMIX Options. (line 66) 41987 * mno-slow-bytes: MCore Options. (line 35) 41988 * mno-small-exec: S/390 and zSeries Options. 41989 (line 80) 41990 * mno-smartmips: MIPS Options. (line 268) 41991 * mno-soft-float: DEC Alpha Options. (line 10) 41992 * mno-space-regs: HPPA Options. (line 45) 41993 * mno-spe: RS/6000 and PowerPC Options. 41994 (line 221) 41995 * mno-specld-anomaly: Blackfin Options. (line 51) 41996 * mno-split: PDP-11 Options. (line 71) 41997 * mno-split-addresses: MIPS Options. (line 410) 41998 * mno-sse: i386 and x86-64 Options. 41999 (line 441) 42000 * mno-stack-align: CRIS Options. (line 55) 42001 * mno-stack-bias: SPARC Options. (line 222) 42002 * mno-strict-align <1>: RS/6000 and PowerPC Options. 42003 (line 440) 42004 * mno-strict-align: M680x0 Options. (line 283) 42005 * mno-string: RS/6000 and PowerPC Options. 42006 (line 377) 42007 * mno-sum-in-toc: RS/6000 and PowerPC Options. 42008 (line 263) 42009 * mno-swdiv: RS/6000 and PowerPC Options. 42010 (line 173) 42011 * mno-sym32: MIPS Options. (line 307) 42012 * mno-tablejump: AVR Options. (line 43) 42013 * mno-target-align: Xtensa Options. (line 54) 42014 * mno-text-section-literals: Xtensa Options. (line 42) 42015 * mno-toc: RS/6000 and PowerPC Options. 42016 (line 462) 42017 * mno-toplevel-symbols: MMIX Options. (line 40) 42018 * mno-tpf-trace: S/390 and zSeries Options. 42019 (line 131) 42020 * mno-unaligned-doubles: SPARC Options. (line 59) 42021 * mno-uninit-const-in-rodata: MIPS Options. (line 380) 42022 * mno-update: RS/6000 and PowerPC Options. 42023 (line 388) 42024 * mno-v8plus: SPARC Options. (line 170) 42025 * mno-vis: SPARC Options. (line 177) 42026 * mno-vliw-branch: FRV Options. (line 170) 42027 * mno-volatile-asm-stop: IA-64 Options. (line 32) 42028 * mno-vrsave: RS/6000 and PowerPC Options. 42029 (line 191) 42030 * mno-wide-bitfields: MCore Options. (line 23) 42031 * mno-xgot <1>: MIPS Options. (line 190) 42032 * mno-xgot: M680x0 Options. (line 315) 42033 * mno-xl-compat: RS/6000 and PowerPC Options. 42034 (line 298) 42035 * mno-zero-extend: MMIX Options. (line 27) 42036 * mnobitfield: M680x0 Options. (line 227) 42037 * mnomacsave: SH Options. (line 95) 42038 * mnominmax: M68hc1x Options. (line 31) 42039 * mnop-fun-dllimport: i386 and x86-64 Windows Options. 42040 (line 36) 42041 * mold-mnemonics: RS/6000 and PowerPC Options. 42042 (line 99) 42043 * momit-leaf-frame-pointer <1>: Blackfin Options. (line 39) 42044 * momit-leaf-frame-pointer: i386 and x86-64 Options. 42045 (line 597) 42046 * mone-byte-bool: Darwin Options. (line 92) 42047 * moptimize-membar: FRV Options. (line 201) 42048 * MP: Preprocessor Options. 42049 (line 227) 42050 * mpa-risc-1-0: HPPA Options. (line 19) 42051 * mpa-risc-1-1: HPPA Options. (line 19) 42052 * mpa-risc-2-0: HPPA Options. (line 19) 42053 * mpack: FRV Options. (line 119) 42054 * mpacked-stack: S/390 and zSeries Options. 42055 (line 54) 42056 * mpadstruct: SH Options. (line 121) 42057 * mpaired: RS/6000 and PowerPC Options. 42058 (line 226) 42059 * mpaired-single: MIPS Options. (line 272) 42060 * mpc32: i386 and x86-64 Options. 42061 (line 348) 42062 * mpc64: i386 and x86-64 Options. 42063 (line 348) 42064 * mpc80: i386 and x86-64 Options. 42065 (line 348) 42066 * mpcrel: M680x0 Options. (line 275) 42067 * mpdebug: CRIS Options. (line 35) 42068 * mpe: RS/6000 and PowerPC Options. 42069 (line 318) 42070 * mpic-register: ARM Options. (line 180) 42071 * mplt: MIPS Options. (line 180) 42072 * mpoke-function-name: ARM Options. (line 194) 42073 * mpopcntb: RS/6000 and PowerPC Options. 42074 (line 31) 42075 * mportable-runtime: HPPA Options. (line 71) 42076 * mpower: RS/6000 and PowerPC Options. 42077 (line 31) 42078 * mpower2: RS/6000 and PowerPC Options. 42079 (line 31) 42080 * mpowerpc: RS/6000 and PowerPC Options. 42081 (line 31) 42082 * mpowerpc-gfxopt: RS/6000 and PowerPC Options. 42083 (line 31) 42084 * mpowerpc-gpopt: RS/6000 and PowerPC Options. 42085 (line 31) 42086 * mpowerpc64: RS/6000 and PowerPC Options. 42087 (line 31) 42088 * mprefergot: SH Options. (line 128) 42089 * mpreferred-stack-boundary: i386 and x86-64 Options. 42090 (line 378) 42091 * mprioritize-restricted-insns: RS/6000 and PowerPC Options. 42092 (line 485) 42093 * mprolog-function: V850 Options. (line 23) 42094 * mprologue-epilogue: CRIS Options. (line 71) 42095 * mprototype: RS/6000 and PowerPC Options. 42096 (line 571) 42097 * mpt-fixed: SH Options. (line 215) 42098 * mpush-args <1>: CRX Options. (line 13) 42099 * mpush-args: i386 and x86-64 Options. 42100 (line 544) 42101 * MQ: Preprocessor Options. 42102 (line 253) 42103 * mr10k-cache-barrier: MIPS Options. (line 539) 42104 * mrecip: i386 and x86-64 Options. 42105 (line 500) 42106 * mregister-names: IA-64 Options. (line 37) 42107 * mregnames: RS/6000 and PowerPC Options. 42108 (line 671) 42109 * mregparm: i386 and x86-64 Options. 42110 (line 325) 42111 * mrelax <1>: H8/300 Options. (line 9) 42112 * mrelax <2>: MN10300 Options. (line 34) 42113 * mrelax: SH Options. (line 70) 42114 * mrelax-immediate: MCore Options. (line 19) 42115 * mrelocatable: RS/6000 and PowerPC Options. 42116 (line 445) 42117 * mrelocatable-lib: RS/6000 and PowerPC Options. 42118 (line 453) 42119 * mreturn-pointer-on-d0: MN10300 Options. (line 24) 42120 * mrodata: ARC Options. (line 30) 42121 * mrtd <1>: M680x0 Options. (line 236) 42122 * mrtd <2>: Function Attributes. 42123 (line 170) 42124 * mrtd: i386 and x86-64 Options. 42125 (line 301) 42126 * mrtp: VxWorks Options. (line 11) 42127 * ms: H8/300 Options. (line 17) 42128 * ms2600: H8/300 Options. (line 24) 42129 * msafe-dma: SPU Options. (line 17) 42130 * msafe-hints: SPU Options. (line 72) 42131 * msahf: i386 and x86-64 Options. 42132 (line 486) 42133 * mscc: FRV Options. (line 140) 42134 * msched-ar-data-spec: IA-64 Options. (line 128) 42135 * msched-ar-in-data-spec: IA-64 Options. (line 149) 42136 * msched-br-data-spec: IA-64 Options. (line 121) 42137 * msched-br-in-data-spec: IA-64 Options. (line 142) 42138 * msched-control-ldc: IA-64 Options. (line 168) 42139 * msched-control-spec: IA-64 Options. (line 135) 42140 * msched-costly-dep: RS/6000 and PowerPC Options. 42141 (line 492) 42142 * msched-count-spec-in-critical-path: IA-64 Options. (line 194) 42143 * msched-in-control-spec: IA-64 Options. (line 156) 42144 * msched-ldc: IA-64 Options. (line 162) 42145 * msched-prefer-non-control-spec-insns: IA-64 Options. (line 187) 42146 * msched-prefer-non-data-spec-insns: IA-64 Options. (line 180) 42147 * msched-spec-verbose: IA-64 Options. (line 176) 42148 * mschedule: HPPA Options. (line 78) 42149 * mscore5: Score Options. (line 25) 42150 * mscore5u: Score Options. (line 28) 42151 * mscore7: Score Options. (line 31) 42152 * mscore7d: Score Options. (line 34) 42153 * msda: V850 Options. (line 40) 42154 * msdata <1>: RS/6000 and PowerPC Options. 42155 (line 645) 42156 * msdata: IA-64 Options. (line 42) 42157 * msdata=data: RS/6000 and PowerPC Options. 42158 (line 650) 42159 * msdata=default: RS/6000 and PowerPC Options. 42160 (line 645) 42161 * msdata=eabi: RS/6000 and PowerPC Options. 42162 (line 625) 42163 * msdata=none <1>: RS/6000 and PowerPC Options. 42164 (line 658) 42165 * msdata=none: M32R/D Options. (line 40) 42166 * msdata=sdata: M32R/D Options. (line 49) 42167 * msdata=sysv: RS/6000 and PowerPC Options. 42168 (line 636) 42169 * msdata=use: M32R/D Options. (line 53) 42170 * msdram: Blackfin Options. (line 162) 42171 * msecure-plt: RS/6000 and PowerPC Options. 42172 (line 201) 42173 * msep-data: Blackfin Options. (line 105) 42174 * mserialize-volatile: Xtensa Options. (line 35) 42175 * mshared-library-id: Blackfin Options. (line 98) 42176 * mshort <1>: M680x0 Options. (line 216) 42177 * mshort: M68hc1x Options. (line 40) 42178 * msim <1>: M32C Options. (line 13) 42179 * msim <2>: RS/6000 and PowerPC Options. 42180 (line 581) 42181 * msim <3>: Xstormy16 Options. (line 9) 42182 * msim: Blackfin Options. (line 32) 42183 * msimple-fpu: RS/6000 and PowerPC Options. 42184 (line 351) 42185 * msingle-exit: MMIX Options. (line 66) 42186 * msingle-float <1>: RS/6000 and PowerPC Options. 42187 (line 347) 42188 * msingle-float: MIPS Options. (line 232) 42189 * msingle-pic-base: ARM Options. (line 174) 42190 * msio: HPPA Options. (line 105) 42191 * msize: AVR Options. (line 32) 42192 * mslow-bytes: MCore Options. (line 35) 42193 * msmall-data: DEC Alpha Options. (line 195) 42194 * msmall-exec: S/390 and zSeries Options. 42195 (line 80) 42196 * msmall-mem: SPU Options. (line 35) 42197 * msmall-model: FR30 Options. (line 9) 42198 * msmall-text: DEC Alpha Options. (line 213) 42199 * msmartmips: MIPS Options. (line 268) 42200 * msoft-float <1>: HPPA Options. (line 91) 42201 * msoft-float <2>: PDP-11 Options. (line 13) 42202 * msoft-float <3>: M680x0 Options. (line 199) 42203 * msoft-float <4>: SPARC Options. (line 25) 42204 * msoft-float <5>: DEC Alpha Options. (line 10) 42205 * msoft-float <6>: RS/6000 and PowerPC Options. 42206 (line 341) 42207 * msoft-float <7>: i386 and x86-64 Options. 42208 (line 220) 42209 * msoft-float <8>: ARM Options. (line 60) 42210 * msoft-float <9>: FRV Options. (line 22) 42211 * msoft-float <10>: MIPS Options. (line 228) 42212 * msoft-float: S/390 and zSeries Options. 42213 (line 11) 42214 * msoft-quad-float: SPARC Options. (line 45) 42215 * msoft-reg-count: M68hc1x Options. (line 43) 42216 * mspace <1>: V850 Options. (line 30) 42217 * mspace: SH Options. (line 125) 42218 * mspe: RS/6000 and PowerPC Options. 42219 (line 221) 42220 * mspecld-anomaly: Blackfin Options. (line 46) 42221 * msplit: PDP-11 Options. (line 68) 42222 * msplit-addresses: MIPS Options. (line 410) 42223 * msse: i386 and x86-64 Options. 42224 (line 441) 42225 * msse2avx: i386 and x86-64 Options. 42226 (line 623) 42227 * msseregparm: i386 and x86-64 Options. 42228 (line 336) 42229 * mstack-align: CRIS Options. (line 55) 42230 * mstack-bias: SPARC Options. (line 222) 42231 * mstack-check-l1: Blackfin Options. (line 72) 42232 * mstack-guard: S/390 and zSeries Options. 42233 (line 156) 42234 * mstack-increment: MCore Options. (line 50) 42235 * mstack-size: S/390 and zSeries Options. 42236 (line 156) 42237 * mstackrealign: i386 and x86-64 Options. 42238 (line 369) 42239 * mstdmain: SPU Options. (line 40) 42240 * mstrict-align <1>: M680x0 Options. (line 283) 42241 * mstrict-align: RS/6000 and PowerPC Options. 42242 (line 440) 42243 * mstring: RS/6000 and PowerPC Options. 42244 (line 377) 42245 * mstringop-strategy=ALG: i386 and x86-64 Options. 42246 (line 589) 42247 * mstructure-size-boundary: ARM Options. (line 129) 42248 * msvr4-struct-return: RS/6000 and PowerPC Options. 42249 (line 545) 42250 * mswdiv: RS/6000 and PowerPC Options. 42251 (line 173) 42252 * msym32: MIPS Options. (line 307) 42253 * MT: Preprocessor Options. 42254 (line 239) 42255 * mt: IA-64 Options. (line 106) 42256 * mtarget-align: Xtensa Options. (line 54) 42257 * mtda: V850 Options. (line 34) 42258 * mtext: ARC Options. (line 30) 42259 * mtext-section-literals: Xtensa Options. (line 42) 42260 * mthread: i386 and x86-64 Windows Options. 42261 (line 40) 42262 * mthreads: i386 and x86-64 Options. 42263 (line 559) 42264 * mthumb: ARM Options. (line 215) 42265 * mthumb-interwork: ARM Options. (line 25) 42266 * mtiny-stack: AVR Options. (line 48) 42267 * mtls-direct-seg-refs: i386 and x86-64 Options. 42268 (line 605) 42269 * mtls-size: IA-64 Options. (line 97) 42270 * mtoc: RS/6000 and PowerPC Options. 42271 (line 462) 42272 * mtomcat-stats: FRV Options. (line 209) 42273 * mtoplevel-symbols: MMIX Options. (line 40) 42274 * mtp: ARM Options. (line 245) 42275 * mtpcs-frame: ARM Options. (line 221) 42276 * mtpcs-leaf-frame: ARM Options. (line 227) 42277 * mtpf-trace: S/390 and zSeries Options. 42278 (line 131) 42279 * mtrap-precision: DEC Alpha Options. (line 109) 42280 * mtune <1>: IA-64 Options. (line 101) 42281 * mtune <2>: M680x0 Options. (line 66) 42282 * mtune <3>: S/390 and zSeries Options. 42283 (line 124) 42284 * mtune <4>: MIPS Options. (line 61) 42285 * mtune <5>: ARM Options. (line 97) 42286 * mtune <6>: i386 and x86-64 Options. 42287 (line 10) 42288 * mtune <7>: SPARC Options. (line 158) 42289 * mtune <8>: CRIS Options. (line 16) 42290 * mtune <9>: DEC Alpha Options. (line 267) 42291 * mtune: RS/6000 and PowerPC Options. 42292 (line 163) 42293 * muclibc: GNU/Linux Options. (line 13) 42294 * muls: Score Options. (line 18) 42295 * multcost=NUMBER: SH Options. (line 138) 42296 * multi_module: Darwin Options. (line 199) 42297 * multilib-library-pic: FRV Options. (line 89) 42298 * multiply_defined: Darwin Options. (line 199) 42299 * multiply_defined_unused: Darwin Options. (line 199) 42300 * munaligned-doubles: SPARC Options. (line 59) 42301 * muninit-const-in-rodata: MIPS Options. (line 380) 42302 * munix: VAX Options. (line 9) 42303 * munix-asm: PDP-11 Options. (line 74) 42304 * munsafe-dma: SPU Options. (line 17) 42305 * mupdate: RS/6000 and PowerPC Options. 42306 (line 388) 42307 * musermode: SH Options. (line 133) 42308 * mv850: V850 Options. (line 49) 42309 * mv850e: V850 Options. (line 69) 42310 * mv850e1: V850 Options. (line 64) 42311 * mv8plus: SPARC Options. (line 170) 42312 * mveclibabi: i386 and x86-64 Options. 42313 (line 513) 42314 * mvis: SPARC Options. (line 177) 42315 * mvliw-branch: FRV Options. (line 164) 42316 * mvms-return-codes: DEC Alpha/VMS Options. 42317 (line 9) 42318 * mvolatile-asm-stop: IA-64 Options. (line 32) 42319 * mvr4130-align: MIPS Options. (line 638) 42320 * mvrsave: RS/6000 and PowerPC Options. 42321 (line 191) 42322 * mvxworks: RS/6000 and PowerPC Options. 42323 (line 602) 42324 * mwarn-cell-microcode: RS/6000 and PowerPC Options. 42325 (line 197) 42326 * mwarn-dynamicstack: S/390 and zSeries Options. 42327 (line 150) 42328 * mwarn-framesize: S/390 and zSeries Options. 42329 (line 142) 42330 * mwarn-reloc: SPU Options. (line 10) 42331 * mwide-bitfields: MCore Options. (line 23) 42332 * mwin32: i386 and x86-64 Windows Options. 42333 (line 44) 42334 * mwindows: i386 and x86-64 Windows Options. 42335 (line 50) 42336 * mword-relocations: ARM Options. (line 253) 42337 * mwords-little-endian: ARM Options. (line 71) 42338 * mxgot <1>: M680x0 Options. (line 315) 42339 * mxgot: MIPS Options. (line 190) 42340 * mxilinx-fpu: RS/6000 and PowerPC Options. 42341 (line 361) 42342 * mxl-compat: RS/6000 and PowerPC Options. 42343 (line 298) 42344 * myellowknife: RS/6000 and PowerPC Options. 42345 (line 597) 42346 * mzarch: S/390 and zSeries Options. 42347 (line 95) 42348 * mzda: V850 Options. (line 45) 42349 * mzero-extend: MMIX Options. (line 27) 42350 * no-canonical-prefixes: Overall Options. (line 348) 42351 * no-integrated-cpp: C Dialect Options. (line 240) 42352 * no-lsim: MCore Options. (line 46) 42353 * no-red-zone: i386 and x86-64 Options. 42354 (line 639) 42355 * no_dead_strip_inits_and_terms: Darwin Options. (line 199) 42356 * noall_load: Darwin Options. (line 199) 42357 * nocpp: MIPS Options. (line 476) 42358 * nodefaultlibs: Link Options. (line 62) 42359 * nofixprebinding: Darwin Options. (line 199) 42360 * nolibdld: HPPA Options. (line 188) 42361 * nomultidefs: Darwin Options. (line 199) 42362 * non-static: VxWorks Options. (line 16) 42363 * noprebind: Darwin Options. (line 199) 42364 * noseglinkedit: Darwin Options. (line 199) 42365 * nostartfiles: Link Options. (line 57) 42366 * nostdinc: Preprocessor Options. 42367 (line 375) 42368 * nostdinc++ <1>: C++ Dialect Options. 42369 (line 272) 42370 * nostdinc++: Preprocessor Options. 42371 (line 380) 42372 * nostdlib: Link Options. (line 71) 42373 * o: Preprocessor Options. 42374 (line 75) 42375 * O: Optimize Options. (line 29) 42376 * o: Overall Options. (line 187) 42377 * O0: Optimize Options. (line 106) 42378 * O1: Optimize Options. (line 29) 42379 * O2: Optimize Options. (line 67) 42380 * O3: Optimize Options. (line 100) 42381 * Os: Optimize Options. (line 110) 42382 * p: Debugging Options. (line 248) 42383 * P: Preprocessor Options. 42384 (line 591) 42385 * pagezero_size: Darwin Options. (line 199) 42386 * param: Optimize Options. (line 1817) 42387 * pass-exit-codes: Overall Options. (line 145) 42388 * pedantic <1>: Warnings and Errors. 42389 (line 25) 42390 * pedantic <2>: Alternate Keywords. (line 29) 42391 * pedantic <3>: C Extensions. (line 6) 42392 * pedantic <4>: Standards. (line 16) 42393 * pedantic <5>: Warning Options. (line 53) 42394 * pedantic: Preprocessor Options. 42395 (line 163) 42396 * pedantic-errors <1>: Non-bugs. (line 216) 42397 * pedantic-errors <2>: Standards. (line 16) 42398 * pedantic-errors <3>: Warnings and Errors. 42399 (line 25) 42400 * pedantic-errors <4>: Preprocessor Options. 42401 (line 168) 42402 * pedantic-errors: Warning Options. (line 95) 42403 * pg: Debugging Options. (line 254) 42404 * pie: Link Options. (line 92) 42405 * pipe: Overall Options. (line 209) 42406 * prebind: Darwin Options. (line 199) 42407 * prebind_all_twolevel_modules: Darwin Options. (line 199) 42408 * print-file-name: Debugging Options. (line 928) 42409 * print-libgcc-file-name: Debugging Options. (line 949) 42410 * print-multi-directory: Debugging Options. (line 934) 42411 * print-multi-lib: Debugging Options. (line 939) 42412 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options. 42413 (line 244) 42414 * print-prog-name: Debugging Options. (line 946) 42415 * print-search-dirs: Debugging Options. (line 957) 42416 * print-sysroot: Debugging Options. (line 970) 42417 * print-sysroot-headers-suffix: Debugging Options. (line 977) 42418 * private_bundle: Darwin Options. (line 199) 42419 * pthread <1>: RS/6000 and PowerPC Options. 42420 (line 709) 42421 * pthread <2>: SPARC Options. (line 242) 42422 * pthread: IA-64 Options. (line 106) 42423 * pthreads: SPARC Options. (line 236) 42424 * Q: Debugging Options. (line 260) 42425 * Qn: System V Options. (line 18) 42426 * Qy: System V Options. (line 14) 42427 * rdynamic: Link Options. (line 103) 42428 * read_only_relocs: Darwin Options. (line 199) 42429 * remap: Preprocessor Options. 42430 (line 639) 42431 * S: Link Options. (line 20) 42432 * s: Link Options. (line 110) 42433 * S: Overall Options. (line 170) 42434 * save-temps: Debugging Options. (line 890) 42435 * sectalign: Darwin Options. (line 199) 42436 * sectcreate: Darwin Options. (line 199) 42437 * sectobjectsymbols: Darwin Options. (line 199) 42438 * sectorder: Darwin Options. (line 199) 42439 * seg1addr: Darwin Options. (line 199) 42440 * seg_addr_table: Darwin Options. (line 199) 42441 * seg_addr_table_filename: Darwin Options. (line 199) 42442 * segaddr: Darwin Options. (line 199) 42443 * seglinkedit: Darwin Options. (line 199) 42444 * segprot: Darwin Options. (line 199) 42445 * segs_read_only_addr: Darwin Options. (line 199) 42446 * segs_read_write_addr: Darwin Options. (line 199) 42447 * shared: Link Options. (line 119) 42448 * shared-libgcc: Link Options. (line 127) 42449 * sim: CRIS Options. (line 95) 42450 * sim2: CRIS Options. (line 101) 42451 * single_module: Darwin Options. (line 199) 42452 * specs: Directory Options. (line 84) 42453 * static <1>: HPPA Options. (line 192) 42454 * static <2>: Link Options. (line 114) 42455 * static: Darwin Options. (line 199) 42456 * static-libgcc: Link Options. (line 127) 42457 * std <1>: Non-bugs. (line 107) 42458 * std <2>: Standards. (line 16) 42459 * std <3>: Other Builtins. (line 22) 42460 * std: C Dialect Options. (line 47) 42461 * std=: Preprocessor Options. 42462 (line 326) 42463 * sub_library: Darwin Options. (line 199) 42464 * sub_umbrella: Darwin Options. (line 199) 42465 * symbolic: Link Options. (line 162) 42466 * sysroot: Directory Options. (line 92) 42467 * T: Link Options. (line 168) 42468 * target-help <1>: Overall Options. (line 240) 42469 * target-help: Preprocessor Options. 42470 (line 644) 42471 * threads <1>: SPARC Options. (line 230) 42472 * threads: HPPA Options. (line 205) 42473 * time: Debugging Options. (line 904) 42474 * TLS: FRV Options. (line 72) 42475 * tls: FRV Options. (line 75) 42476 * tno-android-cc: GNU/Linux Options. (line 31) 42477 * tno-android-ld: GNU/Linux Options. (line 35) 42478 * traditional <1>: Incompatibilities. (line 6) 42479 * traditional: C Dialect Options. (line 252) 42480 * traditional-cpp <1>: Preprocessor Options. 42481 (line 622) 42482 * traditional-cpp: C Dialect Options. (line 252) 42483 * trigraphs <1>: C Dialect Options. (line 236) 42484 * trigraphs: Preprocessor Options. 42485 (line 626) 42486 * twolevel_namespace: Darwin Options. (line 199) 42487 * U: Preprocessor Options. 42488 (line 57) 42489 * u: Link Options. (line 201) 42490 * umbrella: Darwin Options. (line 199) 42491 * undef: Preprocessor Options. 42492 (line 61) 42493 * undefined: Darwin Options. (line 199) 42494 * unexported_symbols_list: Darwin Options. (line 199) 42495 * V: Target Options. (line 25) 42496 * v <1>: Overall Options. (line 198) 42497 * v: Preprocessor Options. 42498 (line 648) 42499 * version <1>: Preprocessor Options. 42500 (line 661) 42501 * version: Overall Options. (line 352) 42502 * w: Preprocessor Options. 42503 (line 159) 42504 * W <1>: Incompatibilities. (line 64) 42505 * W: Warning Options. (line 1230) 42506 * w: Warning Options. (line 18) 42507 * W: Warning Options. (line 148) 42508 * Wa: Assembler Options. (line 9) 42509 * Wabi: C++ Dialect Options. 42510 (line 286) 42511 * Waddress: Warning Options. (line 1051) 42512 * Waggregate-return: Warning Options. (line 1069) 42513 * Wall <1>: Warning Options. (line 99) 42514 * Wall <2>: Standard Libraries. (line 6) 42515 * Wall: Preprocessor Options. 42516 (line 81) 42517 * Warray-bounds: Warning Options. (line 747) 42518 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options. 42519 (line 198) 42520 * Wattributes: Warning Options. (line 1074) 42521 * Wbad-function-cast: Warning Options. (line 957) 42522 * Wbuiltin-macro-redefined: Warning Options. (line 1080) 42523 * Wcast-align: Warning Options. (line 977) 42524 * Wcast-qual: Warning Options. (line 972) 42525 * Wchar-subscripts: Warning Options. (line 187) 42526 * Wclobbered: Warning Options. (line 997) 42527 * Wcomment <1>: Preprocessor Options. 42528 (line 89) 42529 * Wcomment: Warning Options. (line 192) 42530 * Wcomments: Preprocessor Options. 42531 (line 89) 42532 * Wconversion: Warning Options. (line 1001) 42533 * Wconversion-null: Warning Options. (line 1020) 42534 * Wcoverage-mismatch: Language Independent Options. 42535 (line 42) 42536 * Wctor-dtor-privacy: C++ Dialect Options. 42537 (line 378) 42538 * Wdeclaration-after-statement: Warning Options. (line 868) 42539 * Wdeprecated: Warning Options. (line 1217) 42540 * Wdeprecated-declarations: Warning Options. (line 1221) 42541 * Wdisabled-optimization: Warning Options. (line 1370) 42542 * Wdiv-by-zero: Warning Options. (line 752) 42543 * weak_reference_mismatches: Darwin Options. (line 199) 42544 * Weffc++: C++ Dialect Options. 42545 (line 405) 42546 * Wempty-body: Warning Options. (line 1030) 42547 * Wendif-labels <1>: Warning Options. (line 878) 42548 * Wendif-labels: Preprocessor Options. 42549 (line 136) 42550 * Wenum-compare: Warning Options. (line 1034) 42551 * Werror <1>: Warning Options. (line 21) 42552 * Werror: Preprocessor Options. 42553 (line 149) 42554 * Werror=: Warning Options. (line 24) 42555 * Wextra: Warning Options. (line 1230) 42556 * Wfatal-errors: Warning Options. (line 38) 42557 * Wfloat-equal: Warning Options. (line 768) 42558 * Wformat <1>: Warning Options. (line 197) 42559 * Wformat <2>: Function Attributes. 42560 (line 373) 42561 * Wformat: Warning Options. (line 1149) 42562 * Wformat-contains-nul: Warning Options. (line 236) 42563 * Wformat-extra-args: Warning Options. (line 240) 42564 * Wformat-nonliteral <1>: Warning Options. (line 258) 42565 * Wformat-nonliteral: Function Attributes. 42566 (line 432) 42567 * Wformat-security: Warning Options. (line 263) 42568 * Wformat-y2k: Warning Options. (line 232) 42569 * Wformat-zero-length: Warning Options. (line 254) 42570 * Wformat=2: Warning Options. (line 274) 42571 * Wframe-larger-than: Warning Options. (line 922) 42572 * whatsloaded: Darwin Options. (line 199) 42573 * whyload: Darwin Options. (line 199) 42574 * Wignored-qualifiers: Warning Options. (line 313) 42575 * Wimplicit: Warning Options. (line 309) 42576 * Wimplicit-function-declaration: Warning Options. (line 303) 42577 * Wimplicit-int: Warning Options. (line 299) 42578 * Winit-self: Warning Options. (line 286) 42579 * Winline <1>: Inline. (line 63) 42580 * Winline: Warning Options. (line 1309) 42581 * Wint-to-pointer-cast: Warning Options. (line 1336) 42582 * Winvalid-offsetof: Warning Options. (line 1322) 42583 * Winvalid-pch: Warning Options. (line 1344) 42584 * Wl: Link Options. (line 193) 42585 * Wlarger-than-LEN: Warning Options. (line 919) 42586 * Wlarger-than=LEN: Warning Options. (line 919) 42587 * Wlogical-op: Warning Options. (line 1064) 42588 * Wlong-long: Warning Options. (line 1348) 42589 * Wmain: Warning Options. (line 324) 42590 * Wmaybe-uninitialized: Warning Options. (line 599) 42591 * Wmissing-braces: Warning Options. (line 331) 42592 * Wmissing-declarations: Warning Options. (line 1115) 42593 * Wmissing-field-initializers: Warning Options. (line 1123) 42594 * Wmissing-format-attribute: Warning Options. (line 1149) 42595 * Wmissing-include-dirs: Warning Options. (line 341) 42596 * Wmissing-noreturn: Warning Options. (line 1141) 42597 * Wmissing-parameter-type: Warning Options. (line 1101) 42598 * Wmissing-prototypes: Warning Options. (line 1109) 42599 * Wmultichar: Warning Options. (line 1168) 42600 * Wnested-externs: Warning Options. (line 1284) 42601 * Wno-abi: C++ Dialect Options. 42602 (line 286) 42603 * Wno-address: Warning Options. (line 1051) 42604 * Wno-aggregate-return: Warning Options. (line 1069) 42605 * Wno-all: Warning Options. (line 99) 42606 * Wno-array-bounds: Warning Options. (line 747) 42607 * Wno-assign-intercept: Objective-C and Objective-C++ Dialect Options. 42608 (line 198) 42609 * Wno-attributes: Warning Options. (line 1074) 42610 * Wno-bad-function-cast: Warning Options. (line 957) 42611 * Wno-builtin-macro-redefined: Warning Options. (line 1080) 42612 * Wno-cast-align: Warning Options. (line 977) 42613 * Wno-cast-qual: Warning Options. (line 972) 42614 * Wno-char-subscripts: Warning Options. (line 187) 42615 * Wno-clobbered: Warning Options. (line 997) 42616 * Wno-comment: Warning Options. (line 192) 42617 * Wno-conversion: Warning Options. (line 1001) 42618 * Wno-conversion-null: Warning Options. (line 1020) 42619 * Wno-ctor-dtor-privacy: C++ Dialect Options. 42620 (line 378) 42621 * Wno-declaration-after-statement: Warning Options. (line 868) 42622 * Wno-deprecated: Warning Options. (line 1217) 42623 * Wno-deprecated-declarations: Warning Options. (line 1221) 42624 * Wno-disabled-optimization: Warning Options. (line 1370) 42625 * Wno-div-by-zero: Warning Options. (line 752) 42626 * Wno-effc++: C++ Dialect Options. 42627 (line 405) 42628 * Wno-empty-body: Warning Options. (line 1030) 42629 * Wno-endif-labels: Warning Options. (line 878) 42630 * Wno-enum-compare: Warning Options. (line 1034) 42631 * Wno-error: Warning Options. (line 21) 42632 * Wno-error=: Warning Options. (line 24) 42633 * Wno-extra: Warning Options. (line 1123) 42634 * Wno-fatal-errors: Warning Options. (line 38) 42635 * Wno-float-equal: Warning Options. (line 768) 42636 * Wno-format: Warning Options. (line 197) 42637 * Wno-format-contains-nul: Warning Options. (line 236) 42638 * Wno-format-extra-args: Warning Options. (line 240) 42639 * Wno-format-nonliteral: Warning Options. (line 258) 42640 * Wno-format-security: Warning Options. (line 263) 42641 * Wno-format-y2k: Warning Options. (line 232) 42642 * Wno-format-zero-length: Warning Options. (line 254) 42643 * Wno-format=2: Warning Options. (line 274) 42644 * Wno-ignored-qualifiers: Warning Options. (line 313) 42645 * Wno-implicit: Warning Options. (line 309) 42646 * Wno-implicit-function-declaration: Warning Options. (line 303) 42647 * Wno-implicit-int: Warning Options. (line 299) 42648 * Wno-init-self: Warning Options. (line 286) 42649 * Wno-inline: Warning Options. (line 1309) 42650 * Wno-int-to-pointer-cast: Warning Options. (line 1336) 42651 * Wno-invalid-offsetof: Warning Options. (line 1322) 42652 * Wno-invalid-pch: Warning Options. (line 1344) 42653 * Wno-logical-op: Warning Options. (line 1064) 42654 * Wno-long-long: Warning Options. (line 1348) 42655 * Wno-main: Warning Options. (line 324) 42656 * Wno-maybe-uninitialized: Warning Options. (line 599) 42657 * Wno-missing-braces: Warning Options. (line 331) 42658 * Wno-missing-declarations: Warning Options. (line 1115) 42659 * Wno-missing-field-initializers: Warning Options. (line 1123) 42660 * Wno-missing-format-attribute: Warning Options. (line 1149) 42661 * Wno-missing-include-dirs: Warning Options. (line 341) 42662 * Wno-missing-noreturn: Warning Options. (line 1141) 42663 * Wno-missing-parameter-type: Warning Options. (line 1101) 42664 * Wno-missing-prototypes: Warning Options. (line 1109) 42665 * Wno-mudflap: Warning Options. (line 1390) 42666 * Wno-multichar: Warning Options. (line 1168) 42667 * Wno-nested-externs: Warning Options. (line 1284) 42668 * Wno-non-template-friend: C++ Dialect Options. 42669 (line 442) 42670 * Wno-non-virtual-dtor: C++ Dialect Options. 42671 (line 383) 42672 * Wno-nonnull: Warning Options. (line 279) 42673 * Wno-old-style-cast: C++ Dialect Options. 42674 (line 458) 42675 * Wno-old-style-declaration: Warning Options. (line 1091) 42676 * Wno-old-style-definition: Warning Options. (line 1097) 42677 * Wno-overflow: Warning Options. (line 1227) 42678 * Wno-overlength-strings: Warning Options. (line 1394) 42679 * Wno-overloaded-virtual: C++ Dialect Options. 42680 (line 464) 42681 * Wno-override-init: Warning Options. (line 1230) 42682 * Wno-packed: Warning Options. (line 1238) 42683 * Wno-packed-bitfield-compat: Warning Options. (line 1255) 42684 * Wno-padded: Warning Options. (line 1272) 42685 * Wno-parentheses: Warning Options. (line 344) 42686 * Wno-pedantic-ms-format: Warning Options. (line 937) 42687 * Wno-pmf-conversions <1>: C++ Dialect Options. 42688 (line 483) 42689 * Wno-pmf-conversions: Bound member functions. 42690 (line 35) 42691 * Wno-pointer-arith: Warning Options. (line 943) 42692 * Wno-pointer-sign: Warning Options. (line 1379) 42693 * Wno-pointer-to-int-cast: Warning Options. (line 1340) 42694 * Wno-pragmas: Warning Options. (line 650) 42695 * Wno-protocol: Objective-C and Objective-C++ Dialect Options. 42696 (line 202) 42697 * Wno-real-conversion: Warning Options. (line 1026) 42698 * Wno-redundant-decls: Warning Options. (line 1279) 42699 * Wno-reorder: C++ Dialect Options. 42700 (line 389) 42701 * Wno-return-type: Warning Options. (line 478) 42702 * Wno-ripa-opt-mismatch: Warning Options. (line 493) 42703 * Wno-selector: Objective-C and Objective-C++ Dialect Options. 42704 (line 212) 42705 * Wno-self-assign: Warning Options. (line 434) 42706 * Wno-self-assign-non-pod: Warning Options. (line 457) 42707 * Wno-sequence-point: Warning Options. (line 388) 42708 * Wno-shadow: Warning Options. (line 882) 42709 * Wno-shadow-compatible-local: Warning Options. (line 891) 42710 * Wno-shadow-local: Warning Options. (line 887) 42711 * Wno-sign-compare: Warning Options. (line 1038) 42712 * Wno-sign-conversion: Warning Options. (line 1045) 42713 * Wno-sign-promo: C++ Dialect Options. 42714 (line 487) 42715 * Wno-stack-protector: Warning Options. (line 1385) 42716 * Wno-strict-aliasing: Warning Options. (line 655) 42717 * Wno-strict-aliasing=n: Warning Options. (line 663) 42718 * Wno-strict-null-sentinel: C++ Dialect Options. 42719 (line 435) 42720 * Wno-strict-overflow: Warning Options. (line 696) 42721 * Wno-strict-prototypes: Warning Options. (line 1085) 42722 * Wno-strict-selector-match: Objective-C and Objective-C++ Dialect Options. 42723 (line 224) 42724 * Wno-switch: Warning Options. (line 501) 42725 * Wno-switch-default: Warning Options. (line 509) 42726 * Wno-switch-enum: Warning Options. (line 512) 42727 * Wno-sync-nand: Warning Options. (line 518) 42728 * Wno-system-headers: Warning Options. (line 757) 42729 * Wno-traditional: Warning Options. (line 783) 42730 * Wno-traditional-conversion: Warning Options. (line 860) 42731 * Wno-trigraphs: Warning Options. (line 523) 42732 * Wno-type-limits: Warning Options. (line 950) 42733 * Wno-undeclared-selector: Objective-C and Objective-C++ Dialect Options. 42734 (line 232) 42735 * Wno-undef: Warning Options. (line 875) 42736 * Wno-uninitialized: Warning Options. (line 576) 42737 * Wno-unknown-pragmas: Warning Options. (line 643) 42738 * Wno-unreachable-code: Warning Options. (line 1287) 42739 * Wno-unsafe-loop-optimizations: Warning Options. (line 931) 42740 * Wno-unused: Warning Options. (line 569) 42741 * Wno-unused-function: Warning Options. (line 528) 42742 * Wno-unused-label: Warning Options. (line 533) 42743 * Wno-unused-parameter: Warning Options. (line 540) 42744 * Wno-unused-value: Warning Options. (line 559) 42745 * Wno-unused-variable: Warning Options. (line 547) 42746 * Wno-variadic-macros: Warning Options. (line 1354) 42747 * Wno-vla: Warning Options. (line 1360) 42748 * Wno-volatile-register-var: Warning Options. (line 1364) 42749 * Wno-write-strings: Warning Options. (line 983) 42750 * Wnon-template-friend: C++ Dialect Options. 42751 (line 442) 42752 * Wnon-virtual-dtor: C++ Dialect Options. 42753 (line 383) 42754 * Wnonnull: Warning Options. (line 279) 42755 * Wnormalized=: Warning Options. (line 1174) 42756 * Wold-style-cast: C++ Dialect Options. 42757 (line 458) 42758 * Wold-style-declaration: Warning Options. (line 1091) 42759 * Wold-style-definition: Warning Options. (line 1097) 42760 * Woverflow: Warning Options. (line 1227) 42761 * Woverlength-strings: Warning Options. (line 1394) 42762 * Woverloaded-virtual: C++ Dialect Options. 42763 (line 464) 42764 * Woverride-init: Warning Options. (line 1230) 42765 * Wp: Preprocessor Options. 42766 (line 14) 42767 * Wpacked: Warning Options. (line 1238) 42768 * Wpacked-bitfield-compat: Warning Options. (line 1255) 42769 * Wpadded: Warning Options. (line 1272) 42770 * Wparentheses: Warning Options. (line 344) 42771 * Wpedantic-ms-format: Warning Options. (line 937) 42772 * Wpmf-conversions: C++ Dialect Options. 42773 (line 483) 42774 * Wpointer-arith <1>: Warning Options. (line 943) 42775 * Wpointer-arith: Pointer Arith. (line 13) 42776 * Wpointer-sign: Warning Options. (line 1379) 42777 * Wpointer-to-int-cast: Warning Options. (line 1340) 42778 * Wpragmas: Warning Options. (line 650) 42779 * Wprotocol: Objective-C and Objective-C++ Dialect Options. 42780 (line 202) 42781 * wrapper: Overall Options. (line 355) 42782 * Wreal-conversion: Warning Options. (line 1026) 42783 * Wredundant-decls: Warning Options. (line 1279) 42784 * Wreorder: C++ Dialect Options. 42785 (line 389) 42786 * Wreturn-type: Warning Options. (line 478) 42787 * Wripa-opt-mismatch: Warning Options. (line 493) 42788 * Wselector: Objective-C and Objective-C++ Dialect Options. 42789 (line 212) 42790 * Wself-assign: Warning Options. (line 434) 42791 * Wself-assign-non-pod: Warning Options. (line 457) 42792 * Wsequence-point: Warning Options. (line 388) 42793 * Wshadow: Warning Options. (line 882) 42794 * Wshadow-compatible-local: Warning Options. (line 891) 42795 * Wshadow-local: Warning Options. (line 887) 42796 * Wsign-compare: Warning Options. (line 1038) 42797 * Wsign-conversion: Warning Options. (line 1045) 42798 * Wsign-promo: C++ Dialect Options. 42799 (line 487) 42800 * Wstack-protector: Warning Options. (line 1385) 42801 * Wstrict-aliasing: Warning Options. (line 655) 42802 * Wstrict-aliasing=n: Warning Options. (line 663) 42803 * Wstrict-null-sentinel: C++ Dialect Options. 42804 (line 435) 42805 * Wstrict-overflow: Warning Options. (line 696) 42806 * Wstrict-prototypes: Warning Options. (line 1085) 42807 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options. 42808 (line 224) 42809 * Wswitch: Warning Options. (line 501) 42810 * Wswitch-default: Warning Options. (line 509) 42811 * Wswitch-enum: Warning Options. (line 512) 42812 * Wsync-nand: Warning Options. (line 518) 42813 * Wsystem-headers <1>: Preprocessor Options. 42814 (line 153) 42815 * Wsystem-headers: Warning Options. (line 757) 42816 * Wtraditional <1>: Warning Options. (line 783) 42817 * Wtraditional: Preprocessor Options. 42818 (line 106) 42819 * Wtraditional-conversion <1>: Protoize Caveats. (line 31) 42820 * Wtraditional-conversion: Warning Options. (line 860) 42821 * Wtrigraphs <1>: Warning Options. (line 523) 42822 * Wtrigraphs: Preprocessor Options. 42823 (line 94) 42824 * Wtype-limits: Warning Options. (line 950) 42825 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options. 42826 (line 232) 42827 * Wundef <1>: Preprocessor Options. 42828 (line 112) 42829 * Wundef: Warning Options. (line 875) 42830 * Wuninitialized: Warning Options. (line 576) 42831 * Wunknown-pragmas: Warning Options. (line 643) 42832 * Wunreachable-code: Warning Options. (line 1287) 42833 * Wunsafe-loop-optimizations: Warning Options. (line 931) 42834 * Wunused: Warning Options. (line 569) 42835 * Wunused-function: Warning Options. (line 528) 42836 * Wunused-label: Warning Options. (line 533) 42837 * Wunused-macros: Preprocessor Options. 42838 (line 117) 42839 * Wunused-parameter: Warning Options. (line 540) 42840 * Wunused-value: Warning Options. (line 559) 42841 * Wunused-variable: Warning Options. (line 547) 42842 * Wvariadic-macros: Warning Options. (line 1354) 42843 * Wvla: Warning Options. (line 1360) 42844 * Wvolatile-register-var: Warning Options. (line 1364) 42845 * Wwrite-strings: Warning Options. (line 983) 42846 * x <1>: Preprocessor Options. 42847 (line 310) 42848 * x: Overall Options. (line 122) 42849 * Xassembler: Assembler Options. (line 13) 42850 * Xbind-lazy: VxWorks Options. (line 26) 42851 * Xbind-now: VxWorks Options. (line 30) 42852 * Xlinker: Link Options. (line 174) 42853 * Xpreprocessor: Preprocessor Options. 42854 (line 25) 42855 * Ym: System V Options. (line 26) 42856 * YP: System V Options. (line 22) 42857 42858 42859 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top 42860 42861 Keyword Index 42862 ************* 42863 42864 [index] 42865 * Menu: 42866 42867 * ! in constraint: Multi-Alternative. (line 33) 42868 * # in constraint: Modifiers. (line 57) 42869 * #pragma: Pragmas. (line 6) 42870 * #pragma implementation: C++ Interface. (line 39) 42871 * #pragma implementation, implied: C++ Interface. (line 46) 42872 * #pragma interface: C++ Interface. (line 20) 42873 * #pragma, reason for not using: Function Attributes. 42874 (line 1370) 42875 * $: Dollar Signs. (line 6) 42876 * % in constraint: Modifiers. (line 45) 42877 * %include: Spec Files. (line 27) 42878 * %include_noerr: Spec Files. (line 31) 42879 * %rename: Spec Files. (line 35) 42880 * & in constraint: Modifiers. (line 25) 42881 * ': Incompatibilities. (line 116) 42882 * (: Constructing Calls. (line 53) 42883 * * in constraint: Modifiers. (line 62) 42884 * + in constraint: Modifiers. (line 12) 42885 * -lgcc, use with -nodefaultlibs: Link Options. (line 79) 42886 * -lgcc, use with -nostdlib: Link Options. (line 79) 42887 * -nodefaultlibs and unresolved references: Link Options. (line 79) 42888 * -nostdlib and unresolved references: Link Options. (line 79) 42889 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options. 42890 (line 663) 42891 * //: C++ Comments. (line 6) 42892 * 0 in constraint: Simple Constraints. (line 117) 42893 * < in constraint: Simple Constraints. (line 48) 42894 * = in constraint: Modifiers. (line 8) 42895 * > in constraint: Simple Constraints. (line 52) 42896 * ? in constraint: Multi-Alternative. (line 27) 42897 * ?: extensions: Conditionals. (line 6) 42898 * ?: side effect: Conditionals. (line 20) 42899 * _ in variables in macros: Typeof. (line 42) 42900 * __builtin___clear_cache: Other Builtins. (line 274) 42901 * __builtin___fprintf_chk: Object Size Checking. 42902 (line 6) 42903 * __builtin___memcpy_chk: Object Size Checking. 42904 (line 6) 42905 * __builtin___memmove_chk: Object Size Checking. 42906 (line 6) 42907 * __builtin___mempcpy_chk: Object Size Checking. 42908 (line 6) 42909 * __builtin___memset_chk: Object Size Checking. 42910 (line 6) 42911 * __builtin___printf_chk: Object Size Checking. 42912 (line 6) 42913 * __builtin___snprintf_chk: Object Size Checking. 42914 (line 6) 42915 * __builtin___sprintf_chk: Object Size Checking. 42916 (line 6) 42917 * __builtin___stpcpy_chk: Object Size Checking. 42918 (line 6) 42919 * __builtin___strcat_chk: Object Size Checking. 42920 (line 6) 42921 * __builtin___strcpy_chk: Object Size Checking. 42922 (line 6) 42923 * __builtin___strncat_chk: Object Size Checking. 42924 (line 6) 42925 * __builtin___strncpy_chk: Object Size Checking. 42926 (line 6) 42927 * __builtin___vfprintf_chk: Object Size Checking. 42928 (line 6) 42929 * __builtin___vprintf_chk: Object Size Checking. 42930 (line 6) 42931 * __builtin___vsnprintf_chk: Object Size Checking. 42932 (line 6) 42933 * __builtin___vsprintf_chk: Object Size Checking. 42934 (line 6) 42935 * __builtin_apply: Constructing Calls. (line 31) 42936 * __builtin_apply_args: Constructing Calls. (line 20) 42937 * __builtin_bswap32: Other Builtins. (line 493) 42938 * __builtin_bswap64: Other Builtins. (line 498) 42939 * __builtin_choose_expr: Other Builtins. (line 156) 42940 * __builtin_clz: Other Builtins. (line 426) 42941 * __builtin_clzl: Other Builtins. (line 444) 42942 * __builtin_clzll: Other Builtins. (line 464) 42943 * __builtin_constant_p: Other Builtins. (line 196) 42944 * __builtin_ctz: Other Builtins. (line 430) 42945 * __builtin_ctzl: Other Builtins. (line 448) 42946 * __builtin_ctzll: Other Builtins. (line 468) 42947 * __builtin_expect: Other Builtins. (line 242) 42948 * __builtin_ffs: Other Builtins. (line 422) 42949 * __builtin_ffsl: Other Builtins. (line 440) 42950 * __builtin_ffsll: Other Builtins. (line 460) 42951 * __builtin_fpclassify: Other Builtins. (line 6) 42952 * __builtin_frame_address: Return Address. (line 34) 42953 * __builtin_huge_val: Other Builtins. (line 325) 42954 * __builtin_huge_valf: Other Builtins. (line 330) 42955 * __builtin_huge_vall: Other Builtins. (line 333) 42956 * __builtin_inf: Other Builtins. (line 348) 42957 * __builtin_infd128: Other Builtins. (line 358) 42958 * __builtin_infd32: Other Builtins. (line 352) 42959 * __builtin_infd64: Other Builtins. (line 355) 42960 * __builtin_inff: Other Builtins. (line 362) 42961 * __builtin_infl: Other Builtins. (line 367) 42962 * __builtin_isfinite: Other Builtins. (line 6) 42963 * __builtin_isgreater: Other Builtins. (line 6) 42964 * __builtin_isgreaterequal: Other Builtins. (line 6) 42965 * __builtin_isinf_sign: Other Builtins. (line 6) 42966 * __builtin_isless: Other Builtins. (line 6) 42967 * __builtin_islessequal: Other Builtins. (line 6) 42968 * __builtin_islessgreater: Other Builtins. (line 6) 42969 * __builtin_isnormal: Other Builtins. (line 6) 42970 * __builtin_isunordered: Other Builtins. (line 6) 42971 * __builtin_nan: Other Builtins. (line 378) 42972 * __builtin_nand128: Other Builtins. (line 400) 42973 * __builtin_nand32: Other Builtins. (line 394) 42974 * __builtin_nand64: Other Builtins. (line 397) 42975 * __builtin_nanf: Other Builtins. (line 404) 42976 * __builtin_nanl: Other Builtins. (line 407) 42977 * __builtin_nans: Other Builtins. (line 411) 42978 * __builtin_nansf: Other Builtins. (line 415) 42979 * __builtin_nansl: Other Builtins. (line 418) 42980 * __builtin_object_size: Object Size Checking. 42981 (line 11) 42982 * __builtin_offsetof: Offsetof. (line 6) 42983 * __builtin_parity: Other Builtins. (line 437) 42984 * __builtin_parityl: Other Builtins. (line 456) 42985 * __builtin_parityll: Other Builtins. (line 476) 42986 * __builtin_popcount: Other Builtins. (line 434) 42987 * __builtin_popcountl: Other Builtins. (line 452) 42988 * __builtin_popcountll: Other Builtins. (line 472) 42989 * __builtin_powi: Other Builtins. (line 6) 42990 * __builtin_powif: Other Builtins. (line 6) 42991 * __builtin_powil: Other Builtins. (line 6) 42992 * __builtin_prefetch: Other Builtins. (line 286) 42993 * __builtin_return: Constructing Calls. (line 48) 42994 * __builtin_return_address: Return Address. (line 11) 42995 * __builtin_trap: Other Builtins. (line 266) 42996 * __builtin_types_compatible_p: Other Builtins. (line 110) 42997 * __complex__ keyword: Complex. (line 6) 42998 * __declspec(dllexport): Function Attributes. 42999 (line 244) 43000 * __declspec(dllimport): Function Attributes. 43001 (line 274) 43002 * __extension__: Alternate Keywords. (line 29) 43003 * __float128 data type: Floating Types. (line 6) 43004 * __float80 data type: Floating Types. (line 6) 43005 * __func__ identifier: Function Names. (line 6) 43006 * __FUNCTION__ identifier: Function Names. (line 6) 43007 * __imag__ keyword: Complex. (line 27) 43008 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) 43009 * __real__ keyword: Complex. (line 27) 43010 * __STDC_HOSTED__: Standards. (line 13) 43011 * __sync_add_and_fetch: Atomic Builtins. (line 61) 43012 * __sync_and_and_fetch: Atomic Builtins. (line 61) 43013 * __sync_bool_compare_and_swap: Atomic Builtins. (line 73) 43014 * __sync_fetch_and_add: Atomic Builtins. (line 45) 43015 * __sync_fetch_and_and: Atomic Builtins. (line 45) 43016 * __sync_fetch_and_nand: Atomic Builtins. (line 45) 43017 * __sync_fetch_and_or: Atomic Builtins. (line 45) 43018 * __sync_fetch_and_sub: Atomic Builtins. (line 45) 43019 * __sync_fetch_and_xor: Atomic Builtins. (line 45) 43020 * __sync_lock_release: Atomic Builtins. (line 103) 43021 * __sync_lock_test_and_set: Atomic Builtins. (line 85) 43022 * __sync_nand_and_fetch: Atomic Builtins. (line 61) 43023 * __sync_or_and_fetch: Atomic Builtins. (line 61) 43024 * __sync_sub_and_fetch: Atomic Builtins. (line 61) 43025 * __sync_synchronize: Atomic Builtins. (line 82) 43026 * __sync_val_compare_and_swap: Atomic Builtins. (line 73) 43027 * __sync_xor_and_fetch: Atomic Builtins. (line 61) 43028 * __thread: Thread-Local. (line 6) 43029 * _Accum data type: Fixed-Point. (line 6) 43030 * _Complex keyword: Complex. (line 6) 43031 * _Decimal128 data type: Decimal Float. (line 6) 43032 * _Decimal32 data type: Decimal Float. (line 6) 43033 * _Decimal64 data type: Decimal Float. (line 6) 43034 * _exit: Other Builtins. (line 6) 43035 * _Exit: Other Builtins. (line 6) 43036 * _Fract data type: Fixed-Point. (line 6) 43037 * _Sat data type: Fixed-Point. (line 6) 43038 * ABI: Compatibility. (line 6) 43039 * abort: Other Builtins. (line 6) 43040 * abs: Other Builtins. (line 6) 43041 * accessing volatiles: Volatiles. (line 6) 43042 * acos: Other Builtins. (line 6) 43043 * acosf: Other Builtins. (line 6) 43044 * acosh: Other Builtins. (line 6) 43045 * acoshf: Other Builtins. (line 6) 43046 * acoshl: Other Builtins. (line 6) 43047 * acosl: Other Builtins. (line 6) 43048 * Ada: G++ and GCC. (line 6) 43049 * additional floating types: Floating Types. (line 6) 43050 * address constraints: Simple Constraints. (line 144) 43051 * address of a label: Labels as Values. (line 6) 43052 * address_operand: Simple Constraints. (line 148) 43053 * alias attribute: Function Attributes. 43054 (line 34) 43055 * aliasing of parameters: Code Gen Options. (line 414) 43056 * aligned attribute <1>: Type Attributes. (line 31) 43057 * aligned attribute <2>: Function Attributes. 43058 (line 47) 43059 * aligned attribute: Variable Attributes. 43060 (line 23) 43061 * alignment: Alignment. (line 6) 43062 * alloc_size attribute: Function Attributes. 43063 (line 67) 43064 * alloca: Other Builtins. (line 6) 43065 * alloca vs variable-length arrays: Variable Length. (line 27) 43066 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes. 43067 (line 701) 43068 * alternate keywords: Alternate Keywords. (line 6) 43069 * always_inline function attribute: Function Attributes. 43070 (line 88) 43071 * AMD x86-64 Options: i386 and x86-64 Options. 43072 (line 6) 43073 * AMD1: Standards. (line 13) 43074 * ANSI C: Standards. (line 13) 43075 * ANSI C standard: Standards. (line 13) 43076 * ANSI C89: Standards. (line 13) 43077 * ANSI support: C Dialect Options. (line 10) 43078 * ANSI X3.159-1989: Standards. (line 13) 43079 * apostrophes: Incompatibilities. (line 116) 43080 * application binary interface: Compatibility. (line 6) 43081 * ARC Options: ARC Options. (line 6) 43082 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility. 43083 (line 6) 43084 * ARM options: ARM Options. (line 6) 43085 * arrays of length zero: Zero Length. (line 6) 43086 * arrays of variable length: Variable Length. (line 6) 43087 * arrays, non-lvalue: Subscripting. (line 6) 43088 * artificial function attribute: Function Attributes. 43089 (line 131) 43090 * asin: Other Builtins. (line 6) 43091 * asinf: Other Builtins. (line 6) 43092 * asinh: Other Builtins. (line 6) 43093 * asinhf: Other Builtins. (line 6) 43094 * asinhl: Other Builtins. (line 6) 43095 * asinl: Other Builtins. (line 6) 43096 * asm constraints: Constraints. (line 6) 43097 * asm expressions: Extended Asm. (line 6) 43098 * assembler instructions: Extended Asm. (line 6) 43099 * assembler names for identifiers: Asm Labels. (line 6) 43100 * assembly code, invalid: Bug Criteria. (line 12) 43101 * atan: Other Builtins. (line 6) 43102 * atan2: Other Builtins. (line 6) 43103 * atan2f: Other Builtins. (line 6) 43104 * atan2l: Other Builtins. (line 6) 43105 * atanf: Other Builtins. (line 6) 43106 * atanh: Other Builtins. (line 6) 43107 * atanhf: Other Builtins. (line 6) 43108 * atanhl: Other Builtins. (line 6) 43109 * atanl: Other Builtins. (line 6) 43110 * attribute of types: Type Attributes. (line 6) 43111 * attribute of variables: Variable Attributes. 43112 (line 6) 43113 * attribute syntax: Attribute Syntax. (line 6) 43114 * autoincrement/decrement addressing: Simple Constraints. (line 30) 43115 * automatic inline for C++ member fns: Inline. (line 71) 43116 * AVR Options: AVR Options. (line 6) 43117 * Backwards Compatibility: Backwards Compatibility. 43118 (line 6) 43119 * base class members: Name lookup. (line 6) 43120 * bcmp: Other Builtins. (line 6) 43121 * below100 attribute: Variable Attributes. 43122 (line 492) 43123 * binary compatibility: Compatibility. (line 6) 43124 * Binary constants using the 0b prefix: Binary constants. (line 6) 43125 * Blackfin Options: Blackfin Options. (line 6) 43126 * bound pointer to member function: Bound member functions. 43127 (line 6) 43128 * bounds checking: Optimize Options. (line 338) 43129 * bug criteria: Bug Criteria. (line 6) 43130 * bugs: Bugs. (line 6) 43131 * bugs, known: Trouble. (line 6) 43132 * built-in functions <1>: Other Builtins. (line 6) 43133 * built-in functions: C Dialect Options. (line 170) 43134 * bzero: Other Builtins. (line 6) 43135 * C compilation options: Invoking GCC. (line 17) 43136 * C intermediate output, nonexistent: G++ and GCC. (line 35) 43137 * C language extensions: C Extensions. (line 6) 43138 * C language, traditional: C Dialect Options. (line 250) 43139 * C standard: Standards. (line 13) 43140 * C standards: Standards. (line 13) 43141 * C++: G++ and GCC. (line 30) 43142 * c++: Invoking G++. (line 14) 43143 * C++ comments: C++ Comments. (line 6) 43144 * C++ compilation options: Invoking GCC. (line 23) 43145 * C++ interface and implementation headers: C++ Interface. (line 6) 43146 * C++ language extensions: C++ Extensions. (line 6) 43147 * C++ member fns, automatically inline: Inline. (line 71) 43148 * C++ misunderstandings: C++ Misunderstandings. 43149 (line 6) 43150 * C++ options, command line: C++ Dialect Options. 43151 (line 6) 43152 * C++ pragmas, effect on inlining: C++ Interface. (line 66) 43153 * C++ source file suffixes: Invoking G++. (line 6) 43154 * C++ static data, declaring and defining: Static Definitions. 43155 (line 6) 43156 * C89: Standards. (line 13) 43157 * C90: Standards. (line 13) 43158 * C94: Standards. (line 13) 43159 * C95: Standards. (line 13) 43160 * C99: Standards. (line 13) 43161 * C9X: Standards. (line 13) 43162 * C_INCLUDE_PATH: Environment Variables. 43163 (line 127) 43164 * cabs: Other Builtins. (line 6) 43165 * cabsf: Other Builtins. (line 6) 43166 * cabsl: Other Builtins. (line 6) 43167 * cacos: Other Builtins. (line 6) 43168 * cacosf: Other Builtins. (line 6) 43169 * cacosh: Other Builtins. (line 6) 43170 * cacoshf: Other Builtins. (line 6) 43171 * cacoshl: Other Builtins. (line 6) 43172 * cacosl: Other Builtins. (line 6) 43173 * calling functions through the function vector on H8/300, M16C, M32C and SH2A processors: Function Attributes. 43174 (line 471) 43175 * calloc: Other Builtins. (line 6) 43176 * carg: Other Builtins. (line 6) 43177 * cargf: Other Builtins. (line 6) 43178 * cargl: Other Builtins. (line 6) 43179 * case labels in initializers: Designated Inits. (line 6) 43180 * case ranges: Case Ranges. (line 6) 43181 * casin: Other Builtins. (line 6) 43182 * casinf: Other Builtins. (line 6) 43183 * casinh: Other Builtins. (line 6) 43184 * casinhf: Other Builtins. (line 6) 43185 * casinhl: Other Builtins. (line 6) 43186 * casinl: Other Builtins. (line 6) 43187 * cast to a union: Cast to Union. (line 6) 43188 * catan: Other Builtins. (line 6) 43189 * catanf: Other Builtins. (line 6) 43190 * catanh: Other Builtins. (line 6) 43191 * catanhf: Other Builtins. (line 6) 43192 * catanhl: Other Builtins. (line 6) 43193 * catanl: Other Builtins. (line 6) 43194 * cbrt: Other Builtins. (line 6) 43195 * cbrtf: Other Builtins. (line 6) 43196 * cbrtl: Other Builtins. (line 6) 43197 * ccos: Other Builtins. (line 6) 43198 * ccosf: Other Builtins. (line 6) 43199 * ccosh: Other Builtins. (line 6) 43200 * ccoshf: Other Builtins. (line 6) 43201 * ccoshl: Other Builtins. (line 6) 43202 * ccosl: Other Builtins. (line 6) 43203 * ceil: Other Builtins. (line 6) 43204 * ceilf: Other Builtins. (line 6) 43205 * ceill: Other Builtins. (line 6) 43206 * cexp: Other Builtins. (line 6) 43207 * cexpf: Other Builtins. (line 6) 43208 * cexpl: Other Builtins. (line 6) 43209 * character set, execution: Preprocessor Options. 43210 (line 496) 43211 * character set, input: Preprocessor Options. 43212 (line 509) 43213 * character set, input normalization: Warning Options. (line 1174) 43214 * character set, wide execution: Preprocessor Options. 43215 (line 501) 43216 * cimag: Other Builtins. (line 6) 43217 * cimagf: Other Builtins. (line 6) 43218 * cimagl: Other Builtins. (line 6) 43219 * cleanup attribute: Variable Attributes. 43220 (line 89) 43221 * clog: Other Builtins. (line 6) 43222 * clogf: Other Builtins. (line 6) 43223 * clogl: Other Builtins. (line 6) 43224 * COBOL: G++ and GCC. (line 23) 43225 * code generation conventions: Code Gen Options. (line 6) 43226 * code, mixed with declarations: Mixed Declarations. (line 6) 43227 * cold function attribute: Function Attributes. 43228 (line 874) 43229 * command options: Invoking GCC. (line 6) 43230 * comments, C++ style: C++ Comments. (line 6) 43231 * common attribute: Variable Attributes. 43232 (line 105) 43233 * comparison of signed and unsigned values, warning: Warning Options. 43234 (line 1038) 43235 * compiler bugs, reporting: Bug Reporting. (line 6) 43236 * compiler compared to C++ preprocessor: G++ and GCC. (line 35) 43237 * compiler options, C++: C++ Dialect Options. 43238 (line 6) 43239 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 43240 (line 6) 43241 * compiler version, specifying: Target Options. (line 6) 43242 * COMPILER_PATH: Environment Variables. 43243 (line 88) 43244 * complex conjugation: Complex. (line 34) 43245 * complex numbers: Complex. (line 6) 43246 * compound literals: Compound Literals. (line 6) 43247 * computed gotos: Labels as Values. (line 6) 43248 * conditional expressions, extensions: Conditionals. (line 6) 43249 * conflicting types: Disappointments. (line 21) 43250 * conj: Other Builtins. (line 6) 43251 * conjf: Other Builtins. (line 6) 43252 * conjl: Other Builtins. (line 6) 43253 * const applied to function: Function Attributes. 43254 (line 6) 43255 * const function attribute: Function Attributes. 43256 (line 176) 43257 * constants in constraints: Simple Constraints. (line 60) 43258 * constraint modifier characters: Modifiers. (line 6) 43259 * constraint, matching: Simple Constraints. (line 129) 43260 * constraints, asm: Constraints. (line 6) 43261 * constraints, machine specific: Machine Constraints. 43262 (line 6) 43263 * constructing calls: Constructing Calls. (line 6) 43264 * constructor expressions: Compound Literals. (line 6) 43265 * constructor function attribute: Function Attributes. 43266 (line 204) 43267 * contributors: Contributors. (line 6) 43268 * copysign: Other Builtins. (line 6) 43269 * copysignf: Other Builtins. (line 6) 43270 * copysignl: Other Builtins. (line 6) 43271 * core dump: Bug Criteria. (line 9) 43272 * cos: Other Builtins. (line 6) 43273 * cosf: Other Builtins. (line 6) 43274 * cosh: Other Builtins. (line 6) 43275 * coshf: Other Builtins. (line 6) 43276 * coshl: Other Builtins. (line 6) 43277 * cosl: Other Builtins. (line 6) 43278 * CPATH: Environment Variables. 43279 (line 126) 43280 * CPLUS_INCLUDE_PATH: Environment Variables. 43281 (line 128) 43282 * cpow: Other Builtins. (line 6) 43283 * cpowf: Other Builtins. (line 6) 43284 * cpowl: Other Builtins. (line 6) 43285 * cproj: Other Builtins. (line 6) 43286 * cprojf: Other Builtins. (line 6) 43287 * cprojl: Other Builtins. (line 6) 43288 * creal: Other Builtins. (line 6) 43289 * crealf: Other Builtins. (line 6) 43290 * creall: Other Builtins. (line 6) 43291 * CRIS Options: CRIS Options. (line 6) 43292 * cross compiling: Target Options. (line 6) 43293 * CRX Options: CRX Options. (line 6) 43294 * csin: Other Builtins. (line 6) 43295 * csinf: Other Builtins. (line 6) 43296 * csinh: Other Builtins. (line 6) 43297 * csinhf: Other Builtins. (line 6) 43298 * csinhl: Other Builtins. (line 6) 43299 * csinl: Other Builtins. (line 6) 43300 * csqrt: Other Builtins. (line 6) 43301 * csqrtf: Other Builtins. (line 6) 43302 * csqrtl: Other Builtins. (line 6) 43303 * ctan: Other Builtins. (line 6) 43304 * ctanf: Other Builtins. (line 6) 43305 * ctanh: Other Builtins. (line 6) 43306 * ctanhf: Other Builtins. (line 6) 43307 * ctanhl: Other Builtins. (line 6) 43308 * ctanl: Other Builtins. (line 6) 43309 * Darwin options: Darwin Options. (line 6) 43310 * dcgettext: Other Builtins. (line 6) 43311 * DD integer suffix: Decimal Float. (line 6) 43312 * dd integer suffix: Decimal Float. (line 6) 43313 * deallocating variable length arrays: Variable Length. (line 23) 43314 * debugging information options: Debugging Options. (line 6) 43315 * decimal floating types: Decimal Float. (line 6) 43316 * declaration scope: Incompatibilities. (line 80) 43317 * declarations inside expressions: Statement Exprs. (line 6) 43318 * declarations, mixed with code: Mixed Declarations. (line 6) 43319 * declaring attributes of functions: Function Attributes. 43320 (line 6) 43321 * declaring static data in C++: Static Definitions. (line 6) 43322 * defining static data in C++: Static Definitions. (line 6) 43323 * dependencies for make as output: Environment Variables. 43324 (line 170) 43325 * dependencies, make: Preprocessor Options. 43326 (line 173) 43327 * DEPENDENCIES_OUTPUT: Environment Variables. 43328 (line 153) 43329 * dependent name lookup: Name lookup. (line 6) 43330 * deprecated attribute: Variable Attributes. 43331 (line 113) 43332 * deprecated attribute.: Function Attributes. 43333 (line 226) 43334 * designated initializers: Designated Inits. (line 6) 43335 * designator lists: Designated Inits. (line 94) 43336 * designators: Designated Inits. (line 61) 43337 * destructor function attribute: Function Attributes. 43338 (line 204) 43339 * df integer suffix: Decimal Float. (line 6) 43340 * DF integer suffix: Decimal Float. (line 6) 43341 * dgettext: Other Builtins. (line 6) 43342 * diagnostic messages: Language Independent Options. 43343 (line 6) 43344 * dialect options: C Dialect Options. (line 6) 43345 * digits in constraint: Simple Constraints. (line 117) 43346 * directory options: Directory Options. (line 6) 43347 * DL integer suffix: Decimal Float. (line 6) 43348 * dl integer suffix: Decimal Float. (line 6) 43349 * dollar signs in identifier names: Dollar Signs. (line 6) 43350 * double-word arithmetic: Long Long. (line 6) 43351 * downward funargs: Nested Functions. (line 6) 43352 * drem: Other Builtins. (line 6) 43353 * dremf: Other Builtins. (line 6) 43354 * dreml: Other Builtins. (line 6) 43355 * E in constraint: Simple Constraints. (line 79) 43356 * earlyclobber operand: Modifiers. (line 25) 43357 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes. 43358 (line 327) 43359 * empty structures: Empty Structures. (line 6) 43360 * environment variables: Environment Variables. 43361 (line 6) 43362 * erf: Other Builtins. (line 6) 43363 * erfc: Other Builtins. (line 6) 43364 * erfcf: Other Builtins. (line 6) 43365 * erfcl: Other Builtins. (line 6) 43366 * erff: Other Builtins. (line 6) 43367 * erfl: Other Builtins. (line 6) 43368 * error function attribute: Function Attributes. 43369 (line 145) 43370 * error messages: Warnings and Errors. 43371 (line 6) 43372 * escaped newlines: Escaped Newlines. (line 6) 43373 * exception handler functions on the Blackfin processor: Function Attributes. 43374 (line 337) 43375 * exclamation point: Multi-Alternative. (line 33) 43376 * exit: Other Builtins. (line 6) 43377 * exp: Other Builtins. (line 6) 43378 * exp10: Other Builtins. (line 6) 43379 * exp10f: Other Builtins. (line 6) 43380 * exp10l: Other Builtins. (line 6) 43381 * exp2: Other Builtins. (line 6) 43382 * exp2f: Other Builtins. (line 6) 43383 * exp2l: Other Builtins. (line 6) 43384 * expf: Other Builtins. (line 6) 43385 * expl: Other Builtins. (line 6) 43386 * explicit register variables: Explicit Reg Vars. (line 6) 43387 * expm1: Other Builtins. (line 6) 43388 * expm1f: Other Builtins. (line 6) 43389 * expm1l: Other Builtins. (line 6) 43390 * expressions containing statements: Statement Exprs. (line 6) 43391 * expressions, constructor: Compound Literals. (line 6) 43392 * extended asm: Extended Asm. (line 6) 43393 * extensible constraints: Simple Constraints. (line 153) 43394 * extensions, ?:: Conditionals. (line 6) 43395 * extensions, C language: C Extensions. (line 6) 43396 * extensions, C++ language: C++ Extensions. (line 6) 43397 * external declaration scope: Incompatibilities. (line 80) 43398 * externally_visible attribute.: Function Attributes. 43399 (line 343) 43400 * F in constraint: Simple Constraints. (line 84) 43401 * fabs: Other Builtins. (line 6) 43402 * fabsf: Other Builtins. (line 6) 43403 * fabsl: Other Builtins. (line 6) 43404 * fatal signal: Bug Criteria. (line 9) 43405 * fdim: Other Builtins. (line 6) 43406 * fdimf: Other Builtins. (line 6) 43407 * fdiml: Other Builtins. (line 6) 43408 * FDL, GNU Free Documentation License: GNU Free Documentation License. 43409 (line 6) 43410 * ffs: Other Builtins. (line 6) 43411 * file name suffix: Overall Options. (line 14) 43412 * file names: Link Options. (line 10) 43413 * fixed-point types: Fixed-Point. (line 6) 43414 * flatten function attribute: Function Attributes. 43415 (line 138) 43416 * flexible array members: Zero Length. (line 6) 43417 * float as function value type: Incompatibilities. (line 141) 43418 * floating point precision <1>: Disappointments. (line 68) 43419 * floating point precision: Optimize Options. (line 1454) 43420 * floor: Other Builtins. (line 6) 43421 * floorf: Other Builtins. (line 6) 43422 * floorl: Other Builtins. (line 6) 43423 * fma: Other Builtins. (line 6) 43424 * fmaf: Other Builtins. (line 6) 43425 * fmal: Other Builtins. (line 6) 43426 * fmax: Other Builtins. (line 6) 43427 * fmaxf: Other Builtins. (line 6) 43428 * fmaxl: Other Builtins. (line 6) 43429 * fmin: Other Builtins. (line 6) 43430 * fminf: Other Builtins. (line 6) 43431 * fminl: Other Builtins. (line 6) 43432 * fmod: Other Builtins. (line 6) 43433 * fmodf: Other Builtins. (line 6) 43434 * fmodl: Other Builtins. (line 6) 43435 * force_align_arg_pointer attribute: Function Attributes. 43436 (line 916) 43437 * format function attribute: Function Attributes. 43438 (line 373) 43439 * format_arg function attribute: Function Attributes. 43440 (line 432) 43441 * Fortran: G++ and GCC. (line 6) 43442 * forwarding calls: Constructing Calls. (line 6) 43443 * fprintf: Other Builtins. (line 6) 43444 * fprintf_unlocked: Other Builtins. (line 6) 43445 * fputs: Other Builtins. (line 6) 43446 * fputs_unlocked: Other Builtins. (line 6) 43447 * FR30 Options: FR30 Options. (line 6) 43448 * freestanding environment: Standards. (line 13) 43449 * freestanding implementation: Standards. (line 13) 43450 * frexp: Other Builtins. (line 6) 43451 * frexpf: Other Builtins. (line 6) 43452 * frexpl: Other Builtins. (line 6) 43453 * FRV Options: FRV Options. (line 6) 43454 * fscanf: Other Builtins. (line 6) 43455 * fscanf, and constant strings: Incompatibilities. (line 17) 43456 * function addressability on the M32R/D: Function Attributes. 43457 (line 643) 43458 * function attributes: Function Attributes. 43459 (line 6) 43460 * function pointers, arithmetic: Pointer Arith. (line 6) 43461 * function prototype declarations: Function Prototypes. 43462 (line 6) 43463 * function without a prologue/epilogue code: Function Attributes. 43464 (line 683) 43465 * function, size of pointer to: Pointer Arith. (line 6) 43466 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes. 43467 (line 597) 43468 * functions in arbitrary sections: Function Attributes. 43469 (line 6) 43470 * functions that are passed arguments in registers on the 386: Function Attributes. 43471 (line 6) 43472 * functions that behave like malloc: Function Attributes. 43473 (line 6) 43474 * functions that do not pop the argument stack on the 386: Function Attributes. 43475 (line 6) 43476 * functions that do pop the argument stack on the 386: Function Attributes. 43477 (line 170) 43478 * functions that have different compilation options on the 386: Function Attributes. 43479 (line 6) 43480 * functions that have different optimization options: Function Attributes. 43481 (line 6) 43482 * functions that have no side effects: Function Attributes. 43483 (line 6) 43484 * functions that never return: Function Attributes. 43485 (line 6) 43486 * functions that pop the argument stack on the 386: Function Attributes. 43487 (line 6) 43488 * functions that return more than once: Function Attributes. 43489 (line 6) 43490 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes. 43491 (line 695) 43492 * functions which handle memory bank switching: Function Attributes. 43493 (line 348) 43494 * functions with non-null pointer arguments: Function Attributes. 43495 (line 6) 43496 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes. 43497 (line 6) 43498 * G in constraint: Simple Constraints. (line 88) 43499 * g in constraint: Simple Constraints. (line 110) 43500 * g++: Invoking G++. (line 14) 43501 * G++: G++ and GCC. (line 30) 43502 * gamma: Other Builtins. (line 6) 43503 * gamma_r: Other Builtins. (line 6) 43504 * gammaf: Other Builtins. (line 6) 43505 * gammaf_r: Other Builtins. (line 6) 43506 * gammal: Other Builtins. (line 6) 43507 * gammal_r: Other Builtins. (line 6) 43508 * GCC: G++ and GCC. (line 6) 43509 * GCC command options: Invoking GCC. (line 6) 43510 * GCC_EXEC_PREFIX: Environment Variables. 43511 (line 52) 43512 * gcc_struct: Type Attributes. (line 309) 43513 * gcc_struct attribute: Variable Attributes. 43514 (line 349) 43515 * gcov: Debugging Options. (line 292) 43516 * gettext: Other Builtins. (line 6) 43517 * global offset table: Code Gen Options. (line 184) 43518 * global register after longjmp: Global Reg Vars. (line 66) 43519 * global register variables: Global Reg Vars. (line 6) 43520 * GNAT: G++ and GCC. (line 30) 43521 * GNU C Compiler: G++ and GCC. (line 6) 43522 * GNU Compiler Collection: G++ and GCC. (line 6) 43523 * gnu_inline function attribute: Function Attributes. 43524 (line 93) 43525 * goto with computed label: Labels as Values. (line 6) 43526 * gprof: Debugging Options. (line 253) 43527 * grouping options: Invoking GCC. (line 26) 43528 * H in constraint: Simple Constraints. (line 88) 43529 * hardware models and configurations, specifying: Submodel Options. 43530 (line 6) 43531 * hex floats: Hex Floats. (line 6) 43532 * HK fixed-suffix: Fixed-Point. (line 6) 43533 * hk fixed-suffix: Fixed-Point. (line 6) 43534 * hosted environment <1>: C Dialect Options. (line 204) 43535 * hosted environment: Standards. (line 13) 43536 * hosted implementation: Standards. (line 13) 43537 * hot function attribute: Function Attributes. 43538 (line 861) 43539 * HPPA Options: HPPA Options. (line 6) 43540 * hr fixed-suffix: Fixed-Point. (line 6) 43541 * HR fixed-suffix: Fixed-Point. (line 6) 43542 * hypot: Other Builtins. (line 6) 43543 * hypotf: Other Builtins. (line 6) 43544 * hypotl: Other Builtins. (line 6) 43545 * I in constraint: Simple Constraints. (line 71) 43546 * i in constraint: Simple Constraints. (line 60) 43547 * i386 and x86-64 Windows Options: i386 and x86-64 Windows Options. 43548 (line 6) 43549 * i386 Options: i386 and x86-64 Options. 43550 (line 6) 43551 * IA-64 Options: IA-64 Options. (line 6) 43552 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 43553 (line 6) 43554 * identifier names, dollar signs in: Dollar Signs. (line 6) 43555 * identifiers, names in assembler code: Asm Labels. (line 6) 43556 * ilogb: Other Builtins. (line 6) 43557 * ilogbf: Other Builtins. (line 6) 43558 * ilogbl: Other Builtins. (line 6) 43559 * imaxabs: Other Builtins. (line 6) 43560 * implementation-defined behavior, C language: C Implementation. 43561 (line 6) 43562 * implied #pragma implementation: C++ Interface. (line 46) 43563 * incompatibilities of GCC: Incompatibilities. (line 6) 43564 * increment operators: Bug Criteria. (line 17) 43565 * index: Other Builtins. (line 6) 43566 * indirect calls on ARM: Function Attributes. 43567 (line 587) 43568 * indirect calls on MIPS: Function Attributes. 43569 (line 609) 43570 * init_priority attribute: C++ Attributes. (line 9) 43571 * initializations in expressions: Compound Literals. (line 6) 43572 * initializers with labeled elements: Designated Inits. (line 6) 43573 * initializers, non-constant: Initializers. (line 6) 43574 * inline automatic for C++ member fns: Inline. (line 71) 43575 * inline functions: Inline. (line 6) 43576 * inline functions, omission of: Inline. (line 51) 43577 * inlining and C++ pragmas: C++ Interface. (line 66) 43578 * installation trouble: Trouble. (line 6) 43579 * integrating function code: Inline. (line 6) 43580 * Intel 386 Options: i386 and x86-64 Options. 43581 (line 6) 43582 * interface and implementation headers, C++: C++ Interface. (line 6) 43583 * intermediate C version, nonexistent: G++ and GCC. (line 35) 43584 * interrupt handler functions: Function Attributes. 43585 (line 532) 43586 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes. 43587 (line 557) 43588 * interrupt service routines on ARM: Function Attributes. 43589 (line 572) 43590 * interrupt thread functions on fido: Function Attributes. 43591 (line 564) 43592 * introduction: Top. (line 6) 43593 * invalid assembly code: Bug Criteria. (line 12) 43594 * invalid input: Bug Criteria. (line 42) 43595 * invoking g++: Invoking G++. (line 22) 43596 * isalnum: Other Builtins. (line 6) 43597 * isalpha: Other Builtins. (line 6) 43598 * isascii: Other Builtins. (line 6) 43599 * isblank: Other Builtins. (line 6) 43600 * iscntrl: Other Builtins. (line 6) 43601 * isdigit: Other Builtins. (line 6) 43602 * isgraph: Other Builtins. (line 6) 43603 * islower: Other Builtins. (line 6) 43604 * ISO 9899: Standards. (line 13) 43605 * ISO C: Standards. (line 13) 43606 * ISO C standard: Standards. (line 13) 43607 * ISO C90: Standards. (line 13) 43608 * ISO C94: Standards. (line 13) 43609 * ISO C95: Standards. (line 13) 43610 * ISO C99: Standards. (line 13) 43611 * ISO C9X: Standards. (line 13) 43612 * ISO support: C Dialect Options. (line 10) 43613 * ISO/IEC 9899: Standards. (line 13) 43614 * isprint: Other Builtins. (line 6) 43615 * ispunct: Other Builtins. (line 6) 43616 * isspace: Other Builtins. (line 6) 43617 * isupper: Other Builtins. (line 6) 43618 * iswalnum: Other Builtins. (line 6) 43619 * iswalpha: Other Builtins. (line 6) 43620 * iswblank: Other Builtins. (line 6) 43621 * iswcntrl: Other Builtins. (line 6) 43622 * iswdigit: Other Builtins. (line 6) 43623 * iswgraph: Other Builtins. (line 6) 43624 * iswlower: Other Builtins. (line 6) 43625 * iswprint: Other Builtins. (line 6) 43626 * iswpunct: Other Builtins. (line 6) 43627 * iswspace: Other Builtins. (line 6) 43628 * iswupper: Other Builtins. (line 6) 43629 * iswxdigit: Other Builtins. (line 6) 43630 * isxdigit: Other Builtins. (line 6) 43631 * j0: Other Builtins. (line 6) 43632 * j0f: Other Builtins. (line 6) 43633 * j0l: Other Builtins. (line 6) 43634 * j1: Other Builtins. (line 6) 43635 * j1f: Other Builtins. (line 6) 43636 * j1l: Other Builtins. (line 6) 43637 * Java: G++ and GCC. (line 6) 43638 * java_interface attribute: C++ Attributes. (line 29) 43639 * jn: Other Builtins. (line 6) 43640 * jnf: Other Builtins. (line 6) 43641 * jnl: Other Builtins. (line 6) 43642 * K fixed-suffix: Fixed-Point. (line 6) 43643 * k fixed-suffix: Fixed-Point. (line 6) 43644 * keywords, alternate: Alternate Keywords. (line 6) 43645 * known causes of trouble: Trouble. (line 6) 43646 * l1_data variable attribute: Variable Attributes. 43647 (line 317) 43648 * l1_data_A variable attribute: Variable Attributes. 43649 (line 317) 43650 * l1_data_B variable attribute: Variable Attributes. 43651 (line 317) 43652 * l1_text function attribute: Function Attributes. 43653 (line 581) 43654 * labeled elements in initializers: Designated Inits. (line 6) 43655 * labels as values: Labels as Values. (line 6) 43656 * labs: Other Builtins. (line 6) 43657 * LANG: Environment Variables. 43658 (line 21) 43659 * language dialect options: C Dialect Options. (line 6) 43660 * LC_ALL: Environment Variables. 43661 (line 21) 43662 * LC_CTYPE: Environment Variables. 43663 (line 21) 43664 * LC_MESSAGES: Environment Variables. 43665 (line 21) 43666 * ldexp: Other Builtins. (line 6) 43667 * ldexpf: Other Builtins. (line 6) 43668 * ldexpl: Other Builtins. (line 6) 43669 * length-zero arrays: Zero Length. (line 6) 43670 * lgamma: Other Builtins. (line 6) 43671 * lgamma_r: Other Builtins. (line 6) 43672 * lgammaf: Other Builtins. (line 6) 43673 * lgammaf_r: Other Builtins. (line 6) 43674 * lgammal: Other Builtins. (line 6) 43675 * lgammal_r: Other Builtins. (line 6) 43676 * Libraries: Link Options. (line 24) 43677 * LIBRARY_PATH: Environment Variables. 43678 (line 94) 43679 * link options: Link Options. (line 6) 43680 * linker script: Link Options. (line 168) 43681 * LK fixed-suffix: Fixed-Point. (line 6) 43682 * lk fixed-suffix: Fixed-Point. (line 6) 43683 * LL integer suffix: Long Long. (line 6) 43684 * llabs: Other Builtins. (line 6) 43685 * LLK fixed-suffix: Fixed-Point. (line 6) 43686 * llk fixed-suffix: Fixed-Point. (line 6) 43687 * llr fixed-suffix: Fixed-Point. (line 6) 43688 * LLR fixed-suffix: Fixed-Point. (line 6) 43689 * llrint: Other Builtins. (line 6) 43690 * llrintf: Other Builtins. (line 6) 43691 * llrintl: Other Builtins. (line 6) 43692 * llround: Other Builtins. (line 6) 43693 * llroundf: Other Builtins. (line 6) 43694 * llroundl: Other Builtins. (line 6) 43695 * load address instruction: Simple Constraints. (line 144) 43696 * local labels: Local Labels. (line 6) 43697 * local variables in macros: Typeof. (line 42) 43698 * local variables, specifying registers: Local Reg Vars. (line 6) 43699 * locale: Environment Variables. 43700 (line 21) 43701 * locale definition: Environment Variables. 43702 (line 103) 43703 * log: Other Builtins. (line 6) 43704 * log10: Other Builtins. (line 6) 43705 * log10f: Other Builtins. (line 6) 43706 * log10l: Other Builtins. (line 6) 43707 * log1p: Other Builtins. (line 6) 43708 * log1pf: Other Builtins. (line 6) 43709 * log1pl: Other Builtins. (line 6) 43710 * log2: Other Builtins. (line 6) 43711 * log2f: Other Builtins. (line 6) 43712 * log2l: Other Builtins. (line 6) 43713 * logb: Other Builtins. (line 6) 43714 * logbf: Other Builtins. (line 6) 43715 * logbl: Other Builtins. (line 6) 43716 * logf: Other Builtins. (line 6) 43717 * logl: Other Builtins. (line 6) 43718 * long long data types: Long Long. (line 6) 43719 * longjmp: Global Reg Vars. (line 66) 43720 * longjmp incompatibilities: Incompatibilities. (line 39) 43721 * longjmp warnings: Warning Options. (line 626) 43722 * LR fixed-suffix: Fixed-Point. (line 6) 43723 * lr fixed-suffix: Fixed-Point. (line 6) 43724 * lrint: Other Builtins. (line 6) 43725 * lrintf: Other Builtins. (line 6) 43726 * lrintl: Other Builtins. (line 6) 43727 * lround: Other Builtins. (line 6) 43728 * lroundf: Other Builtins. (line 6) 43729 * lroundl: Other Builtins. (line 6) 43730 * m in constraint: Simple Constraints. (line 17) 43731 * M32C options: M32C Options. (line 6) 43732 * M32R/D options: M32R/D Options. (line 6) 43733 * M680x0 options: M680x0 Options. (line 6) 43734 * M68hc1x options: M68hc1x Options. (line 6) 43735 * machine dependent options: Submodel Options. (line 6) 43736 * machine specific constraints: Machine Constraints. 43737 (line 6) 43738 * macro with variable arguments: Variadic Macros. (line 6) 43739 * macros containing asm: Extended Asm. (line 241) 43740 * macros, inline alternative: Inline. (line 6) 43741 * macros, local labels: Local Labels. (line 6) 43742 * macros, local variables in: Typeof. (line 42) 43743 * macros, statements in expressions: Statement Exprs. (line 6) 43744 * macros, types of arguments: Typeof. (line 6) 43745 * make: Preprocessor Options. 43746 (line 173) 43747 * malloc: Other Builtins. (line 6) 43748 * malloc attribute: Function Attributes. 43749 (line 619) 43750 * matching constraint: Simple Constraints. (line 129) 43751 * MCore options: MCore Options. (line 6) 43752 * member fns, automatically inline: Inline. (line 71) 43753 * memchr: Other Builtins. (line 6) 43754 * memcmp: Other Builtins. (line 6) 43755 * memcpy: Other Builtins. (line 6) 43756 * memory references in constraints: Simple Constraints. (line 17) 43757 * mempcpy: Other Builtins. (line 6) 43758 * memset: Other Builtins. (line 6) 43759 * Mercury: G++ and GCC. (line 23) 43760 * message formatting: Language Independent Options. 43761 (line 6) 43762 * messages, warning: Warning Options. (line 6) 43763 * messages, warning and error: Warnings and Errors. 43764 (line 6) 43765 * middle-operands, omitted: Conditionals. (line 6) 43766 * MIPS options: MIPS Options. (line 6) 43767 * mips16 attribute: Function Attributes. 43768 (line 629) 43769 * misunderstandings in C++: C++ Misunderstandings. 43770 (line 6) 43771 * mixed declarations and code: Mixed Declarations. (line 6) 43772 * mktemp, and constant strings: Incompatibilities. (line 13) 43773 * MMIX Options: MMIX Options. (line 6) 43774 * MN10300 options: MN10300 Options. (line 6) 43775 * mode attribute: Variable Attributes. 43776 (line 131) 43777 * modf: Other Builtins. (line 6) 43778 * modff: Other Builtins. (line 6) 43779 * modfl: Other Builtins. (line 6) 43780 * modifiers in constraints: Modifiers. (line 6) 43781 * ms_abi attribute: Function Attributes. 43782 (line 671) 43783 * ms_struct: Type Attributes. (line 309) 43784 * ms_struct attribute: Variable Attributes. 43785 (line 349) 43786 * mudflap: Optimize Options. (line 338) 43787 * multiple alternative constraints: Multi-Alternative. (line 6) 43788 * multiprecision arithmetic: Long Long. (line 6) 43789 * n in constraint: Simple Constraints. (line 65) 43790 * names used in assembler code: Asm Labels. (line 6) 43791 * naming convention, implementation headers: C++ Interface. (line 46) 43792 * nearbyint: Other Builtins. (line 6) 43793 * nearbyintf: Other Builtins. (line 6) 43794 * nearbyintl: Other Builtins. (line 6) 43795 * nested functions: Nested Functions. (line 6) 43796 * newlines (escaped): Escaped Newlines. (line 6) 43797 * nextafter: Other Builtins. (line 6) 43798 * nextafterf: Other Builtins. (line 6) 43799 * nextafterl: Other Builtins. (line 6) 43800 * nexttoward: Other Builtins. (line 6) 43801 * nexttowardf: Other Builtins. (line 6) 43802 * nexttowardl: Other Builtins. (line 6) 43803 * NFC: Warning Options. (line 1174) 43804 * NFKC: Warning Options. (line 1174) 43805 * NMI handler functions on the Blackfin processor: Function Attributes. 43806 (line 706) 43807 * no_instrument_function function attribute: Function Attributes. 43808 (line 712) 43809 * nocommon attribute: Variable Attributes. 43810 (line 105) 43811 * noinline function attribute: Function Attributes. 43812 (line 717) 43813 * nomips16 attribute: Function Attributes. 43814 (line 629) 43815 * non-constant initializers: Initializers. (line 6) 43816 * non-static inline function: Inline. (line 85) 43817 * nonnull function attribute: Function Attributes. 43818 (line 727) 43819 * noreturn function attribute: Function Attributes. 43820 (line 754) 43821 * nothrow function attribute: Function Attributes. 43822 (line 796) 43823 * o in constraint: Simple Constraints. (line 23) 43824 * OBJC_INCLUDE_PATH: Environment Variables. 43825 (line 129) 43826 * Objective-C <1>: Standards. (line 153) 43827 * Objective-C: G++ and GCC. (line 6) 43828 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options. 43829 (line 6) 43830 * Objective-C++ <1>: Standards. (line 153) 43831 * Objective-C++: G++ and GCC. (line 6) 43832 * offsettable address: Simple Constraints. (line 23) 43833 * old-style function definitions: Function Prototypes. 43834 (line 6) 43835 * omitted middle-operands: Conditionals. (line 6) 43836 * open coding: Inline. (line 6) 43837 * openmp parallel: C Dialect Options. (line 221) 43838 * operand constraints, asm: Constraints. (line 6) 43839 * optimize function attribute: Function Attributes. 43840 (line 804) 43841 * optimize options: Optimize Options. (line 6) 43842 * options to control diagnostics formatting: Language Independent Options. 43843 (line 6) 43844 * options to control warnings: Warning Options. (line 6) 43845 * options, C++: C++ Dialect Options. 43846 (line 6) 43847 * options, code generation: Code Gen Options. (line 6) 43848 * options, debugging: Debugging Options. (line 6) 43849 * options, dialect: C Dialect Options. (line 6) 43850 * options, directory search: Directory Options. (line 6) 43851 * options, GCC command: Invoking GCC. (line 6) 43852 * options, grouping: Invoking GCC. (line 26) 43853 * options, linking: Link Options. (line 6) 43854 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options. 43855 (line 6) 43856 * options, optimization: Optimize Options. (line 6) 43857 * options, order: Invoking GCC. (line 30) 43858 * options, preprocessor: Preprocessor Options. 43859 (line 6) 43860 * order of evaluation, side effects: Non-bugs. (line 196) 43861 * order of options: Invoking GCC. (line 30) 43862 * other register constraints: Simple Constraints. (line 153) 43863 * output file option: Overall Options. (line 186) 43864 * overloaded virtual fn, warning: C++ Dialect Options. 43865 (line 464) 43866 * p in constraint: Simple Constraints. (line 144) 43867 * packed attribute: Variable Attributes. 43868 (line 142) 43869 * parameter forward declaration: Variable Length. (line 60) 43870 * parameters, aliased: Code Gen Options. (line 414) 43871 * Pascal: G++ and GCC. (line 23) 43872 * pcs function attribute: Function Attributes. 43873 (line 821) 43874 * PDP-11 Options: PDP-11 Options. (line 6) 43875 * PIC: Code Gen Options. (line 184) 43876 * picoChip options: picoChip Options. (line 6) 43877 * pmf: Bound member functions. 43878 (line 6) 43879 * pointer arguments: Function Attributes. 43880 (line 181) 43881 * pointer to member function: Bound member functions. 43882 (line 6) 43883 * portions of temporary objects, pointers to: Temporaries. (line 6) 43884 * pow: Other Builtins. (line 6) 43885 * pow10: Other Builtins. (line 6) 43886 * pow10f: Other Builtins. (line 6) 43887 * pow10l: Other Builtins. (line 6) 43888 * PowerPC options: PowerPC Options. (line 6) 43889 * powf: Other Builtins. (line 6) 43890 * powl: Other Builtins. (line 6) 43891 * pragma GCC optimize: Function Specific Option Pragmas. 43892 (line 20) 43893 * pragma GCC pop_options: Function Specific Option Pragmas. 43894 (line 33) 43895 * pragma GCC push_options: Function Specific Option Pragmas. 43896 (line 33) 43897 * pragma GCC reset_options: Function Specific Option Pragmas. 43898 (line 43) 43899 * pragma GCC target: Function Specific Option Pragmas. 43900 (line 7) 43901 * pragma, align: Solaris Pragmas. (line 11) 43902 * pragma, diagnostic: Diagnostic Pragmas. (line 14) 43903 * pragma, extern_prefix: Symbol-Renaming Pragmas. 43904 (line 19) 43905 * pragma, fini: Solaris Pragmas. (line 19) 43906 * pragma, init: Solaris Pragmas. (line 24) 43907 * pragma, long_calls: ARM Pragmas. (line 11) 43908 * pragma, long_calls_off: ARM Pragmas. (line 17) 43909 * pragma, longcall: RS/6000 and PowerPC Pragmas. 43910 (line 14) 43911 * pragma, mark: Darwin Pragmas. (line 11) 43912 * pragma, memregs: M32C Pragmas. (line 7) 43913 * pragma, no_long_calls: ARM Pragmas. (line 14) 43914 * pragma, options align: Darwin Pragmas. (line 14) 43915 * pragma, pop_macro: Push/Pop Macro Pragmas. 43916 (line 15) 43917 * pragma, push_macro: Push/Pop Macro Pragmas. 43918 (line 11) 43919 * pragma, reason for not using: Function Attributes. 43920 (line 1370) 43921 * pragma, redefine_extname: Symbol-Renaming Pragmas. 43922 (line 14) 43923 * pragma, segment: Darwin Pragmas. (line 21) 43924 * pragma, unused: Darwin Pragmas. (line 24) 43925 * pragma, visibility: Visibility Pragmas. (line 8) 43926 * pragma, weak: Weak Pragmas. (line 10) 43927 * pragmas: Pragmas. (line 6) 43928 * pragmas in C++, effect on inlining: C++ Interface. (line 66) 43929 * pragmas, interface and implementation: C++ Interface. (line 6) 43930 * pragmas, warning of unknown: Warning Options. (line 643) 43931 * precompiled headers: Precompiled Headers. 43932 (line 6) 43933 * preprocessing numbers: Incompatibilities. (line 173) 43934 * preprocessing tokens: Incompatibilities. (line 173) 43935 * preprocessor options: Preprocessor Options. 43936 (line 6) 43937 * printf: Other Builtins. (line 6) 43938 * printf_unlocked: Other Builtins. (line 6) 43939 * prof: Debugging Options. (line 247) 43940 * progmem variable attribute: Variable Attributes. 43941 (line 503) 43942 * promotion of formal parameters: Function Prototypes. 43943 (line 6) 43944 * pure function attribute: Function Attributes. 43945 (line 839) 43946 * push address instruction: Simple Constraints. (line 144) 43947 * putchar: Other Builtins. (line 6) 43948 * puts: Other Builtins. (line 6) 43949 * q floating point suffix: Floating Types. (line 6) 43950 * Q floating point suffix: Floating Types. (line 6) 43951 * qsort, and global register variables: Global Reg Vars. (line 42) 43952 * question mark: Multi-Alternative. (line 27) 43953 * R fixed-suffix: Fixed-Point. (line 6) 43954 * r fixed-suffix: Fixed-Point. (line 6) 43955 * r in constraint: Simple Constraints. (line 56) 43956 * ranges in case statements: Case Ranges. (line 6) 43957 * read-only strings: Incompatibilities. (line 9) 43958 * register variable after longjmp: Global Reg Vars. (line 66) 43959 * registers: Extended Asm. (line 6) 43960 * registers for local variables: Local Reg Vars. (line 6) 43961 * registers in constraints: Simple Constraints. (line 56) 43962 * registers, global allocation: Explicit Reg Vars. (line 6) 43963 * registers, global variables in: Global Reg Vars. (line 6) 43964 * regparm attribute: Function Attributes. 43965 (line 892) 43966 * relocation truncated to fit (ColdFire): M680x0 Options. (line 325) 43967 * relocation truncated to fit (MIPS): MIPS Options. (line 198) 43968 * remainder: Other Builtins. (line 6) 43969 * remainderf: Other Builtins. (line 6) 43970 * remainderl: Other Builtins. (line 6) 43971 * remquo: Other Builtins. (line 6) 43972 * remquof: Other Builtins. (line 6) 43973 * remquol: Other Builtins. (line 6) 43974 * reordering, warning: C++ Dialect Options. 43975 (line 389) 43976 * reporting bugs: Bugs. (line 6) 43977 * resbank attribute: Function Attributes. 43978 (line 924) 43979 * rest argument (in macro): Variadic Macros. (line 6) 43980 * restricted pointers: Restricted Pointers. 43981 (line 6) 43982 * restricted references: Restricted Pointers. 43983 (line 6) 43984 * restricted this pointer: Restricted Pointers. 43985 (line 6) 43986 * returns_twice attribute: Function Attributes. 43987 (line 938) 43988 * rindex: Other Builtins. (line 6) 43989 * rint: Other Builtins. (line 6) 43990 * rintf: Other Builtins. (line 6) 43991 * rintl: Other Builtins. (line 6) 43992 * round: Other Builtins. (line 6) 43993 * roundf: Other Builtins. (line 6) 43994 * roundl: Other Builtins. (line 6) 43995 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options. 43996 (line 6) 43997 * RTTI: Vague Linkage. (line 43) 43998 * run-time options: Code Gen Options. (line 6) 43999 * s in constraint: Simple Constraints. (line 92) 44000 * S/390 and zSeries Options: S/390 and zSeries Options. 44001 (line 6) 44002 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes. 44003 (line 947) 44004 * scalb: Other Builtins. (line 6) 44005 * scalbf: Other Builtins. (line 6) 44006 * scalbl: Other Builtins. (line 6) 44007 * scalbln: Other Builtins. (line 6) 44008 * scalblnf: Other Builtins. (line 6) 44009 * scalbn: Other Builtins. (line 6) 44010 * scalbnf: Other Builtins. (line 6) 44011 * scanf, and constant strings: Incompatibilities. (line 17) 44012 * scanfnl: Other Builtins. (line 6) 44013 * scope of a variable length array: Variable Length. (line 23) 44014 * scope of declaration: Disappointments. (line 21) 44015 * scope of external declarations: Incompatibilities. (line 80) 44016 * Score Options: Score Options. (line 6) 44017 * search path: Directory Options. (line 6) 44018 * section function attribute: Function Attributes. 44019 (line 952) 44020 * section variable attribute: Variable Attributes. 44021 (line 163) 44022 * sentinel function attribute: Function Attributes. 44023 (line 968) 44024 * setjmp: Global Reg Vars. (line 66) 44025 * setjmp incompatibilities: Incompatibilities. (line 39) 44026 * shared strings: Incompatibilities. (line 9) 44027 * shared variable attribute: Variable Attributes. 44028 (line 208) 44029 * side effect in ?:: Conditionals. (line 20) 44030 * side effects, macro argument: Statement Exprs. (line 35) 44031 * side effects, order of evaluation: Non-bugs. (line 196) 44032 * signal handler functions on the AVR processors: Function Attributes. 44033 (line 999) 44034 * signbit: Other Builtins. (line 6) 44035 * signbitd128: Other Builtins. (line 6) 44036 * signbitd32: Other Builtins. (line 6) 44037 * signbitd64: Other Builtins. (line 6) 44038 * signbitf: Other Builtins. (line 6) 44039 * signbitl: Other Builtins. (line 6) 44040 * signed and unsigned values, comparison warning: Warning Options. 44041 (line 1038) 44042 * significand: Other Builtins. (line 6) 44043 * significandf: Other Builtins. (line 6) 44044 * significandl: Other Builtins. (line 6) 44045 * simple constraints: Simple Constraints. (line 6) 44046 * sin: Other Builtins. (line 6) 44047 * sincos: Other Builtins. (line 6) 44048 * sincosf: Other Builtins. (line 6) 44049 * sincosl: Other Builtins. (line 6) 44050 * sinf: Other Builtins. (line 6) 44051 * sinh: Other Builtins. (line 6) 44052 * sinhf: Other Builtins. (line 6) 44053 * sinhl: Other Builtins. (line 6) 44054 * sinl: Other Builtins. (line 6) 44055 * sizeof: Typeof. (line 6) 44056 * smaller data references: M32R/D Options. (line 57) 44057 * smaller data references (PowerPC): RS/6000 and PowerPC Options. 44058 (line 663) 44059 * snprintf: Other Builtins. (line 6) 44060 * SPARC options: SPARC Options. (line 6) 44061 * Spec Files: Spec Files. (line 6) 44062 * specified registers: Explicit Reg Vars. (line 6) 44063 * specifying compiler version and target machine: Target Options. 44064 (line 6) 44065 * specifying hardware config: Submodel Options. (line 6) 44066 * specifying machine version: Target Options. (line 6) 44067 * specifying registers for local variables: Local Reg Vars. (line 6) 44068 * speed of compilation: Precompiled Headers. 44069 (line 6) 44070 * sprintf: Other Builtins. (line 6) 44071 * SPU options: SPU Options. (line 6) 44072 * sqrt: Other Builtins. (line 6) 44073 * sqrtf: Other Builtins. (line 6) 44074 * sqrtl: Other Builtins. (line 6) 44075 * sscanf: Other Builtins. (line 6) 44076 * sscanf, and constant strings: Incompatibilities. (line 17) 44077 * sseregparm attribute: Function Attributes. 44078 (line 909) 44079 * statements inside expressions: Statement Exprs. (line 6) 44080 * static data in C++, declaring and defining: Static Definitions. 44081 (line 6) 44082 * stpcpy: Other Builtins. (line 6) 44083 * stpncpy: Other Builtins. (line 6) 44084 * strcasecmp: Other Builtins. (line 6) 44085 * strcat: Other Builtins. (line 6) 44086 * strchr: Other Builtins. (line 6) 44087 * strcmp: Other Builtins. (line 6) 44088 * strcpy: Other Builtins. (line 6) 44089 * strcspn: Other Builtins. (line 6) 44090 * strdup: Other Builtins. (line 6) 44091 * strfmon: Other Builtins. (line 6) 44092 * strftime: Other Builtins. (line 6) 44093 * string constants: Incompatibilities. (line 9) 44094 * strlen: Other Builtins. (line 6) 44095 * strncasecmp: Other Builtins. (line 6) 44096 * strncat: Other Builtins. (line 6) 44097 * strncmp: Other Builtins. (line 6) 44098 * strncpy: Other Builtins. (line 6) 44099 * strndup: Other Builtins. (line 6) 44100 * strpbrk: Other Builtins. (line 6) 44101 * strrchr: Other Builtins. (line 6) 44102 * strspn: Other Builtins. (line 6) 44103 * strstr: Other Builtins. (line 6) 44104 * struct: Unnamed Fields. (line 6) 44105 * structures: Incompatibilities. (line 146) 44106 * structures, constructor expression: Compound Literals. (line 6) 44107 * submodel options: Submodel Options. (line 6) 44108 * subscripting: Subscripting. (line 6) 44109 * subscripting and function values: Subscripting. (line 6) 44110 * suffixes for C++ source: Invoking G++. (line 6) 44111 * SUNPRO_DEPENDENCIES: Environment Variables. 44112 (line 169) 44113 * suppressing warnings: Warning Options. (line 6) 44114 * surprises in C++: C++ Misunderstandings. 44115 (line 6) 44116 * syntax checking: Warning Options. (line 13) 44117 * syscall_linkage attribute: Function Attributes. 44118 (line 1021) 44119 * system headers, warnings from: Warning Options. (line 757) 44120 * sysv_abi attribute: Function Attributes. 44121 (line 671) 44122 * tan: Other Builtins. (line 6) 44123 * tanf: Other Builtins. (line 6) 44124 * tanh: Other Builtins. (line 6) 44125 * tanhf: Other Builtins. (line 6) 44126 * tanhl: Other Builtins. (line 6) 44127 * tanl: Other Builtins. (line 6) 44128 * target function attribute: Function Attributes. 44129 (line 1028) 44130 * target machine, specifying: Target Options. (line 6) 44131 * target options: Target Options. (line 6) 44132 * target("abm") attribute: Function Attributes. 44133 (line 1055) 44134 * target("aes") attribute: Function Attributes. 44135 (line 1060) 44136 * target("align-stringops") attribute: Function Attributes. 44137 (line 1146) 44138 * target("arch=ARCH") attribute: Function Attributes. 44139 (line 1155) 44140 * target("cld") attribute: Function Attributes. 44141 (line 1117) 44142 * target("fancy-math-387") attribute: Function Attributes. 44143 (line 1121) 44144 * target("fpmath=FPMATH") attribute: Function Attributes. 44145 (line 1163) 44146 * target("fused-madd") attribute: Function Attributes. 44147 (line 1126) 44148 * target("ieee-fp") attribute: Function Attributes. 44149 (line 1131) 44150 * target("inline-all-stringops") attribute: Function Attributes. 44151 (line 1136) 44152 * target("inline-stringops-dynamically") attribute: Function Attributes. 44153 (line 1140) 44154 * target("lwp") attribute: Function Attributes. 44155 (line 1109) 44156 * target("mmx") attribute: Function Attributes. 44157 (line 1064) 44158 * target("pclmul") attribute: Function Attributes. 44159 (line 1068) 44160 * target("popcnt") attribute: Function Attributes. 44161 (line 1072) 44162 * target("recip") attribute: Function Attributes. 44163 (line 1150) 44164 * target("sse") attribute: Function Attributes. 44165 (line 1076) 44166 * target("sse2") attribute: Function Attributes. 44167 (line 1080) 44168 * target("sse3") attribute: Function Attributes. 44169 (line 1084) 44170 * target("sse4") attribute: Function Attributes. 44171 (line 1088) 44172 * target("sse4.1") attribute: Function Attributes. 44173 (line 1093) 44174 * target("sse4.2") attribute: Function Attributes. 44175 (line 1097) 44176 * target("sse4a") attribute: Function Attributes. 44177 (line 1101) 44178 * target("sse5") attribute: Function Attributes. 44179 (line 1105) 44180 * target("ssse3") attribute: Function Attributes. 44181 (line 1113) 44182 * target("tune=TUNE") attribute: Function Attributes. 44183 (line 1159) 44184 * TC1: Standards. (line 13) 44185 * TC2: Standards. (line 13) 44186 * TC3: Standards. (line 13) 44187 * Technical Corrigenda: Standards. (line 13) 44188 * Technical Corrigendum 1: Standards. (line 13) 44189 * Technical Corrigendum 2: Standards. (line 13) 44190 * Technical Corrigendum 3: Standards. (line 13) 44191 * template instantiation: Template Instantiation. 44192 (line 6) 44193 * temporaries, lifetime of: Temporaries. (line 6) 44194 * tgamma: Other Builtins. (line 6) 44195 * tgammaf: Other Builtins. (line 6) 44196 * tgammal: Other Builtins. (line 6) 44197 * Thread-Local Storage: Thread-Local. (line 6) 44198 * thunks: Nested Functions. (line 6) 44199 * tiny data section on the H8/300H and H8S: Function Attributes. 44200 (line 1181) 44201 * TLS: Thread-Local. (line 6) 44202 * tls_model attribute: Variable Attributes. 44203 (line 232) 44204 * TMPDIR: Environment Variables. 44205 (line 45) 44206 * toascii: Other Builtins. (line 6) 44207 * tolower: Other Builtins. (line 6) 44208 * toupper: Other Builtins. (line 6) 44209 * towlower: Other Builtins. (line 6) 44210 * towupper: Other Builtins. (line 6) 44211 * traditional C language: C Dialect Options. (line 250) 44212 * trunc: Other Builtins. (line 6) 44213 * truncf: Other Builtins. (line 6) 44214 * truncl: Other Builtins. (line 6) 44215 * two-stage name lookup: Name lookup. (line 6) 44216 * type alignment: Alignment. (line 6) 44217 * type attributes: Type Attributes. (line 6) 44218 * type_info: Vague Linkage. (line 43) 44219 * typedef names as function parameters: Incompatibilities. (line 97) 44220 * typeof: Typeof. (line 6) 44221 * UHK fixed-suffix: Fixed-Point. (line 6) 44222 * uhk fixed-suffix: Fixed-Point. (line 6) 44223 * uhr fixed-suffix: Fixed-Point. (line 6) 44224 * UHR fixed-suffix: Fixed-Point. (line 6) 44225 * UK fixed-suffix: Fixed-Point. (line 6) 44226 * uk fixed-suffix: Fixed-Point. (line 6) 44227 * ULK fixed-suffix: Fixed-Point. (line 6) 44228 * ulk fixed-suffix: Fixed-Point. (line 6) 44229 * ULL integer suffix: Long Long. (line 6) 44230 * ullk fixed-suffix: Fixed-Point. (line 6) 44231 * ULLK fixed-suffix: Fixed-Point. (line 6) 44232 * ullr fixed-suffix: Fixed-Point. (line 6) 44233 * ULLR fixed-suffix: Fixed-Point. (line 6) 44234 * ULR fixed-suffix: Fixed-Point. (line 6) 44235 * ulr fixed-suffix: Fixed-Point. (line 6) 44236 * undefined behavior: Bug Criteria. (line 17) 44237 * undefined function value: Bug Criteria. (line 17) 44238 * underscores in variables in macros: Typeof. (line 42) 44239 * union: Unnamed Fields. (line 6) 44240 * union, casting to a: Cast to Union. (line 6) 44241 * unions: Incompatibilities. (line 146) 44242 * unknown pragmas, warning: Warning Options. (line 643) 44243 * unresolved references and -nodefaultlibs: Link Options. (line 79) 44244 * unresolved references and -nostdlib: Link Options. (line 79) 44245 * unused attribute.: Function Attributes. 44246 (line 1193) 44247 * ur fixed-suffix: Fixed-Point. (line 6) 44248 * UR fixed-suffix: Fixed-Point. (line 6) 44249 * used attribute.: Function Attributes. 44250 (line 1198) 44251 * User stack pointer in interrupts on the Blackfin: Function Attributes. 44252 (line 576) 44253 * V in constraint: Simple Constraints. (line 43) 44254 * V850 Options: V850 Options. (line 6) 44255 * vague linkage: Vague Linkage. (line 6) 44256 * value after longjmp: Global Reg Vars. (line 66) 44257 * variable addressability on the IA-64: Function Attributes. 44258 (line 643) 44259 * variable addressability on the M32R/D: Variable Attributes. 44260 (line 330) 44261 * variable alignment: Alignment. (line 6) 44262 * variable attributes: Variable Attributes. 44263 (line 6) 44264 * variable number of arguments: Variadic Macros. (line 6) 44265 * variable-length array scope: Variable Length. (line 23) 44266 * variable-length arrays: Variable Length. (line 6) 44267 * variables in specified registers: Explicit Reg Vars. (line 6) 44268 * variables, local, in macros: Typeof. (line 42) 44269 * variadic macros: Variadic Macros. (line 6) 44270 * VAX options: VAX Options. (line 6) 44271 * version_id attribute: Function Attributes. 44272 (line 1204) 44273 * vfprintf: Other Builtins. (line 6) 44274 * vfscanf: Other Builtins. (line 6) 44275 * visibility attribute: Function Attributes. 44276 (line 1214) 44277 * VLAs: Variable Length. (line 6) 44278 * void pointers, arithmetic: Pointer Arith. (line 6) 44279 * void, size of pointer to: Pointer Arith. (line 6) 44280 * volatile access: Volatiles. (line 6) 44281 * volatile applied to function: Function Attributes. 44282 (line 6) 44283 * volatile read: Volatiles. (line 6) 44284 * volatile write: Volatiles. (line 6) 44285 * vprintf: Other Builtins. (line 6) 44286 * vscanf: Other Builtins. (line 6) 44287 * vsnprintf: Other Builtins. (line 6) 44288 * vsprintf: Other Builtins. (line 6) 44289 * vsscanf: Other Builtins. (line 6) 44290 * vtable: Vague Linkage. (line 28) 44291 * VxWorks Options: VxWorks Options. (line 6) 44292 * W floating point suffix: Floating Types. (line 6) 44293 * w floating point suffix: Floating Types. (line 6) 44294 * warn_unused_result attribute: Function Attributes. 44295 (line 1308) 44296 * warning for comparison of signed and unsigned values: Warning Options. 44297 (line 1038) 44298 * warning for overloaded virtual fn: C++ Dialect Options. 44299 (line 464) 44300 * warning for reordering of member initializers: C++ Dialect Options. 44301 (line 389) 44302 * warning for unknown pragmas: Warning Options. (line 643) 44303 * warning function attribute: Function Attributes. 44304 (line 158) 44305 * warning messages: Warning Options. (line 6) 44306 * warnings from system headers: Warning Options. (line 757) 44307 * warnings vs errors: Warnings and Errors. 44308 (line 6) 44309 * weak attribute: Function Attributes. 44310 (line 1325) 44311 * weakref attribute: Function Attributes. 44312 (line 1334) 44313 * whitespace: Incompatibilities. (line 112) 44314 * X in constraint: Simple Constraints. (line 114) 44315 * X3.159-1989: Standards. (line 13) 44316 * x86-64 options: x86-64 Options. (line 6) 44317 * x86-64 Options: i386 and x86-64 Options. 44318 (line 6) 44319 * Xstormy16 Options: Xstormy16 Options. (line 6) 44320 * Xtensa Options: Xtensa Options. (line 6) 44321 * y0: Other Builtins. (line 6) 44322 * y0f: Other Builtins. (line 6) 44323 * y0l: Other Builtins. (line 6) 44324 * y1: Other Builtins. (line 6) 44325 * y1f: Other Builtins. (line 6) 44326 * y1l: Other Builtins. (line 6) 44327 * yn: Other Builtins. (line 6) 44328 * ynf: Other Builtins. (line 6) 44329 * ynl: Other Builtins. (line 6) 44330 * zero-length arrays: Zero Length. (line 6) 44331 * zero-size structures: Empty Structures. (line 6) 44332 * zSeries options: zSeries Options. (line 6) 44333 44334 44335 44336 Tag Table: 44337 Node: Top2118 44338 Node: G++ and GCC3815 44339 Node: Standards5880 44340 Node: Invoking GCC14855 44341 Node: Option Summary18684 44342 Node: Overall Options52194 44343 Node: Invoking G++66701 44344 Node: C Dialect Options68224 44345 Node: C++ Dialect Options82115 44346 Node: Objective-C and Objective-C++ Dialect Options103709 44347 Node: Language Independent Options115490 44348 Node: Warning Options118369 44349 Node: Debugging Options180904 44350 Node: Optimize Options221745 44351 Ref: Type-punning268692 44352 Node: Preprocessor Options335379 44353 Ref: Wtrigraphs339477 44354 Ref: dashMF344225 44355 Ref: fdollars-in-identifiers354744 44356 Node: Assembler Options363305 44357 Node: Link Options364010 44358 Ref: Link Options-Footnote-1373723 44359 Node: Directory Options374057 44360 Node: Spec Files380119 44361 Node: Target Options400458 44362 Node: Submodel Options401976 44363 Node: ARC Options403675 44364 Node: ARM Options405162 44365 Node: AVR Options417134 44366 Node: Blackfin Options419223 44367 Node: CRIS Options427115 44368 Node: CRX Options430856 44369 Node: Darwin Options431281 44370 Node: DEC Alpha Options438774 44371 Node: DEC Alpha/VMS Options450690 44372 Node: FR30 Options451076 44373 Node: FRV Options451651 44374 Node: GNU/Linux Options458368 44375 Node: H8/300 Options459629 44376 Node: HPPA Options460696 44377 Node: i386 and x86-64 Options470196 44378 Node: IA-64 Options499121 44379 Node: M32C Options506446 44380 Node: M32R/D Options507737 44381 Node: M680x0 Options511324 44382 Node: M68hc1x Options525144 44383 Node: MCore Options526712 44384 Node: MIPS Options528220 44385 Node: MMIX Options554255 44386 Node: MN10300 Options556737 44387 Node: PDP-11 Options558159 44388 Node: picoChip Options559999 44389 Node: PowerPC Options562198 44390 Node: RS/6000 and PowerPC Options562434 44391 Node: S/390 and zSeries Options593181 44392 Node: Score Options601129 44393 Node: SH Options601957 44394 Node: SPARC Options612235 44395 Node: SPU Options623208 44396 Node: System V Options626496 44397 Node: V850 Options627319 44398 Node: VAX Options630459 44399 Node: VxWorks Options631007 44400 Node: x86-64 Options632162 44401 Node: i386 and x86-64 Windows Options632380 44402 Node: Xstormy16 Options634699 44403 Node: Xtensa Options634988 44404 Node: zSeries Options639135 44405 Node: Code Gen Options639331 44406 Node: Environment Variables664136 44407 Node: Precompiled Headers672032 44408 Node: Running Protoize678258 44409 Node: C Implementation684595 44410 Node: Translation implementation686258 44411 Node: Environment implementation686832 44412 Node: Identifiers implementation687382 44413 Node: Characters implementation688436 44414 Node: Integers implementation691242 44415 Node: Floating point implementation693067 44416 Node: Arrays and pointers implementation695996 44417 Ref: Arrays and pointers implementation-Footnote-1697431 44418 Node: Hints implementation697555 44419 Node: Structures unions enumerations and bit-fields implementation699021 44420 Node: Qualifiers implementation701007 44421 Node: Declarators implementation702779 44422 Node: Statements implementation703121 44423 Node: Preprocessing directives implementation703448 44424 Node: Library functions implementation705553 44425 Node: Architecture implementation706193 44426 Node: Locale-specific behavior implementation706896 44427 Node: C Extensions707201 44428 Node: Statement Exprs711812 44429 Node: Local Labels716325 44430 Node: Labels as Values719304 44431 Ref: Labels as Values-Footnote-1721677 44432 Node: Nested Functions721860 44433 Node: Constructing Calls725754 44434 Node: Typeof730477 44435 Node: Conditionals733643 44436 Node: Long Long734534 44437 Node: Complex736035 44438 Node: Floating Types738605 44439 Node: Decimal Float739684 44440 Node: Hex Floats741673 44441 Node: Fixed-Point742714 44442 Node: Zero Length745999 44443 Node: Empty Structures749277 44444 Node: Variable Length749693 44445 Node: Variadic Macros752460 44446 Node: Escaped Newlines754842 44447 Node: Subscripting755681 44448 Node: Pointer Arith756404 44449 Node: Initializers756972 44450 Node: Compound Literals757468 44451 Node: Designated Inits759643 44452 Node: Case Ranges763298 44453 Node: Cast to Union763981 44454 Node: Mixed Declarations765077 44455 Node: Function Attributes765583 44456 Node: Attribute Syntax829307 44457 Node: Function Prototypes839577 44458 Node: C++ Comments841358 44459 Node: Dollar Signs841877 44460 Node: Character Escapes842342 44461 Node: Alignment842636 44462 Node: Variable Attributes844010 44463 Ref: i386 Variable Attributes858600 44464 Node: Type Attributes864585 44465 Ref: i386 Type Attributes878206 44466 Ref: PowerPC Type Attributes879046 44467 Ref: SPU Type Attributes879908 44468 Node: Inline880199 44469 Node: Extended Asm885146 44470 Ref: Example of asm with clobbered asm reg891232 44471 Node: Constraints905451 44472 Node: Simple Constraints906301 44473 Node: Multi-Alternative912972 44474 Node: Modifiers914689 44475 Node: Machine Constraints917583 44476 Node: Asm Labels949796 44477 Node: Explicit Reg Vars951472 44478 Node: Global Reg Vars953080 44479 Node: Local Reg Vars957630 44480 Node: Alternate Keywords960071 44481 Node: Incomplete Enums961499 44482 Node: Function Names962256 44483 Node: Return Address964418 44484 Node: Vector Extensions967215 44485 Node: Offsetof970717 44486 Node: Atomic Builtins971531 44487 Node: Object Size Checking976909 44488 Node: Other Builtins982337 44489 Node: Target Builtins1007145 44490 Node: Alpha Built-in Functions1008039 44491 Node: ARM iWMMXt Built-in Functions1011038 44492 Node: ARM NEON Intrinsics1017757 44493 Node: Blackfin Built-in Functions1225595 44494 Node: FR-V Built-in Functions1226209 44495 Node: Argument Types1227068 44496 Node: Directly-mapped Integer Functions1228824 44497 Node: Directly-mapped Media Functions1229906 44498 Node: Raw read/write Functions1236938 44499 Node: Other Built-in Functions1237850 44500 Node: X86 Built-in Functions1239039 44501 Node: MIPS DSP Built-in Functions1284320 44502 Node: MIPS Paired-Single Support1296767 44503 Node: MIPS Loongson Built-in Functions1298268 44504 Node: Paired-Single Arithmetic1304786 44505 Node: Paired-Single Built-in Functions1305732 44506 Node: MIPS-3D Built-in Functions1308402 44507 Node: picoChip Built-in Functions1313777 44508 Node: Other MIPS Built-in Functions1315139 44509 Node: PowerPC AltiVec Built-in Functions1315663 44510 Node: SPARC VIS Built-in Functions1417087 44511 Node: SPU Built-in Functions1418779 44512 Node: Target Format Checks1420561 44513 Node: Solaris Format Checks1420968 44514 Node: Pragmas1421365 44515 Node: ARM Pragmas1422059 44516 Node: M32C Pragmas1422662 44517 Node: RS/6000 and PowerPC Pragmas1423238 44518 Node: Darwin Pragmas1423980 44519 Node: Solaris Pragmas1425047 44520 Node: Symbol-Renaming Pragmas1426208 44521 Node: Structure-Packing Pragmas1428830 44522 Node: Weak Pragmas1430482 44523 Node: Diagnostic Pragmas1431284 44524 Node: Visibility Pragmas1433918 44525 Node: Push/Pop Macro Pragmas1434670 44526 Node: Function Specific Option Pragmas1435643 44527 Node: Unnamed Fields1437858 44528 Node: Thread-Local1439368 44529 Node: C99 Thread-Local Edits1441477 44530 Node: C++98 Thread-Local Edits1443489 44531 Node: Binary constants1446934 44532 Node: C++ Extensions1447605 44533 Node: Volatiles1449247 44534 Node: Restricted Pointers1451923 44535 Node: Vague Linkage1453517 44536 Node: C++ Interface1457173 44537 Ref: C++ Interface-Footnote-11461470 44538 Node: Template Instantiation1461607 44539 Node: Bound member functions1468619 44540 Node: C++ Attributes1470162 44541 Node: Namespace Association1471820 44542 Node: Type Traits1473234 44543 Node: Java Exceptions1478781 44544 Node: Deprecated Features1480178 44545 Node: Backwards Compatibility1483143 44546 Node: Objective-C1484501 44547 Node: Executing code before main1485082 44548 Node: What you can and what you cannot do in +load1487688 44549 Node: Type encoding1489855 44550 Node: Garbage Collection1493242 44551 Node: Constant string objects1495866 44552 Node: compatibility_alias1498374 44553 Node: Compatibility1499252 44554 Node: Gcov1505819 44555 Node: Gcov Intro1506350 44556 Node: Invoking Gcov1509066 44557 Node: Gcov and Optimization1521312 44558 Node: Gcov Data Files1523965 44559 Node: Cross-profiling1525103 44560 Node: Trouble1526929 44561 Node: Actual Bugs1528485 44562 Node: Cross-Compiler Problems1529225 44563 Node: Interoperation1529639 44564 Node: Incompatibilities1536776 44565 Node: Fixed Headers1544926 44566 Node: Standard Libraries1546589 44567 Node: Disappointments1547961 44568 Node: C++ Misunderstandings1552319 44569 Node: Static Definitions1553138 44570 Node: Name lookup1554191 44571 Ref: Name lookup-Footnote-11558969 44572 Node: Temporaries1559156 44573 Node: Copy Assignment1561132 44574 Node: Protoize Caveats1562939 44575 Node: Non-bugs1566912 44576 Node: Warnings and Errors1577416 44577 Node: Bugs1579180 44578 Node: Bug Criteria1579744 44579 Node: Bug Reporting1581954 44580 Node: Service1582175 44581 Node: Contributing1582994 44582 Node: Funding1583734 44583 Node: GNU Project1586223 44584 Node: Copying1586869 44585 Node: GNU Free Documentation License1624397 44586 Node: Contributors1646803 44587 Node: Option Index1683130 44588 Node: Keyword Index1845993 44589 44590 End Tag Table 44591